mindspore.context MindSpore上下文,用于配置当前执行环境,包括执行模式、执行后端和其他特性开关。 get_context(attr_key) 根据输入key获取上下文中的属性值。 如果某些属性没有设置,则会自动获取这些属性。 参数: attr_key (str):属性的key。 返回: Object,表示给定属性key的值。 异常: ValueError:输入key不是上下文中的属性。 样例: >>> context.get_context("device_target") >>> context.get_context("device_id") set_context(**kwargs) 设置运行环境的上下文。 在运行程序之前,应配置上下文。如果没有配置,默认情况下将根据设备目标进行自动设置。 注: 设置属性时,必须输入属性名称。 初始化网络后不建议更改模式,因为某些操作在图模式和PyNative模式下是不同的。默认值:GRAPH_MODE。 某些配置适用于特定的设备,有关详细信息,请参见下表: +-------------------------+------------------------------+----------------------------+ | 功能分类 | 配置参数 | 硬件平台支持| +=========================+==============================+============================+ | 系统配置 | device_id | CPU/GPU/Ascend | | +------------------------------+----------------------------+ | | device_target | CPU/GPU/Ascend | | +------------------------------+----------------------------+ | | max_device_memory | GPU | | +------------------------------+----------------------------+ | | variable_memory_max_size | Ascend | +-------------------------+------------------------------+----------------------------+ | 调试配置 | save_graphs | CPU/GPU/Ascend | | +------------------------------+----------------------------+ | | save_graphs_path | CPU/GPU/Ascend | | +------------------------------+----------------------------+ | | enable_dump | Ascend | | +------------------------------+----------------------------+ | | save_dump_path | Ascend | | +------------------------------+----------------------------+ | | enable_profiling | Ascend | | +------------------------------+----------------------------+ | | profiling_options | Ascend | | +------------------------------+----------------------------+ | | print_file_path | Ascend | | +------------------------------+----------------------------+ | | env_config_path | CPU/GPU/Ascend | | +------------------------------+----------------------------+ | | precompile_only | CPU/GPU/Ascend | | +------------------------------+----------------------------+ | | reserve_class_name_in_scope | CPU/GPU/Ascend | | +------------------------------+----------------------------+ | | pynative_synchronize | GPU/Ascend | +-------------------------+------------------------------+----------------------------+ | 执行控制 | mode | CPU/GPU/Ascend | | +------------------------------+----------------------------+ | | enable_graph_kernel | Ascend/GPU | | +------------------------------+----------------------------+ | | graph_kernel_flags | Ascend/GPU | | +------------------------------+----------------------------+ | | enable_reduce_precision | Ascend | | +------------------------------+----------------------------+ | | auto_tune_mode | Ascend | | +------------------------------+----------------------------+ | | check_bprop | CPU/GPU/Ascend | | +------------------------------+----------------------------+ | | max_call_depth | CPU/GPU/Ascend | | +------------------------------+----------------------------+ | | enable_sparse | CPU/GPU/Ascend | | +------------------------------+----------------------------+ | | grad_for_scalar | CPU/GPU/Ascend | | +------------------------------+----------------------------+ | | save_compile_cache | CPU/GPU/Ascend | | +------------------------------+----------------------------+ | | load_compile_cache | CPU/GPU/Ascend | +-------------------------+------------------------------+----------------------------+ 参数: device_id (int):表示目标设备的ID,其值必须在[0, device_num_per_host-1]范围中,且device_num_per_host的值不应超过4096。默认值:0。 device_target (str):表示待运行的目标设备,支持Ascend、GPU和CPU。 如果未设置设备目标,则使用MindSpore包的版本。 max_device_memory (str):设置设备可用的最大内存。 目前,仅在GPU上支持。格式为“xxGB”。默认值:1024GB。 实际使用的内存大小是设备的可用内存和max_device_memory值中的最小值。 variable_memory_max_size (str):设置可变内存的最大值。默认值:30GB。 设置此参数后,框架使用的最大内存受配置值的限制。 save_graphs (bool):表示是否保存图形。默认值:False。 当`save_graphs`属性设为True时,`save_graphs_path`属性用于设置中间编译图的存储路径。默认情况下,图形保存在当前目录下。 save_graphs_path (str):表示保存图形的路径。默认值:"."。 如果指定的目录不存在,系统将自动创建该目录。 在分布式训练中,图形将被保存到`save_graphs_path/rank_${rank_id}/`目录下。`rank_id`为集群中当前设备的ID。 enable_dump (bool):此参数已弃用,将在下一版本中删除。 save_dump_path (str):此参数已弃用,将在下一版本中删除。 enable_profiling (bool):此参数已弃用,将在下一版本中删除。 请使用mindspore.profiler.Profiler API。 profiling_options (str):此参数已弃用,将在下一版本中删除。 请使用mindspore.profiler.Profiler API。 print_file_path (str):表示用于保存打印数据的路径。如果设置了该参数,默认将打印数据保存到文件中。如果不设置print_file_path,则显示该屏幕。 如果保存的文件已经存在,将添加时间戳后缀到文件中。将数据保存到文件中,解决了在产生大量数据时屏幕打印中数据丢失的问题。 如果没有设置该参数,则会报错:prompt to set the upper absolute path。 env_config_path (str):通过context.set_context(env_config_path="./mindspore_config.json")来配置DFX的路径。 配置Running Data Recorder: - enable:表示在发生故障时是否启用Running Data Recorder去收集和保存训练中的关键数据。设置为True时,将打开Running Data Recorder。 设置为False时,将关闭Running Data Recorder。 - path:设置Running Data Recorder保存数据的路径。当前路径必须是一个绝对路径。 内存重用: - mem_Reuse:表示内存复用功能是否打开。设置为True时,将打开内存复用功能。设置为False时,将关闭内存复用功能。 precompile_only (bool):表示是否仅预编译网络。默认值:False。 设置为True时,仅编译网络,而不执行网络。 reserve_class_name_in_scope (bool):表示是否将网络类名称保存到所属作用域中。默认值:True。 每个节点都有一个作用域。子节点的作用域是其父节点。如果reserve_class_name_in_scope设置为True,则类名将保存在作用域中的关键字“net-”之后。 例如: Default/net-Net1/net-Net2 (reserve_class_name_in_scope=True) Default/net/net (reserve_class_name_in_scope=False) pynative_synchronize (bool):表示是否在PyNative模式下启动设备同步执行。 默认值:False。设置为False时,将在设备上异步执行算子。 当算子执行出错时,将无法定位特定错误脚本代码的位置。当设置为True时,将在设备上同步执行算子。这将降低程序的执行性能。此时,当算子执行出错时,可以根据错误的调用栈来定位错误脚本代码的位置。 mode (int):表示在GRAPH_MODE(0)或PYNATIVE_MODE(1)模式中的运行。默认值:GRAPH_MODE(0)。 GRAPH_MODE或PYNATIVE_MODE可以通过`mode`属性设置,两种模式都支持所有后端。默认模式为GRAPH_MODE。 enable_graph_kernel (bool):表示是否启用图算融合去优化网络执行性能。 默认值:False。 表示是否启用图算融合去优化网络执行性能。 如果enable_graph_kernel设置为True,则可以启用加速。 有关图算融合的详细信息,请查看`使能图算融合`(https://www.mindspore.cn/docs/programming_guide/zh-CN/master/enable_graph_kernel_fusion.html)。 graph_kernel_flags (str) – 图算融合的优化选项,当与enable_graph_kernel冲突时,它的优先级更高。其仅适用于有经验的用户。 例如,context.set_context(graph_kernel_flags="--opt_level=2 --dump_as_text")。一些常用选项: - opt_level:设置优化级别。 默认值:2。当opt_level的值大于0时,启动图算融合。 可选值包括: - 0:关闭图算融合。 - 1:启动算子的基本融合。 - 2:包括级别1的所有优化,并打开更多的优化,如CSE优化算法、算术简化等。 - 3:包括级别2的所有优化,并打开更多的优化,如SitchingFusion、ParallelFusion等。 在某些场景下,该级别的优化激进且不稳定。使用此级别时要小心。 - dump_as_text:将详细信息转储为文本文件。默认值:False。 有关更多选项,可以参考实现代码。这些选项也可以通过环境变量MS_GRAPH_KERNEL_FLAGS设置,而无需修改网络源代码。 例如,导出MS_GRAPH_KERNEL_FLAGS="--opt_level=2 --dump_as_text"。 enable_reduce_precision (bool):表示是否开启降低精度计算。默认值:True。 设置为True时,不支持用户指定的精度,且精度将自动更改。 设置为False时,如果未指定用例的精度,则会报错并退出。 auto_tune_mode (str):表示算子构建时的自动调整模式,以获得最佳的切分性能。 默认值:NO_TUNE。其值必须在【'RL', 'GA', 'RL,GA'】范围中。 - RL:强化学习调优。 - GA:遗传算法调优。 - RL,GA:当RL和GA优化同时打开时,工具会根据网络模型中的不同算子类型自动选择RL或GA。RL和GA的顺序没有区别。 (自动选择)。 有关启用算子调优工具设置的更多信息,请查看`使能算子调优工具`(https://www.mindspore.cn/docs/programming_guide/zh-CN/master/enable_auto_tune.html)。 check_bprop (bool):表示是否检查反向传播节点,以确保反向传播节点输出的形状(shape)和数据类型与输入参数相同。默认值:False。 max_call_depth (int):指定函数调用的最大深度。其值必须为正整数。默认值:1000。 当嵌套Cell太深或子图数量太多时,需要设置max_call_depth参数。如果max_call_depth的值比以前的大,则应把系统最大堆栈深度设得更大,否则可能会因为系统堆栈溢出而引发`core dumped`异常。 enable_sparse (bool):表示是否启用稀疏特征。默认值:False。 有关稀疏特征和稀疏张量的详细信息,请查看`稀疏张量`(https://www.mindspore.cn/docs/programming_guide/zh-CN/master/tensor.html#sparse-tensor)。 grad_for_scalar (bool): 表示是否获取标量梯度。默认值:False。 当grad_for_scalar设置为True时,则衍生函数的标量输入。 默认值为False。由于后端目前不支持伸缩操作,所以该接口只支持在前端可推演的简单操作。 enable_compile_cache (bool):表示是否加载或者保存前端编译的图。当enable_compile_cache被设置为True时,在第一次执行的过程中,一个硬件无关的编译缓存会被生成并且导出为一个MINDIR文件。 当该网络被再次执行时,如果enable_compile_cache仍然为True并且网络脚本没有被更改,那么这个编译缓存会被加载。注意目前只支持有限的Python脚本更改的自动检测,这意味着可能有正确性风险。默认值:False。 这是一个实验原型,可能会被更改或者删除。 compile_cache_path (str):保存前端图编译缓存的路径。默认值:"."。如果目录不存在,系统会自动创建这个目录。缓存会被保存到如下目录:`compile_cache_path/rank_${rank_id}/`。 `rank_id`是集群上当前设备的ID。 异常: ValueError:输入key不是上下文中的属性。 样例: >>> context.set_context(mode=context.PYNATIVE_MODE) >>> context.set_context(precompile_only=True) >>> context.set_context(device_target="Ascend") >>> context.set_context(device_id=0) >>> context.set_context(save_graphs=True, save_graphs_path="./model.ms") >>> context.set_context(enable_reduce_precision=True) >>> context.set_context(enable_dump=True, save_dump_path=".") >>> context.set_context(enable_graph_kernel=True) >>> context.set_context(graph_kernel_flags="--opt_level=2 --dump_as_text") >>> context.set_context(reserve_class_name_in_scope=True) >>> context.set_context(variable_memory_max_size="6GB") >>> context.set_context(enable_profiling=True, ... profiling_options='{"output":"/home/data/output","training_trace":"on"}') >>> context.set_context(check_bprop=True) >>> context.set_context(max_device_memory="3.5GB") >>> context.set_context(print_file_path="print.pb") >>> context.set_context(enable_sparse=True) >>> context.set_context(max_call_depth=80) >>> context.set_context(env_config_path="./env_config.json") >>> context.set_context(auto_tune_mode="GA,RL") >>> context.set_context(grad_for_scalar=True) >>> context.set_context(save_compile_cache=True) >>> context.set_context(load_compile_cache=True) >>> context.set_context(pynative_synchronize=True)