Skip to content

Commit 03a99a8

Browse files
committed
Merge develop
2 parents 0a36ef3 + f66d08c commit 03a99a8

16 files changed

+501
-493
lines changed

benchmark/fluid/args.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,6 @@ def parse_args():
136136
'--no_random',
137137
action='store_true',
138138
help='If set, keep the random seed and do not shuffle the data.')
139-
parser.add_argument(
140-
'--use_lars',
141-
action='store_true',
142-
help='If set, use lars for optimizers, ONLY support resnet module.')
143139
parser.add_argument(
144140
'--reduce_strategy',
145141
type=str,

benchmark/fluid/models/resnet.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,6 @@ def get_model(args, is_train, main_prog, startup_prog):
200200
# configure optimize
201201
optimizer = None
202202
if is_train:
203-
if args.use_lars:
204-
lars_decay = 1.0
205-
else:
206-
lars_decay = 0.0
207-
208203
total_images = 1281167 / trainer_count
209204

210205
step = int(total_images / (args.batch_size * args.gpus) + 1)

benchmark/fluid/models/resnet_with_preprocess.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -224,11 +224,6 @@ def get_model(args, is_train, main_prog, startup_prog):
224224
# configure optimize
225225
optimizer = None
226226
if is_train:
227-
if args.use_lars:
228-
lars_decay = 1.0
229-
else:
230-
lars_decay = 0.0
231-
232227
total_images = 1281167 / trainer_count
233228

234229
step = int(total_images / args.batch_size + 1)

benchmark/fluid/models/se_resnext.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -244,11 +244,6 @@ def get_model(args, is_train, main_prog, startup_prog):
244244

245245
optimizer = None
246246
if is_train:
247-
if args.use_lars:
248-
lars_decay = 1.0
249-
else:
250-
lars_decay = 0.0
251-
252247
total_images = 1281167 / trainer_count
253248

254249
step = int(total_images / args.batch_size + 1)
@@ -262,8 +257,7 @@ def get_model(args, is_train, main_prog, startup_prog):
262257
learning_rate=fluid.layers.piecewise_decay(
263258
boundaries=bd, values=lr),
264259
momentum=0.9,
265-
regularization=fluid.regularizer.L2Decay(1e-4),
266-
LARS_weight_decay=lars_decay)
260+
regularization=fluid.regularizer.L2Decay(1e-4))
267261
optimizer.minimize(avg_cost)
268262

269263
if args.memory_optimize:

