Skip to content

Commit 7938b30

Browse files
authored
Merge pull request #11199 from luotao1/benchmark
add ParallelDo example for benchmark/fluid
2 parents c598924 + 9514146 commit 7938b30

File tree

4 files changed

+52
-18
lines changed

4 files changed

+52
-18
lines changed

benchmark/fluid/fluid_benchmark.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ def parse_args():
6969
type=int,
7070
default=1,
7171
help='If gpus > 1, will use ParallelExecutor to run, else use Executor.')
72+
parser.add_argument(
73+
'--cpus',
74+
type=int,
75+
default=1,
76+
help='If cpus > 1, will use ParallelDo to run, else use Executor.')
7277
parser.add_argument(
7378
'--data_set',
7479
type=str,

benchmark/fluid/models/mnist.py

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,30 @@ def get_model(args):
6969
images = fluid.layers.data(name='pixel', shape=[1, 28, 28], dtype=DTYPE)
7070
label = fluid.layers.data(name='label', shape=[1], dtype='int64')
7171

72-
# Train program
73-
predict = cnn_model(images)
74-
cost = fluid.layers.cross_entropy(input=predict, label=label)
75-
avg_cost = fluid.layers.mean(x=cost)
76-
77-
# Evaluator
78-
batch_size_tensor = fluid.layers.create_tensor(dtype='int64')
79-
batch_acc = fluid.layers.accuracy(
80-
input=predict, label=label, total=batch_size_tensor)
72+
if args.device == 'CPU' and args.cpus > 1:
73+
places = fluid.layers.get_places(args.cpus)
74+
pd = fluid.layers.ParallelDo(places)
75+
with pd.do():
76+
predict = cnn_model(pd.read_input(images))
77+
label = pd.read_input(label)
78+
cost = fluid.layers.cross_entropy(input=predict, label=label)
79+
avg_cost = fluid.layers.mean(x=cost)
80+
batch_acc = fluid.layers.accuracy(input=predict, label=label)
81+
82+
pd.write_output(avg_cost)
83+
pd.write_output(batch_acc)
84+
85+
avg_cost, batch_acc = pd()
86+
avg_cost = fluid.layers.mean(avg_cost)
87+
batch_acc = fluid.layers.mean(batch_acc)
88+
else:
89+
# Train program
90+
predict = cnn_model(images)
91+
cost = fluid.layers.cross_entropy(input=predict, label=label)
92+
avg_cost = fluid.layers.mean(x=cost)
93+
94+
# Evaluator
95+
batch_acc = fluid.layers.accuracy(input=predict, label=label)
8196

8297
# inference program
8398
inference_program = fluid.default_main_program().clone()

benchmark/fluid/models/resnet.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -132,18 +132,33 @@ def get_model(args):
132132

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

139-
batch_size_tensor = fluid.layers.create_tensor(dtype='int64')
140-
batch_acc = fluid.layers.accuracy(
141-
input=predict, label=label, total=batch_size_tensor)
136+
if args.device == 'CPU' and args.cpus > 1:
137+
places = fluid.layers.get_places(args.cpus)
138+
pd = fluid.layers.ParallelDo(places)
139+
with pd.do():
140+
predict = model(pd.read_input(input), class_dim)
141+
label = pd.read_input(label)
142+
cost = fluid.layers.cross_entropy(input=predict, label=label)
143+
avg_cost = fluid.layers.mean(x=cost)
144+
batch_acc = fluid.layers.accuracy(input=predict, label=label)
145+
146+
pd.write_output(avg_cost)
147+
pd.write_output(batch_acc)
148+
149+
avg_cost, batch_acc = pd()
150+
avg_cost = fluid.layers.mean(avg_cost)
151+
batch_acc = fluid.layers.mean(batch_acc)
152+
else:
153+
predict = model(input, class_dim)
154+
cost = fluid.layers.cross_entropy(input=predict, label=label)
155+
avg_cost = fluid.layers.mean(x=cost)
156+
batch_acc = fluid.layers.accuracy(input=predict, label=label)
142157

143158
inference_program = fluid.default_main_program().clone()
144159
with fluid.program_guard(inference_program):
145160
inference_program = fluid.io.get_inference_program(
146-
target_vars=[batch_acc, batch_size_tensor])
161+
target_vars=[batch_acc])
147162

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

benchmark/fluid/models/stacked_dynamic_lstm.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,8 @@ def gate_common(
101101
loss = fluid.layers.mean(x=loss)
102102

103103
# add acc
104-
batch_size_tensor = fluid.layers.create_tensor(dtype='int64')
105104
batch_acc = fluid.layers.accuracy(input=logit, label=fluid.layers.data(name='label', \
106-
shape=[1], dtype='int64'), total=batch_size_tensor)
105+
shape=[1], dtype='int64'))
107106

108107
inference_program = fluid.default_main_program().clone()
109108
with fluid.program_guard(inference_program):

0 commit comments

Comments
 (0)