Skip to content

Commit

Permalink
Merge pull request #11199 from luotao1/benchmark
Browse files Browse the repository at this point in the history
add ParallelDo example for benchmark/fluid
  • Loading branch information
luotao1 authored Jun 6, 2018
2 parents c598924 + 9514146 commit 7938b30
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 18 deletions.
5 changes: 5 additions & 0 deletions benchmark/fluid/fluid_benchmark.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,11 @@ def parse_args():
type=int,
default=1,
help='If gpus > 1, will use ParallelExecutor to run, else use Executor.')
parser.add_argument(
'--cpus',
type=int,
default=1,
help='If cpus > 1, will use ParallelDo to run, else use Executor.')
parser.add_argument(
'--data_set',
type=str,
Expand Down
33 changes: 24 additions & 9 deletions benchmark/fluid/models/mnist.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,15 +69,30 @@ def get_model(args):
images = fluid.layers.data(name='pixel', shape=[1, 28, 28], dtype=DTYPE)
label = fluid.layers.data(name='label', shape=[1], dtype='int64')

# Train program
predict = cnn_model(images)
cost = fluid.layers.cross_entropy(input=predict, label=label)
avg_cost = fluid.layers.mean(x=cost)

# Evaluator
batch_size_tensor = fluid.layers.create_tensor(dtype='int64')
batch_acc = fluid.layers.accuracy(
input=predict, label=label, total=batch_size_tensor)
if args.device == 'CPU' and args.cpus > 1:
places = fluid.layers.get_places(args.cpus)
pd = fluid.layers.ParallelDo(places)
with pd.do():
predict = cnn_model(pd.read_input(images))
label = pd.read_input(label)
cost = fluid.layers.cross_entropy(input=predict, label=label)
avg_cost = fluid.layers.mean(x=cost)
batch_acc = fluid.layers.accuracy(input=predict, label=label)

pd.write_output(avg_cost)
pd.write_output(batch_acc)

avg_cost, batch_acc = pd()
avg_cost = fluid.layers.mean(avg_cost)
batch_acc = fluid.layers.mean(batch_acc)
else:
# Train program
predict = cnn_model(images)
cost = fluid.layers.cross_entropy(input=predict, label=label)
avg_cost = fluid.layers.mean(x=cost)

# Evaluator
batch_acc = fluid.layers.accuracy(input=predict, label=label)

# inference program
inference_program = fluid.default_main_program().clone()
Expand Down
29 changes: 22 additions & 7 deletions benchmark/fluid/models/resnet.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,18 +132,33 @@ def get_model(args):

input = fluid.layers.data(name='data', shape=dshape, dtype='float32')
label = fluid.layers.data(name='label', shape=[1], dtype='int64')
predict = model(input, class_dim)
cost = fluid.layers.cross_entropy(input=predict, label=label)
avg_cost = fluid.layers.mean(x=cost)

batch_size_tensor = fluid.layers.create_tensor(dtype='int64')
batch_acc = fluid.layers.accuracy(
input=predict, label=label, total=batch_size_tensor)
if args.device == 'CPU' and args.cpus > 1:
places = fluid.layers.get_places(args.cpus)
pd = fluid.layers.ParallelDo(places)
with pd.do():
predict = model(pd.read_input(input), class_dim)
label = pd.read_input(label)
cost = fluid.layers.cross_entropy(input=predict, label=label)
avg_cost = fluid.layers.mean(x=cost)
batch_acc = fluid.layers.accuracy(input=predict, label=label)

pd.write_output(avg_cost)
pd.write_output(batch_acc)

avg_cost, batch_acc = pd()
avg_cost = fluid.layers.mean(avg_cost)
batch_acc = fluid.layers.mean(batch_acc)
else:
predict = model(input, class_dim)
cost = fluid.layers.cross_entropy(input=predict, label=label)
avg_cost = fluid.layers.mean(x=cost)
batch_acc = fluid.layers.accuracy(input=predict, label=label)

inference_program = fluid.default_main_program().clone()
with fluid.program_guard(inference_program):
inference_program = fluid.io.get_inference_program(
target_vars=[batch_acc, batch_size_tensor])
target_vars=[batch_acc])

optimizer = fluid.optimizer.Momentum(learning_rate=0.01, momentum=0.9)

Expand Down
3 changes: 1 addition & 2 deletions benchmark/fluid/models/stacked_dynamic_lstm.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,8 @@ def gate_common(
loss = fluid.layers.mean(x=loss)

# add acc
batch_size_tensor = fluid.layers.create_tensor(dtype='int64')
batch_acc = fluid.layers.accuracy(input=logit, label=fluid.layers.data(name='label', \
shape=[1], dtype='int64'), total=batch_size_tensor)
shape=[1], dtype='int64'))

inference_program = fluid.default_main_program().clone()
with fluid.program_guard(inference_program):
Expand Down

0 comments on commit 7938b30

Please sign in to comment.