paddle/fluid/API.spec

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -350,25 +350,25 @@ paddle.fluid.nets.simple_img_conv_pool ArgSpec(args=['input', 'num_filters', 'fi
350350
paddle.fluid.nets.sequence_conv_pool ArgSpec(args=['input', 'num_filters', 'filter_size', 'param_attr', 'act', 'pool_type'], varargs=None, keywords=None, defaults=(None, 'sigmoid', 'max'))
351351
paddle.fluid.nets.glu ArgSpec(args=['input', 'dim'], varargs=None, keywords=None, defaults=(-1,))
352352
paddle.fluid.nets.scaled_dot_product_attention ArgSpec(args=['queries', 'keys', 'values', 'num_heads', 'dropout_rate'], varargs=None, keywords=None, defaults=(1, 0.0))
353-
paddle.fluid.optimizer.SGDOptimizer.__init__ ArgSpec(args=['self', 'learning_rate'], varargs=None, keywords='kwargs', defaults=None)
353+
paddle.fluid.optimizer.SGDOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'regularization', 'name'], varargs=None, keywords=None, defaults=(None, None))
354354
paddle.fluid.optimizer.SGDOptimizer.minimize ArgSpec(args=['self', 'loss', 'startup_program', 'parameter_list', 'no_grad_set'], varargs=None, keywords=None, defaults=(None, None, None))
355-
paddle.fluid.optimizer.MomentumOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'momentum', 'use_nesterov'], varargs=None, keywords='kwargs', defaults=(False,))
355+
paddle.fluid.optimizer.MomentumOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'momentum', 'use_nesterov', 'regularization', 'name'], varargs=None, keywords=None, defaults=(False, None, None))
356356
paddle.fluid.optimizer.MomentumOptimizer.minimize ArgSpec(args=['self', 'loss', 'startup_program', 'parameter_list', 'no_grad_set'], varargs=None, keywords=None, defaults=(None, None, None))
357-
paddle.fluid.optimizer.AdagradOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'epsilon'], varargs=None, keywords='kwargs', defaults=(1e-06,))
357+
paddle.fluid.optimizer.AdagradOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'epsilon', 'regularization', 'name'], varargs=None, keywords=None, defaults=(1e-06, None, None))
358358
paddle.fluid.optimizer.AdagradOptimizer.minimize ArgSpec(args=['self', 'loss', 'startup_program', 'parameter_list', 'no_grad_set'], varargs=None, keywords=None, defaults=(None, None, None))
359-
paddle.fluid.optimizer.AdamOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'beta1', 'beta2', 'epsilon'], varargs=None, keywords='kwargs', defaults=(0.001, 0.9, 0.999, 1e-08))
359+
paddle.fluid.optimizer.AdamOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'beta1', 'beta2', 'epsilon', 'regularization', 'name'], varargs=None, keywords=None, defaults=(0.001, 0.9, 0.999, 1e-08, None, None))
360360
paddle.fluid.optimizer.AdamOptimizer.minimize ArgSpec(args=['self', 'loss', 'startup_program', 'parameter_list', 'no_grad_set'], varargs=None, keywords=None, defaults=(None, None, None))
361-
paddle.fluid.optimizer.AdamaxOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'beta1', 'beta2', 'epsilon'], varargs=None, keywords='kwargs', defaults=(0.001, 0.9, 0.999, 1e-08))
361+
paddle.fluid.optimizer.AdamaxOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'beta1', 'beta2', 'epsilon', 'regularization', 'name'], varargs=None, keywords=None, defaults=(0.001, 0.9, 0.999, 1e-08, None, None))
362362
paddle.fluid.optimizer.AdamaxOptimizer.minimize ArgSpec(args=['self', 'loss', 'startup_program', 'parameter_list', 'no_grad_set'], varargs=None, keywords=None, defaults=(None, None, None))
363-
paddle.fluid.optimizer.DecayedAdagradOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'decay', 'epsilon'], varargs=None, keywords='kwargs', defaults=(0.95, 1e-06))
363+
paddle.fluid.optimizer.DecayedAdagradOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'decay', 'epsilon', 'regularization', 'name'], varargs=None, keywords=None, defaults=(0.95, 1e-06, None, None))
364364
paddle.fluid.optimizer.DecayedAdagradOptimizer.minimize ArgSpec(args=['self', 'loss', 'startup_program', 'parameter_list', 'no_grad_set'], varargs=None, keywords=None, defaults=(None, None, None))
365-
paddle.fluid.optimizer.FtrlOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'l1', 'l2', 'lr_power'], varargs=None, keywords='kwargs', defaults=(0.0, 0.0, -0.5))
365+
paddle.fluid.optimizer.FtrlOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'l1', 'l2', 'lr_power', 'regularization', 'name'], varargs=None, keywords=None, defaults=(0.0, 0.0, -0.5, None, None))
366366
paddle.fluid.optimizer.FtrlOptimizer.minimize ArgSpec(args=['self', 'loss', 'startup_program', 'parameter_list', 'no_grad_set'], varargs=None, keywords=None, defaults=(None, None, None))
367-
paddle.fluid.optimizer.RMSPropOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'rho', 'epsilon', 'momentum', 'centered'], varargs=None, keywords='kwargs', defaults=(0.95, 1e-06, 0.0, False))
367+
paddle.fluid.optimizer.RMSPropOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'rho', 'epsilon', 'momentum', 'centered', 'regularization', 'name'], varargs=None, keywords=None, defaults=(0.95, 1e-06, 0.0, False, None, None))
368368
paddle.fluid.optimizer.RMSPropOptimizer.minimize ArgSpec(args=['self', 'loss', 'startup_program', 'parameter_list', 'no_grad_set'], varargs=None, keywords=None, defaults=(None, None, None))
369-
paddle.fluid.optimizer.AdadeltaOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'epsilon', 'rho'], varargs=None, keywords='kwargs', defaults=(1e-06, 0.95))
369+
paddle.fluid.optimizer.AdadeltaOptimizer.__init__ ArgSpec(args=['self', 'learning_rate', 'epsilon', 'rho', 'regularization', 'name'], varargs=None, keywords=None, defaults=(1e-06, 0.95, None, None))
370370
paddle.fluid.optimizer.AdadeltaOptimizer.minimize ArgSpec(args=['self', 'loss', 'startup_program', 'parameter_list', 'no_grad_set'], varargs=None, keywords=None, defaults=(None, None, None))
371-
paddle.fluid.optimizer.ModelAverage.__init__ ArgSpec(args=['self', 'average_window_rate', 'min_average_window', 'max_average_window'], varargs=None, keywords='kwargs', defaults=(10000, 10000))
371+
paddle.fluid.optimizer.ModelAverage.__init__ ArgSpec(args=['self', 'average_window_rate', 'min_average_window', 'max_average_window', 'regularization', 'name'], varargs=None, keywords=None, defaults=(10000, 10000, None, None))
372372
paddle.fluid.optimizer.ModelAverage.apply ArgSpec(args=[], varargs='args', keywords='kwds', defaults=None)
373373
paddle.fluid.optimizer.ModelAverage.minimize ArgSpec(args=['self', 'loss', 'startup_program', 'parameter_list', 'no_grad_set'], varargs=None, keywords=None, defaults=(None, None, None))
374374
paddle.fluid.optimizer.ModelAverage.restore ArgSpec(args=['self', 'executor'], varargs=None, keywords=None, defaults=None)

