提交 c42c4a67 编写于 作者: Y Yu Yang

Add performance tests

上级 5b92dd40
...@@ -135,14 +135,11 @@ def bottleneck_block(input, num_filters, stride, cardinality, reduction_ratio): ...@@ -135,14 +135,11 @@ def bottleneck_block(input, num_filters, stride, cardinality, reduction_ratio):
return fluid.layers.elementwise_add(x=short, y=scale, act='relu') return fluid.layers.elementwise_add(x=short, y=scale, act='relu')
def SE_ResNeXt152(): def SE_ResNeXt152(batch_size=4):
reader = fluid.layers.open_recordio_file( img = fluid.layers.fill_constant(
filename='./flowers.recordio', shape=[batch_size, 3, 224, 224], dtype='float32', value=0.0)
shapes=[[-1, 3, 224, 224], [-1, 1]], label = fluid.layers.fill_constant(
lod_levels=[0, 0], shape=[batch_size, 1], dtype='int64', value=0.0)
dtypes=['float32', 'int64'])
img, label = fluid.layers.read_file(reader)
conv = conv_bn_layer( conv = conv_bn_layer(
input=img, num_filters=64, filter_size=3, stride=2, act='relu') input=img, num_filters=64, filter_size=3, stride=2, act='relu')
...@@ -179,8 +176,15 @@ def SE_ResNeXt152(): ...@@ -179,8 +176,15 @@ def SE_ResNeXt152():
return loss return loss
import time
class TestParallelExecutorBase(unittest.TestCase): class TestParallelExecutorBase(unittest.TestCase):
def check_network_convergence(self, method, memory_opt=True, iter=10): def check_network_convergence(self,
method,
memory_opt=True,
iter=10,
batch_size=None):
main = fluid.Program() main = fluid.Program()
startup = fluid.Program() startup = fluid.Program()
with fluid.program_guard(main, startup): with fluid.program_guard(main, startup):
...@@ -191,6 +195,9 @@ class TestParallelExecutorBase(unittest.TestCase): ...@@ -191,6 +195,9 @@ class TestParallelExecutorBase(unittest.TestCase):
fluid.memory_optimize(main) fluid.memory_optimize(main)
exe = fluid.ParallelExecutor(loss_name=loss.name, use_cuda=True) exe = fluid.ParallelExecutor(loss_name=loss.name, use_cuda=True)
if batch_size is not None:
batch_size *= fluid.core.get_cuda_device_count()
begin = time.time()
first_loss, = exe.run([loss.name]) first_loss, = exe.run([loss.name])
first_loss = numpy.array(first_loss) first_loss = numpy.array(first_loss)
...@@ -198,6 +205,12 @@ class TestParallelExecutorBase(unittest.TestCase): ...@@ -198,6 +205,12 @@ class TestParallelExecutorBase(unittest.TestCase):
exe.run([]) exe.run([])
last_loss, = exe.run([loss.name]) last_loss, = exe.run([loss.name])
end = time.time()
if batch_size is not None:
print "%.4f Instance per second" % (
(batch_size * iter + 2) / (end - begin))
last_loss = numpy.array(last_loss) last_loss = numpy.array(last_loss)
print first_loss, last_loss print first_loss, last_loss
...@@ -229,26 +242,32 @@ class TestMNIST(TestParallelExecutorBase): ...@@ -229,26 +242,32 @@ class TestMNIST(TestParallelExecutorBase):
class TestResnet(TestParallelExecutorBase): class TestResnet(TestParallelExecutorBase):
@classmethod # @classmethod
def setUpClass(cls): # def setUpClass(cls):
import os # # import os
if os.path.exists('./flowers.recordio'): # # if os.path.exists('./flowers.recordio'):
return # # return
with fluid.program_guard(fluid.Program(), fluid.Program()): # with fluid.program_guard(fluid.Program(), fluid.Program()):
reader = paddle.batch(flowers.train(), batch_size=4) # reader = paddle.batch(flowers.train(), batch_size=4)
feeder = fluid.DataFeeder( # feeder = fluid.DataFeeder(
feed_list=[ # feed_list=[
fluid.layers.data( # fluid.layers.data(
name='image', shape=[3, 224, 224]), # name='image', shape=[3, 224, 224]),
fluid.layers.data( # fluid.layers.data(
name='label', shape=[1], dtype='int64'), # name='label', shape=[1], dtype='int64'),
], # ],
place=fluid.CPUPlace()) # place=fluid.CPUPlace())
fluid.recordio_writer.convert_reader_to_recordio_file( # fluid.recordio_writer.convert_reader_to_recordio_file(
"./flowers.recordio", reader, feeder) # "./flowers.recordio", reader, feeder, compressor=fluid.core.RecordIOWriter.Compressor.NoCompress)
def test_resnet(self): def test_resnet(self):
self.check_network_convergence(SE_ResNeXt152, iter=200) import functools
batch_size = 4
self.check_network_convergence(
functools.partial(
SE_ResNeXt152, batch_size=batch_size),
iter=20,
batch_size=batch_size)
class ModelHyperParams(object): class ModelHyperParams(object):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册