!1017 add profiling_mode and profiling_options to context

Merge pull request !1017 from jinyaohui/context_opt
This commit is contained in:
mindspore-ci-bot 2020-05-12 11:55:14 +08:00 committed by Gitee
commit 28a6daaed5
5 changed files with 87 additions and 4 deletions

View File

@ -145,7 +145,11 @@ PYBIND11_MODULE(_c_expression, m) {
.def("set_save_dump_path", &mindspore::MsContext::set_save_dump_path, "Set path to dump.") .def("set_save_dump_path", &mindspore::MsContext::set_save_dump_path, "Set path to dump.")
.def("set_graph_memory_max_size", &mindspore::MsContext::set_graph_memory_max_size, "set graph memory max size.") .def("set_graph_memory_max_size", &mindspore::MsContext::set_graph_memory_max_size, "set graph memory max size.")
.def("set_variable_memory_max_size", &mindspore::MsContext::set_variable_memory_max_size, .def("set_variable_memory_max_size", &mindspore::MsContext::set_variable_memory_max_size,
"set variable memory max size"); "set variable memory max size")
.def("get_enable_profiling", &mindspore::MsContext::enable_profiling, "Get whether to open profiling.")
.def("set_enable_profiling", &mindspore::MsContext::set_enable_profiling, "Set whether to open profiling.")
.def("get_profiling_options", &mindspore::MsContext::profiling_options, "Get options to profiling.")
.def("set_profiling_options", &mindspore::MsContext::set_profiling_options, "Set options to profiling.");
(void)py::class_<ParallelContext, std::shared_ptr<ParallelContext>>(m, "AutoParallelContext") (void)py::class_<ParallelContext, std::shared_ptr<ParallelContext>>(m, "AutoParallelContext")
.def_static("get_instance", &ParallelContext::GetInstance, "Get auto parallel context instance.") .def_static("get_instance", &ParallelContext::GetInstance, "Get auto parallel context instance.")

View File

@ -78,6 +78,8 @@ MsContext::MsContext(const std::string &policy, const std::string &target) {
graph_memory_max_size_ = "0"; graph_memory_max_size_ = "0";
variable_memory_max_size_ = "0"; variable_memory_max_size_ = "0";
enable_loop_sink_ = target == kAscendDevice || target == kDavinciDevice; enable_loop_sink_ = target == kAscendDevice || target == kDavinciDevice;
profiling_mode_ = false;
profiling_options_ = "training_trace";
} }
std::shared_ptr<MsContext> MsContext::GetInstance() { std::shared_ptr<MsContext> MsContext::GetInstance() {
@ -279,6 +281,11 @@ void MsContext::GetGeOptions(std::map<std::string, std::string> *ge_options) con
(*ge_options)["device_id"] = "0"; (*ge_options)["device_id"] = "0";
(*ge_options)["ge.exec.enableDump"] = std::to_string(enable_dump_); (*ge_options)["ge.exec.enableDump"] = std::to_string(enable_dump_);
(*ge_options)["ge.exec.dumpPath"] = save_dump_path_; (*ge_options)["ge.exec.dumpPath"] = save_dump_path_;
(*ge_options)["ge.exec.profilingMode"] = std::to_string(profiling_mode_);
if (profiling_mode_) {
(*ge_options)["ge.exec.profilingOptions"] = profiling_options_;
}
// only not supported in ge // only not supported in ge
auto tbe_plugin_path = common::GetEnv("ME_TBE_PLUGIN_PATH"); auto tbe_plugin_path = common::GetEnv("ME_TBE_PLUGIN_PATH");
if (!tbe_plugin_path.empty()) { if (!tbe_plugin_path.empty()) {

View File

@ -138,6 +138,12 @@ class MsContext {
variable_memory_max_size_ = variable_memory_max_size; variable_memory_max_size_ = variable_memory_max_size;
} }
void set_enable_profiling(bool flag) { profiling_mode_ = flag; }
bool enable_profiling() const { return profiling_mode_; }
void set_profiling_options(const std::string &options) { profiling_options_ = options; }
std::string profiling_options() const { return profiling_options_; }
private: private:
MsContext(const std::string &backend_policy, const std::string &target); MsContext(const std::string &backend_policy, const std::string &target);
void GetGeOptions(std::map<std::string, std::string> *ge_options) const; void GetGeOptions(std::map<std::string, std::string> *ge_options) const;
@ -174,6 +180,8 @@ class MsContext {
std::string graph_memory_max_size_; std::string graph_memory_max_size_;
std::string variable_memory_max_size_; std::string variable_memory_max_size_;
std::thread tdt_print_; std::thread tdt_print_;
bool profiling_mode_;
std::string profiling_options_;
}; };
} // namespace mindspore } // namespace mindspore

View File

@ -26,7 +26,6 @@ from mindspore._checkparam import args_type_check
from mindspore.parallel._auto_parallel_context import _set_auto_parallel_context, _get_auto_parallel_context, \ from mindspore.parallel._auto_parallel_context import _set_auto_parallel_context, _get_auto_parallel_context, \
_reset_auto_parallel_context _reset_auto_parallel_context
__all__ = ['GRAPH_MODE', 'PYNATIVE_MODE', 'set_context', 'get_context', 'set_auto_parallel_context', __all__ = ['GRAPH_MODE', 'PYNATIVE_MODE', 'set_context', 'get_context', 'set_auto_parallel_context',
'get_auto_parallel_context', 'reset_auto_parallel_context'] 'get_auto_parallel_context', 'reset_auto_parallel_context']
@ -297,6 +296,26 @@ class _Context:
def save_dump_path(self, save_dump_path): def save_dump_path(self, save_dump_path):
self._context_handle.set_save_dump_path(save_dump_path) self._context_handle.set_save_dump_path(save_dump_path)
@property
def enable_profiling(self):
return self._context_handle.get_enable_profiling()
@enable_profiling.setter
def enable_profiling(self, flag):
self._context_handle.set_enable_profiling(flag)
@property
def profiling_options(self):
return self._context_handle.get_profiling_options()
@profiling_options.setter
def profiling_options(self, option):
options = ["training_trace", "task_trace", "task_trace:training_trace", "training_trace:task_trace", "op_trace"]
if option not in options:
raise ValueError("Profiling options must be in 'training_trace' 'task_trace' "
"'task_trace:training_trace' 'training_trace:task_trace' or 'op_trace'.")
self._context_handle.set_profiling_options(option)
@property @property
def reserve_class_name_in_scope(self): def reserve_class_name_in_scope(self):
"""Gets whether to save the network class name in the scope.""" """Gets whether to save the network class name in the scope."""
@ -472,7 +491,7 @@ def reset_auto_parallel_context():
enable_mem_reuse=bool, save_ms_model=bool, save_ms_model_path=str, enable_mem_reuse=bool, save_ms_model=bool, save_ms_model_path=str,
enable_auto_mixed_precision=bool, enable_dump=bool, save_dump_path=str, enable_auto_mixed_precision=bool, enable_dump=bool, save_dump_path=str,
enable_reduce_precision=bool, graph_memory_max_size=str, enable_reduce_precision=bool, graph_memory_max_size=str,
variable_memory_max_size=str) variable_memory_max_size=str, enable_profiling=bool, profiling_options=str)
def set_context(**kwargs): def set_context(**kwargs):
""" """
Sets context for running environment. Sets context for running environment.
@ -515,6 +534,21 @@ def set_context(**kwargs):
So the real dump path is "{configured root dump path}/{`save_dump_path`}". Default: ".". So the real dump path is "{configured root dump path}/{`save_dump_path`}". Default: ".".
graph_memory_max_size (str): Sets graph memory max size. Default: "26GB". graph_memory_max_size (str): Sets graph memory max size. Default: "26GB".
variable_memory_max_size (str): Sets variable memory max size. Default: "5GB". variable_memory_max_size (str): Sets variable memory max size. Default: "5GB".
enable_profiling (bool): Whether to open profiling. Default: False.
profiling_options (str): Sets profiling collection options, operators can profiling data here.
Profiling collection options, the values are as follows, supporting the collection of multiple data.
- training_trace: collect iterative trajectory data, that is, the training task and software information of
the AI software stack, to achieve performance analysis of the training task, focusing on data
enhancement, forward and backward calculation, gradient aggregation update and other related data.
- task_trace: collect task trajectory data, that is, the hardware information of the HWTS/AICore of
the Ascend 910 processor, and analyze the information of start and end of the task.
- op_trace: collect single operator performance data.
The profiling can choose training_trace, task_trace, training_trace and task_trace combination and
separated by colons; single operator can choose op_trace, op_trace cannot be combined with
training_trace and task_trace. Default: "training_trace".
Raises: Raises:
ValueError: If input key is not an attribute in context. ValueError: If input key is not an attribute in context.
@ -536,6 +570,7 @@ def set_context(**kwargs):
>>> context.set_context(mode=context.GRAPH_MODE, >>> context.set_context(mode=context.GRAPH_MODE,
>>> device_target="Ascend",device_id=0, save_graphs=True, >>> device_target="Ascend",device_id=0, save_graphs=True,
>>> save_graphs_path="/mindspore") >>> save_graphs_path="/mindspore")
>>> context.set_context(enable_profiling=True, profiling_options="training_trace")
""" """
for key, value in kwargs.items(): for key, value in kwargs.items():
if not hasattr(_context(), key): if not hasattr(_context(), key):

