mindstudio-probe 1.2.2__py3-none-any.whl → 1.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-1.3.0.dist-info}/METADATA +3 -3
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-1.3.0.dist-info}/RECORD +143 -144
- msprobe/README.md +25 -20
- msprobe/core/common/const.py +110 -66
- msprobe/core/common/decorator.py +50 -0
- msprobe/core/common/exceptions.py +3 -1
- msprobe/core/common/file_utils.py +25 -2
- msprobe/core/common/utils.py +30 -34
- msprobe/core/compare/acc_compare.py +43 -74
- msprobe/core/compare/check.py +2 -6
- msprobe/core/compare/highlight.py +2 -0
- msprobe/core/compare/layer_mapping/layer_mapping.py +2 -1
- msprobe/core/compare/merge_result/merge_result.py +8 -2
- msprobe/core/compare/multiprocessing_compute.py +19 -12
- msprobe/core/compare/npy_compare.py +30 -12
- msprobe/core/compare/utils.py +20 -10
- msprobe/core/data_dump/api_registry.py +176 -0
- msprobe/core/data_dump/data_processor/base.py +2 -2
- msprobe/core/data_dump/data_processor/mindspore_processor.py +19 -32
- msprobe/core/data_dump/data_processor/pytorch_processor.py +45 -15
- msprobe/core/data_dump/json_writer.py +38 -35
- msprobe/core/grad_probe/constant.py +1 -0
- msprobe/core/grad_probe/grad_compare.py +1 -1
- msprobe/core/overflow_check/abnormal_scene.py +2 -0
- msprobe/docs/01.installation.md +2 -1
- msprobe/docs/02.config_introduction.md +17 -15
- msprobe/docs/05.data_dump_PyTorch.md +70 -2
- msprobe/docs/06.data_dump_MindSpore.md +33 -12
- msprobe/docs/07.accuracy_checker_PyTorch.md +11 -1
- msprobe/docs/08.accuracy_checker_online_PyTorch.md +3 -1
- msprobe/docs/09.accuracy_checker_MindSpore.md +1 -1
- msprobe/docs/10.accuracy_compare_PyTorch.md +59 -33
- msprobe/docs/11.accuracy_compare_MindSpore.md +40 -16
- msprobe/docs/12.overflow_check_PyTorch.md +3 -1
- msprobe/docs/13.overflow_check_MindSpore.md +4 -2
- msprobe/docs/14.data_parse_PyTorch.md +1 -7
- msprobe/docs/18.online_dispatch.md +1 -1
- msprobe/docs/19.monitor.md +124 -62
- msprobe/docs/21.visualization_PyTorch.md +32 -13
- msprobe/docs/22.visualization_MindSpore.md +32 -13
- msprobe/docs/23.generate_operator_PyTorch.md +9 -9
- msprobe/docs/27.dump_json_instruction.md +278 -8
- msprobe/docs/28.kernel_dump_MindSpore.md +1 -1
- msprobe/docs/29.data_dump_MSAdapter.md +229 -0
- msprobe/docs/30.overflow_check_MSAdapter.md +31 -0
- msprobe/docs/FAQ.md +3 -11
- msprobe/docs/img/compare_result.png +0 -0
- msprobe/docs/img/merge_result.png +0 -0
- msprobe/docs/img/visualization/vis_browser_1.png +0 -0
- msprobe/docs/img/visualization/vis_match_info.png +0 -0
- msprobe/docs/img/visualization/vis_precision_info.png +0 -0
- msprobe/docs/img/visualization/vis_search_info.png +0 -0
- msprobe/docs/img/visualization/vis_show_info.png +0 -0
- msprobe/docs/img/visualization/vis_showcase.png +0 -0
- msprobe/docs/img/visualization/vis_unmatch_info.png +0 -0
- msprobe/mindspore/__init__.py +4 -3
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +6 -1
- msprobe/mindspore/api_accuracy_checker/api_runner.py +19 -9
- msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +2 -1
- msprobe/mindspore/api_accuracy_checker/bench_functions/flash_attention_score.py +602 -0
- msprobe/mindspore/api_accuracy_checker/bench_functions/fusion_operator.py +41 -0
- msprobe/mindspore/api_accuracy_checker/data_manager.py +2 -1
- msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +2 -1
- msprobe/mindspore/api_accuracy_checker/torch_mindtorch_importer.py +2 -1
- msprobe/mindspore/common/const.py +61 -0
- msprobe/mindspore/common/utils.py +31 -19
- msprobe/mindspore/compare/ms_compare.py +27 -19
- msprobe/mindspore/compare/ms_graph_compare.py +6 -5
- msprobe/mindspore/debugger/debugger_config.py +6 -4
- msprobe/mindspore/debugger/precision_debugger.py +22 -10
- msprobe/mindspore/dump/dump_tool_factory.py +5 -3
- msprobe/mindspore/dump/hook_cell/api_register.py +142 -0
- msprobe/mindspore/dump/hook_cell/hook_cell.py +9 -10
- msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +24 -26
- msprobe/mindspore/dump/jit_dump.py +14 -9
- msprobe/mindspore/dym_loader/hook_dynamic_loader.cc +22 -56
- msprobe/mindspore/dym_loader/hook_dynamic_loader.h +0 -1
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +10 -6
- msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +4 -2
- msprobe/mindspore/free_benchmark/self_check_tool_factory.py +6 -3
- msprobe/mindspore/grad_probe/global_context.py +2 -0
- msprobe/mindspore/grad_probe/grad_analyzer.py +2 -1
- msprobe/mindspore/grad_probe/hook.py +2 -4
- msprobe/mindspore/monitor/distributed/wrap_distributed.py +1 -1
- msprobe/mindspore/monitor/module_hook.py +354 -302
- msprobe/mindspore/monitor/utils.py +46 -4
- msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +5 -3
- msprobe/mindspore/service.py +23 -17
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +3 -6
- msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +11 -6
- msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +2 -2
- msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +4 -5
- msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +5 -5
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +25 -6
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +28 -19
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +3 -1
- msprobe/pytorch/bench_functions/moe_gating_top_k_softmax.py +6 -0
- msprobe/pytorch/common/utils.py +29 -7
- msprobe/pytorch/debugger/precision_debugger.py +10 -1
- msprobe/pytorch/dump/module_dump/module_dump.py +4 -3
- msprobe/pytorch/dump/module_dump/module_processer.py +12 -6
- msprobe/pytorch/free_benchmark/common/utils.py +1 -1
- msprobe/pytorch/free_benchmark/compare/single_benchmark.py +1 -1
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +3 -3
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +3 -3
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +1 -1
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +1 -1
- msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +1 -1
- msprobe/pytorch/function_factory.py +1 -1
- msprobe/pytorch/grad_probe/grad_monitor.py +2 -2
- msprobe/pytorch/hook_module/api_register.py +131 -0
- msprobe/pytorch/hook_module/hook_module.py +19 -14
- msprobe/pytorch/hook_module/register_optimizer_hook.py +2 -1
- msprobe/pytorch/hook_module/support_wrap_ops.yaml +172 -75
- msprobe/pytorch/monitor/csv2tb.py +8 -2
- msprobe/pytorch/monitor/distributed/wrap_distributed.py +8 -2
- msprobe/pytorch/monitor/module_hook.py +131 -105
- msprobe/pytorch/monitor/module_metric.py +3 -0
- msprobe/pytorch/monitor/optimizer_collect.py +55 -4
- msprobe/pytorch/monitor/unittest/test_monitor.py +1 -1
- msprobe/pytorch/monitor/utils.py +68 -1
- msprobe/pytorch/online_dispatch/compare.py +0 -2
- msprobe/pytorch/online_dispatch/dispatch.py +9 -0
- msprobe/pytorch/online_dispatch/dump_compare.py +3 -0
- msprobe/pytorch/online_dispatch/utils.py +3 -0
- msprobe/pytorch/parse_tool/lib/interactive_cli.py +1 -6
- msprobe/pytorch/parse_tool/lib/utils.py +2 -1
- msprobe/pytorch/pt_config.py +11 -7
- msprobe/pytorch/service.py +11 -8
- msprobe/visualization/builder/graph_builder.py +44 -5
- msprobe/visualization/builder/msprobe_adapter.py +0 -1
- msprobe/visualization/compare/graph_comparator.py +42 -38
- msprobe/visualization/compare/mode_adapter.py +0 -19
- msprobe/visualization/graph/base_node.py +8 -1
- msprobe/visualization/graph/distributed_analyzer.py +1 -10
- msprobe/visualization/graph/graph.py +0 -11
- msprobe/visualization/graph/node_op.py +1 -2
- msprobe/visualization/graph_service.py +1 -1
- msprobe/visualization/utils.py +2 -33
- msprobe/mindspore/dump/hook_cell/api_registry.py +0 -207
- msprobe/mindspore/dump/hook_cell/wrap_api.py +0 -212
- msprobe/pytorch/hook_module/api_registry.py +0 -166
- msprobe/pytorch/hook_module/wrap_distributed.py +0 -79
- msprobe/pytorch/hook_module/wrap_functional.py +0 -66
- msprobe/pytorch/hook_module/wrap_npu_custom.py +0 -85
- msprobe/pytorch/hook_module/wrap_tensor.py +0 -69
- msprobe/pytorch/hook_module/wrap_torch.py +0 -84
- msprobe/pytorch/hook_module/wrap_vf.py +0 -60
- msprobe/pytorch/parse.py +0 -19
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-1.3.0.dist-info}/LICENSE +0 -0
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-1.3.0.dist-info}/WHEEL +0 -0
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-1.3.0.dist-info}/entry_points.txt +0 -0
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-1.3.0.dist-info}/top_level.txt +0 -0
|
@@ -35,17 +35,17 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
|
|
|
35
35
|
|
|
36
36
|
**完整参数说明**
|
|
37
37
|
|
|
38
|
-
| 参数名 | 说明
|
|
39
|
-
| --------------------
|
|
40
|
-
| -i或--input_path | 指定比对文件。比对文件内容及示例请参见[比对文件](#31-比对文件)或[比对文件(kernel)](#32-比对文件kernel)(比对文件(kernel)仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。
|
|
41
|
-
| -o或--output_path | 配置比对结果文件存盘目录,默认会在当前目录创建output目录。文件名称基于时间戳自动生成,格式为:<br> `compare_result_{timestamp}.xlsx`<br/> `compare_result_{rank_id}_{step_id}_{timestamp}.xlsx`(仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)
|
|
42
|
-
| -s或--stack_mode | 比对结果展示调用栈信息(NPU_Stack_Info)的开关,bool 类型。单卡场景开启时,需要使用[比对文件](#31-比对文件)的单卡场景配置stack_path指定stack.json文件,才能生成详细调用栈信息,否则在比对时会报错;暂不支持多卡场景。通过直接配置该参数开启,默认未配置,表示关闭。
|
|
43
|
-
| -c或--compare_only | 仅比对开关,bool 类型。该参数默认未配置,会启用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。通过配置该参数取消自动精度分析,仅输出比对结果表格。
|
|
44
|
-
| -f或--fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。
|
|
45
|
-
| -am或--api_mapping | 跨框架比对。配置该参数时表示开启跨框架API比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(api_mapping)](#33-自定义映射文件api_mapping)。仅[跨框架的API比对](#25-跨框架的api比对)场景需要配置。
|
|
46
|
-
| -cm或--cell_mapping | 跨框架比对。配置该参数时表示开启跨框架cell模块比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(cell_mapping)](#34-自定义映射文件cell_mapping)。仅[跨框架的cell模块比对](#26-跨框架的cell模块比对)场景需要配置。
|
|
47
|
-
| -dm或--data_mapping | 同框架或跨框架比对。通过映射文件指定两个具体参数的对应关系,可以在L0、L1或mix采集场景下使用。配置该参数的同时需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(data_mapping)](#35-自定义映射文件data_mapping)。
|
|
48
|
-
| -lm或--layer_mapping | 跨框架比对。配置该参数时表示开启跨框架Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer_mapping)](#36-自定义映射文件layer_mapping)。仅[跨框架的Layer层比对](#27-跨框架的layer层比对)场景需要配置。
|
|
38
|
+
| 参数名 | 说明 | 是否必选 |
|
|
39
|
+
| -------------------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
|
|
40
|
+
| -i或--input_path | 指定比对文件。比对文件内容及示例请参见[比对文件](#31-比对文件)或[比对文件(kernel)](#32-比对文件kernel)(比对文件(kernel)仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | 是 |
|
|
41
|
+
| -o或--output_path | 配置比对结果文件存盘目录,默认会在当前目录创建output目录。文件名称基于时间戳自动生成,格式为:<br> `compare_result_{timestamp}.xlsx`<br/> `compare_result_{rank_id}_{step_id}_{timestamp}.xlsx`(仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。<br>提示:output目录下与结果件同名文件将被删除覆盖。 | 否 |
|
|
42
|
+
| -s或--stack_mode | 比对结果展示调用栈信息(NPU_Stack_Info)的开关,bool 类型。单卡场景开启时,需要使用[比对文件](#31-比对文件)的单卡场景配置stack_path指定stack.json文件,才能生成详细调用栈信息,否则在比对时会报错;暂不支持多卡场景。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
|
|
43
|
+
| -c或--compare_only | 仅比对开关,bool 类型。该参数默认未配置,会启用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。通过配置该参数取消自动精度分析,仅输出比对结果表格。 | 否 |
|
|
44
|
+
| -f或--fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
|
|
45
|
+
| -am或--api_mapping | 跨框架比对。配置该参数时表示开启跨框架API比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(api_mapping)](#33-自定义映射文件api_mapping)。仅[跨框架的API比对](#25-跨框架的api比对)场景需要配置。 | 否 |
|
|
46
|
+
| -cm或--cell_mapping | 跨框架比对。配置该参数时表示开启跨框架cell模块比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(cell_mapping)](#34-自定义映射文件cell_mapping)。仅[跨框架的cell模块比对](#26-跨框架的cell模块比对)场景需要配置。 | 否 |
|
|
47
|
+
| -dm或--data_mapping | 同框架或跨框架比对。通过映射文件指定两个具体参数的对应关系,可以在L0、L1或mix采集场景下使用。配置该参数的同时需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(data_mapping)](#35-自定义映射文件data_mapping)。 | 否 |
|
|
48
|
+
| -lm或--layer_mapping | 跨框架比对。配置该参数时表示开启跨框架Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer_mapping)](#36-自定义映射文件layer_mapping)。仅[跨框架的Layer层比对](#27-跨框架的layer层比对)场景需要配置。 | 否 |
|
|
49
49
|
|
|
50
50
|
动态图模式没有填写任何mapping时,按照同框架比对的方式进行比对,比对数据和标杆数据的Cell或Api名称需要完全相同才能匹配得上。
|
|
51
51
|
|
|
@@ -187,6 +187,10 @@ layer_mapping可以从Layer层识别整网的API和Cell,简化配置。
|
|
|
187
187
|
|
|
188
188
|
本功能是将多卡比对场景的比对结果,进行通信算子数据提取和汇总,输出整理好的通信算子多卡比对精度表。
|
|
189
189
|
|
|
190
|
+
**使用场景**
|
|
191
|
+
|
|
192
|
+
已完成精度比对,获得多卡精度比对结果,但是通信算子数据分布在多个结果件中,不利于精度问题的分析。通过此功能,可以汇总多卡通信算子数据,减少问题定位时间。
|
|
193
|
+
|
|
190
194
|
**约束**
|
|
191
195
|
|
|
192
196
|
- 不支持MD5比对结果。
|
|
@@ -200,11 +204,11 @@ msprobe -f mindspore merge_result -i ./input_dir -o ./output_dir -config ./confi
|
|
|
200
204
|
|
|
201
205
|
**完整参数说明**
|
|
202
206
|
|
|
203
|
-
| 参数名 | 说明
|
|
204
|
-
| ----------------------
|
|
205
|
-
| -i 或 --input_dir | 多卡比对结果存盘目录,即使用compare比对的结果输出目录,str类型。所有比对结果应全部为真实数据比对结果或统计数据比对结果,否则可能导致汇总数据不完整。
|
|
206
|
-
| -o 或 --output_dir | 数据提取汇总结果存盘目录,str类型。文件名称基于时间戳自动生成,格式为:`multi_ranks_compare_merge_{timestamp}.xlsx
|
|
207
|
-
| -config或--config-path | 指定需要汇总数据的API和比对指标的yaml文件路径,str类型。<br>yaml文件详细介绍见下文“**yaml文件说明**”。
|
|
207
|
+
| 参数名 | 说明 | 是否必选 |
|
|
208
|
+
| ---------------------- |-------------------------------------------------------------------------------------------------------------------| -------- |
|
|
209
|
+
| -i 或 --input_dir | 多卡比对结果存盘目录,即使用compare比对的结果输出目录,str类型。所有比对结果应全部为真实数据比对结果或统计数据比对结果,否则可能导致汇总数据不完整。 | 是 |
|
|
210
|
+
| -o 或 --output_dir | 数据提取汇总结果存盘目录,str类型。文件名称基于时间戳自动生成,格式为:`multi_ranks_compare_merge_{timestamp}.xlsx`。<br>提示:output目录下与结果件同名文件将被删除覆盖。 | 是 |
|
|
211
|
+
| -config或--config-path | 指定需要汇总数据的API和比对指标的yaml文件路径,str类型。<br>yaml文件详细介绍见下文“**yaml文件说明**”。 | 是 |
|
|
208
212
|
|
|
209
213
|
**yaml文件说明**
|
|
210
214
|
|
|
@@ -235,6 +239,26 @@ compare_index:
|
|
|
235
239
|
2. rank*列为多卡数据。
|
|
236
240
|
3. 不同比对指标的数据通过不同sheet页呈现。
|
|
237
241
|
4. 如果一个API或module在某张卡上找不到数据,汇总结果中将空白呈现。
|
|
242
|
+
5. 如果比对指标值为N/A,unsupported,Nan,表示无法计算该比对指标值,汇总结果将以”NPU:’NPU max值‘ Bench:’Bench max值‘“呈现。
|
|
243
|
+
6. 针对图示案例,此处NPU:N/A Bench:N/A表示output为None。
|
|
244
|
+
|
|
245
|
+
<br>
|
|
246
|
+
如何基于group信息查看分组数据:
|
|
247
|
+
|
|
248
|
+
以Distributed.all_reduce.0.forward为例。这个API将多卡数据规约操作,输出为一个group内的规约结果,同一个group内的输出保持一致。<br>这个API中,rank0-3为一个group,Distributed.all_reduce.0.forward.input.group展示为tp-0-1-2-3,rank0-3输出一致;rank4-7为一个group,展示为tp-4-5-6-7,rank4-7输出一致。<br>group除了这种形式,还有如[0, 1, 2, 3]的呈现形式。
|
|
249
|
+
|
|
250
|
+
<br>
|
|
251
|
+
常见通信API预期结果:
|
|
252
|
+
|
|
253
|
+
1. Distributed.all_gather:多卡数据汇总,每张卡输入可以不一致,同group内输出一致,输出是张量列表。
|
|
254
|
+
2. Distributed.all_gather_into_tensor:多卡数据汇总,每张卡输入可以不一致,同group内输出一致,输出是张量。
|
|
255
|
+
3. Distributed.all_reduce:多卡数据规约操作,每张卡输入可以不一致,同group内输出一致,为规约结果。
|
|
256
|
+
4. Distributed.reduce_scatter:多卡数据规约操作,每张卡输入可以不一致,输出为group内规约结果的不同部分,输入是张量列表。
|
|
257
|
+
5. Distributed.reduce_scatter_tensor:多卡数据规约操作,每张卡输入可以不一致,输出为group内规约结果的不同部分,输入是张量。
|
|
258
|
+
6. Distributed.broadcast:输入为要广播的数据,输出为广播后的数据。
|
|
259
|
+
7. Distributed.isend:点对点通信,输入为要发送的数据,输出为发送的数据。
|
|
260
|
+
8. Distributed.irecv:点对点通信,输入为原数据,输出为接收的新数据。
|
|
261
|
+
9. Distributed.all_to_all_single:输出数据为所有卡上的数据切分后合并的结果。
|
|
238
262
|
|
|
239
263
|
## 4 附录
|
|
240
264
|
|
|
@@ -26,7 +26,9 @@ msprobe 工具在 PyTorch 场景下提供溢出数据采集功能和溢出数据
|
|
|
26
26
|
|
|
27
27
|
### 1.5 其他说明
|
|
28
28
|
|
|
29
|
-
溢出数据采集功能在昇腾 NPU
|
|
29
|
+
溢出数据采集功能在昇腾 NPU 上支持饱和模式(仅支持 Atlas 训练系列产品)和 INF/NAN 模式。
|
|
30
|
+
|
|
31
|
+
INF/NAN 模式遵循 IEEE 754 标准,根据定义输出 INF/NAN 的计算结果。与之对应的饱和模式在计算出现溢出时,饱和为浮点数极值(+-MAX)。对于 CANN 侧配置,Atlas 训练系列产品,默认为饱和模式,且不支持使用 INF/NAN 模式;Atlas A2 训练系列产品,默认为 INF/NAN 模式,且不建议使用饱和模式。
|
|
30
32
|
|
|
31
33
|
INF/NAN 模式的使能方式如下:
|
|
32
34
|
|
|
@@ -11,7 +11,7 @@ export INF_NAN_MODE_ENABLE=1
|
|
|
11
11
|
export MS_ASCEND_CHECK_OVERFLOW_MODE="INFNAN_MODE"
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
**a**:在处理浮点数计算溢出问题时,NPU 当前支持两种溢出模式:INF/NAN 模式与饱和模式。INF/NAN 模式遵循 IEEE 754 标准,根据定义输出 INF/NAN 的计算结果。与之对应的饱和模式在计算出现溢出时,饱和为浮点数极值(+-MAX)。对于 CANN 侧配置,Atlas
|
|
14
|
+
**a**:在处理浮点数计算溢出问题时,NPU 当前支持两种溢出模式:INF/NAN 模式与饱和模式。INF/NAN 模式遵循 IEEE 754 标准,根据定义输出 INF/NAN 的计算结果。与之对应的饱和模式在计算出现溢出时,饱和为浮点数极值(+-MAX)。对于 CANN 侧配置,Atlas 训练系列产品,默认为饱和模式,且不支持使用 INF/NAN 模式;Atlas A2训练系列产品,默认为 INF/NAN 模式,且不建议使用饱和模式。对于 MindSpore 框架侧配置,仅支持对 Atlas A2 训练系列产品进行设置,默认为 INF/NAN 模式。CANN 侧 与 MindSpore 框架侧配置须一致。
|
|
15
15
|
|
|
16
16
|
溢出检测任务的配置示例见[MindSpore 静态图场景下 task 配置为 overflow_check](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#23-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-overflow_check)、[MindSpore 动态图场景下 task 配置为 overflow_check](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#33-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-overflow_check)。
|
|
17
17
|
|
|
@@ -28,4 +28,6 @@ export MS_ASCEND_CHECK_OVERFLOW_MODE="INFNAN_MODE"
|
|
|
28
28
|
|
|
29
29
|
## 3 溢出检测结果文件介绍
|
|
30
30
|
|
|
31
|
-
溢出检测结果文件目录结构与含义与数据采集任务一致,但仅保存溢出 API 或 kernel 的真实数据或统计信息。详见MindSpore 场景的精度数据采集中的["**
|
|
31
|
+
溢出检测结果文件目录结构与含义与数据采集任务一致,但仅保存溢出 API 或 kernel 的真实数据或统计信息。详见MindSpore 场景的精度数据采集中的["**8. dump 结果文件介绍**"](./06.data_dump_MindSpore.md#8-dump-结果文件介绍)章节。
|
|
32
|
+
|
|
33
|
+
**说明**:在静态图 O2 编译等级下,若 MindSpore 版本为 2.4,或者 MindSpore 版本为 2.5,且未使用编包时添加了`--include-mod=adump`选项的 mindstudio-probe whl 包,则会产生 kernel_graph_overflow_check.json 中间文件,一般情况下无需关注。
|
|
@@ -26,13 +26,7 @@ Parse >>>
|
|
|
26
26
|
- 支持交互式指定 pkl 文件中 API 对应 dump 数据查看。
|
|
27
27
|
- 支持 API 进行可选层级比对和打印(统计级和像素级)。
|
|
28
28
|
|
|
29
|
-
Ctrl+C 可以退出 parse
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
msprobe -f pytorch parse
|
|
33
|
-
Parse >>> run vim cli.py
|
|
34
|
-
Parse >>> vim cli.py
|
|
35
|
-
```
|
|
29
|
+
Ctrl+C 可以退出 parse 交互式界面。
|
|
36
30
|
|
|
37
31
|
### 2.2 kernel 层级算子数据批量转换
|
|
38
32
|
|
|
@@ -70,7 +70,7 @@ PyTorch NPU在线精度比对是msprobe工具实现在PyTorch训练过程中直
|
|
|
70
70
|
| api_list | dump范围,dump_mode="list"时设置,需要Dump Aten Ir API名称,默认为None,Aten Ir API名称可以通过dir(torch.ops.aten)查看。 | 否 |
|
|
71
71
|
| dump_path| dump文件生成的路径。 | 是 |
|
|
72
72
|
| tag | 传入tag字符串,成为dump文件夹名一部分,默认为None。 | 否 |
|
|
73
|
-
| process_num | 多进程并发数,默认为0
|
|
73
|
+
| process_num | 多进程并发数,默认为0,最大不超过CPU核数的四分之一。 | 否 |
|
|
74
74
|
| debug | debug信息打印,默认为False。 | 否 |
|
|
75
75
|
### dump数据存盘说明
|
|
76
76
|
dump数据存盘目录名格式:`atat_tag_rankid_{timestamp}`。
|
msprobe/docs/19.monitor.md
CHANGED
|
@@ -16,20 +16,20 @@
|
|
|
16
16
|
下表中字段为训练状态轻量化监控工具的完整功能点:
|
|
17
17
|
|
|
18
18
|
| 功能 | 说明 | 支持场景 |
|
|
19
|
-
| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
|
19
|
+
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----------------- |
|
|
20
20
|
| [权重监控](#权重监控) | 开启权重监控 | PyTorch、MindSpore |
|
|
21
21
|
| [权重梯度监控](#权重梯度监控) | 开启权重梯度监控 | PyTorch、MindSpore |
|
|
22
22
|
| [激活值监控](#激活值监控) | 开启激活值监控 | PyTorch、MindSpore |
|
|
23
23
|
| [优化器状态监控](#优化器状态监控) | 开启优化器状态监控 | PyTorch、MindSpore |
|
|
24
24
|
| [指定监控对象](#指定监控对象) | 指定监控的nn.Module(nn.Cell)及对应的输入输出 | PyTorch、MindSpore |
|
|
25
|
-
| [打印模型结构](#打印模型结构) | 打印模型结构 | PyTorch
|
|
25
|
+
| [打印模型结构](#打印模型结构) | 打印模型结构 | PyTorch |
|
|
26
26
|
| [Module全量监控](#Module全量监控) | 对全量module的输入输出做监控 | PyTorch、MindSpore |
|
|
27
27
|
| [Parameter全量监控](#Parameter全量监控) | 对全量Parameter的输入输出做监控 | PyTorch、MindSpore |
|
|
28
28
|
| [输出格式和统计量](#输出格式和统计量) | format PyTorch支持`csv`、`tensorboard`和`api`,MindSpore仅支持`csv`,`ops`均支持,`ndigits`仅PyTorch支持 | PyTorch、MindSpore |
|
|
29
|
-
| [梯度异常时序判断](#梯度异常时序判断) | 梯度异常时自动梯度落盘 | PyTorch
|
|
30
|
-
| [csv格式数据转tensorboard可视化显示](#csv格式数据转tensorboard可视化显示) | 将csv转为tensorboard文件显示 | PyTorch
|
|
31
|
-
| [动态启停](#动态启停) | 训练过程中动态修改配置开启监控 | PyTorch
|
|
32
|
-
| [功能重载](#功能重载) | 训练中开启激活值监控。待废弃,请使用动态启停功能代替。 | PyTorch
|
|
29
|
+
| [梯度异常时序判断](#梯度异常时序判断) | 梯度异常时自动梯度落盘 | PyTorch |
|
|
30
|
+
| [csv格式数据转tensorboard可视化显示](#csv格式数据转tensorboard可视化显示) | 将csv转为tensorboard文件显示 | PyTorch |
|
|
31
|
+
| [动态启停](#动态启停) | 训练过程中动态修改配置开启监控 | PyTorch、MindSpore |
|
|
32
|
+
| [功能重载](#功能重载) | 训练中开启激活值监控。待废弃,请使用动态启停功能代替。 | PyTorch |
|
|
33
33
|
|
|
34
34
|
## 快速上手
|
|
35
35
|
根据需求监控相应对象。比如在loss上扬,grad norm正常的异常训练过程中,优先考虑监控模型前向过程;在grad norm异常的训练过程中,监控权重和激活值的梯度。
|
|
@@ -107,6 +107,37 @@ monitor.set_monitor(
|
|
|
107
107
|
)
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
+
请注意以下两点:
|
|
111
|
+
- Mindspore功能在1.2.2版本后支持, <1.2.2版本不支持
|
|
112
|
+
- 上述接口使用方式为1.2.2后更新的最新接口使用方式, <1.2.2版本的Pytorch旧接口使用方式为:
|
|
113
|
+
```Python
|
|
114
|
+
from msprobe.pytorch import TrainerMon
|
|
115
|
+
monitor = TrainerMon(
|
|
116
|
+
config_file_path="./monitor_config.json",
|
|
117
|
+
params_have_main_grad=True, # 权重是否使用main_grad,通常megatron为True,deepspeed为False。默认为True。
|
|
118
|
+
opt_ty=None # 优化器类型,默认为None,具体取值参考公开接口
|
|
119
|
+
)
|
|
120
|
+
monitor.set_wrapped_optimizer(optimizer)
|
|
121
|
+
# 挂载监控对象
|
|
122
|
+
monitor.monitor_gnorm_with_ad(
|
|
123
|
+
model,
|
|
124
|
+
grad_acc_steps=args.global_batch_size//args.data_parallel_size//args.micro_batch_size,
|
|
125
|
+
optimizer=optimizer,
|
|
126
|
+
dp_group=None,
|
|
127
|
+
tp_group=None,
|
|
128
|
+
start_iteration=0 # 断点续训时提供当前iteration,默认从0开始
|
|
129
|
+
)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
具体接口变更说明如下:
|
|
133
|
+
|
|
134
|
+
| 变更 | 说明 |
|
|
135
|
+
|-----------|-----------------------------------------------------------------------------------------------------------|
|
|
136
|
+
| 初始化接口统一精简 | TrainerMon.__init__(config_file_path, process_group=None, param_have_main_grad=True), 去除了需用户手动传入的opt_ty参数 |
|
|
137
|
+
| 主调接口修改 | 从monitor_gnorm_with_ad(...)改名为set_monitor(...), 且此时optimizer从可选项改为必传项 |
|
|
138
|
+
| 优化器包装接口废除 | set_wrapped_optimizer接口废除, optimizer传入由set_monitor主调完成 |
|
|
139
|
+
|
|
140
|
+
**其中老版接口目前仍能使用,但预计将在2026年废弃,请及时更新到最新版使用方式**
|
|
110
141
|
|
|
111
142
|
### 权重监控
|
|
112
143
|
- 工具配置示例:
|
|
@@ -380,14 +411,13 @@ python3 -m msprobe.pytorch.monitor.anomaly_analyse -d $MONITOR_OUTPUT_DIR/anomal
|
|
|
380
411
|
from msprobe.pytorch.monitor.csv2tb import csv2tensorboard_by_step
|
|
381
412
|
# 前三个参数用来指定需要转换的一批文件,指定monitor输出目录及一个时间范围,会对这个范围内的文件进行转换
|
|
382
413
|
# process_num指定拉起的进程个数,默认为1,更多的进程个数可以加速转换
|
|
383
|
-
# data_type_list
|
|
384
|
-
#
|
|
385
|
-
#
|
|
386
|
-
# output_dirpath可指定输出目录, 不传值时保存到"{curtime}_csv2tensorboard_by_step"文件夹,其中curtime为自动获取的当前时间戳
|
|
414
|
+
# data_type_list是一个列表,指定需要转换的数据类型,默认转换全部数据,数据类型应来自输出件文件前缀,所有类型数据:
|
|
415
|
+
# ["actv", "actv_grad", "exp_avg", "exp_avg_sq", "grad_unreduced", "grad_reduced", "param"]
|
|
416
|
+
# output_dirpath可指定输出目录,默认保存到"{curtime}_csv2tensorboard_by_step"文件夹,其中curtime为自动获取的当前时间戳
|
|
387
417
|
csv2tensorboard_by_step(
|
|
388
|
-
monitor_path="~/monitor_output",
|
|
389
|
-
time_start="Dec03_21-34-40",
|
|
390
|
-
time_end="Dec03_21-34-42",
|
|
418
|
+
monitor_path="~/monitor_output", # 必填
|
|
419
|
+
time_start="Dec03_21-34-40", # 必填
|
|
420
|
+
time_end="Dec03_21-34-42", # 必填
|
|
391
421
|
process_num=8,
|
|
392
422
|
data_type_list=["param"]
|
|
393
423
|
)
|
|
@@ -396,23 +426,32 @@ csv2tensorboard_by_step(
|
|
|
396
426
|
### 动态启停
|
|
397
427
|
动态启停模式:支持用户在训练过程中随时启动/更新监控。
|
|
398
428
|
|
|
399
|
-
|
|
429
|
+
用户可在训练开始前通过配置环境变量`DYNAMIC_MONITOR=True`来确认进入动态启停模式,该模式下需要配合config.json文件中的`dynamic_on`字段来使用。
|
|
400
430
|
|
|
401
431
|
在动态启停模式下,启动和停止分别由如下控制:
|
|
402
432
|
|
|
403
|
-
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
-
|
|
407
|
-
|
|
433
|
+
- **启动**:
|
|
434
|
+
- 首次监控:查看config.json文件中`dynamic_on`字段,若为`true`则在下一步开启监控。
|
|
435
|
+
- 非首次监控:查看config.json文件时间戳,若时间戳更新且config.json文件中`dynamic_on`字段为`true`则在下一步开启监控。
|
|
436
|
+
- **停止**:
|
|
437
|
+
到达`collect_times`之后自动停止并改config.json文件中`dynamic_on`字段为`false`,可再通过上述操作重启。
|
|
438
|
+
|
|
439
|
+
**注意事项:**:
|
|
408
440
|
|
|
409
|
-
|
|
441
|
+
- 默认监控启动皆统一在配置初始化或查询到更新后的下一步,即第n步挂上hook将在第n+1步启动采集,如需采集第0步数据请使用静态模式。
|
|
442
|
+
- config.json中途修改出错时,若此时不在监控则不生效,若在监控则用原配置继续。
|
|
443
|
+
- 达到`collect_times`之后程序会自动将该值置为`false`待下次改`true`重启。
|
|
410
444
|
|
|
411
|
-
|
|
445
|
+
**支持的使用场景说明如下:**
|
|
412
446
|
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
447
|
+
| 场景 | 监控模式 | 操作步骤 | 结果描述 |
|
|
448
|
+
|-----------------------------------------------|----|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
|
|
449
|
+
| 场景1: 使用默认静态模式 | 静态 | 1. 配置环境变量:`export DYNAMIC_MONITOR=False ` <br/>或不设置该环境变量 | 走默认分支进行数据采集和保存,不受config.json中`dynamic_on`影响 |
|
|
450
|
+
| 场景2: 进入动态启停模式,初始不启动监控 | 动态 | 1.配置环境变量:`export DYNAMIC_MONITOR=True` <br/> 2.配置config.json中`dynamic_on: false`或不设置该字段 | 初始状态下无监控,不进行数据采集和保存 |
|
|
451
|
+
| 场景3: 进入动态启停模式,初始即启动监控 | 动态 | 1.配置环境变量:`export DYNAMIC_MONITOR=True` <br/> 2.配置config.json中`dynamic_on: true` | 根据初始配置在第1步(初始计数为0)开启监控并保存,采集`collect_times`次数后结束监控 |
|
|
452
|
+
| 场景4: 进入动态启停模式,初始暂不启动监控,训练中途启动 | 动态 | 1.配置环境变量:`export DYNAMIC_MONITOR=True` <br/> 2.开始时配置config.json中`dynamic_on: false`或不设置该字段<br/>3.训练中途修改config.json中`dynamic_on: true` | 训练中途根据最新配置在下一步开启监控并保存,采集`collect_times`次数后结束监控 |
|
|
453
|
+
| 场景5: 进入动态启停模式,监控还未结束时中途修改config.json采集配置 | 动态 | 1.配置环境变量:`export DYNAMIC_MONITOR=True` <br/> 2.期间配置`dynamic_on: true`启动采集<br/>3.在采集还未达到`collect_times`次数前,中途修改config.json配置 | 更新前按旧配置采集并保存,更新后下一步以最新config.json采集且`collect_times`重新从0开始计数。此功能可配合中途`collect_times`改0来实现提前停止监控。
|
|
454
|
+
| 场景6: 进入动态启停模式,在根据`collect_times`结束监控后,需重新启动监控 | 动态 | 1.配置环境变量:`export DYNAMIC_MONITOR=True` <br/> 2.期间`dynamic_on: true`启动采集<br/>3.采集达到`collect_times`次数后结束监控,程序自动改`dynamic_on:false`<br/>4.配置config.json中`dynamic_on:true`重启监控 | 更新前按旧配置采集并保存,中途停止监控后无采集,重启后下一步以最新config.json重启采集且`collect_times`重新从0开始计数。
|
|
416
455
|
|
|
417
456
|
### 功能重载
|
|
418
457
|
此功能将在2026年废弃。请使用[动态启停](#动态启停)功能代替。
|
|
@@ -434,14 +473,16 @@ if {some condition}:
|
|
|
434
473
|
## 公开接口
|
|
435
474
|
- monitor工具初始化
|
|
436
475
|
```python
|
|
437
|
-
TrainerMon.__init__(config_file_path, process_group=None, params_have_main_grad=True) -> None
|
|
476
|
+
TrainerMon.__init__(config_file_path, process_group=None, params_have_main_grad=True, opt_ty=None) -> None
|
|
438
477
|
```
|
|
439
478
|
|
|
440
|
-
| 参数 | 说明
|
|
441
|
-
| ---------------------
|
|
442
|
-
| config_file_path | json配置文件路径。
|
|
443
|
-
| process_group | 传入ProcessGroup对象,用以确定pipeline并行不同rank异常间时序,megatron下通过core.parallel_state.get_pipeline_model_parallel_group()获得。仅在异常时序判断功能中使用。
|
|
444
|
-
| params_have_main_grad | 权重是否使用main_grad,通常megatron为True,deepspeed为False。默认为True。
|
|
479
|
+
| 参数 | 说明 | 是否必选 |
|
|
480
|
+
| --------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------|
|
|
481
|
+
| config_file_path | json配置文件路径。 | 是 |
|
|
482
|
+
| process_group | 传入ProcessGroup对象,用以确定pipeline并行不同rank异常间时序,megatron下通过core.parallel_state.get_pipeline_model_parallel_group()获得。仅在异常时序判断功能中使用。 | 否 |
|
|
483
|
+
| params_have_main_grad | 权重是否使用main_grad,通常megatron为True,deepspeed为False。默认为True。 | 否 |
|
|
484
|
+
| opt_ty | 优化器类型,默认为None。**该参数将在26年废除,只需在版本<msprobe1.2.2时传入**,值选项可为<br/>-Megatron_DistributedOptimizer:megatron分布式优化器;<br/>-Megatron_Float16OptimizerWithFloat16Params:megatron混合精度优化器;<br/>-Megatron_ChainedDistributedOptimizer:megatron分布式优化器序列;<br/>-Megatron_ChainedFloat16OptimizerWithFloat16Params:megatron混合精度优化器序列;<br/>-DeepSpeedZeroOptimizer_Stage1_or_2:DeepSpeed Zero1和Zero2;<br/>-DeepSpeedZeroOptimizer_Stage3:DeepSpeed Zero3。 | 否 |
|
|
485
|
+
|
|
445
486
|
|
|
446
487
|
- 模型挂载monitor工具
|
|
447
488
|
```python
|
|
@@ -451,7 +492,7 @@ TrainerMon.set_monitor(model, grad_acc_steps, optimizer, dp_group=None, tp_group
|
|
|
451
492
|
| --------------- | ------------------------------------------------------------ | -------- |
|
|
452
493
|
| model | 需要监控的模型,需要是一个torch.nn.Module或者mindspore.nn.Cell。 | 是 |
|
|
453
494
|
| grad_acc_steps | 梯度累积步数。 | 是 |
|
|
454
|
-
| optimizer | 需要patch的优化器。 |
|
|
495
|
+
| optimizer | 需要patch的优化器。 | 是 |
|
|
455
496
|
| dp_group | 数据并行的通信组。<br>dp域通信后,且没有使用分布式优化器时,group内所有rank的梯度相同,落盘数据冗余。<br>提供dp_group后,工具仅保留每个dp_group的第一个rank的梯度。 | 否 |
|
|
456
497
|
| tp_group | 张量并行的通信组。<br/>tp域通信后,group内部分参数所有rank的梯度相同,落盘数据冗余。<br/>提供tp_group后,工具仅保留每个tp_group中冗余参数在第一个rank的梯度。<br/>当前适配Megatron core_r0.6.0, 通过权重属性"tensor_model_parallel"判断是否冗余。 | 否 |
|
|
457
498
|
| start_iteration | 训练的起始iteration,影响工具计数。**仅PyTorch场景支持此参数**。 | 否 |
|
|
@@ -467,7 +508,7 @@ csv2tensorboard_by_step(monitor_path, time_start, time_end, process_num=1, data_
|
|
|
467
508
|
| time_end | 结束时间戳。搭配time_start一起使用。指定一个时间范围,会对这个范围内的文件进行转换。左闭右闭的区间。 | 是 |
|
|
468
509
|
| process_num | 指定拉起的进程个数,默认为1,更多的进程个数可以加速转换。 | 否 |
|
|
469
510
|
| data_type_list | 指定需要转换的数据类型, 数据类型应来自输出件文件前缀,所有类型数据:<br/> ["actv", "actv_grad", "exp_avg", "exp_avg_sq", "grad_unreduced", "grad_reduced", "param"]。<br/>不指定就转换全部数据。 | 否 |
|
|
470
|
-
|
|
511
|
+
| output_dirpath | 指定转换后的输出路径,默认输出到"{curtime}_csv2tensorboard_by_step"文件夹,其中curtime为自动获取的当前时间戳。 | 否 |
|
|
471
512
|
- 在模型任意位置获取当前参数**梯度**统计量
|
|
472
513
|
```python
|
|
473
514
|
TrainerMon.generate_wgrad_metrics() -> tuple[dict, dict]
|
|
@@ -486,6 +527,25 @@ TrainerMon.generate_xy_metrics() -> tuple[dict, dict]
|
|
|
486
527
|
actv, actv_grad = monitor.generate_xy_metrics()
|
|
487
528
|
```
|
|
488
529
|
|
|
530
|
+
- 老版接口说明, **将在26年废弃**:
|
|
531
|
+
```python
|
|
532
|
+
TrainerMon.set_wrapped_optimizer(optimizer) -> None
|
|
533
|
+
```
|
|
534
|
+
| 参数 | 说明 | 是否必选 |
|
|
535
|
+
|-----------|-------------------------------|------|
|
|
536
|
+
| optimizer | megatron、deepspeed创建好的混合精度优化器 | 是 |
|
|
537
|
+
|
|
538
|
+
```python
|
|
539
|
+
TrainerMon.monitor_gnorm_with_ad(model, grad_acc_steps, optimizer, dp_group, tp_group, start_iteration) -> None
|
|
540
|
+
```
|
|
541
|
+
| 参数 | 说明 | 是否必选 |
|
|
542
|
+
| --------------- | ------------------------------------------------------------ | -------- |
|
|
543
|
+
| model | 需要监控的模型,需要是一个torch.nn.Module或者mindspore.nn.Cell。 | 是 |
|
|
544
|
+
| grad_acc_steps | 梯度累积步数。 | 是 |
|
|
545
|
+
| optimizer | 需要patch的优化器。 | 否 |
|
|
546
|
+
| dp_group | 数据并行的通信组。<br>dp域通信后,且没有使用分布式优化器时,group内所有rank的梯度相同,落盘数据冗余。<br>提供dp_group后,工具仅保留每个dp_group的第一个rank的梯度。 | 否 |
|
|
547
|
+
| tp_group | 张量并行的通信组。<br/>tp域通信后,group内部分参数所有rank的梯度相同,落盘数据冗余。<br/>提供tp_group后,工具仅保留每个tp_group中冗余参数在第一个rank的梯度。<br/>当前适配Megatron core_r0.6.0, 通过权重属性"tensor_model_parallel"判断是否冗余。 | 否 |
|
|
548
|
+
| start_iteration | 训练的起始iteration,影响工具计数。**仅PyTorch场景支持此参数**。 | 否 |
|
|
489
549
|
|
|
490
550
|
|
|
491
551
|
## 详细配置
|
|
@@ -526,33 +586,35 @@ actv, actv_grad = monitor.generate_xy_metrics()
|
|
|
526
586
|
|
|
527
587
|
下面详细解释各个字段:
|
|
528
588
|
|
|
529
|
-
| 字段名字 | 是否必选 | 解释
|
|
530
|
-
| ----------------------- | --------
|
|
531
|
-
| "targets" | 可选 | 指定需要监控的模型层和监控对象, 例如transformer的第0层language_model.encoder.layers.0,可选择监控input、output、input_grad、output_grad。如果不清楚模型结构, 可以将 "print_struct" 字段设置为 true, 监控工具会打印模型中torch module的名字和详细结构,并在第1个step后退出。未配置时默认为全量监控。
|
|
532
|
-
| "input" | 可选 | "tuple[2]:0"的意思是目标module的前向input参数为长度为2的tuple, 我们关心的是tuple第0个元素。
|
|
533
|
-
| "output" | 必选 | "tensor"的意思是目标module的前向output参数类型为tensor
|
|
534
|
-
| "input_grad" | 可选 | "tuple[2]:0"的意思是目标module的后向input_grad参数是长度为2的tuple, 我们关心的是tuple的第0个元素。
|
|
535
|
-
| "output_grad" | 必选 | "tuple[1]:0"的意思是目标module的后向input_grad参数是长度为1的tuple, 我们关心的是tuple的第0个元素。
|
|
536
|
-
| "dynamic_on" | 可选 | 在动态启停时使用,true代表打开监控,false代表关闭监控,默认值为false,且达到collect_times之后会自动将该值置为false待下次改true
|
|
537
|
-
| "collect_times" | 可选 | 设置采集次数,达到该次数后停止监控,默认值为100000000,目的是一直采集。
|
|
538
|
-
| "start_step" | 可选 | 设置开始采集step,模型训练达到start_step后开始监控采集,默认值为0,表示从step0
|
|
539
|
-
| "step_interval" | 可选 | 设置采集step间隔,默认值为1,表示每个step均采集监控数据。
|
|
540
|
-
| "print_struct" | 可选 | 设置为true后监控工具会打印模型中torch module的名字和详细结构,并在第1个step后退出。不填默认为false。**仅PyTorch场景支持此参数**。
|
|
541
|
-
| "module_ranks" | 可选 | 用于在分布式训练场景中希望控制在哪些rank开启module监控。如果不填,则默认在所有rank开启。
|
|
542
|
-
| "ur_distribution" | 可选 | 若为true则会统计adam优化器指定模块(targets中指定)参数的update和ratio向量的数值分布,并展示在heatmap里,默认为false,同时format字段必须设置为tensorboard。<br/>依赖histc算子, 需要CANN8.0.rc2以上版本, 否则会有严重的性能问题。**仅PyTorch场景支持此参数**。
|
|
543
|
-
| "xy_distribution" | 可选 | 若为true则会监控指定module(targets中指定)的输入输出张量。 默认为false。
|
|
544
|
-
| "all_xy" | 可选 | 开启xy_distribution后生效,若为true,监控所有module。默认为false。<br/>与targets同时生效,all_xy配置为true时,若targets配置module_xx和指定对象,则module_xx按targets配置生效,其他module则监控全部对象,包含input、output、input_grad、output_grad。
|
|
545
|
-
| "forward_only" | 可选 | 开启xy_distribution后生效,若为true,仅监控指定module的前向,targets中的input_grad、output_grad不生效。默认为false。
|
|
546
|
-
| "backward_only" | 可选 | 开启xy_distribution后生效,若为true,仅监控指定module的反向,targets中的input、output不生效。默认为false。
|
|
547
|
-
| "mv_distribution" | 可选 | 若为true则会监控指定模块中的参数的优化器状态, 默认为false
|
|
548
|
-
| "wg_distribution" | 可选 | 若为true则会监控指定模块的参数梯度, 默认为false。
|
|
549
|
-
| "param_distribution" | 可选 | 若为true则会监控指定模块的参数, 默认为false。
|
|
550
|
-
| "alert" | 可选 | "rules": 指定自动报警的异常检测机制及其相应的阈值。目前实现的异常检测是AnomalyTurbulence, 如果统计标量超出历史均值的指定浮动范围(threshold 0.5意味着上浮或者下浮50%)则在控制台打印报警信息。当"dump"字段配置为true表示异常事件写入文件,默认为false。**仅PyTorch场景支持此参数**。
|
|
551
|
-
| "cc_distribution" | 可选 | 其中"enable"
|
|
552
|
-
| "
|
|
553
|
-
| "
|
|
554
|
-
| "
|
|
555
|
-
| "
|
|
556
|
-
| "
|
|
557
|
-
| "
|
|
558
|
-
| "
|
|
589
|
+
| 字段名字 | 是否必选 | 解释 |
|
|
590
|
+
| ----------------------- | -------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
591
|
+
| "targets" | 可选 | 指定需要监控的模型层和监控对象, 例如transformer的第0层language_model.encoder.layers.0,可选择监控input、output、input_grad、output_grad。如果不清楚模型结构, 可以将 "print_struct" 字段设置为 true, 监控工具会打印模型中torch module的名字和详细结构,并在第1个step后退出。未配置时默认为全量监控。 |
|
|
592
|
+
| "input" | 可选 | "tuple[2]:0"的意思是目标module的前向input参数为长度为2的tuple, 我们关心的是tuple第0个元素。 |
|
|
593
|
+
| "output" | 必选 | "tensor"的意思是目标module的前向output参数类型为tensor |
|
|
594
|
+
| "input_grad" | 可选 | "tuple[2]:0"的意思是目标module的后向input_grad参数是长度为2的tuple, 我们关心的是tuple的第0个元素。 |
|
|
595
|
+
| "output_grad" | 必选 | "tuple[1]:0"的意思是目标module的后向input_grad参数是长度为1的tuple, 我们关心的是tuple的第0个元素。 |
|
|
596
|
+
| "dynamic_on" | 可选 | 在动态启停时使用,true代表打开监控,false代表关闭监控,默认值为false,且达到collect_times之后会自动将该值置为false待下次改true重启。 |
|
|
597
|
+
| "collect_times" | 可选 | 设置采集次数,达到该次数后停止监控,默认值为100000000,目的是一直采集。 |
|
|
598
|
+
| "start_step" | 可选 | 设置开始采集step,模型训练达到start_step后开始监控采集,默认值为0,表示从step0开始监控采集。注:在动态启停模式下该设置不生效,只会从下一步开始监控采集。 |
|
|
599
|
+
| "step_interval" | 可选 | 设置采集step间隔,默认值为1,表示每个step均采集监控数据。 |
|
|
600
|
+
| "print_struct" | 可选 | 设置为true后监控工具会打印模型中torch module的名字和详细结构,并在第1个step后退出。不填默认为false。**仅PyTorch场景支持此参数**。 |
|
|
601
|
+
| "module_ranks" | 可选 | 用于在分布式训练场景中希望控制在哪些rank开启module监控。如果不填,则默认在所有rank开启。 列表内rank要求为int类型。 |
|
|
602
|
+
| "ur_distribution" | 可选 | 若为true则会统计adam优化器指定模块(targets中指定)参数的update和ratio向量的数值分布,并展示在heatmap里,默认为false,同时format字段必须设置为tensorboard。<br/>依赖histc算子, 需要CANN8.0.rc2以上版本, 否则会有严重的性能问题。**仅PyTorch场景支持此参数**。 |
|
|
603
|
+
| "xy_distribution" | 可选 | 若为true则会监控指定module(targets中指定)的输入输出张量。 默认为false。 |
|
|
604
|
+
| "all_xy" | 可选 | 开启xy_distribution后生效,若为true,监控所有module。默认为false。<br/>与targets同时生效,all_xy配置为true时,若targets配置module_xx和指定对象,则module_xx按targets配置生效,其他module则监控全部对象,包含input、output、input_grad、output_grad。 |
|
|
605
|
+
| "forward_only" | 可选 | 开启xy_distribution后生效,若为true,仅监控指定module的前向,targets中的input_grad、output_grad不生效。默认为false。 |
|
|
606
|
+
| "backward_only" | 可选 | 开启xy_distribution后生效,若为true,仅监控指定module的反向,targets中的input、output不生效。默认为false。 |
|
|
607
|
+
| "mv_distribution" | 可选 | 若为true则会监控指定模块中的参数的优化器状态, 默认为false。版本<msprobe1.2.2时需要在TrainerMon构造函数正确指定opt_ty。 |
|
|
608
|
+
| "wg_distribution" | 可选 | 若为true则会监控指定模块的参数梯度, 默认为false。 |
|
|
609
|
+
| "param_distribution" | 可选 | 若为true则会监控指定模块的参数, 默认为false。 |
|
|
610
|
+
| "alert" | 可选 | "rules": 指定自动报警的异常检测机制及其相应的阈值。目前实现的异常检测是AnomalyTurbulence, 如果统计标量超出历史均值的指定浮动范围(threshold 0.5意味着上浮或者下浮50%)则在控制台打印报警信息。当"dump"字段配置为true表示异常事件写入文件,默认为false。**仅PyTorch场景支持此参数**。 |
|
|
611
|
+
| "cc_distribution" | 可选 | 其中"enable"字段控制通信监控模块的开关,仅支持在多卡训练时开启;需要监控通信算子时,务必尽量早地实例化`TrainerMon`, 因为监控通过劫持原始func后挂hook实现,部分加速库初始化时会保存原始function,避免监控失效。"cc_codeline"字段指定监控的代码行,如:`train.py\\[23\\]`,默认为空列表,不特别指定;"cc_pre_hook"字段控制是否监控通输入; 模块会在第二个optimize.step之前打印通信日志,包括通信api的调用栈、输入dtype、通信group。 "cc_log_only"为true时,仅打印日志,不监控通信的输入输出,并在打印后中断训练。可以根据通信日志设置"cc_codeline",规避与训练过程不相关的通信,比如一些时间、metrics的同步。 |
|
|
612
|
+
| "mg_direction" | 可选 | 若为true则会计算权重梯度和动量方向一致的比例,默认为false。 |
|
|
613
|
+
| "format" | 可选 | 数据落盘格式,默认值为"csv",可选 \["csv", "tensorboard", "api"\]。仅PyThon和MindSpore动态图场景支持此参数,且MindSpore动态图场景仅支持\["csv"\]。 |
|
|
614
|
+
| "ops" | 可选 | 类型为list,与ur_distribution、xy_distribution、mv_distribution、wg_distribution、mg_direction、cc_distribution配合,监控所选张量的统计指标,目前支持"min"、"max"、"norm"、"mean"、"zeros"、"nans"。其中,zeros代表监控所选张量的元素小于eps的比例,nans代表张量中nan的数量。当ops中无有效指标时,默认监控norm指标。 |
|
|
615
|
+
| "eps" | 可选 | 若ops里包含"zeros"则需要配置,默认为1e-8。 |
|
|
616
|
+
| "ndigits" | 可选 | "format"为"csv"时,设置落盘文件中的小数位数,默认为6。**仅PyTorch场景支持此参数**。 |
|
|
617
|
+
| "step_count_per_record" | 可选 | "format"为"csv"时生效,每个csv记录多少个step的数据,默认为1。 |
|
|
618
|
+
| "append_output" | 可选 | 适用于断点续训场景。多卡场景下生效,指定两个时间戳,将输出续写到这两个时间戳范围间的输出件中,不在范围内的rank不被续写。时间戳应来自原有输出件目录前缀,例如["Dec03_21-34-40", "Dec03_21-34-41"]。默认为[],不续写。**仅PyTorch场景支持此参数**。 |
|
|
619
|
+
| "squash_name" | 可选 | 是否简化参数名/模块名,多模态场景建议关闭,默认为True |
|
|
620
|
+
|
|
@@ -4,20 +4,32 @@
|
|
|
4
4
|
|
|
5
5
|
工具支持PyTorch版本:2.1/2.2
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## 更新通知
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
请注意,tb_graph_ascend插件已于2025/3/12更新到1.0.0版本,如果当前环境已安装旧版本插件,推荐升级。
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
更新内容如下:
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
- 优化了信息栏,使用了更人性化、更美观的展示界面;
|
|
14
|
+
- 提升了节点渲染和搜索性能;
|
|
15
|
+
- 双图比对场景画布分离,操作左图时不会影响到右图;
|
|
16
|
+
- 新增浏览器匹配节点功能,双图比对场景有未匹配节点时,可通过在浏览器页面手动选中调试侧和标杆侧的未匹配节点进行精度比对;
|
|
17
|
+
- 新增颜色图例可配置功能。
|
|
18
|
+
|
|
19
|
+
## 工具特性
|
|
20
|
+
|
|
21
|
+
- 支持重建模型的层级结构;
|
|
22
|
+
- 支持两个模型的结构差异比对;
|
|
23
|
+
- 支持两个模型的精度数据比对;
|
|
24
|
+
- 支持模型数据的溢出检测;
|
|
25
|
+
- 支持多卡场景的批量构图,能够关联各卡的通信节点,分析各卡之间的数据传递;
|
|
26
|
+
- 支持节点名称搜索,按精度比对结果筛选节点,按溢出检测结果筛选节点,支持自动跳转展开节点所在的层级;
|
|
27
|
+
- 支持跨套件、跨框架的模型比对。
|
|
14
28
|
|
|
15
29
|

|
|
16
30
|
|
|
17
31
|
## 1.依赖安装
|
|
18
32
|
|
|
19
|
-
分级可视化工具依赖**msprobe工具**和**tensorboard。**
|
|
20
|
-
|
|
21
33
|
### 1.1 安装msprobe工具
|
|
22
34
|
|
|
23
35
|
[msprobe工具安装](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/01.installation.md)
|
|
@@ -28,6 +40,8 @@
|
|
|
28
40
|
|
|
29
41
|
``pip3 install tb-graph-ascend``即可。
|
|
30
42
|
|
|
43
|
+
如需升级工具,请先``pip3 uninstall tb-graph-ascend``再``pip3 install tb-graph-ascend``即可。
|
|
44
|
+
|
|
31
45
|
## 2.模型结构数据采集
|
|
32
46
|
[PyTorch场景的数据采集](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/05.data_dump_PyTorch.md)
|
|
33
47
|
|
|
@@ -357,15 +371,16 @@ tensorboard --logdir out_path
|
|
|
357
371
|

|
|
358
372
|
|
|
359
373
|
### 5.5 未匹配节点筛选
|
|
360
|
-
节点匹配规则:
|
|
361
374
|
|
|
362
|
-
|
|
375
|
+
参考[匹配说明](#311-匹配说明) ,不符合匹配规则的节点为无匹配节点,颜色标灰。适用于排查两个模型结构差异的场景。
|
|
363
376
|
|
|
364
|
-
|
|
377
|
+

|
|
365
378
|
|
|
366
|
-
|
|
379
|
+
### 5.6 手动选择节点匹配
|
|
367
380
|
|
|
368
|
-
|
|
381
|
+
可通过浏览器界面,通过鼠标选择两个待匹配的灰色节点进行匹配。当前暂不支持真实数据模式。
|
|
382
|
+
|
|
383
|
+

|
|
369
384
|
|
|
370
385
|
## 6.图比对说明
|
|
371
386
|
|
|
@@ -472,5 +487,9 @@ yaml文件中只需配置待调试侧与标杆侧模型代码中功能一致但
|
|
|
472
487
|
节点呈现灰色,代表左边待调试侧节点与右边标杆侧节点没有匹配上,可能有以下几点原因:
|
|
473
488
|
|
|
474
489
|
- **标杆侧确实没有能与待调试侧匹配上的节点**,属于代码实现上的差异,请确认此差异是否正常,是否会影响到整网精度。
|
|
475
|
-
-
|
|
476
|
-
-
|
|
490
|
+
- **节点名称一致,但节点的输入或输出type、shape不一致,参数个数不一致,节点所在层级的父层级不一致,导致节点无法匹配**
|
|
491
|
+
- 具体匹配规则见[匹配说明](#311-匹配说明),可尝试使用模糊匹配功能,如何使用此功能请参考[构图命令行说明](#31-构图命令行说明);
|
|
492
|
+
- 如果是参数shape不一致,即使是模糊匹配功能也无法让节点匹配上,请检查参数shape不一致是否合理。
|
|
493
|
+
- **节点名称不一致**,导致节点无法匹配,目前提供两种方法,选其一即可
|
|
494
|
+
- 可使用layer mapping功能,如何使用此功能请参考[构图命令行说明](#31-构图命令行说明),如何自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md);
|
|
495
|
+
- 可通过浏览器页面手动选择未匹配节点进行匹配,请参考[手动选择节点匹配](#56-手动选择节点匹配)。
|