Skip to content

Commit 8121b3e

Browse files
committed
Cherry-pick : anakin subgraph add opt config layout argument #16846
test=release/1.4
1 parent a6fb066 commit 8121b3e

File tree

10 files changed

+27
-13
lines changed

10 files changed

+27
-13
lines changed

paddle/fluid/inference/anakin/engine.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,14 @@ template <typename TargetT, Precision PrecisionType, OpRunType RunType>
3636
AnakinEngine<TargetT, PrecisionType, RunType>::AnakinEngine(
3737
bool need_summary, int device, int max_batch_size,
3838
std::map<std::string, std::vector<int>> max_input_shape,
39-
std::vector<std::string> program_inputs)
39+
std::vector<std::string> program_inputs, bool auto_config_layout)
4040
: graph_(new AnakinGraphT<TargetT, PrecisionType>()),
4141
net_(new AnakinNetT<TargetT, PrecisionType, RunType>(need_summary)) {
4242
device_ = device;
4343
max_batch_size_ = max_batch_size;
4444
max_input_shape_ = max_input_shape;
4545
program_inputs_ = program_inputs;
46+
auto_config_layout_ = auto_config_layout;
4647
}
4748

4849
template <typename TargetT, Precision PrecisionType, OpRunType RunType>
@@ -57,7 +58,7 @@ void AnakinEngine<TargetT, PrecisionType, RunType>::SetInputShape(
5758

5859
template <typename TargetT, Precision PrecisionType, OpRunType RunType>
5960
void AnakinEngine<TargetT, PrecisionType, RunType>::InitNet() {
60-
net_->init(*graph_);
61+
net_->init(*graph_, auto_config_layout_);
6162
}
6263

6364
template <typename TargetT, Precision PrecisionType, OpRunType RunType>

paddle/fluid/inference/anakin/engine.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ class AnakinEngine {
5858
explicit AnakinEngine(
5959
bool need_summary = false, int device = 0, int max_batch_size = 1,
6060
std::map<std::string, std::vector<int>> max_input_shape = {},
61-
std::vector<std::string> program_inputs = {});
61+
std::vector<std::string> program_inputs = {},
62+
bool auto_config_layout = false);
6263
~AnakinEngine();
6364
void InitNet();
6465
void SetInputShape(const std::string &name, std::vector<int> shape);
@@ -120,6 +121,8 @@ class AnakinEngine {
120121
std::unique_ptr<NetT> net_;
121122
std::vector<std::string> program_inputs_;
122123
std::unordered_map<std::string, float> tensor_scales_;
124+
// Always be false in gpu mode but true in most cpu cases.
125+
bool auto_config_layout_;
123126
};
124127

125128
template <typename TargetT, ::anakin::Precision PrecisionType>
@@ -138,10 +141,11 @@ class AnakinEngineManager {
138141
AnakinEngineT *Create(bool need_summary, int device, int max_batch_size,
139142
std::map<std::string, std::vector<int>> max_input_shape,
140143
std::vector<std::string> program_inputs,
141-
std::string engine_name) {
144+
bool auto_config_layout, std::string engine_name) {
142145
std::unique_lock<std::mutex> lk(mut_);
143146
auto *p = new AnakinEngine<TargetT, PrecisionType>(
144-
need_summary, device, max_batch_size, max_input_shape, program_inputs);
147+
need_summary, device, max_batch_size, max_input_shape, program_inputs,
148+
auto_config_layout);
145149
engines_[engine_name].reset(p);
146150
return p;
147151
}

paddle/fluid/inference/analysis/argument.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ struct Argument {
171171
DECL_ARGUMENT_FIELD(anakin_min_subgraph_size, AnakinMinSubgraphSize, int);
172172
DECL_ARGUMENT_FIELD(anakin_precision_mode, AnakinPrecisionMode,
173173
AnalysisConfig::Precision);
174+
DECL_ARGUMENT_FIELD(anakin_auto_config_layout, AnakinAutoConfigLayout, bool);
174175
DECL_ARGUMENT_FIELD(use_anakin, UseAnakin, bool);
175176
DECL_ARGUMENT_FIELD(anakin_passes_filter, AnakinPassesFilter,
176177
std::vector<std::string>);

paddle/fluid/inference/analysis/ir_pass_manager.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ void IRPassManager::CreatePasses(Argument *argument,
128128
pass->Set("enable_int8", new bool(enable_int8));
129129
pass->Set("anakin_ops_filter",
130130
new std::vector<std::string>(argument->anakin_ops_filter()));
131+
pass->Set("auto_config_layout",
132+
new bool(argument->anakin_auto_config_layout()));
131133
}
132134

133135
pre_pass = pass_name;

paddle/fluid/inference/analysis/ir_passes/anakin_subgraph_pass.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,18 +226,20 @@ void AnakinSubgraphPass::CreateAnakinEngine(
226226
auto max_batch_size = Get<int>("max_batch_size");
227227
auto max_input_shape =
228228
Get<std::map<std::string, std::vector<int>>>("max_input_shape");
229+
bool auto_config_layout = Get<bool>("auto_config_layout");
229230
if (use_gpu) {
230231
#ifdef PADDLE_WITH_CUDA
231232
inference::Singleton<
232233
anakin::AnakinEngineManager<::anakin::saber::NV, PrecisionT>>::Global()
233234
.Create(true, Get<int>("gpu_device_id"), max_batch_size,
234-
max_input_shape, program_inputs, engine_key);
235+
max_input_shape, program_inputs, false, engine_key);
235236
#endif
236237
} else {
237238
inference::Singleton<
238239
anakin::AnakinEngineManager<::anakin::saber::X86, PrecisionT>>::Global()
239240
.Create(true, Get<int>("gpu_device_id"), max_batch_size,
240-
max_input_shape, program_inputs, engine_key);
241+
max_input_shape, program_inputs, auto_config_layout,
242+
engine_key);
241243
}
242244

243245
auto *scope = param_scope();

paddle/fluid/inference/api/analysis_config.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ AnalysisConfig::AnalysisConfig(const AnalysisConfig &other) {
117117
CP_MEMBER(anakin_max_input_shape_);
118118
CP_MEMBER(anakin_min_subgraph_size_);
119119
CP_MEMBER(anakin_precision_mode_);
120+
CP_MEMBER(anakin_auto_config_layout_);
120121
CP_MEMBER(anakin_passes_filter_);
121122
CP_MEMBER(anakin_ops_filter_);
122123

@@ -398,7 +399,7 @@ void AnalysisConfig::SwitchIrDebug(int x) {
398399
void AnalysisConfig::EnableAnakinEngine(
399400
int max_batch_size, std::map<std::string, std::vector<int>> max_input_shape,
400401
int min_subgraph_size, AnalysisConfig::Precision precision_mode,
401-
std::vector<std::string> passes_filter,
402+
bool auto_config_layout, std::vector<std::string> passes_filter,
402403
std::vector<std::string> ops_filter) {
403404
anakin_max_batchsize_ = max_batch_size;
404405
anakin_max_input_shape_ = max_input_shape;
@@ -407,6 +408,7 @@ void AnalysisConfig::EnableAnakinEngine(
407408
anakin_ops_filter_ = ops_filter;
408409
use_anakin_ = true;
409410
anakin_precision_mode_ = precision_mode;
411+
anakin_auto_config_layout_ = auto_config_layout;
410412
Update();
411413
}
412414
} // namespace paddle

paddle/fluid/inference/api/analysis_predictor.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,7 @@ void AnalysisPredictor::PrepareArgument() {
387387
argument_.SetAnakinMaxInputShape(config_.anakin_max_input_shape_);
388388
argument_.SetAnakinMinSubgraphSize(config_.anakin_min_subgraph_size_);
389389
argument_.SetAnakinPrecisionMode(config_.anakin_precision_mode_);
390+
argument_.SetAnakinAutoConfigLayout(config_.anakin_auto_config_layout_);
390391
argument_.SetAnakinPassesFilter(config_.anakin_passes_filter_);
391392
argument_.SetAnakinOpsFilter(config_.anakin_ops_filter_);
392393
LOG(INFO) << "Anakin subgraph engine is enabled";

paddle/fluid/inference/api/paddle_analysis_config.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ struct AnalysisConfig {
153153
int max_batch_size = 1,
154154
std::map<std::string, std::vector<int>> max_input_shape = {},
155155
int min_subgraph_size = 6, Precision precision = Precision::kFloat32,
156+
bool auto_config_layout = false,
156157
std::vector<std::string> passes_filter = {},
157158
std::vector<std::string> ops_filter = {});
158159

@@ -294,6 +295,7 @@ struct AnalysisConfig {
294295
int anakin_min_subgraph_size_{6};
295296
std::map<std::string, std::vector<int>> anakin_max_input_shape_;
296297
Precision anakin_precision_mode_;
298+
bool anakin_auto_config_layout_{false};
297299
std::vector<std::string> anakin_passes_filter_;
298300
std::vector<std::string> anakin_ops_filter_;
299301
std::map<std::string, std::string> engine_opt_info_;

paddle/fluid/inference/api/paddle_pass_builder.cc

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,9 @@ const std::vector<std::string> kAnakinSubgraphPasses({
7878
"fillconstant_elementwisemul_fuse", //
7979
"fc_fuse_pass", //
8080
"conv_elementwise_add_fuse_pass", //
81-
// "conv_bn_fuse_pass", //
82-
// "conv_elementwise_add_fuse_pass", //
83-
"fc_gru_fuse_pass", //
84-
"anakin_subgraph_pass", //
85-
"fc_gru_fuse_pass", //
81+
"fc_gru_fuse_pass", //
82+
"anakin_subgraph_pass", //
83+
"fc_gru_fuse_pass", //
8684
});
8785

8886
GpuPassStrategy::GpuPassStrategy() : PassStrategy({}) {

paddle/fluid/pybind/inference_api.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ void BindAnalysisConfig(py::module *m) {
236236
std::map<std::string, std::vector<int>>(),
237237
py::arg("min_subgraph_size") = 6,
238238
py::arg("precision_mode") = AnalysisConfig::Precision::kFloat32,
239+
py::arg("auto_config_layout") = false,
239240
py::arg("passes_filter") = std::vector<std::string>(),
240241
py::arg("ops_filter") = std::vector<std::string>())
241242
.def("tensorrt_engine_enabled", &AnalysisConfig::tensorrt_engine_enabled)

0 commit comments

Comments
 (0)