diff --git a/paddle/fluid/framework/naive_executor.cc b/paddle/fluid/framework/naive_executor.cc index 465d685804cac517faa5b73ed19b5b94dcab901e..a18f9df9a9bec5031455ab133653c0aff62c0a76 100644 --- a/paddle/fluid/framework/naive_executor.cc +++ b/paddle/fluid/framework/naive_executor.cc @@ -102,9 +102,8 @@ void NaiveExecutor::CreateOps(const ProgramDesc &desc, int block_id, for (const auto &op_desc : desc.Block(block_id).AllOps()) { if (!with_feed_fetch_ops && (op_desc->Type() == "feed" || op_desc->Type() == "fetch")) { - string::PrettyLogEndl(string::Style::detail(), "--- skip [%s], %s -> %s", - op_desc->Input("X")[0], op_desc->Type(), - op_desc->Output("Out")[0]); + LOG(INFO) << "--- skip [" << op_desc->Input("X")[0] << "], " + << op_desc->Type() << " -> " << op_desc->Output("Out")[0]; continue; } ops_.emplace_back(OpRegistry::CreateOp(*op_desc)); diff --git a/paddle/fluid/inference/analysis/analyzer.cc b/paddle/fluid/inference/analysis/analyzer.cc index 71fdb5570c7c6fca56a302b5d2deee4bd1a8f9f8..d6d0371edaa78cde603a7f7d77473682be57df31 100644 --- a/paddle/fluid/inference/analysis/analyzer.cc +++ b/paddle/fluid/inference/analysis/analyzer.cc @@ -29,8 +29,11 @@ void Analyzer::Run(Argument *argument) { RunAnalysis(argument); } void Analyzer::RunAnalysis(Argument *argument) { PADDLE_ENFORCE(argument->analysis_passes_valid(), "analsis_passes is not valid in the argument."); + const bool disable_logs = argument->disable_logs(); for (auto &pass : argument->analysis_passes()) { - string::PrettyLogH1("--- Running analysis [%s]", pass); + if (!disable_logs) { + string::PrettyLogH1("--- Running analysis [%s]", pass); + } if (!argument->enable_analysis_optim() && pass == "ir_analysis_pass") continue; diff --git a/paddle/fluid/inference/analysis/analyzer_tester.cc b/paddle/fluid/inference/analysis/analyzer_tester.cc index 489345da49a232e7fb21bd44c1ecf34cf1e4fe8f..79784fcb9bf31e8fac972053b1a4ec6180d45afa 100644 --- a/paddle/fluid/inference/analysis/analyzer_tester.cc +++ b/paddle/fluid/inference/analysis/analyzer_tester.cc @@ -29,6 +29,7 @@ using namespace framework; // NOLINT TEST(Analyzer, analysis_without_tensorrt) { Argument argument; + argument.SetDisableLogs(false); argument.SetModelDir(FLAGS_inference_model_dir); argument.SetEnableAnalysisOptim(false); argument.SetUseGPU(false); @@ -41,6 +42,7 @@ TEST(Analyzer, analysis_without_tensorrt) { TEST(Analyzer, analysis_with_tensorrt) { Argument argument; + argument.SetDisableLogs(false); argument.SetEnableAnalysisOptim(false); argument.SetTensorRtMaxBatchSize(3); argument.SetTensorRtWorkspaceSize(1 << 20); diff --git a/paddle/fluid/inference/analysis/argument.h b/paddle/fluid/inference/analysis/argument.h index 42858655aaa306bb3f212fac14e1c262fad2cd4f..5b47e9ebffbac445f5e3024f5e5568ab749e8a21 100644 --- a/paddle/fluid/inference/analysis/argument.h +++ b/paddle/fluid/inference/analysis/argument.h @@ -149,6 +149,9 @@ struct Argument { DECL_ARGUMENT_FIELD(analysis_passes, AnalysisPasses, std::vector); + // whether to mute all logs in inference. + DECL_ARGUMENT_FIELD(disable_logs, DisableLogs, bool); + // Pass a set of op types to enable its mkldnn kernel DECL_ARGUMENT_FIELD(mkldnn_enabled_op_types, MKLDNNEnabledOpTypes, std::unordered_set); diff --git a/paddle/fluid/inference/analysis/ir_pass_manager.cc b/paddle/fluid/inference/analysis/ir_pass_manager.cc index 80b68ec155b7d603b12cffb42dccdaa8d6303a9c..174d6e3fc1ce0a73651e503bec765daace2a329b 100644 --- a/paddle/fluid/inference/analysis/ir_pass_manager.cc +++ b/paddle/fluid/inference/analysis/ir_pass_manager.cc @@ -147,6 +147,7 @@ void IRPassManager::CreatePasses(Argument *argument, pass->Set("auto_config_layout", new bool(argument->anakin_auto_config_layout())); } + disable_logs_ = argument->disable_logs(); if (pass_name == "fc_fuse_pass") { pass->Set("use_gpu", new bool(argument->use_gpu())); } @@ -164,7 +165,7 @@ std::unique_ptr IRPassManager::Apply(std::unique_ptr graph) { PADDLE_ENFORCE(graph.get()); // Apply all the passes for (const auto &pass : passes_) { - if (pass->Type() != "graph_viz_pass") { + if (pass->Type() != "graph_viz_pass" && !disable_logs_) { PrettyLogEndl(Style::H2(), "--- Running IR pass [%s]", pass->Type()); } graph.reset(pass->Apply(graph.release())); diff --git a/paddle/fluid/inference/analysis/ir_pass_manager.h b/paddle/fluid/inference/analysis/ir_pass_manager.h index 2d120679eedd392d78b4da66276297ff7280792b..f96b4a0f1353c53cd5c8b7187f1545e0cecd9c5b 100644 --- a/paddle/fluid/inference/analysis/ir_pass_manager.h +++ b/paddle/fluid/inference/analysis/ir_pass_manager.h @@ -56,6 +56,7 @@ class IRPassManager final { std::unique_ptr graph_; std::vector> passes_; + bool disable_logs_{false}; }; } // namespace analysis diff --git a/paddle/fluid/inference/analysis/ir_passes/tensorrt_subgraph_pass.cc b/paddle/fluid/inference/analysis/ir_passes/tensorrt_subgraph_pass.cc index 8c181ba2fd756030e2f54c390779f14dd0dc98c0..a173c899db69c4ac97a833893a4dc625acad5e6f 100644 --- a/paddle/fluid/inference/analysis/ir_passes/tensorrt_subgraph_pass.cc +++ b/paddle/fluid/inference/analysis/ir_passes/tensorrt_subgraph_pass.cc @@ -108,8 +108,7 @@ void TensorRtSubgraphPass::CreateTensorRTOp( framework::BlockDesc block_desc(nullptr, &block_proto); block_desc.Proto()->set_parent_idx(-1); block_desc.Proto()->set_idx(0); - string::PrettyLogDetail("--- detect a sub-graph with %d nodes", - subgraph.size()); + LOG(INFO) << "--- detect a sub-graph with " << subgraph.size() << " nodes"; for (auto *node : subgraph) { auto *new_block_op = new_block->AppendOp(); diff --git a/paddle/fluid/inference/api/analysis_predictor.cc b/paddle/fluid/inference/api/analysis_predictor.cc index 5d05091ad32708459f13a9578da559a035d57c51..649118e80c4b6547f048a5a3902dbdd1ff9f9d06 100644 --- a/paddle/fluid/inference/api/analysis_predictor.cc +++ b/paddle/fluid/inference/api/analysis_predictor.cc @@ -452,6 +452,7 @@ void AnalysisPredictor::PrepareArgument() { passes.clear(); LOG(INFO) << "ir_optim is turned off, no IR pass will be executed"; } + argument_.SetDisableLogs(config_.glog_info_disabled()); argument_.SetIrAnalysisPasses(passes); argument_.SetAnalysisPasses(config_.pass_builder()->AnalysisPasses()); argument_.SetScopeNotOwned(scope_.get()); @@ -508,10 +509,10 @@ std::unique_ptr CreatePaddlePredictor< framework::InitGflags(flags); } } + framework::InitGLOG(""); if (config.glog_info_disabled()) { FLAGS_logtostderr = 1; - FLAGS_minloglevel = google::WARNING; - LOG(WARNING) << " - GLOG's LOG(INFO) is disabled."; + FLAGS_minloglevel = 2; // GLOG_ERROR } std::unique_ptr predictor(new AnalysisPredictor(config)); diff --git a/paddle/fluid/platform/init.cc b/paddle/fluid/platform/init.cc index ec7998161b5c612d1f9a9cdb6adc9e5468d76a5d..435fc5a6a005db3decae7af2dbb3a2dadb80e55d 100644 --- a/paddle/fluid/platform/init.cc +++ b/paddle/fluid/platform/init.cc @@ -46,6 +46,7 @@ namespace framework { #endif std::once_flag gflags_init_flag; +std::once_flag glog_init_flag; std::once_flag p2p_init_flag; std::once_flag glog_warning_once_flag; @@ -223,13 +224,15 @@ void SignalHandle(const char *data, int size) { #endif void InitGLOG(const std::string &prog_name) { - // glog will not hold the ARGV[0] inside. - // Use strdup to alloc a new string. - google::InitGoogleLogging(strdup(prog_name.c_str())); + std::call_once(glog_init_flag, [&]() { + // glog will not hold the ARGV[0] inside. + // Use strdup to alloc a new string. + google::InitGoogleLogging(strdup(prog_name.c_str())); #ifndef _WIN32 - google::InstallFailureSignalHandler(); - google::InstallFailureWriter(&SignalHandle); + google::InstallFailureSignalHandler(); + google::InstallFailureWriter(&SignalHandle); #endif + }); } } // namespace framework