mindstudio-probe 8.1.2__py3-none-any.whl → 8.2.1__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-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/METADATA +2 -2
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/RECORD +172 -147
- msprobe/README.md +6 -6
- msprobe/core/common/const.py +98 -41
- msprobe/core/common/db_manager.py +256 -0
- msprobe/core/common/file_utils.py +28 -5
- msprobe/core/common/log.py +7 -0
- msprobe/core/common/megatron_utils.py +59 -0
- msprobe/core/common/parallel_state.py +193 -0
- msprobe/core/common/utils.py +20 -13
- msprobe/core/common_config.py +5 -0
- msprobe/core/compare/acc_compare.py +140 -93
- msprobe/core/compare/check.py +13 -0
- msprobe/core/compare/compare_cli.py +64 -6
- msprobe/core/compare/config.py +10 -8
- msprobe/core/compare/diff_analyze/diff_analyze_threshold.yaml +14 -0
- msprobe/core/compare/diff_analyze/first_diff_analyze.py +135 -0
- msprobe/core/compare/diff_analyze/ignore_op_list.yaml +3 -0
- msprobe/core/compare/find_first/__init__.py +0 -0
- msprobe/core/compare/find_first/analyzer.py +282 -0
- msprobe/core/compare/find_first/data_processor.py +35 -0
- msprobe/core/compare/find_first/graph.py +188 -0
- msprobe/core/compare/find_first/utils.py +189 -0
- msprobe/core/compare/highlight.py +74 -101
- msprobe/core/compare/layer_mapping/layer_mapping.py +14 -9
- msprobe/core/compare/merge_result/merge_result.py +2 -2
- msprobe/core/compare/multiprocessing_compute.py +45 -28
- msprobe/core/compare/npy_compare.py +7 -10
- msprobe/core/compare/utils.py +338 -130
- msprobe/core/config_check/checkers/dataset_checker.py +2 -1
- msprobe/core/config_check/checkers/env_args_checker.py +5 -5
- msprobe/core/config_check/checkers/hyperparameter_checker.py +30 -10
- msprobe/core/config_check/checkers/pip_checker.py +4 -3
- msprobe/core/config_check/checkers/random_checker.py +3 -3
- msprobe/core/config_check/checkers/weights_checker.py +2 -1
- msprobe/core/config_check/ckpt_compare/megatron_loader.py +2 -0
- msprobe/core/config_check/resource/hyperparameter.yaml +11 -1
- msprobe/core/config_check/utils/hyperparameter_parser.py +7 -3
- msprobe/core/config_check/utils/utils.py +10 -0
- msprobe/core/data_dump/api_registry.py +49 -30
- msprobe/core/data_dump/data_collector.py +71 -29
- msprobe/core/data_dump/data_processor/base.py +2 -0
- msprobe/core/data_dump/data_processor/mindspore_processor.py +47 -53
- msprobe/core/data_dump/data_processor/pytorch_processor.py +227 -93
- msprobe/core/data_dump/json_writer.py +81 -7
- msprobe/core/data_dump/scope.py +4 -6
- msprobe/core/hook_manager.py +129 -70
- msprobe/core/monitor/csv2db.py +361 -0
- msprobe/core/monitor/db_utils.py +278 -0
- msprobe/core/monitor/utils.py +35 -1
- msprobe/core/service.py +31 -39
- msprobe/core/single_save/single_comparator.py +16 -3
- msprobe/docs/01.installation.md +51 -19
- msprobe/docs/02.config_introduction.md +16 -20
- msprobe/docs/03.config_examples.md +26 -0
- msprobe/docs/04.kernel_dump_PyTorch.md +1 -1
- msprobe/docs/05.data_dump_PyTorch.md +6 -2
- msprobe/docs/06.data_dump_MindSpore.md +44 -7
- msprobe/docs/07.accuracy_checker_PyTorch.md +1 -1
- msprobe/docs/10.accuracy_compare_PyTorch.md +124 -44
- msprobe/docs/11.accuracy_compare_MindSpore.md +75 -7
- msprobe/docs/14.data_parse_PyTorch.md +1 -1
- msprobe/docs/19.monitor.md +94 -7
- msprobe/docs/21.visualization_PyTorch.md +71 -101
- msprobe/docs/22.visualization_MindSpore.md +69 -119
- msprobe/docs/23.generate_operator_PyTorch.md +1 -1
- msprobe/docs/25.tool_function_introduction.md +0 -1
- msprobe/docs/26.data_dump_PyTorch_baseline.md +7 -7
- msprobe/docs/28.debugger_save_instruction.md +184 -81
- msprobe/docs/29.data_dump_MSAdapter.md +6 -0
- msprobe/docs/31.config_check.md +4 -2
- msprobe/docs/36.calculation_result_change.md +75 -0
- msprobe/docs/FAQ.md +22 -1
- msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md +6 -2
- msprobe/docs/img/compare_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/docs/visualization/mindspeed_llamafactoary_img/1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/3.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/4.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/5.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/6.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/7.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory-qwen25vl.txt +59 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed-mm-qwen25vl.txt +80 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactory_mapping.md +330 -0
- msprobe/mindspore/__init__.py +1 -1
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +1 -1
- msprobe/mindspore/api_accuracy_checker/api_runner.py +9 -6
- msprobe/mindspore/api_accuracy_checker/compute_element.py +18 -12
- msprobe/mindspore/cell_processor.py +64 -25
- msprobe/mindspore/common/utils.py +51 -7
- msprobe/mindspore/compare/common_dir_compare.py +45 -37
- msprobe/mindspore/compare/ms_compare.py +10 -2
- msprobe/mindspore/compare/ms_graph_compare.py +47 -52
- msprobe/mindspore/debugger/debugger_config.py +18 -7
- msprobe/mindspore/debugger/precision_debugger.py +16 -12
- msprobe/mindspore/dump/cell_dump_process.py +130 -68
- msprobe/mindspore/dump/cell_dump_with_insert_gradient.py +10 -2
- msprobe/mindspore/dump/graph_mode_cell_dump.py +35 -9
- msprobe/mindspore/dump/graph_tensor_dump.py +11 -0
- msprobe/mindspore/dump/hook_cell/api_register.py +19 -20
- msprobe/mindspore/dump/hook_cell/hook_cell.py +12 -34
- msprobe/mindspore/dump/hook_cell/ms_hook_manager.py +142 -21
- msprobe/mindspore/dump/kernel_kbyk_dump.py +24 -0
- msprobe/mindspore/exception_dump/__init__.py +0 -0
- msprobe/mindspore/exception_dump/exception_dump_tool_factory.py +51 -0
- msprobe/mindspore/exception_dump/kernel_graph_exception_dump.py +57 -0
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +5 -4
- msprobe/mindspore/mindspore_service.py +2 -2
- msprobe/mindspore/mindtorch/mindtorch_adaptor.py +12 -7
- msprobe/mindspore/monitor/features.py +82 -0
- msprobe/mindspore/monitor/module_hook.py +168 -10
- msprobe/mindspore/monitor/utils.py +27 -1
- msprobe/mindspore/ms_config.py +12 -4
- msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +1 -1
- msprobe/mindspore/task_handler_factory.py +3 -1
- msprobe/nan_analyze/graph.py +1 -1
- msprobe/pytorch/api_accuracy_checker/common/config.py +3 -36
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +0 -24
- msprobe/pytorch/api_accuracy_checker/compare/compare.py +2 -12
- msprobe/pytorch/api_accuracy_checker/config.yaml +1 -6
- msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +2 -2
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +12 -132
- msprobe/pytorch/common/utils.py +1 -21
- msprobe/pytorch/compare/pt_compare.py +10 -2
- msprobe/pytorch/{hook_module/jit_script_wrapper.py → compare/pt_diff_analyze.py} +3 -15
- msprobe/pytorch/compare/utils.py +2 -1
- msprobe/pytorch/debugger/debugger_config.py +18 -23
- msprobe/pytorch/dump/module_dump/hook_wrapper.py +10 -7
- msprobe/pytorch/dump/module_dump/module_processer.py +41 -19
- msprobe/pytorch/free_benchmark/main.py +7 -4
- msprobe/pytorch/hook_module/api_register.py +62 -24
- msprobe/pytorch/hook_module/hook_module.py +9 -29
- msprobe/pytorch/hook_module/pt_hook_manager.py +84 -15
- msprobe/pytorch/hook_module/script_wrapper.py +140 -0
- msprobe/pytorch/hook_module/support_wrap_ops.yaml +6 -0
- msprobe/pytorch/monitor/csv2tb.py +1 -1
- msprobe/pytorch/monitor/features.py +94 -0
- msprobe/pytorch/monitor/module_hook.py +221 -81
- msprobe/pytorch/monitor/module_metric.py +27 -1
- msprobe/pytorch/monitor/optimizer_collect.py +109 -4
- msprobe/pytorch/online_dispatch/dispatch.py +42 -24
- msprobe/pytorch/online_dispatch/dump_compare.py +1 -1
- msprobe/pytorch/parse_tool/lib/visualization.py +0 -1
- msprobe/pytorch/pt_config.py +2 -51
- msprobe/pytorch/pytorch_service.py +7 -14
- msprobe/visualization/builder/graph_builder.py +192 -63
- msprobe/visualization/builder/graph_merger.py +986 -0
- msprobe/visualization/builder/msprobe_adapter.py +17 -15
- msprobe/visualization/compare/graph_comparator.py +26 -16
- msprobe/visualization/db_utils.py +252 -0
- msprobe/visualization/graph/base_node.py +2 -22
- msprobe/visualization/graph/distributed_analyzer.py +12 -12
- msprobe/visualization/graph/graph.py +44 -16
- msprobe/visualization/graph_service.py +143 -59
- msprobe/visualization/utils.py +103 -4
- msprobe/docs/08.accuracy_checker_online_PyTorch.md +0 -295
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +0 -205
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +0 -378
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +0 -239
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/dump_dispatch.py +0 -115
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +0 -250
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/torch_ops_config.yaml +0 -63
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +0 -198
- msprobe/pytorch/attl_manager.py +0 -65
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/LICENSE +0 -0
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/WHEEL +0 -0
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/entry_points.txt +0 -0
- {mindstudio_probe-8.1.2.dist-info → mindstudio_probe-8.2.1.dist-info}/top_level.txt +0 -0
- /msprobe/{pytorch/api_accuracy_checker/tensor_transport_layer → core/compare/diff_analyze}/__init__.py +0 -0
|
@@ -4,18 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
工具支持MindSpore版本:>=2.4.0
|
|
6
6
|
|
|
7
|
-
## 更新通知
|
|
8
|
-
|
|
9
|
-
请注意,tb_graph_ascend插件已于2025/3/12更新到1.0.0版本,如果当前环境已安装旧版本插件,推荐升级。
|
|
10
|
-
|
|
11
|
-
更新内容如下:
|
|
12
|
-
|
|
13
|
-
- 优化了信息栏,使用了更人性化、更美观的展示界面;
|
|
14
|
-
- 提升了节点渲染和搜索性能;
|
|
15
|
-
- 双图比对场景画布分离,操作左图时不会影响到右图;
|
|
16
|
-
- 新增浏览器匹配节点功能,双图比对场景有未匹配节点时,可通过在浏览器页面手动选中调试侧和标杆侧的未匹配节点进行精度比对;
|
|
17
|
-
- 新增颜色图例可配置功能。
|
|
18
|
-
|
|
19
7
|
## 工具特性
|
|
20
8
|
|
|
21
9
|
- 支持重建模型的层级结构;
|
|
@@ -25,6 +13,7 @@
|
|
|
25
13
|
- 支持多卡场景的批量构图,能够关联各卡的通信节点,分析各卡之间的数据传递;
|
|
26
14
|
- 支持节点名称搜索,按精度比对结果筛选节点,按溢出检测结果筛选节点,支持自动跳转展开节点所在的层级;
|
|
27
15
|
- 支持跨套件、跨框架的模型比对。
|
|
16
|
+
- 支持不同切分策略下两个模型的精度数据比对:[不同切分策略下的图合并](#325-不同切分策略下的图合并)。
|
|
28
17
|
|
|
29
18
|

|
|
30
19
|
|
|
@@ -32,40 +21,37 @@
|
|
|
32
21
|
|
|
33
22
|
### 1.1 安装msprobe工具
|
|
34
23
|
|
|
35
|
-
[msprobe工具安装](
|
|
24
|
+
[msprobe工具安装](./01.installation.md)
|
|
36
25
|
|
|
37
26
|
### 1.2 安装tb_graph_ascend
|
|
38
27
|
|
|
39
28
|
**请安装tb_graph_ascend,否则无法解析构图结果。**
|
|
40
29
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
如需升级工具,请先``pip3 uninstall tb-graph-ascend``再``pip3 install tb-graph-ascend``即可。
|
|
30
|
+
[tb_graph_ascend安装](../../../../plugins/tensorboard-plugins/tb_graph_ascend#2-安装方式)
|
|
44
31
|
|
|
45
32
|
## 2.模型结构数据采集
|
|
46
|
-
[
|
|
33
|
+
[PyTorch场景的数据采集](./06.data_dump_MindSpore.md)
|
|
47
34
|
|
|
48
35
|
**仅支持动态图场景,需要选择level为L0(cell信息)或者mix(cell信息+api信息),才能采集到模型结构数据,即采集结果件construct.json内容不为空**。
|
|
49
36
|
|
|
50
37
|
## 3.生成图结构文件
|
|
51
38
|
|
|
52
39
|
### 3.1 构图命令行说明
|
|
53
|
-
|
|
40
|
+
|
|
54
41
|
**命令示例如下**:
|
|
55
42
|
```
|
|
56
43
|
msprobe -f mindspore graph -i ./compare.json -o ./output
|
|
57
44
|
```
|
|
58
45
|
**命令行参数说明**:
|
|
59
46
|
|
|
60
|
-
| 参数名 | 说明
|
|
61
|
-
|
|
62
|
-
| -f 或 --framework | 指定训练框架。mindspore。
|
|
63
|
-
| -i 或 --input_path | 指定比对文件,参考[比对文件说明](#313-比对文件说明)
|
|
64
|
-
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型。文件名称基于时间戳自动生成,格式为:`compare_{timestamp}.vis或build_{timestamp}.vis`。
|
|
47
|
+
| 参数名 | 说明 | 是否必选 |
|
|
48
|
+
|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
|
|
49
|
+
| -f 或 --framework | 指定训练框架。mindspore。 | 是 |
|
|
50
|
+
| -i 或 --input_path | 指定比对文件,参考[比对文件说明](#313-比对文件说明) | 是 |
|
|
51
|
+
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型。文件名称基于时间戳自动生成,格式为:`compare_{timestamp}.vis.db或build_{timestamp}.vis.db`。 | 是 |
|
|
65
52
|
| -lm 或 --layer_mapping| 跨框架比对,MindSpore和PyTorch的比对场景。配置该参数时表示开启跨框架Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#71-自定义映射文件layer), 如何配置自定义映射文件请参考[模型分级可视化如何配置layer mapping映射文件](./visualization/layer_mapping_example.md)。配置该参数后,将仅按节点名称进行比对,忽略节点的 type 和 shape。如果调试侧和标杆侧有名称不同的节点,则需要配置自定义映射文件,-lm参数传入自定义映射文件路径;如果调试侧和标杆侧节点名称相同,则仅指定-lm即可。 | 否 |
|
|
66
|
-
| -oc 或 --overflow_check | 是否开启溢出检测模式,开启后会在输出
|
|
67
|
-
| -f 或 --fuzzy_match | 是否开启模糊匹配,bool类型。模糊匹配说明参考[匹配说明](#311-匹配说明)
|
|
68
|
-
| -cs 或 --complete_stack | 是否使用完整的堆栈信息,bool类型。默认使用精简的堆栈信息,数据量小有助于增加流畅度。完整堆栈和精简堆栈信息参考[堆栈信息说明](#72-堆栈信息说明) | 否 |
|
|
53
|
+
| -oc 或 --overflow_check | 是否开启溢出检测模式,开启后会在输出db文件中(`compare_{timestamp}.vis.db或build_{timestamp}.vis.db`)对每个溢出节点进行标记溢出等级,溢出等级说明参考[溢出等级说明](#312-溢出等级说明) | 否 |
|
|
54
|
+
| -f 或 --fuzzy_match | 是否开启模糊匹配,bool类型。模糊匹配说明参考[匹配说明](#311-匹配说明) | 否 |
|
|
69
55
|
|
|
70
56
|
#### 3.1.1 匹配说明
|
|
71
57
|
|
|
@@ -103,7 +89,7 @@ msprobe -f mindspore graph -i ./compare.json -o ./output
|
|
|
103
89
|
| npu_path | 指定待调试侧比对路径,str类型。工具根据路径格式自动进行单rank比对、多rank批量比对或多step批量比对,具体格式参考3.2 图构建和比对。 | 是 |
|
|
104
90
|
| bench_path | 指定标杆侧比对路径,str类型。单图构建场景可以不配置。 | 否 |
|
|
105
91
|
| is_print_compare_log | 配置是否开启单个算子的日志打屏。可取值 true 或 false,默认为 true。关闭后则只输出常规日志,bool 类型。 | 否 |
|
|
106
|
-
|
|
92
|
+
| parallel_merge | 配置是否开启不同切分策略下的图合并,dict类型。rank_size、tp、pp参数按实际情况进行配置。比对时配置npu、bench,只构图配置npu。 配置示例见[3.2.5 不同切分策略下的图合并](#325-不同切分策略下的图合并)。 | 否 |
|
|
107
93
|
|
|
108
94
|
### 3.2 图构建和比对
|
|
109
95
|
|
|
@@ -151,7 +137,7 @@ msprobe -f mindspore graph -i ./compare.json -o ./output
|
|
|
151
137
|
|
|
152
138
|
3.md5:dump了API和Module的输入输出数据统计信息和md5信息。
|
|
153
139
|
|
|
154
|
-
dump类型如何配置见[数据采集配置文件介绍](https://
|
|
140
|
+
dump类型如何配置见[数据采集配置文件介绍](https://gitcode.com/Ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/02.config_introduction.md)
|
|
155
141
|
|
|
156
142
|
**1. 准备比对文件**:
|
|
157
143
|
|
|
@@ -224,25 +210,15 @@ npu_path或bench_path格式:必须只包含rank+数字格式的文件夹,且
|
|
|
224
210
|
```
|
|
225
211
|
msprobe -f mindspore graph -i ./compare.json -o ./output
|
|
226
212
|
```
|
|
227
|
-
比对完成后将在**output**下生成
|
|
213
|
+
比对完成后将在**output**下生成1个**vis.db后缀文件**。
|
|
228
214
|
|
|
229
215
|
图构建:
|
|
230
216
|
```
|
|
231
|
-
├──
|
|
232
|
-
├── build_rank1_{timestamp}.vis
|
|
233
|
-
├── build_rank2_{timestamp}.vis
|
|
234
|
-
├── build_rank3_{timestamp}.vis
|
|
235
|
-
├── ...
|
|
236
|
-
├── build_rankn_{timestamp}.vis
|
|
217
|
+
├── build_{timestamp}.vis.db
|
|
237
218
|
```
|
|
238
219
|
图比对:
|
|
239
220
|
```
|
|
240
|
-
├──
|
|
241
|
-
├── compare_rank1_{timestamp}.vis
|
|
242
|
-
├── compare_rank2_{timestamp}.vis
|
|
243
|
-
├── compare_rank3_{timestamp}.vis
|
|
244
|
-
├── ...
|
|
245
|
-
├── compare_rankn_{timestamp}.vis
|
|
221
|
+
├── compare_{timestamp}.vis.db
|
|
246
222
|
```
|
|
247
223
|
##### 3.2.3.2 多step批量构建或比对
|
|
248
224
|
批量构建或比对多个step下的所有rank的数据
|
|
@@ -289,33 +265,15 @@ npu_path或bench_path格式:必须只包含step+数字格式的文件夹,且
|
|
|
289
265
|
```
|
|
290
266
|
msprobe -f mindspore graph -i ./compare.json -o ./output
|
|
291
267
|
```
|
|
292
|
-
比对完成后将在**output
|
|
268
|
+
比对完成后将在**output**下生成1个**vis.db后缀文件**。
|
|
293
269
|
|
|
294
270
|
图构建:
|
|
295
271
|
```
|
|
296
|
-
├──
|
|
297
|
-
├── build_step0_rank1_{timestamp}.vis
|
|
298
|
-
├── build_step0_rank2_{timestamp}.vis
|
|
299
|
-
├── build_step0_rank3_{timestamp}.vis
|
|
300
|
-
├── build_step1_rank0_{timestamp}.vis
|
|
301
|
-
├── build_step1_rank1_{timestamp}.vis
|
|
302
|
-
├── build_step1_rank2_{timestamp}.vis
|
|
303
|
-
├── build_step1_rank3_{timestamp}.vis
|
|
304
|
-
├── ...
|
|
305
|
-
├── build_stepn_rankn_{timestamp}.vis
|
|
272
|
+
├── build_{timestamp}.vis.db
|
|
306
273
|
```
|
|
307
274
|
图比对:
|
|
308
275
|
```
|
|
309
|
-
├──
|
|
310
|
-
├── compare_step0_rank1_{timestamp}.vis
|
|
311
|
-
├── compare_step0_rank2_{timestamp}.vis
|
|
312
|
-
├── compare_step0_rank3_{timestamp}.vis
|
|
313
|
-
├── compare_step1_rank0_{timestamp}.vis
|
|
314
|
-
├── compare_step1_rank1_{timestamp}.vis
|
|
315
|
-
├── compare_step1_rank2_{timestamp}.vis
|
|
316
|
-
├── compare_step1_rank3_{timestamp}.vis
|
|
317
|
-
├── ...
|
|
318
|
-
├── compare_stepn_rankn_{timestamp}.vis
|
|
276
|
+
├── compare_{timestamp}.vis.db
|
|
319
277
|
```
|
|
320
278
|
|
|
321
279
|
#### 3.2.4 仅模型结构比对
|
|
@@ -328,6 +286,48 @@ dump配置请参考[dump配置示例](./03.config_examples.md#35-task-配置为-
|
|
|
328
286
|
|
|
329
287
|
得到dump数据后,若需比较特定两个rank之间的数据,请参考[3.2.2 双图比对](#322-双图比对);若需进行多个rank或多个step的数据批量比对,请参考[3.2.3 批量构建或比对](#323-批量构建或比对)。
|
|
330
288
|
|
|
289
|
+
#### 3.2.5 不同切分策略下的图合并
|
|
290
|
+
|
|
291
|
+
适用场景:不同模型并行切分策略下,两个模型产生了精度差异,需要进行整网数据比对,但被切分的数据或模型结构分布于多rank中无法进行比对,需要将分布在各个rank的数据或模型结构合并后再进行比对。
|
|
292
|
+
|
|
293
|
+
使用限制:
|
|
294
|
+
|
|
295
|
+
- 当前支持的模型并行切分策略:Tensor Parallelism(TP)、Pipeline Parallelism(PP)、Virtual Pipeline Parallelism(VPP),暂不支持Context Parallelism(CP)和Expert Parallelism(EP)。
|
|
296
|
+
- 当前支持基于Megatron、MindSpeed-LLM套件的模型进行图合并,其他套件的模型图合并效果有待验证;
|
|
297
|
+
- 当前仅支持msprobe工具dump的statistics数据, level需指定L0或者mix;
|
|
298
|
+
- 图合并比对时要确保Data Parallelism(DP)切分一致,例如rank=8 tp=1 pp=8的配置,dp=1,图合并将得到一张图,rank=8 tp=1 pp=4的配置,dp=2,图合并将得到两张图,暂不支持数量不一致的图进行比对。
|
|
299
|
+
|
|
300
|
+
使能方式:
|
|
301
|
+
|
|
302
|
+
在compare.json里增加parallel_merge配置项, rank_size、tp、pp和vpp参数按实际情况进行配置。
|
|
303
|
+
|
|
304
|
+
参数说明:
|
|
305
|
+
|
|
306
|
+
所需tp、pp和vpp参数来自于Megatron、MindSpeed-LLM套件中的训练脚本实际配置。
|
|
307
|
+
|
|
308
|
+
| 参数名 | 说明 | 是否必填 |
|
|
309
|
+
|-----------|--------------------------------------------------------------------------------------------------------------------------|------|
|
|
310
|
+
| rank_size | 模型实际训练所用加速卡的数量,int类型。`rank_size=tp*pp*cp*dp`,由于暂不支持CP合并,图合并功能中默认cp=1。 | 是 |
|
|
311
|
+
| tp | 张量并行大小,int类型。实际训练脚本中需指定`--tensor-model-parallel-size T`,其中`T`表示张量模型并行大小,即**图合并所需的参数tp**, `tp=T`。 | 是 |
|
|
312
|
+
| pp | 流水线并行的阶段数,int类型。实际训练脚本中需指定`--pipeline-model-parallel-size P`,其中`P`表示流水线并行的阶段数,即**图合并所需的参数pp**, `pp=P`。 | 是 |
|
|
313
|
+
| vpp | 虚拟流水线并行阶段数,int类型。虚拟流水线并行依赖流水线并行,实际训练脚本中需指定`--num-layers-per-virtual-pipeline-stage V`,其中`V`表示每个虚拟流水线阶段的层数;指定`--num-layers L`,其中`L`表示模型总层数,**图合并所需的参数vpp**=`L/V/P`。vpp参数可以不配置,默认vpp=1代表未开启虚拟流水线并行。 | 否 |
|
|
314
|
+
| order | 模型并行维度的排序顺序,str类型。Megatron默认为`tp-cp-ep-dp-pp`。 如果使用msprobe工具dump数据指定level为L0并且实际训练脚本中的order非默认值(例如实际训练脚本中指定`--use-tp-pp-dp-mapping`),请传入修改后的order。dump数据指定level为mix则无需修改。 | 否 |
|
|
315
|
+
|
|
316
|
+
npu_path、bench_path的配置以及执行命令请参考[3.2.3 批量构建或比对](#323-批量构建或比对)
|
|
317
|
+
|
|
318
|
+
如果只进行图构建,"bench_path"和"parallel_merge"中的"bench"参数可不配置。
|
|
319
|
+
|
|
320
|
+
```
|
|
321
|
+
{
|
|
322
|
+
"npu_path": "./npu_dump",
|
|
323
|
+
"bench_path": "./bench_dump",
|
|
324
|
+
"is_print_compare_log": true,
|
|
325
|
+
"parallel_merge": {
|
|
326
|
+
"npu": {"rank_size": 8, "tp": 8, "pp": 1},
|
|
327
|
+
"bench": {"rank_size": 8, "tp": 1, "pp": 8}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
```
|
|
331
331
|
|
|
332
332
|
## 4.启动TensorBoard
|
|
333
333
|
|
|
@@ -382,13 +382,18 @@ tensorboard --logdir out_path
|
|
|
382
382
|
|
|
383
383
|
### 5.1 浏览器打开图
|
|
384
384
|
推荐使用谷歌浏览器,在浏览器中输入机器地址+端口号回车,出现TensorBoard页面,其中/#graph_ascend会自动拼接。
|
|
385
|
+
|
|
385
386
|

|
|
387
|
+
|
|
386
388
|
如果您切换了TensorBoard的其他功能,此时想回到模型分级可视化页面,可以点击左上方的**GRAPH_ASCEND**
|
|
389
|
+
|
|
387
390
|

|
|
388
391
|
|
|
389
392
|
### 5.2 查看图
|
|
390
393
|

|
|
391
394
|
|
|
395
|
+
MicroStep是指在一次完整的权重更新前执行的多次前向和反向传播过程,一次完整的训练迭代(step)可以进一步细分为多个更小的步骤(micro step)。其中分级可视化工具通过识别模型首层结构中一次完整的前反向作为一次micro step。
|
|
396
|
+
|
|
392
397
|
### 5.3 名称搜索
|
|
393
398
|

|
|
394
399
|
|
|
@@ -414,14 +419,14 @@ tensorboard --logdir out_path
|
|
|
414
419
|
颜色越深,精度比对差异越大,越可疑,具体信息可见浏览器页面左下角颜色图例。
|
|
415
420
|
|
|
416
421
|
#### 6.1.1 真实数据模式
|
|
417
|
-
|
|
422
|
+
节点中所有输入的最小双千指标和所有输出的最小双千分之一指标的差值,反映了双千指标的下降情况,**该数值越大,表明两组模型的精度差异越大,在图中标注的对应颜色会更深**。
|
|
418
423
|
|
|
419
424
|
``One Thousandth Err Ratio(双千分之一)精度指标:Tensor中的元素逐个与对应的标杆数据对比,相对误差小于千分之一的比例占总元素个数的比例,比例越接近1越好``
|
|
420
425
|
|
|
421
426
|
如果调试侧(NPU)节点的output指标中的最大值(MAX)或最小值(MIN)中存在 nan/inf/-inf,直接标记为最深颜色。
|
|
422
427
|
|
|
423
428
|
#### 6.1.2 统计信息模式
|
|
424
|
-
|
|
429
|
+
节点中输出的统计量相对误差,**该数值越大,表明两组模型的精度差异越大,在图中标注的对应颜色会更深**。
|
|
425
430
|
|
|
426
431
|
``相对误差:abs((npu统计值 - bench统计值) / bench统计值)``
|
|
427
432
|
|
|
@@ -496,61 +501,6 @@ yaml文件中只需配置MindSpore与PyTorch模型代码中功能一致但名称
|
|
|
496
501
|
|
|
497
502
|

|
|
498
503
|
|
|
499
|
-
### 7.2 堆栈信息说明
|
|
500
|
-
|
|
501
|
-
**精简堆栈**
|
|
502
|
-
|
|
503
|
-
保留一条当前模块或api的调用信息
|
|
504
|
-
|
|
505
|
-
```json
|
|
506
|
-
{
|
|
507
|
-
"Cell.model.language_model.embedding.word_embeddings.reduce_scatter_to_sp_region.ReduceScatterToSequenceParallelRegion.forward.0": [
|
|
508
|
-
"File /home/mindformers/experimental/distri_cores/tensor_parallel/layers.py, line 770, in construct, \n output = self.reduce_scatter_to_sp_region(output_parallel)"
|
|
509
|
-
]
|
|
510
|
-
}
|
|
511
|
-
```
|
|
512
|
-
|
|
513
|
-
**完整堆栈**
|
|
514
|
-
|
|
515
|
-
当前模块或api完整的调用信息
|
|
516
|
-
|
|
517
|
-
```json
|
|
518
|
-
{
|
|
519
|
-
"Cell.model.language_model.embedding.word_embeddings.reduce_scatter_to_sp_region.ReduceScatterToSequenceParallelRegion.forward.0": [
|
|
520
|
-
"File /home/mindspore/nn/cell.py, line 507, in _run_construct, \n output = self._run_forward_hook(inputs, output)",
|
|
521
|
-
"File /home/mindspore/nn/cell.py, line 759, in _complex_call, \n output = self._run_construct(*args, **kwargs)",
|
|
522
|
-
"File /home/mindspore/nn/cell.py, line 747, in __call__, \n return self._complex_call(*args, **kwargs)",
|
|
523
|
-
"File /home/mindformers/experimental/distri_cores/tensor_parallel/layers.py, line 770, in construct, \n output = self.reduce_scatter_to_sp_region(output_parallel)",
|
|
524
|
-
"File /home/mindspore/nn/cell.py, line 2462, in _backward_hook_construct, \n outputs = self.construct(outputs, **kwargs)",
|
|
525
|
-
"File /home/mindspore/nn/cell.py, line 498, in _run_construct, \n output = self._backward_hook_construct(*inputs, **kwargs)",
|
|
526
|
-
"File /home/mindspore/nn/cell.py, line 745, in __call__, \n return self._run_construct(*args, **kwargs)",
|
|
527
|
-
"File /home/mindformers/experimental/distri_cores/transformer/language_model.py, line 151, in construct, \n embeddings = self.word_embeddings(input_ids)",
|
|
528
|
-
"File /home/mindspore/nn/cell.py, line 2460, in _backward_hook_construct, \n outputs = self.construct(*outputs, **kwargs)",
|
|
529
|
-
"File /home/mindspore/nn/cell.py, line 498, in _run_construct, \n output = self._backward_hook_construct(*inputs, **kwargs)",
|
|
530
|
-
"File /home/mindspore/nn/cell.py, line 745, in __call__, \n return self._run_construct(*args, **kwargs)",
|
|
531
|
-
"File /home/mindformers/experimental/distri_cores/transformer/language_model.py, line 391, in construct, \n text_embedding_out = self.embedding(enc_input_ids, enc_position_ids,",
|
|
532
|
-
"File /home/mindspore/nn/cell.py, line 2460, in _backward_hook_construct, \n outputs = self.construct(*outputs, **kwargs)",
|
|
533
|
-
"File /home/mindspore/nn/cell.py, line 498, in _run_construct, \n output = self._backward_hook_construct(*inputs, **kwargs)",
|
|
534
|
-
"File /home/mindspore/nn/cell.py, line 745, in __call__, \n return self._run_construct(*args, **kwargs)",
|
|
535
|
-
"File /home/model/gpt_model.py, line 104, in construct, \n lm_output = self.language_model(tokens,",
|
|
536
|
-
"File /home/mindspore/nn/cell.py, line 2460, in _backward_hook_construct, \n outputs = self.construct(*outputs, **kwargs)",
|
|
537
|
-
"File /home/mindspore/nn/cell.py, line 498, in _run_construct, \n output = self._backward_hook_construct(*inputs, **kwargs)",
|
|
538
|
-
"File /home/mindspore/nn/cell.py, line 745, in __call__, \n return self._run_construct(*args, **kwargs)",
|
|
539
|
-
"File /home/mindformers/experimental/distri_cores/pipeline_parallel/pipeline_cell.py, line 429, in construct, \n return self.model(*inputs)",
|
|
540
|
-
"File /home/mindspore/nn/cell.py, line 757, in _complex_call, \n output = self.construct(*args, **kwargs)",
|
|
541
|
-
"File /home/mindspore/nn/cell.py, line 747, in __call__, \n return self._complex_call(*args, **kwargs)",
|
|
542
|
-
"File /home/mindformers/experimental/distri_cores/pipeline_parallel/schedules.py, line 121, in run_forward, \n output_tensor = model(*input_data, recv_data=None)",
|
|
543
|
-
"File /home/mindformers/experimental/distri_cores/pipeline_parallel/schedules.py, line 735, in forward_backward_pipelining_without_interleaving, \n micro_input_data = run_forward(*micro_input_data,",
|
|
544
|
-
"File /home/mindformers/experimental/distri_cores/training.py, line 409, in forward_backward_with_pipelining, \n loss, logits, grads = forward_backward_pipelining_without_interleaving(",
|
|
545
|
-
"File /home/mindformers/experimental/distri_cores/training.py, line 533, in construct, \n (loss, _), grads = self.forward_backward_func(*inputs_tuple, loss_scale=current_step_loss_scale, **inputs_dict)",
|
|
546
|
-
"File /home/mindspore/nn/cell.py, line 757, in _complex_call, \n output = self.construct(*args, **kwargs)",
|
|
547
|
-
"File /home/mindspore/nn/cell.py, line 747, in __call__, \n return self._complex_call(*args, **kwargs)",
|
|
548
|
-
"File /home/mindformers/experimental/distri_cores/training.py, line 655, in train, \n loss, is_finite, loss_scale, learning_rate = train_one_step_cell(**data)",
|
|
549
|
-
"File /home/model/pretrain_gpt.py, line 303, in main, \n train(",
|
|
550
|
-
"File /home/model/pretrain_gpt.py, line 316, in <module>, \n main()"
|
|
551
|
-
]
|
|
552
|
-
}
|
|
553
|
-
```
|
|
554
504
|
# FAQ
|
|
555
505
|
1. 图比对场景,节点呈现灰色,且没有精度比对数据,怎么处理?
|
|
556
506
|
|
|
@@ -13,7 +13,7 @@ b. 在生成单API脚本时可以选择由工具构造随机数获得 dump 数
|
|
|
13
13
|
### 前提
|
|
14
14
|
1. 安装 msprobe。详见[ msprobe 安装](./01.installation.md)章节。
|
|
15
15
|
2. 已完成对训练过程的dump,获得dump.json文件。
|
|
16
|
-
[PyTorch场景的数据采集](https://
|
|
16
|
+
[PyTorch场景的数据采集](https://gitcode.com/Ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/05.data_dump_PyTorch.md)
|
|
17
17
|
|
|
18
18
|
**目前仅支持复现API级的数据,故dump时level可选择L1(API信息)或者mix(module信息+API信息)。如需复现真实数据场景的API脚本,dump时task应选择tensor,如需复现随机数据场景的API脚本,dump时task选择statistics**。
|
|
19
19
|
3. 发现某个算子疑似存在精度问题,并得知算子名,如Functional.softmax.3、Tensor.add.0、Torch.matmul.5等
|
|
@@ -7,7 +7,6 @@
|
|
|
7
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
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
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
10
|
| [溢出检查<br>(overflow_checker)](./12.overflow_check_PyTorch.md) | 检测模型计算过程的输入输出,并在溢出时落盘数据,助力用户快速定位溢出位置。 | 1、当模型出现溢出时,用于快速定位最先溢出的API或Module<br>2、相比数据采集,性能更优,磁盘压力更小 | 1、局限性同数据采集 |
|
|
12
11
|
| [数据解析<br>(parse_tool)](./14.data_parse_PyTorch.md) | 交互式界面处理解析kernel层级dump数据,便于查看分析。 | 1、比对kernel层级dump数据的一致性 | 1、仅限于NPU |
|
|
13
12
|
| [无标杆比对<br>(free_benchmark)](./15.free_benchmarking_PyTorch.md) | 不依赖标杆数据,通过对算子输入增加微小扰动,计算扰动后输出与原始输出的相对误差,识别有精度风险算子。 | 1、无标杆数据场景下的算子精度排查<br>2、对个别算子进行升精度、“to cpu”等操作,以验证其对模型loss的影响 | 1、由于需要拷贝输入进行二次执行,所以在遇到大张量的输入时容易发生显存OOM的问题, 特别是反向比对过程。建议结合白名单使用<br>2、比对会延长训练时间,整网比对可能会造成严重的耗时膨胀,建议结合白名单使用 |
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# PyTorch 场景的精度数据采集基线
|
|
2
2
|
|
|
3
|
-
## "statistics"
|
|
3
|
+
## "statistics"模式采集时间膨胀参考基线
|
|
4
4
|
|
|
5
|
-
该基线为PyTorch框架下,使用"statistics"
|
|
5
|
+
该基线为PyTorch框架下,使用"statistics"模式采集数据性能膨胀的参考基线。本基线测试了单层 DeepSeek 大模型在不同采集模式8卡下的时间膨胀。
|
|
6
6
|
|
|
7
|
-
| 采集模式 | 无工具 (耗时) | 加工具但未使能 Dump (耗时) |
|
|
8
|
-
|
|
9
|
-
| L0 | ≈
|
|
10
|
-
| L1 | ≈
|
|
11
|
-
| mix | ≈
|
|
7
|
+
| 采集模式 | 无工具 (耗时) | 加工具但未使能 Dump (耗时) | 加工具并使能 Dump (耗时) | 加工具并使能 Md5 Dump (耗时) |
|
|
8
|
+
|:--------:|:--------:|:-------------------:|:--------------------:|:--------------------:|
|
|
9
|
+
| L0 | ≈95.1 ms | ≈95.5 ms (无膨胀) | ≈420.0 ms (膨胀4.5倍) | ≈1011.3 ms (膨胀10倍) |
|
|
10
|
+
| L1 | ≈95.1 ms | ≈115.8 ms (膨胀1.2倍) | ≈2469.0 ms (膨胀26倍) | ≈8636.0 ms (膨胀90倍) |
|
|
11
|
+
| mix | ≈95.1 ms | ≈117.8 ms (膨胀1.2倍) | ≈3635.4 ms (膨胀38 倍) | ≈10698.3 ms (膨胀112倍) |
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
## "tensor"模式采集数据量参考基线
|