paddle/fluid/inference/tests/api/analyzer_lac_tester.cc

Lines changed: 57 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -103,108 +103,74 @@ void GetOneBatch(std::vector<PaddleTensor> *input_slots, DataRecord *data,
103103
input_slots->assign({input_tensor});
104104
}
105105

106-
const int64_t lac_ref_data[] = {24, 25, 25, 25, 38, 30, 31, 14, 15, 44, 24, 25,
107-
25, 25, 25, 25, 44, 24, 25, 25, 25, 36, 42, 43,
108-
44, 14, 15, 44, 14, 15, 44, 14, 15, 44, 38, 39,
109-
14, 15, 44, 22, 23, 23, 23, 23, 23, 23, 23};
110-
111-
void TestLACPrediction(const std::string &model_path,
112-
const std::string &data_file, const int batch_size,
113-
const int repeat, bool use_analysis = false) {
114-
AnalysisConfig cfg;
115-
cfg.model_dir = model_path;
116-
cfg.use_gpu = false;
117-
cfg.device = 0;
118-
cfg.specify_input_name = true;
119-
cfg.enable_ir_optim = true;
106+
void SetConfig(AnalysisConfig *cfg) {
107+
cfg->model_dir = FLAGS_infer_model;
108+
cfg->use_gpu = false;
109+
cfg->device = 0;
110+
cfg->specify_input_name = true;
111+
cfg->enable_ir_optim = true;
112+
}
120113

121-
std::vector<PaddleTensor> input_slots, outputs_slots;
122-
DataRecord data(data_file, batch_size);
123-
GetOneBatch(&input_slots, &data, batch_size);
124-
std::unique_ptr<PaddlePredictor> predictor;
125-
if (use_analysis) {
126-
predictor =
127-
CreatePaddlePredictor<AnalysisConfig, PaddleEngineKind::kAnalysis>(cfg);
128-
} else {
129-
predictor =
130-
CreatePaddlePredictor<NativeConfig, PaddleEngineKind::kNative>(cfg);
131-
}
132-
for (int i = 0; i < FLAGS_burning; i++) {
133-
predictor->Run(input_slots, &outputs_slots);
114+
void SetInput(std::vector<std::vector<PaddleTensor>> *inputs) {
115+
DataRecord data(FLAGS_infer_data, FLAGS_batch_size);
116+
std::vector<PaddleTensor> input_slots;
117+
int epoch = FLAGS_test_all_data ? data.batched_datas.size() : 1;
118+
LOG(INFO) << "number of samples: " << epoch;
119+
for (int bid = 0; bid < epoch; ++bid) {
120+
GetOneBatch(&input_slots, &data, FLAGS_batch_size);
121+
(*inputs).emplace_back(input_slots);
134122
}
135-
Timer timer;
136-
if (FLAGS_test_all_data) {
137-
LOG(INFO) << "test all data";
138-
std::vector<std::vector<PaddleTensor>> input_slots_all;
139-
for (size_t bid = 0; bid < data.batched_datas.size(); ++bid) {
140-
GetOneBatch(&input_slots, &data, batch_size);
141-
input_slots_all.emplace_back(input_slots);
142-
}
143-
LOG(INFO) << "total number of samples: " << data.datasets.size();
144-
TestPrediction(cfg, input_slots_all, &outputs_slots, FLAGS_num_threads);
145-
return;
146-
}
147-
timer.tic();
148-
for (int i = 0; i < repeat; i++) {
149-
predictor->Run(input_slots, &outputs_slots);
150-
}
151-
PrintTime(batch_size, repeat, 1, 0, timer.toc() / repeat);
123+
}
152124

153-
// check result
154-
EXPECT_EQ(outputs_slots.size(), 1UL);
155-
auto &out = outputs_slots[0];
156-
size_t size = std::accumulate(out.shape.begin(), out.shape.end(), 1,
157-
[](int a, int b) { return a * b; });
158-
size_t batch1_size = sizeof(lac_ref_data) / sizeof(int64_t);
159-
PADDLE_ENFORCE_GT(size, 0);
160-
EXPECT_GE(size, batch1_size);
161-
int64_t *pdata = static_cast<int64_t *>(out.data.data());
162-
for (size_t i = 0; i < batch1_size; ++i) {
163-
EXPECT_EQ(pdata[i], lac_ref_data[i]);
164-
}
125+
// Easy for profiling independently.
126+
TEST(Analyzer_LAC, profile) {
127+
AnalysisConfig cfg;
128+
SetConfig(&cfg);
129+
std::vector<PaddleTensor> outputs;
165130

166-
if (use_analysis) {
167-
// run once for comparion as reference
168-
auto ref_predictor =
169-
CreatePaddlePredictor<NativeConfig, PaddleEngineKind::kNative>(cfg);
170-
std::vector<PaddleTensor> ref_outputs_slots;
171-
ref_predictor->Run(input_slots, &ref_outputs_slots);
172-
CompareResult(ref_outputs_slots, outputs_slots);
131+
std::vector<std::vector<PaddleTensor>> input_slots_all;
132+
SetInput(&input_slots_all);
133+
TestPrediction(cfg, input_slots_all, &outputs, FLAGS_num_threads);
173134

174-
AnalysisPredictor *analysis_predictor =
175-
dynamic_cast<AnalysisPredictor *>(predictor.get());
176-
auto &fuse_statis = analysis_predictor->analysis_argument()
177-
.Get<std::unordered_map<std::string, int>>(
178-
framework::ir::kFuseStatisAttr);
179-
for (auto &item : fuse_statis) {
180-
LOG(INFO) << "fused " << item.first << " " << item.second;
181-
}
182-
int num_ops = 0;
183-
for (auto &node :
184-
analysis_predictor->analysis_argument().main_dfg->nodes.nodes()) {
185-
if (node->IsFunction()) {
186-
++num_ops;
187-
}
135+
if (FLAGS_num_threads == 1 && !FLAGS_test_all_data) {
136+
// the first inference result
137+
const int64_t lac_ref_data[] = {
138+
24, 25, 25, 25, 38, 30, 31, 14, 15, 44, 24, 25, 25, 25, 25, 25,
139+
44, 24, 25, 25, 25, 36, 42, 43, 44, 14, 15, 44, 14, 15, 44, 14,
140+
15, 44, 38, 39, 14, 15, 44, 22, 23, 23, 23, 23, 23, 23, 23};
141+
PADDLE_ENFORCE_EQ(outputs.size(), 1UL);
142+
size_t size = GetSize(outputs[0]);
143+
size_t batch1_size = sizeof(lac_ref_data) / sizeof(int64_t);
144+
PADDLE_ENFORCE_GE(size, batch1_size);
145+
int64_t *pdata = static_cast<int64_t *>(outputs[0].data.data());
146+
for (size_t i = 0; i < batch1_size; ++i) {
147+
EXPECT_EQ(pdata[i], lac_ref_data[i]);
188148
}
189-
LOG(INFO) << "has num ops: " << num_ops;
190-
ASSERT_TRUE(fuse_statis.count("fc_fuse"));
191-
ASSERT_TRUE(fuse_statis.count("fc_gru_fuse"));
192-
EXPECT_EQ(fuse_statis.at("fc_fuse"), 1);
193-
EXPECT_EQ(fuse_statis.at("fc_gru_fuse"), 4);
194-
EXPECT_EQ(num_ops, 11);
195149
}
196150
}
197151

198-
TEST(Analyzer_LAC, native) {
199-
LOG(INFO) << "LAC with native";
200-
TestLACPrediction(FLAGS_infer_model, FLAGS_infer_data, FLAGS_batch_size,
201-
FLAGS_repeat);
152+
// Check the fuse status
153+
TEST(Analyzer_LAC, fuse_statis) {
154+
AnalysisConfig cfg;
155+
SetConfig(&cfg);
156+
157+
int num_ops;
158+
auto fuse_statis = GetFuseStatis(cfg, &num_ops);
159+
ASSERT_TRUE(fuse_statis.count("fc_fuse"));
160+
ASSERT_TRUE(fuse_statis.count("fc_gru_fuse"));
161+
EXPECT_EQ(fuse_statis.at("fc_fuse"), 1);
162+
EXPECT_EQ(fuse_statis.at("fc_gru_fuse"), 4);
163+
EXPECT_EQ(num_ops, 11);
202164
}
203165

204-
TEST(Analyzer_LAC, analysis) {
205-
LOG(INFO) << "LAC with analysis";
206-
TestLACPrediction(FLAGS_infer_model, FLAGS_infer_data, FLAGS_batch_size,
207-
FLAGS_repeat, true);
166+
// Compare result of NativeConfig and AnalysisConfig
167+
TEST(Analyzer_LAC, compare) {
168+
AnalysisConfig cfg;
169+
SetConfig(&cfg);
170+
171+
std::vector<std::vector<PaddleTensor>> input_slots_all;
172+
SetInput(&input_slots_all);
173+
CompareNativeAndAnalysis(cfg, input_slots_all);
208174
}
209175

210176
} // namespace analysis

0 commit comments

Comments
 (0)