diff --git a/mindspore/ccsrc/device/ascend/profiling/profiling_manager.cc b/mindspore/ccsrc/device/ascend/profiling/profiling_manager.cc index 89225c91d9..6cf3cad62f 100644 --- a/mindspore/ccsrc/device/ascend/profiling/profiling_manager.cc +++ b/mindspore/ccsrc/device/ascend/profiling/profiling_manager.cc @@ -114,9 +114,6 @@ bool ProfilingManager::StartupProfiling(uint32_t device_id) { return true; } device_id_ = device_id; - // exp: export PROFILING_MODE=true - // export PROFILING_OPTIONS=training_trace - const char *prof_options_str = std::getenv("PROFILING_OPTIONS"); // register Framework to profiling int result = Msprof::Engine::RegisterEngine("Framework", engine_0_.get()); if (result != 0) { @@ -124,53 +121,51 @@ bool ProfilingManager::StartupProfiling(uint32_t device_id) { return false; } - if (prof_options_str != nullptr) { - const string prof_options_str_tmp = prof_options_str; - vector opts = Split(prof_options_str_tmp, ':'); - if (!opts.empty()) { - // current one docker only use one device` - Json p_device; - - // JOBID - auto job_id = GetJobId(); - p_device["jobID"] = std::to_string(job_id); - - // device_id - p_device["deviceID"] = std::to_string(device_id); - - // features:'training_trace', 'task_trace' etc - Json features; - for (vector::size_type i = 0; i < opts.size(); i++) { - Json f; - f["name"] = opts[i]; - features[i] = f; - } - p_device["features"] = features; - - // only one device, but sProfMgrStartUp API require for device list - Json devices; - devices[0] = p_device; - - Json startCfg; - startCfg["startCfg"] = devices; - - // convert json to string - std::stringstream ss; - ss << startCfg; - std::string cfg = ss.str(); - - MS_LOG(INFO) << "profiling config " << cfg; - - // call profiling startup API - ProfMgrCfg prof_cfg = {cfg}; - prof_handle_ = ProfMgrStartUp(&prof_cfg); - if (prof_handle_ == nullptr) { - MS_LOG(ERROR) << "Startup profiling failed."; - return false; - } - } + auto context = MsContext::GetInstance(); + MS_EXCEPTION_IF_NULL(context); + const string prof_options_str = context->profiling_options(); + vector opts = Split(prof_options_str, ':'); + if (opts.empty()) { + MS_LOG(WARNING) << "Profiling is enabled, but profiling option is not set!"; + return true; } + // current one docker only use one device` + Json p_device; + // JOBID + auto job_id = GetJobId(); + p_device["jobID"] = std::to_string(job_id); + // device_id + p_device["deviceID"] = std::to_string(device_id); + // features:'training_trace', 'task_trace' etc + Json features; + for (vector::size_type i = 0; i < opts.size(); i++) { + Json f; + f["name"] = opts[i]; + features[i] = f; + } + p_device["features"] = features; + // only one device, but sProfMgrStartUp API require for device list + Json devices; + devices[0] = p_device; + + Json startCfg; + startCfg["startCfg"] = devices; + + // convert json to string + std::stringstream ss; + ss << startCfg; + std::string cfg = ss.str(); + + MS_LOG(INFO) << "profiling config " << cfg; + + // call profiling startup API + ProfMgrCfg prof_cfg = {cfg}; + prof_handle_ = ProfMgrStartUp(&prof_cfg); + if (prof_handle_ == nullptr) { + MS_LOG(ERROR) << "Startup profiling failed."; + return false; + } return true; } diff --git a/mindspore/ccsrc/device/ascend/profiling/profiling_manager.h b/mindspore/ccsrc/device/ascend/profiling/profiling_manager.h index b826c4cf36..f0c25d7f8a 100644 --- a/mindspore/ccsrc/device/ascend/profiling/profiling_manager.h +++ b/mindspore/ccsrc/device/ascend/profiling/profiling_manager.h @@ -20,6 +20,7 @@ #include #include #include +#include "utils/context/ms_context.h" using std::map; using std::string; @@ -41,8 +42,9 @@ class ProfilingManager { bool StopProfiling() const; inline bool IsProfiling() const { - const char *is_profiling = std::getenv("PROFILING_MODE"); - return (is_profiling != nullptr && (strcmp("true", is_profiling) == 0)); + auto context = MsContext::GetInstance(); + MS_EXCEPTION_IF_NULL(context); + return context->enable_profiling(); } protected: