mindstudio-probe 1.2.2__py3-none-any.whl → 8.1.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-8.1.0.dist-info}/METADATA +4 -3
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/RECORD +243 -191
- msprobe/README.md +57 -21
- msprobe/core/__init__.py +17 -0
- msprobe/core/common/const.py +224 -82
- msprobe/core/common/decorator.py +50 -0
- msprobe/core/common/exceptions.py +5 -3
- msprobe/core/common/file_utils.py +274 -40
- msprobe/core/common/framework_adapter.py +169 -0
- msprobe/core/common/global_lock.py +86 -0
- msprobe/core/common/runtime.py +25 -0
- msprobe/core/common/utils.py +148 -72
- msprobe/core/common_config.py +7 -0
- msprobe/core/compare/acc_compare.py +640 -462
- msprobe/core/compare/check.py +36 -107
- msprobe/core/compare/compare_cli.py +4 -0
- msprobe/core/compare/config.py +72 -0
- msprobe/core/compare/highlight.py +217 -215
- msprobe/core/compare/layer_mapping/layer_mapping.py +4 -1
- msprobe/core/compare/merge_result/merge_result.py +12 -6
- msprobe/core/compare/multiprocessing_compute.py +227 -107
- msprobe/core/compare/npy_compare.py +32 -16
- msprobe/core/compare/utils.py +218 -244
- msprobe/{mindspore/runtime.py → core/config_check/__init__.py} +2 -4
- msprobe/{pytorch/dump/kernel_dump/kernel_config.py → core/config_check/checkers/__init__.py} +8 -16
- msprobe/core/config_check/checkers/base_checker.py +60 -0
- msprobe/core/config_check/checkers/dataset_checker.py +138 -0
- msprobe/core/config_check/checkers/env_args_checker.py +96 -0
- msprobe/core/config_check/checkers/hyperparameter_checker.py +170 -0
- msprobe/core/config_check/checkers/pip_checker.py +90 -0
- msprobe/core/config_check/checkers/random_checker.py +367 -0
- msprobe/core/config_check/checkers/weights_checker.py +147 -0
- msprobe/core/config_check/ckpt_compare/ckpt_comparator.py +74 -0
- msprobe/core/config_check/ckpt_compare/megatron_loader.py +302 -0
- msprobe/core/config_check/ckpt_compare/metrics.py +83 -0
- msprobe/core/config_check/ckpt_compare/name_mapping.yaml +12 -0
- msprobe/core/config_check/config_check_cli.py +51 -0
- msprobe/core/config_check/config_checker.py +100 -0
- msprobe/{pytorch/parse.py → core/config_check/resource/dependency.yaml} +7 -4
- msprobe/core/config_check/resource/env.yaml +57 -0
- msprobe/core/config_check/resource/hyperparameter.yaml +21 -0
- msprobe/core/config_check/utils/hyperparameter_parser.py +115 -0
- msprobe/core/config_check/utils/utils.py +107 -0
- msprobe/core/data_dump/api_registry.py +239 -0
- msprobe/core/data_dump/data_collector.py +36 -9
- msprobe/core/data_dump/data_processor/base.py +74 -53
- msprobe/core/data_dump/data_processor/mindspore_processor.py +119 -78
- msprobe/core/data_dump/data_processor/pytorch_processor.py +134 -96
- msprobe/core/data_dump/json_writer.py +146 -57
- msprobe/core/debugger/precision_debugger.py +143 -0
- msprobe/core/grad_probe/constant.py +2 -1
- msprobe/core/grad_probe/grad_compare.py +2 -2
- msprobe/core/grad_probe/utils.py +1 -1
- msprobe/core/hook_manager.py +242 -0
- msprobe/core/monitor/anomaly_processor.py +384 -0
- msprobe/core/overflow_check/abnormal_scene.py +2 -0
- msprobe/core/service.py +356 -0
- msprobe/core/single_save/__init__.py +0 -0
- msprobe/core/single_save/single_comparator.py +243 -0
- msprobe/core/single_save/single_saver.py +157 -0
- msprobe/docs/01.installation.md +6 -5
- msprobe/docs/02.config_introduction.md +89 -30
- msprobe/docs/03.config_examples.md +1 -0
- msprobe/docs/04.kernel_dump_PyTorch.md +1 -1
- msprobe/docs/05.data_dump_PyTorch.md +184 -50
- msprobe/docs/06.data_dump_MindSpore.md +193 -28
- msprobe/docs/07.accuracy_checker_PyTorch.md +13 -3
- msprobe/docs/08.accuracy_checker_online_PyTorch.md +72 -10
- msprobe/docs/09.accuracy_checker_MindSpore.md +19 -7
- msprobe/docs/10.accuracy_compare_PyTorch.md +266 -102
- msprobe/docs/11.accuracy_compare_MindSpore.md +117 -43
- msprobe/docs/12.overflow_check_PyTorch.md +5 -3
- msprobe/docs/13.overflow_check_MindSpore.md +6 -4
- msprobe/docs/14.data_parse_PyTorch.md +4 -10
- msprobe/docs/17.grad_probe.md +2 -1
- msprobe/docs/18.online_dispatch.md +3 -3
- msprobe/docs/19.monitor.md +211 -103
- msprobe/docs/21.visualization_PyTorch.md +100 -28
- msprobe/docs/22.visualization_MindSpore.md +103 -31
- msprobe/docs/23.generate_operator_PyTorch.md +9 -9
- msprobe/docs/25.tool_function_introduction.md +23 -22
- msprobe/docs/26.data_dump_PyTorch_baseline.md +14 -3
- msprobe/docs/27.dump_json_instruction.md +278 -8
- msprobe/docs/28.debugger_save_instruction.md +111 -20
- 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/31.config_check.md +95 -0
- msprobe/docs/32.ckpt_compare.md +69 -0
- msprobe/docs/33.generate_operator_MindSpore.md +190 -0
- msprobe/docs/34.RL_collect.md +92 -0
- msprobe/docs/35.nan_analyze.md +72 -0
- msprobe/docs/FAQ.md +3 -11
- msprobe/docs/data_dump_MindSpore/data_dump_MindSpore_baseline.md +12 -1
- msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md +3 -1
- msprobe/docs/img/compare_result.png +0 -0
- msprobe/docs/img/merge_result.png +0 -0
- msprobe/docs/img/save_compare_result_sample.png +0 -0
- msprobe/docs/img/visualization/proxy.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 +3 -3
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +151 -55
- msprobe/mindspore/api_accuracy_checker/api_runner.py +25 -11
- msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +2 -1
- msprobe/mindspore/api_accuracy_checker/bench_functions/flash_attention_score.py +580 -0
- msprobe/mindspore/api_accuracy_checker/bench_functions/fusion_operator.py +41 -0
- msprobe/mindspore/api_accuracy_checker/cmd_parser.py +4 -0
- msprobe/mindspore/api_accuracy_checker/data_manager.py +4 -3
- msprobe/mindspore/api_accuracy_checker/generate_op_script/config_op.json +9 -0
- msprobe/mindspore/api_accuracy_checker/generate_op_script/op_generator.py +451 -0
- msprobe/mindspore/api_accuracy_checker/generate_op_script/operator_replication.template +2081 -0
- msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +11 -1
- msprobe/mindspore/api_accuracy_checker/torch_mindtorch_importer.py +2 -1
- msprobe/mindspore/cell_processor.py +204 -33
- msprobe/mindspore/code_mapping/graph_parser.py +4 -21
- msprobe/mindspore/common/const.py +73 -2
- msprobe/mindspore/common/utils.py +157 -29
- msprobe/mindspore/compare/common_dir_compare.py +382 -0
- msprobe/mindspore/compare/distributed_compare.py +2 -26
- msprobe/mindspore/compare/ms_compare.py +18 -398
- msprobe/mindspore/compare/ms_graph_compare.py +20 -10
- msprobe/mindspore/compare/utils.py +37 -0
- msprobe/mindspore/debugger/debugger_config.py +59 -7
- msprobe/mindspore/debugger/precision_debugger.py +83 -90
- msprobe/mindspore/dump/cell_dump_process.py +902 -0
- msprobe/mindspore/dump/cell_dump_with_insert_gradient.py +889 -0
- msprobe/mindspore/dump/dump_tool_factory.py +18 -8
- msprobe/mindspore/dump/graph_mode_cell_dump.py +139 -0
- msprobe/mindspore/dump/graph_tensor_dump.py +123 -0
- msprobe/mindspore/dump/hook_cell/api_register.py +176 -0
- msprobe/mindspore/dump/hook_cell/hook_cell.py +22 -12
- msprobe/mindspore/dump/hook_cell/ms_hook_manager.py +88 -0
- msprobe/mindspore/dump/hook_cell/primitive_hooks.py +8 -2
- msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +42 -26
- msprobe/mindspore/dump/jit_dump.py +35 -27
- msprobe/mindspore/dump/kernel_kbyk_dump.py +6 -3
- msprobe/mindspore/dym_loader/hook_dynamic_loader.cpp +110 -0
- msprobe/mindspore/dym_loader/hook_dynamic_loader.h +15 -16
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +22 -12
- msprobe/mindspore/free_benchmark/common/utils.py +1 -1
- 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 +9 -2
- msprobe/mindspore/grad_probe/grad_analyzer.py +2 -1
- msprobe/mindspore/grad_probe/grad_stat_csv.py +3 -2
- msprobe/mindspore/grad_probe/hook.py +2 -4
- msprobe/mindspore/mindspore_service.py +111 -0
- msprobe/mindspore/monitor/common_func.py +52 -0
- msprobe/mindspore/monitor/data_writers.py +237 -0
- msprobe/mindspore/monitor/distributed/wrap_distributed.py +1 -1
- msprobe/mindspore/monitor/features.py +13 -1
- msprobe/mindspore/monitor/module_hook.py +568 -444
- msprobe/mindspore/monitor/optimizer_collect.py +331 -0
- msprobe/mindspore/monitor/utils.py +71 -9
- msprobe/mindspore/ms_config.py +16 -15
- msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +5 -3
- msprobe/mindspore/task_handler_factory.py +5 -2
- msprobe/msprobe.py +19 -0
- msprobe/nan_analyze/__init__.py +14 -0
- msprobe/nan_analyze/analyzer.py +255 -0
- msprobe/nan_analyze/graph.py +189 -0
- msprobe/nan_analyze/utils.py +211 -0
- msprobe/pytorch/api_accuracy_checker/common/config.py +2 -2
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +3 -6
- msprobe/pytorch/api_accuracy_checker/compare/compare.py +36 -34
- msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +15 -13
- msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +206 -4
- msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +9 -9
- msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +6 -5
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +31 -9
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +28 -20
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +3 -1
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +29 -13
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +12 -2
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +45 -31
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +154 -0
- msprobe/pytorch/attl_manager.py +65 -0
- msprobe/pytorch/bench_functions/moe_gating_top_k_softmax.py +6 -0
- msprobe/pytorch/bench_functions/npu_fusion_attention.py +27 -0
- msprobe/pytorch/common/utils.py +53 -19
- msprobe/pytorch/compare/distributed_compare.py +4 -36
- msprobe/pytorch/compare/pt_compare.py +13 -84
- msprobe/pytorch/compare/utils.py +47 -0
- msprobe/pytorch/debugger/debugger_config.py +34 -17
- msprobe/pytorch/debugger/precision_debugger.py +50 -96
- msprobe/pytorch/dump/module_dump/hook_wrapper.py +93 -0
- msprobe/pytorch/dump/module_dump/module_dump.py +15 -61
- msprobe/pytorch/dump/module_dump/module_processer.py +150 -114
- 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/grad_probe/grad_stat_csv.py +3 -2
- msprobe/pytorch/hook_module/api_register.py +155 -0
- msprobe/pytorch/hook_module/hook_module.py +18 -22
- msprobe/pytorch/hook_module/jit_script_wrapper.py +33 -0
- msprobe/pytorch/hook_module/pt_hook_manager.py +68 -0
- msprobe/pytorch/hook_module/register_optimizer_hook.py +2 -1
- msprobe/pytorch/hook_module/support_wrap_ops.yaml +193 -75
- msprobe/pytorch/hook_module/utils.py +28 -2
- msprobe/pytorch/monitor/csv2tb.py +14 -4
- msprobe/pytorch/monitor/data_writers.py +259 -0
- msprobe/pytorch/monitor/distributed/wrap_distributed.py +8 -2
- msprobe/pytorch/monitor/module_hook.py +336 -241
- msprobe/pytorch/monitor/module_metric.py +17 -0
- msprobe/pytorch/monitor/optimizer_collect.py +244 -224
- msprobe/pytorch/monitor/utils.py +84 -4
- msprobe/pytorch/online_dispatch/compare.py +0 -2
- msprobe/pytorch/online_dispatch/dispatch.py +13 -2
- msprobe/pytorch/online_dispatch/dump_compare.py +8 -2
- 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 +5 -4
- msprobe/pytorch/pt_config.py +16 -11
- msprobe/pytorch/pytorch_service.py +70 -0
- msprobe/visualization/builder/graph_builder.py +69 -10
- msprobe/visualization/builder/msprobe_adapter.py +24 -12
- msprobe/visualization/compare/graph_comparator.py +63 -51
- msprobe/visualization/compare/mode_adapter.py +22 -20
- msprobe/visualization/graph/base_node.py +11 -4
- msprobe/visualization/graph/distributed_analyzer.py +1 -10
- msprobe/visualization/graph/graph.py +2 -13
- msprobe/visualization/graph/node_op.py +1 -2
- msprobe/visualization/graph_service.py +251 -104
- msprobe/visualization/utils.py +26 -44
- msprobe/mindspore/dump/hook_cell/api_registry.py +0 -207
- msprobe/mindspore/dump/hook_cell/wrap_api.py +0 -212
- msprobe/mindspore/dym_loader/hook_dynamic_loader.cc +0 -140
- msprobe/mindspore/monitor/anomaly_detect.py +0 -404
- msprobe/mindspore/monitor/module_spec_verifier.py +0 -94
- msprobe/mindspore/service.py +0 -543
- 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/monitor/anomaly_analyse.py +0 -201
- msprobe/pytorch/monitor/anomaly_detect.py +0 -410
- msprobe/pytorch/monitor/module_spec_verifier.py +0 -95
- msprobe/pytorch/monitor/unittest/test_monitor.py +0 -160
- msprobe/pytorch/service.py +0 -470
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/LICENSE +0 -0
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/WHEEL +0 -0
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/entry_points.txt +0 -0
- {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/top_level.txt +0 -0
- /msprobe/{mindspore → core}/compare/ms_to_pt_api.yaml +0 -0
- /msprobe/{mindspore/dump → core}/kernel_dump/kernel_config.py +0 -0
- /msprobe/{pytorch/monitor/unittest → core/monitor}/__init__.py +0 -0
|
@@ -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
|
|
|
@@ -43,14 +57,14 @@ msprobe -f pytorch graph -i ./compare.json -o ./output
|
|
|
43
57
|
```
|
|
44
58
|
**命令行参数说明**:
|
|
45
59
|
|
|
46
|
-
| 参数名 | 说明
|
|
47
|
-
|
|
48
|
-
| -i 或 --input_path | 指定比对文件,参考[比对文件说明](#313-比对文件说明)
|
|
49
|
-
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型。文件名称基于时间戳自动生成,格式为:`compare_{timestamp}.vis或build_{timestamp}.vis`。
|
|
50
|
-
| -lm 或 --layer_mapping | 跨套件比对,例如同一个模型分别使用了DeepSpeed和Megatron套件的比对场景。配置该参数时表示开启跨套件Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#71-自定义映射文件layer),如何配置自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md)。
|
|
51
|
-
| -oc 或 --overflow_check | 是否开启溢出检测模式,开启后会在输出vis文件中(`compare_{timestamp}.vis或build_{timestamp}.vis`)对每个溢出节点进行标记溢出等级,溢出等级说明参考[溢出等级说明](#312-溢出等级说明)
|
|
52
|
-
| -f 或 --fuzzy_match | 是否开启模糊匹配,bool类型。模糊匹配说明参考[匹配说明](#311-匹配说明)
|
|
53
|
-
| -cs 或 --complete_stack | 是否使用完整的堆栈信息,bool类型。默认使用精简的堆栈信息,数据量小有助于增加流畅度。完整堆栈和精简堆栈信息参考[堆栈信息说明](#72-堆栈信息说明)
|
|
60
|
+
| 参数名 | 说明 | 是否必选 |
|
|
61
|
+
|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------|
|
|
62
|
+
| -i 或 --input_path | 指定比对文件,参考[比对文件说明](#313-比对文件说明) | 是 |
|
|
63
|
+
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型。文件名称基于时间戳自动生成,格式为:`compare_{timestamp}.vis或build_{timestamp}.vis`。 | 是 |
|
|
64
|
+
| -lm 或 --layer_mapping | 跨套件比对,例如同一个模型分别使用了DeepSpeed和Megatron套件的比对场景。配置该参数时表示开启跨套件Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#71-自定义映射文件layer),如何配置自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md)。 配置该参数后,将仅按节点名称进行比对,忽略节点的 type 和 shape。如果调试侧和标杆侧有名称不同的节点,则需要配置自定义映射文件,-lm参数传入自定义映射文件路径;如果调试侧和标杆侧节点名称相同,则仅指定-lm即可。| 否 |
|
|
65
|
+
| -oc 或 --overflow_check | 是否开启溢出检测模式,开启后会在输出vis文件中(`compare_{timestamp}.vis或build_{timestamp}.vis`)对每个溢出节点进行标记溢出等级,溢出等级说明参考[溢出等级说明](#312-溢出等级说明) | 否 |
|
|
66
|
+
| -f 或 --fuzzy_match | 是否开启模糊匹配,bool类型。模糊匹配说明参考[匹配说明](#311-匹配说明) | 否 |
|
|
67
|
+
| -cs 或 --complete_stack | 是否使用完整的堆栈信息,bool类型。默认使用精简的堆栈信息,数据量小有助于增加流畅度。完整堆栈和精简堆栈信息参考[堆栈信息说明](#72-堆栈信息说明) | 否 |
|
|
54
68
|
|
|
55
69
|
#### 3.1.1 匹配说明
|
|
56
70
|
|
|
@@ -330,8 +344,22 @@ ubuntu是机器地址,6008是端口号。
|
|
|
330
344
|
**注意,ubuntu需要替换为真实的服务器地址,例如真实的服务器地址为10.123.456.78,则需要在浏览器窗口输入http://10.123.456.78:6008**
|
|
331
345
|
|
|
332
346
|
### 4.2 不可直连的服务器
|
|
333
|
-
**如果链接打不开(服务器无法直连需要挂vpn
|
|
347
|
+
**如果链接打不开(服务器无法直连需要挂vpn才能连接等场景),可以尝试以下方法,选择其一即可:**
|
|
334
348
|
|
|
349
|
+
1.本地电脑网络手动设置代理,例如Windows10系统,在【手动设置代理】中添加服务器地址(例如10.123.456.78)
|
|
350
|
+
|
|
351
|
+

|
|
352
|
+
|
|
353
|
+
然后,在服务器中输入:
|
|
354
|
+
```
|
|
355
|
+
tensorboard --logdir out_path --bind_all --port 6008[可选,端口号]
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
最后,在浏览器窗口输入http://10.123.456.78:6008
|
|
359
|
+
|
|
360
|
+
**注意,如果当前服务器开启了防火墙,则此方法无效,需要关闭防火墙,或者尝试后续方法**
|
|
361
|
+
|
|
362
|
+
2.或者使用vscode连接服务器,在vscode终端输入:
|
|
335
363
|
```
|
|
336
364
|
tensorboard --logdir out_path
|
|
337
365
|
```
|
|
@@ -339,6 +367,14 @@ tensorboard --logdir out_path
|
|
|
339
367
|
|
|
340
368
|
按住CTRL点击链接即可
|
|
341
369
|
|
|
370
|
+
3.或者将构图结果件vis文件从服务器传输至本地电脑,在本地电脑中安装tb_graph_ascend插件查看构图结果
|
|
371
|
+
|
|
372
|
+
电脑终端输入:
|
|
373
|
+
```
|
|
374
|
+
tensorboard --logdir out_path
|
|
375
|
+
```
|
|
376
|
+
按住CTRL点击链接即可
|
|
377
|
+
|
|
342
378
|
## 5.浏览器查看
|
|
343
379
|
|
|
344
380
|
### 5.1 浏览器打开图
|
|
@@ -357,37 +393,69 @@ tensorboard --logdir out_path
|
|
|
357
393
|

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

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

|
|
369
406
|
|
|
370
407
|
## 6.图比对说明
|
|
371
408
|
|
|
372
|
-
### 颜色
|
|
409
|
+
### 6.1 颜色
|
|
373
410
|
|
|
374
411
|
颜色越深,精度比对差异越大,越可疑,具体信息可见浏览器页面左下角颜色图例。
|
|
375
412
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
#### 真实数据模式
|
|
413
|
+
#### 6.1.1 真实数据模式
|
|
379
414
|
节点中所有输入的最小双千指标和所有输出的最小双千分之一指标的差值,反映了双千指标的下降情况,**值越大精度差距越大,颜色标记越深**。
|
|
380
415
|
|
|
381
416
|
``One Thousandth Err Ratio(双千分之一)精度指标:Tensor中的元素逐个与对应的标杆数据对比,相对误差小于千分之一的比例占总元素个数的比例,比例越接近1越好``
|
|
382
417
|
|
|
383
|
-
|
|
418
|
+
如果调试侧(NPU)节点的output指标中的最大值(MAX)或最小值(MIN)中存在 nan/inf/-inf,直接标记为最深颜色。
|
|
419
|
+
|
|
420
|
+
#### 6.1.2 统计信息模式
|
|
384
421
|
节点中输出的统计量相对误差,**值越大精度差距越大,颜色标记越深**。
|
|
385
422
|
|
|
386
423
|
``相对误差:abs((npu统计值 - bench统计值) / bench统计值)``
|
|
387
424
|
|
|
388
|
-
|
|
425
|
+
如果调试侧(NPU)节点的output指标中的最大值(MAX)或最小值(MIN)中存在 nan/inf/-inf,直接标记为最深颜色。
|
|
426
|
+
|
|
427
|
+
#### 6.1.3 md5模式
|
|
389
428
|
节点中任意输入输出的md5值不同。
|
|
390
429
|
|
|
430
|
+
### 6.2 指标说明
|
|
431
|
+
|
|
432
|
+
精度比对从三个层面评估 API 的精度,依次是:真实数据模式、统计数据模式和 MD5 模式。比对结果分别有不同的指标。
|
|
433
|
+
|
|
434
|
+
**公共指标**:
|
|
435
|
+
- name: 参数名称,例如input.0
|
|
436
|
+
- type: 类型,例如torch.Tensor
|
|
437
|
+
- dtype: 数据类型,例如torch.float32
|
|
438
|
+
- shape: 张量形状,例如[32, 1, 32]
|
|
439
|
+
- Max: 最大值
|
|
440
|
+
- Min: 最小值
|
|
441
|
+
- Mean: 平均值
|
|
442
|
+
- Norm: L2-范数
|
|
443
|
+
|
|
444
|
+
**真实数据模式指标**:
|
|
445
|
+
- Cosine: tensor 余弦相似度
|
|
446
|
+
- EucDist: tensor 欧式距离
|
|
447
|
+
- MaxAbsErr: tensor 最大绝对误差
|
|
448
|
+
- MaxRelativeErr: tensor 最大相对误差
|
|
449
|
+
- One Thousandth Err Ratio: tensor 相对误差小于千分之一的比例(双千分之一)
|
|
450
|
+
- Five Thousandth Err Ratio: tensor 相对误差小于千分之五的比例(双千分之五)
|
|
451
|
+
|
|
452
|
+
**统计数据模式指标**
|
|
453
|
+
- (Max, Min, Mean, Norm) diff: 统计量绝对误差
|
|
454
|
+
- (Max, Min, Mean, Norm) RelativeErr: 统计量相对误差
|
|
455
|
+
|
|
456
|
+
**MD5模式指标**
|
|
457
|
+
- md5: CRC-32 值
|
|
458
|
+
|
|
391
459
|
## 7.附录
|
|
392
460
|
### 7.1 自定义映射文件(Layer)
|
|
393
461
|
|
|
@@ -472,5 +540,9 @@ yaml文件中只需配置待调试侧与标杆侧模型代码中功能一致但
|
|
|
472
540
|
节点呈现灰色,代表左边待调试侧节点与右边标杆侧节点没有匹配上,可能有以下几点原因:
|
|
473
541
|
|
|
474
542
|
- **标杆侧确实没有能与待调试侧匹配上的节点**,属于代码实现上的差异,请确认此差异是否正常,是否会影响到整网精度。
|
|
475
|
-
-
|
|
476
|
-
-
|
|
543
|
+
- **节点名称一致,但节点的输入或输出type、shape不一致,参数个数不一致,节点所在层级的父层级不一致,导致节点无法匹配**
|
|
544
|
+
- 具体匹配规则见[匹配说明](#311-匹配说明),可尝试使用模糊匹配功能,如何使用此功能请参考[构图命令行说明](#31-构图命令行说明);
|
|
545
|
+
- 如果是参数shape不一致,即使是模糊匹配功能也无法让节点匹配上,请检查参数shape不一致是否合理。
|
|
546
|
+
- **节点名称不一致**,导致节点无法匹配,目前提供两种方法,选其一即可
|
|
547
|
+
- 可使用layer mapping功能,如何使用此功能请参考[构图命令行说明](#31-构图命令行说明),如何自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md);
|
|
548
|
+
- 可通过浏览器页面手动选择未匹配节点进行匹配,请参考[手动选择节点匹配](#56-手动选择节点匹配)。
|
|
@@ -2,22 +2,34 @@
|
|
|
2
2
|
|
|
3
3
|
分级可视化工具将msprobe工具dump的精度数据进行解析,还原模型图结构,实现模型各个层级的精度数据比对,方便用户理解模型结构、分析精度问题。
|
|
4
4
|
|
|
5
|
-
工具支持MindSpore
|
|
5
|
+
工具支持MindSpore版本:>=2.4.0
|
|
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
|
[MindSpore场景的精度数据采集](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/06.data_dump_MindSpore.md)
|
|
33
47
|
|
|
@@ -47,7 +61,7 @@ msprobe -f mindspore graph -i ./compare.json -o ./output
|
|
|
47
61
|
|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
|
|
48
62
|
| -i 或 --input_path | 指定比对文件,参考[比对文件说明](#313-比对文件说明) | 是 |
|
|
49
63
|
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型。文件名称基于时间戳自动生成,格式为:`compare_{timestamp}.vis或build_{timestamp}.vis`。 | 是 |
|
|
50
|
-
| -lm 或 --layer_mapping| 跨框架比对,MindSpore和PyTorch的比对场景。配置该参数时表示开启跨框架Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#71-自定义映射文件layer), 如何配置自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md)
|
|
64
|
+
| -lm 或 --layer_mapping| 跨框架比对,MindSpore和PyTorch的比对场景。配置该参数时表示开启跨框架Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#71-自定义映射文件layer), 如何配置自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md)。配置该参数后,将仅按节点名称进行比对,忽略节点的 type 和 shape。如果调试侧和标杆侧有名称不同的节点,则需要配置自定义映射文件,-lm参数传入自定义映射文件路径;如果调试侧和标杆侧节点名称相同,则仅指定-lm即可。 | 否 |
|
|
51
65
|
| -oc 或 --overflow_check | 是否开启溢出检测模式,开启后会在输出vis文件中(`compare_{timestamp}.vis或build_{timestamp}.vis`)对每个溢出节点进行标记溢出等级,溢出等级说明参考[溢出等级说明](#312-溢出等级说明) | 否 |
|
|
52
66
|
| -f 或 --fuzzy_match | 是否开启模糊匹配,bool类型。模糊匹配说明参考[匹配说明](#311-匹配说明) | 否 |
|
|
53
67
|
| -cs 或 --complete_stack | 是否使用完整的堆栈信息,bool类型。默认使用精简的堆栈信息,数据量小有助于增加流畅度。完整堆栈和精简堆栈信息参考[堆栈信息说明](#72-堆栈信息说明) | 否 |
|
|
@@ -62,7 +76,7 @@ msprobe -f mindspore graph -i ./compare.json -o ./output
|
|
|
62
76
|
- 节点的层级一致(父节点们一致)
|
|
63
77
|
|
|
64
78
|
2.模糊匹配
|
|
65
|
-
- Cell节点dump名称一致,两个匹配上的Cell
|
|
79
|
+
- Cell节点dump名称一致,两个匹配上的Cell节点,忽略各自节点下所有api的dump调用次数,按照名称一致+Cell节点内的调用顺序进行匹配
|
|
66
80
|
- 
|
|
67
81
|
- 参数shape一致
|
|
68
82
|
|
|
@@ -83,11 +97,11 @@ msprobe -f mindspore graph -i ./compare.json -o ./output
|
|
|
83
97
|
```
|
|
84
98
|
**比对文件参数说明**:
|
|
85
99
|
|
|
86
|
-
| 参数名 | 说明
|
|
87
|
-
|
|
88
|
-
| npu_path | 指定待调试侧比对路径,str类型。工具根据路径格式自动进行单rank比对、多rank批量比对或多step批量比对,具体格式参考3.2 图构建和比对。
|
|
89
|
-
| bench_path | 指定标杆侧比对路径,str
|
|
90
|
-
| is_print_compare_log | 配置是否开启单个算子的日志打屏。可取值 true 或 false,默认为 true。关闭后则只输出常规日志,bool 类型。
|
|
100
|
+
| 参数名 | 说明 | 是否必选 |
|
|
101
|
+
|-------------------|----------------------------------------------------------------------------|------|
|
|
102
|
+
| npu_path | 指定待调试侧比对路径,str类型。工具根据路径格式自动进行单rank比对、多rank批量比对或多step批量比对,具体格式参考3.2 图构建和比对。 | 是 |
|
|
103
|
+
| bench_path | 指定标杆侧比对路径,str类型。单图构建场景可以不配置。 | 否 |
|
|
104
|
+
| is_print_compare_log | 配置是否开启单个算子的日志打屏。可取值 true 或 false,默认为 true。关闭后则只输出常规日志,bool 类型。 | 否 |
|
|
91
105
|
|
|
92
106
|
|
|
93
107
|
### 3.2 图构建和比对
|
|
@@ -314,7 +328,7 @@ dump配置请参考[dump配置示例](./03.config_examples.md#35-task-配置为-
|
|
|
314
328
|
得到dump数据后,若需比较特定两个rank之间的数据,请参考[3.2.2 双图比对](#322-双图比对);若需进行多个rank或多个step的数据批量比对,请参考[3.2.3 批量构建或比对](#323-批量构建或比对)。
|
|
315
329
|
|
|
316
330
|
|
|
317
|
-
## 4.启动
|
|
331
|
+
## 4.启动TensorBoard
|
|
318
332
|
|
|
319
333
|
### 4.1 可直连的服务器
|
|
320
334
|
|
|
@@ -329,11 +343,25 @@ tensorboard --logdir out_path --bind_all --port [可选,端口号]
|
|
|
329
343
|
|
|
330
344
|
ubuntu是机器地址,6008是端口号。
|
|
331
345
|
|
|
332
|
-
**注意,ubuntu需要替换为真实的服务器地址,例如真实的服务器地址为10.123.456.78,则需要在浏览器窗口输入http://10.123.456.78:6008**
|
|
346
|
+
**注意,ubuntu需要替换为真实的服务器地址,例如真实的服务器地址为10.123.456.78,则需要在浏览器窗口输入 http://10.123.456.78:6008**
|
|
333
347
|
|
|
334
348
|
### 4.2 不可直连的服务器
|
|
335
|
-
**如果链接打不开(服务器无法直连需要挂vpn
|
|
349
|
+
**如果链接打不开(服务器无法直连需要挂vpn才能连接等场景),可以尝试以下方法,选择其一即可:**
|
|
336
350
|
|
|
351
|
+
1.本地电脑网络手动设置代理,例如Windows10系统,在【手动设置代理】中添加服务器地址(例如10.123.456.78)
|
|
352
|
+
|
|
353
|
+

|
|
354
|
+
|
|
355
|
+
然后,在服务器中输入:
|
|
356
|
+
```
|
|
357
|
+
tensorboard --logdir out_path --bind_all --port 6008[可选,端口号]
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
最后,在浏览器窗口输入 http://10.123.456.78:6008
|
|
361
|
+
|
|
362
|
+
**注意,如果当前服务器开启了防火墙,则此方法无效,需要关闭防火墙,或者尝试后续方法**
|
|
363
|
+
|
|
364
|
+
2.或者使用vscode连接服务器,在vscode终端输入:
|
|
337
365
|
```
|
|
338
366
|
tensorboard --logdir out_path
|
|
339
367
|
```
|
|
@@ -341,6 +369,14 @@ tensorboard --logdir out_path
|
|
|
341
369
|
|
|
342
370
|
按住CTRL点击链接即可
|
|
343
371
|
|
|
372
|
+
3.或者将构图结果件vis文件从服务器传输至本地电脑,在本地电脑中安装tb_graph_ascend插件查看构图结果
|
|
373
|
+
|
|
374
|
+
电脑终端输入:
|
|
375
|
+
```
|
|
376
|
+
tensorboard --logdir out_path
|
|
377
|
+
```
|
|
378
|
+
按住CTRL点击链接即可
|
|
379
|
+
|
|
344
380
|
## 5.浏览器查看
|
|
345
381
|
|
|
346
382
|
### 5.1 浏览器打开图
|
|
@@ -359,37 +395,69 @@ tensorboard --logdir out_path
|
|
|
359
395
|

|
|
360
396
|
|
|
361
397
|
### 5.5 未匹配节点筛选
|
|
362
|
-
节点匹配规则:
|
|
363
398
|
|
|
364
|
-
|
|
399
|
+
参考[匹配说明](#311-匹配说明) ,不符合匹配规则的节点为无匹配节点,颜色标灰。适用于排查两个模型结构差异的场景。
|
|
365
400
|
|
|
366
|
-
|
|
401
|
+

|
|
367
402
|
|
|
368
|
-
|
|
403
|
+
### 5.6 手动选择节点匹配
|
|
369
404
|
|
|
370
|
-
|
|
405
|
+
可通过浏览器界面,通过鼠标选择两个待匹配的灰色节点进行匹配。当前暂不支持真实数据模式。
|
|
406
|
+
|
|
407
|
+

|
|
371
408
|
|
|
372
409
|
## 6.图比对说明
|
|
373
410
|
|
|
374
|
-
### 颜色
|
|
411
|
+
### 6.1 颜色
|
|
375
412
|
|
|
376
413
|
颜色越深,精度比对差异越大,越可疑,具体信息可见浏览器页面左下角颜色图例。
|
|
377
414
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
#### 真实数据模式
|
|
415
|
+
#### 6.1.1 真实数据模式
|
|
381
416
|
节点中所有输入的最小双千指标和所有输出的最小双千分之一指标的差值,反映了双千指标的下降情况,**值越大精度差距越大,颜色标记越深**。
|
|
382
417
|
|
|
383
418
|
``One Thousandth Err Ratio(双千分之一)精度指标:Tensor中的元素逐个与对应的标杆数据对比,相对误差小于千分之一的比例占总元素个数的比例,比例越接近1越好``
|
|
384
419
|
|
|
385
|
-
|
|
420
|
+
如果调试侧(NPU)节点的output指标中的最大值(MAX)或最小值(MIN)中存在 nan/inf/-inf,直接标记为最深颜色。
|
|
421
|
+
|
|
422
|
+
#### 6.1.2 统计信息模式
|
|
386
423
|
节点中输出的统计量相对误差,**值越大精度差距越大,颜色标记越深**。
|
|
387
424
|
|
|
388
|
-
``相对误差:abs
|
|
425
|
+
``相对误差:abs((npu统计值 - bench统计值) / bench统计值)``
|
|
389
426
|
|
|
390
|
-
|
|
427
|
+
如果调试侧(NPU)节点的output指标中的最大值(MAX)或最小值(MIN)中存在 nan/inf/-inf,直接标记为最深颜色。
|
|
428
|
+
|
|
429
|
+
#### 6.1.3 md5模式
|
|
391
430
|
节点中任意输入输出的md5值不同。
|
|
392
431
|
|
|
432
|
+
### 6.2 指标说明
|
|
433
|
+
|
|
434
|
+
精度比对从三个层面评估 API 的精度,依次是:真实数据模式、统计数据模式和 MD5 模式。比对结果分别有不同的指标。
|
|
435
|
+
|
|
436
|
+
**公共指标**:
|
|
437
|
+
- name: 参数名称,例如input.0
|
|
438
|
+
- type: 类型,例如mindspore.Tensor
|
|
439
|
+
- dtype: 数据类型,例如BFloat32
|
|
440
|
+
- shape: 张量形状,例如[32, 1, 32]
|
|
441
|
+
- Max: 最大值
|
|
442
|
+
- Min: 最小值
|
|
443
|
+
- Mean: 平均值
|
|
444
|
+
- Norm: L2-范数
|
|
445
|
+
|
|
446
|
+
**真实数据模式指标**:
|
|
447
|
+
- Cosine: tensor 余弦相似度
|
|
448
|
+
- EucDist: tensor 欧式距离
|
|
449
|
+
- MaxAbsErr: tensor 最大绝对误差
|
|
450
|
+
- MaxRelativeErr: tensor 最大相对误差
|
|
451
|
+
- One Thousandth Err Ratio: tensor 相对误差小于千分之一的比例(双千分之一)
|
|
452
|
+
- Five Thousandth Err Ratio: tensor 相对误差小于千分之五的比例(双千分之五)
|
|
453
|
+
|
|
454
|
+
**统计数据模式指标**
|
|
455
|
+
- (Max, Min, Mean, Norm) diff: 统计量绝对误差
|
|
456
|
+
- (Max, Min, Mean, Norm) RelativeErr: 统计量相对误差
|
|
457
|
+
|
|
458
|
+
**MD5模式指标**
|
|
459
|
+
- md5: CRC-32 值
|
|
460
|
+
|
|
393
461
|
## 7.附录
|
|
394
462
|
### 7.1 自定义映射文件(Layer)
|
|
395
463
|
|
|
@@ -488,5 +556,9 @@ yaml文件中只需配置MindSpore与PyTorch模型代码中功能一致但名称
|
|
|
488
556
|
节点呈现灰色,代表左边待调试侧节点与右边标杆侧节点没有匹配上,可能有以下几点原因:
|
|
489
557
|
|
|
490
558
|
- **标杆侧确实没有能与待调试侧匹配上的节点**,属于代码实现上的差异,请确认此差异是否正常,是否会影响到整网精度。
|
|
491
|
-
-
|
|
492
|
-
-
|
|
559
|
+
- **节点名称一致,但节点的输入或输出type、shape不一致,参数个数不一致,节点所在层级的父层级不一致,导致节点无法匹配**
|
|
560
|
+
- 具体匹配规则见[匹配说明](#311-匹配说明),可尝试使用模糊匹配功能,如何使用此功能请参考[构图命令行说明](#31-构图命令行说明);
|
|
561
|
+
- 如果是参数shape不一致,即使是模糊匹配功能也无法让节点匹配上,请检查参数shape不一致是否合理。
|
|
562
|
+
- **节点名称不一致**,导致节点无法匹配,目前提供两种方法,选其一即可
|
|
563
|
+
- 可使用layer mapping功能,如何使用此功能请参考[构图命令行说明](#31-构图命令行说明),如何自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md);
|
|
564
|
+
- 可通过浏览器页面手动选择未匹配节点进行匹配,请参考[手动选择节点匹配](#56-手动选择节点匹配)。
|
|
@@ -33,15 +33,15 @@ b. 在生成单API脚本时可以选择由工具构造随机数获得 dump 数
|
|
|
33
33
|
```
|
|
34
34
|
**配置文件参数说明**
|
|
35
35
|
|
|
36
|
-
| 参数名称 | 解释
|
|
37
|
-
| ----------------------------
|
|
38
|
-
| dump_json_path | dump.json的文件路径,包含所有dump算子的信息;如果已经提取了可疑算子并保存可以不指定。
|
|
39
|
-
| api_name | 算子名,如Functional.softmax.3、Tensor.add.0、Torch.matmul.5等。如果已经提取了可疑算子并保存可以不指定
|
|
40
|
-
| extract_api_path | 提取可疑算子的json文件路径
|
|
41
|
-
| propagation | 选择复现算子的forward还是backward,默认为forward
|
|
42
|
-
| data_mode | 选择复现算子的随机数据(random_data)还是真实数据(real_data)模式,默认为random_data
|
|
43
|
-
| random_seed | 仅random_data模式有效,表示手动设定的随机种子,默认为1234
|
|
44
|
-
| iter_times | 仅random_data模式有效,表示单API
|
|
36
|
+
| 参数名称 | 解释 | 是否必选 |
|
|
37
|
+
| ---------------------------- |----------------------------------------------------------------------------| ---------------------------------- |
|
|
38
|
+
| dump_json_path | dump.json的文件路径,包含所有dump算子的信息;如果已经提取了可疑算子并保存可以不指定。 | 否 |
|
|
39
|
+
| api_name | 算子名,如Functional.softmax.3、Tensor.add.0、Torch.matmul.5等。如果已经提取了可疑算子并保存可以不指定 | 否 |
|
|
40
|
+
| extract_api_path | 提取可疑算子的json文件路径 | 是 |
|
|
41
|
+
| propagation | 选择复现算子的forward还是backward,默认为forward | 否 |
|
|
42
|
+
| data_mode | 选择复现算子的随机数据(random_data)还是真实数据(real_data)模式,默认为random_data | 否 |
|
|
43
|
+
| random_seed | 仅random_data模式有效,表示手动设定的随机种子,默认为1234 | 否 |
|
|
44
|
+
| iter_times | 仅random_data模式有效,表示单API运行的次数,由于安全相关原因,最大支持设置为1000 | 否 |
|
|
45
45
|
|
|
46
46
|
### 2.2 运行命令生成单API脚本
|
|
47
47
|
config_op.json配置好后,运行如下命令:
|
|
@@ -2,28 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
## 1 PyTorch框架
|
|
4
4
|
|
|
5
|
-
| 功能名(英文)
|
|
6
|
-
|
|
7
|
-
| [
|
|
8
|
-
| [
|
|
9
|
-
| [
|
|
10
|
-
| [
|
|
11
|
-
| [
|
|
12
|
-
| [
|
|
13
|
-
| [
|
|
14
|
-
| [
|
|
15
|
-
| [
|
|
16
|
-
| [
|
|
17
|
-
| [
|
|
18
|
-
| [单API
|
|
5
|
+
| 功能名(英文) | 简介 | 适用场景/优势 | 当前版本局限性 |
|
|
6
|
+
| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
7
|
+
| [数据采集`<br>`(dump)](./05.data_dump_PyTorch.md) | 采集模型训练过程中的API或Module层级的前反向输入输出数据,包括层次关系、统计值信息、真实数据和调用栈等。 | 1、将模型中训练的API或Module的前反向输入输出数据保存下来分析`<br>` 2、模型出现溢出时,可用于查看哪些API或Module出现了溢出 | 1、API级数据采集仅支持白名单列表上的API`<br>`2、工具会做一些同步操作,引入工具可能会导致一些同步问题消失`<br>`3、当前对inplace操作API或Module的支持度有限`<br>`4、暂不支持参数及参数梯度的采集 |
|
|
8
|
+
| [离线预检`<br>`(api_accuracy_checker)](./07.accuracy_checker_PyTorch.md) | 为网络中每个API创建用例,检验其精度,并根据不同比对算法综合判定API在NPU上的精度是否达标,快速找出精度差异API。 | 1、对模型中所有的API做精度初步排查`<br>`2、精度排查不受模型累计误差影响 | 1、依赖GPU环境`<br>`2、不支持通信算子`<br>`3、仅支持部分融合算子 |
|
|
9
|
+
| [整网比对`<br>`(compare)](./10.accuracy_compare_PyTorch.md) | 计算模型整网NPU和标杆设备的精度误差指标,标记精度异常API或Module,助力快速定位精度问题根因。 | 1、整网比对定位精度可疑算子 | 1、由于使用整网dump数据,定位的可疑算子受累计误差影响`<br>`2、当模型规模较大时,比对所需时间较长 |
|
|
10
|
+
| [在线预检`<br>`(online_api_accuracy_checker)](./08.accuracy_checker_online_PyTorch.md) | 通过TCP通信或共享存储空间的方式,进行在线精度预检,解决离线预检大数据量落盘、传输困难痛点。 | 1、使用离线预检,数据量较大落盘困难或传输耗时长时,可通过在线预检进行精度排查 | 1、依赖GPU环境,NPU和GPU能够通信`<br>`2、重计算模式下,不支持反向aten算子预检 |
|
|
11
|
+
| [溢出检查`<br>`(overflow_checker)](./12.overflow_check_PyTorch.md) | 检测模型计算过程的输入输出,并在溢出时落盘数据,助力用户快速定位溢出位置。 | 1、当模型出现溢出时,用于快速定位最先溢出的API或Module`<br>`2、相比数据采集,性能更优,磁盘压力更小 | 1、局限性同数据采集 |
|
|
12
|
+
| [数据解析`<br>`(parse_tool)](./14.data_parse_PyTorch.md) | 交互式界面处理解析kernel层级dump数据,便于查看分析。 | 1、比对kernel层级dump数据的一致性 | 1、仅限于NPU |
|
|
13
|
+
| [无标杆比对`<br>`(free_benchmark)](./15.free_benchmarking_PyTorch.md) | 不依赖标杆数据,通过对算子输入增加微小扰动,计算扰动后输出与原始输出的相对误差,识别有精度风险算子。 | 1、无标杆数据场景下的算子精度排查`<br>`2、对个别算子进行升精度、“to cpu”等操作,以验证其对模型loss的影响 | 1、由于需要拷贝输入进行二次执行,所以在遇到大张量的输入时容易发生显存OOM的问题, 特别是反向比对过程。建议结合白名单使用`<br>`2、比对会延长训练时间,整网比对可能会造成严重的耗时膨胀,建议结合白名单使用 |
|
|
14
|
+
| [梯度状态监测`<br>`(grad_probe)](./17.grad_probe.md) | 可导出模型权重梯度数据并对比相似度,助力确认训练过程精度问题step和反向中的异常。 | 1、需要分析梯度数据时`<br>`2、需要定位发生问题的step时 | 暂无 |
|
|
15
|
+
| [在线精度比对`<br>`(online_dispatch)](./18.online_dispatch.md) | 训练过程中直接完成NPU和CPU的精度比对并输出比对结果。 | 1、执行一次就可获取NPU和CPU分别执行后的精度比对结果 | 暂无 |
|
|
16
|
+
| [训练状态监控`<br>`(monitor)](./19.monitor.md) | 收集模型训练过程中的激活值、梯度和优化器状态,助力分析计算、通信、优化器各部分异常情况。 | 1、通过监控模块级统计量指标,快速定位异常模块位置,如loss出现nan | 1、仅支持模块级别统计量指标分析`<br>`2、仅支持megatron、deepspeed框架`<br>`3、少量增加时间和显存膨胀 |
|
|
17
|
+
| [可视化比对`<br>`(visualization) ](./21.visualization_PyTorch.md) | 解析dump的精度数据,还原模型图结构,比对各层级精度数据,助力理解模型结构、分析精度问题。 | 1、整网精度比对定位可疑算子,通过浏览器展示比对结果,支持快速搜索到可疑算子`<br>`2、支持查看模型层级结果,比对模型层级结构差异 | 1、由于使用整网dump数据,定位的可疑算子受累计误差影响`<br>`2、当模型规模较大时,比对所需时间较长 |
|
|
18
|
+
| [单API自动生成脚本`<br>`(generate_operator) ](./23.generate_operator_PyTorch.md) | 解析dump的精度数据,提取可疑的API算子,自动生成单API复现脚本,并根据不同的API采用不同的比对算法,给定最终比对结果数据;帮助开发者分析算子精度问题。 | 1、该工具支持从整网dump下来的数据中提取可疑算子,并自动生成单API脚本`<br>`2、除了支持复现单API的前反向过程,同时会根据不同的API选择不同的比对方法,并给出比对结果 | 1、不支持通信算子`<br>`2、融合算子需手动修改脚本进行适配`<br>`3、目前比对的标杆均为和CPU进行比对,暂不支持直接NPU和GPU比对 |
|
|
19
19
|
|
|
20
20
|
## 2 MindSpore框架
|
|
21
21
|
|
|
22
|
-
| 功能名(英文)
|
|
23
|
-
|
|
24
|
-
| [
|
|
25
|
-
| [
|
|
26
|
-
| [
|
|
27
|
-
| [
|
|
28
|
-
| [
|
|
29
|
-
| [
|
|
22
|
+
| 功能名(英文) | 简介 | 适用场景/优势 | 当前版本局限性 |
|
|
23
|
+
| ---------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
24
|
+
| [数据采集 `<br>`(dump)](./06.data_dump_MindSpore.md) | 采集模型训练过程中的API或Cell层级的前反向输入输出数据,包括层次关系、统计值信息、真实数据和调用栈等。 | 1、将模型中训练的API或Cell的前反向输入输出数据保存下来分析 `<br>` 2、模型出现溢出时,可用于查看哪些API或Cell出现了溢出 | 1、API级数据采集仅支持白名单列表上的API `<br>`2、当前对inplace操作API或Cell的支持度有限 `<br>`3、暂不支持参数及参数梯度的采集 |
|
|
25
|
+
| [离线预检 `<br>`(api_accuracy_checker)](./09.accuracy_checker_MindSpore.md) | 为网络中每个API创建用例,检验其精度,并根据不同比对算法综合判定API在NPU上的精度是否达标,快速找出精度差异API。 | 1、对模型中所有的API做精度初步排查 `<br>`2、精度排查不受模型累计误差影响 | 1、仅针对MindSpore.mint API |
|
|
26
|
+
| [整网比对 `<br>`(compare)](./11.accuracy_compare_MindSpore.md) | NPU精度数据与标杆数据的比对,支持MindSpore框架内和与PyTorch跨框架的比对,助力快速定位精度异常API或Cell。 | 1、MindSpore同框架静态图比对 `<br>`2、MindSpore同框架动态图比对 `<br>`3、MindSpore vs PyTorch跨框架动态图比对 | 1、部分PyTorch的API关联不到MindSpore,需要手动配置映射关系 |
|
|
27
|
+
| [溢出检查 `<br>`(overflow_checker)](./13.overflow_check_MindSpore.md) | 检测模型计算过程的输入输出,并在溢出时落盘数据,助力用户快速定位溢出位置。 | 1、当模型出现溢出时,可用于定位最先溢出的API或Cell或kernel `<br>`2、相比数据采集,性能更优,磁盘压力更小 | 1、除具有与数据采集功能相同的局限性外,动态图场景下,不支持 Primitive 和 Jit 类 API 的检测 `<br>`2、动态图场景下,仅支持检测API或Cell级别溢出 `<br>`3、静态图场景下,仅支持检测kernel级别溢出 |
|
|
28
|
+
| [无标杆比对 `<br>`(free_benchmark)](./16.free_benchmarking_MindSpore.md) | 不依赖标杆数据,通过对算子输入增加微小扰动,计算扰动后输出与原始输出的相对误差,识别有精度风险算子。 | 1、无标杆数据场景下的算子精度排查 `<br>`2、对个别算子进行升精度修复,验证其对模型loss的影响 | 1、仅支持动态图场景 `<br>`2、由于需要拷贝输入进行二次执行,所以在遇到大张量的输入时容易发生显存OOM的问题, 特别是反向比对过程。建议结合白名单使用 `<br>`3、比对会延长训练时间,整网比对可能会造成严重的耗时膨胀,建议结合白名单使用 `<br>`4、不支持“to cpu”操作,不支持预热功能 |
|
|
29
|
+
| [可视化比对 `<br>`(visualization) ](./22.visualization_MindSpore.md) | 解析dump的精度数据,还原模型图结构,比对各层级精度数据,助力理解模型结构、分析精度问题。 | 1、整网精度比对定位可疑算子,通过浏览器展示比对结果,支持快速搜索到可疑算子 `<br>`2、支持查看模型层级结果,比对模型层级结构差异 | 1、由于使用整网dump数据,定位的可疑算子受累计误差影响 `<br>`2、当模型规模较大时,比对所需时间较长 |
|
|
30
|
+
| [训练状态监控 `<br>`(monitor)](./19.monitor.md) | 收集模型训练过程中的激活值、梯度和优化器状态,助力分析计算、通信、优化器各部分异常情况。 | 1、通过监控模块级统计量指标,快速定位异常模块位置,如loss出现nan | 1、仅支持模块级别统计量指标分析 `<br>`2、仅支持megatron、deepspeed框架 `<br>`3、少量增加时间和显存膨胀 |
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
# PyTorch 场景的精度数据采集基线
|
|
2
2
|
|
|
3
|
+
## "statistics"模式(未开启md5)采集时间膨胀参考基线
|
|
4
|
+
|
|
5
|
+
该基线为PyTorch框架下,使用"statistics"模式采集数据性能膨胀的参考基线。本基线测试了LLAMA2-7B语言大模型在不同采集模式8卡下的时间膨胀。
|
|
6
|
+
|
|
7
|
+
| 采集模式 | 无工具 (耗时) | 加工具但未使能 Dump (耗时) | 加工具并使能 Dump (耗时) |
|
|
8
|
+
|:--------:|:--------:|:--------------------:|:------------------:|
|
|
9
|
+
| L0 | ≈17.4 s | ≈17.4 s (无膨胀) | ≈78.4 s (膨胀4.5倍) |
|
|
10
|
+
| L1 | ≈17.4 s | ≈20.7 s (膨胀1.2倍) | ≈353 s (膨胀20倍) |
|
|
11
|
+
| mix | ≈17.4 s | ≈20.7 s (膨胀1.2倍) | ≈430 s (膨胀24.7 倍) |
|
|
12
|
+
|
|
13
|
+
|
|
3
14
|
## "tensor"模式采集数据量参考基线
|
|
4
15
|
|
|
5
|
-
该基线为
|
|
16
|
+
该基线为PyTorch框架下,使用"tensor"模式采集数据量参考基线。本基线测试了两个模型,分别为LLAMA2-7B和LLAMA2-13B,测试了不同采集模式下,不同global_batch_size下,单卡和8卡下,数据量的变化。
|
|
6
17
|
|
|
7
18
|
### LLAMA2-7B
|
|
8
19
|
|
|
@@ -25,8 +36,8 @@
|
|
|
25
36
|
<table>
|
|
26
37
|
<tr><th>采集模式</th><th>global_batch_size</th><th>单卡</th><th>8卡</th></tr>
|
|
27
38
|
</td><td rowspan="3">L0</td><td>1</td><td>13GB</td><td>97GB</td></tr>
|
|
28
|
-
<tr><td>2</td><td>
|
|
29
|
-
<tr><td>3</td><td>
|
|
39
|
+
<tr><td>2</td><td>25GB</td><td>194GB</td></tr>
|
|
40
|
+
<tr><td>3</td><td>37GB</td><td>291GB</td></tr>
|
|
30
41
|
</td><td rowspan="3">L1</td><td>1</td><td>440GB</td><td>3.4TB</td></tr>
|
|
31
42
|
<tr><td>2</td><td>720GB</td><td>5.4TB</td></tr>
|
|
32
43
|
<tr><td>3</td><td>960GB</td><td>7.3TB</td></tr>
|