View File

@ -16,6 +16,8 @@
import os import os
import pytest import pytest
from mindspore import context from mindspore import context
# pylint: disable=W0212 # pylint: disable=W0212
# W0212: protected-access # W0212: protected-access
@ -72,6 +74,34 @@ def test_dump_target():
assert context.get_context("save_dump_path") == "." assert context.get_context("save_dump_path") == "."
def test_enable_profiling():
""" test_profiling_mode """
with pytest.raises(TypeError):
context.set_context(enable_profiling=1)
with pytest.raises(TypeError):
context.set_context(enable_profiling="1")
context.set_context(enable_profiling=True)
assert context.get_context("enable_profiling") is True
context.set_context(enable_profiling=False)
assert context.get_context("enable_profiling") is False
def test_profiling_options():
""" test_profiling_options """
with pytest.raises(TypeError):
context.set_context(profiling_options=True)
with pytest.raises(TypeError):
context.set_context(profiling_options=1)
with pytest.raises(ValueError):
context.set_context(profiling_options="training_")
with pytest.raises(ValueError):
context.set_context(profiling_options="training_trace:op_trace")
context.set_context(profiling_options="training_trace")
assert context.get_context("profiling_options") == "training_trace"
context.set_context(profiling_options="training_trace:task_trace")
assert context.get_context("profiling_options") == "training_trace:task_trace"
def test_set_context(): def test_set_context():
""" test_set_context """ """ test_set_context """
context.set_context(mode=context.GRAPH_MODE, device_target="Ascend", context.set_context(mode=context.GRAPH_MODE, device_target="Ascend",
@ -101,4 +131,3 @@ def teardown_module():
os.rmdir(item_name) os.rmdir(item_name)
elif os.path.isfile(item_name): elif os.path.isfile(item_name):
os.remove(item_name) os.remove(item_name)