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
|
@@ -28,6 +28,12 @@ msprobe 工具通过在训练脚本中添加 `PrecisionDebugger` 接口并启动
|
|
|
28
28
|
|
|
29
29
|
dump "statistics"模式的性能膨胀大小"与"tensor"模式采集的数据量大小,可以参考[dump基线](data_dump_MindSpore/data_dump_MindSpore_baseline.md)。
|
|
30
30
|
|
|
31
|
+
**注意**:
|
|
32
|
+
|
|
33
|
+
* 因 MindSpore 框架自动微分机制的限制,dump 数据中可能会缺少原地操作模块/API 及其上一个模块/API 的反向数据。
|
|
34
|
+
|
|
35
|
+
* 使用msprobe工具后loss/gnorm发生变化:可能是工具中的item操作引入同步,pt/ms框架的hook机制等原因导致的,详见《工具导致计算结果变化》。
|
|
36
|
+
|
|
31
37
|
## 5. 场景介绍
|
|
32
38
|
|
|
33
39
|
### 5.1 静态图场景
|
|
@@ -82,7 +88,7 @@ PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None, step=
|
|
|
82
88
|
|
|
83
89
|
#### 6.1.1 start
|
|
84
90
|
|
|
85
|
-
|
|
91
|
+
**功能说明**:启动精度数据采集。静态图场景下,必须在mindspore.communication.init 调用前添加。如果没有使用 [Model](https://www.mindspore.cn/tutorials/zh-CN/r2.3.1/advanced/model.html) 高阶 API 进行训练,则需要与 stop 函数一起添加在 for 循环内,否则只有需要传入model参数时,才使用该接口。
|
|
86
92
|
|
|
87
93
|
**原型**:
|
|
88
94
|
|
|
@@ -92,7 +98,7 @@ start(model=None, token_range=None)
|
|
|
92
98
|
|
|
93
99
|
**参数说明**:
|
|
94
100
|
|
|
95
|
-
1. model:指定需要采集数据的实例化模型,支持传入mindspore.nn.Cell、List[mindspore.nn.Cell]或Tuple[mindspore.nn.Cell] 类型,默认未配置。Cell级别("L0" level)dump 与 "mix" level dump 时,必须传入 model 才可以采集 model 内的所有Cell
|
|
101
|
+
1. model:指定需要采集数据的实例化模型,支持传入mindspore.nn.Cell、List[mindspore.nn.Cell]或Tuple[mindspore.nn.Cell] 类型,默认未配置。Cell级别("L0" level)dump 与 "mix" level dump 时,必须传入 model 才可以采集 model 内的所有 Cell 对象数据,且若存在会进行图编译的 Cell 对象(例如被 `mindspore.jit` 装饰的 Cell),则必须在第一个 step 训练开始前调用 `start` 接口。API级别("L1" level)dump 时,传入 model 可以采集 model 内包含 primitive op 对象在内的所有 API 数据,若不传入 model 参数,则只采集非 primitive op 的 API 数据。token_range不为None时,必须传入model参数。
|
|
96
102
|
<br>对于复杂模型,如果仅需要监控一部分(如model.A,model.A extends mindspore.nn.Cell),传入需要监控的部分(如model.A)即可。
|
|
97
103
|
注意:传入的当前层不会被dump,工具只会dump传入层的子层级。如传入了model.A,A本身不会被dump,而是会dump A.x, A.x.xx等。
|
|
98
104
|
2. token_range:指定推理模型采集时的token循环始末范围,支持传入[int, int]类型,代表[start, end],范围包含边界,默认未配置。
|
|
@@ -100,7 +106,7 @@ start(model=None, token_range=None)
|
|
|
100
106
|
#### 6.1.2 stop
|
|
101
107
|
|
|
102
108
|
**功能说明**:停止精度数据采集。在 **start** 函数之后的任意位置添加。若 **stop** 函数添加在反向计算代码之后,则会采集 **start** 和该函数之间的前反向数据。
|
|
103
|
-
若 **stop** 函数添加在反向计算代码之前,则需要将 [**step**](#613-step) 函数添加到反向计算代码之后,才能采集 **start**
|
|
109
|
+
若 **stop** 函数添加在反向计算代码之前,则需要将 [**step**](#613-step) 函数添加到反向计算代码之后,才能采集 **start** 和该函数之间的前反向数据,参考[**采集指定代码块的前反向数据**](#7213-采集指定代码块的前反向数据)。
|
|
104
110
|
**仅未使用 Model 高阶 API 的动态图场景支持。**
|
|
105
111
|
|
|
106
112
|
**注意**:**stop** 函数必须调用,否则可能导致精度数据落盘不全。
|
|
@@ -153,6 +159,7 @@ save(variable, name, save_backward=True)
|
|
|
153
159
|
| name | 指定的名称 | str | 是 |
|
|
154
160
|
| save_backward | 是否保存反向数据 | boolean | 否 |
|
|
155
161
|
|
|
162
|
+
具体使用样例可参考:[单点保存工具使用介绍](./28.debugger_save_instruction.md)。
|
|
156
163
|
|
|
157
164
|
#### 6.1.6 set_init_step
|
|
158
165
|
|
|
@@ -236,7 +243,7 @@ MsprobeInitStep()
|
|
|
236
243
|
|
|
237
244
|
**原型**:
|
|
238
245
|
```python
|
|
239
|
-
seed_all(seed=1234, mode=False, rm_dropout=
|
|
246
|
+
seed_all(seed=1234, mode=False, rm_dropout=False)
|
|
240
247
|
```
|
|
241
248
|
|
|
242
249
|
**参数说明**:
|
|
@@ -245,7 +252,7 @@ seed_all(seed=1234, mode=False, rm_dropout=True)
|
|
|
245
252
|
|
|
246
253
|
2. mode:确定性计算使能,可配置 True 或 False,默认值:False,非必选。参数示例:mode=True。该参数设置为 True 后,将会开启算子确定性运行模式与归约类通信算子(AllReduce、ReduceScatter、Reduce)的确定性计算。注意:确定性计算会导致API执行性能降低,建议在发现模型多次执行结果不同的情况下开启。
|
|
247
254
|
|
|
248
|
-
3. rm_dropout:控制dropout失效的开关。可配置 True 或 False,默认值:
|
|
255
|
+
3. rm_dropout:控制dropout失效的开关。可配置 True 或 False,默认值:False,非必选。参数示例:rm_dropout=True。该参数设置为 True 后,将会使mindspore.ops.Dropout,mindspore.ops.Dropout2D,mindspore.ops.Dropout3D,mindspore.mint.nn.Dropout和mindspore.mint.nn.functional.dropout失效,以避免因随机dropout造成的网络随机性。建议在采集mindspore数据前开启。注意:通过rm_dropout控制dropout失效或生效需要在初始化Dropout实例前调用才能生效。
|
|
249
256
|
|
|
250
257
|
## 7. 示例代码
|
|
251
258
|
|
|
@@ -365,6 +372,34 @@ trainer = Model(model, loss_fn=loss_fn, optimizer=optimizer, metrics={'accuracy'
|
|
|
365
372
|
trainer.train(1, train_dataset, callbacks=[MsprobeStep(debugger)])
|
|
366
373
|
```
|
|
367
374
|
|
|
375
|
+
##### 7.2.1.3 采集指定代码块的前反向数据
|
|
376
|
+
|
|
377
|
+
```python
|
|
378
|
+
import mindspore as ms
|
|
379
|
+
from mindspore import set_device
|
|
380
|
+
from mindspore.train import Model
|
|
381
|
+
ms.set_context(mode=ms.PYNATIVE_MODE)
|
|
382
|
+
|
|
383
|
+
set_device("Ascend", 0)
|
|
384
|
+
|
|
385
|
+
from msprobe.mindspore import PrecisionDebugger
|
|
386
|
+
from msprobe.mindspore.common.utils import MsprobeStep
|
|
387
|
+
debugger = PrecisionDebugger(config_path="./config.json")
|
|
388
|
+
|
|
389
|
+
# 模型、损失函数的定义及初始化等操作
|
|
390
|
+
# ...
|
|
391
|
+
# 数据集迭代的位置一般为模型训练开始的位置
|
|
392
|
+
for data, label in data_loader:
|
|
393
|
+
debugger.start() # 开启数据dump
|
|
394
|
+
# 如下是模型每个step执行的逻辑
|
|
395
|
+
output = model(data)
|
|
396
|
+
|
|
397
|
+
debugger.stop() # 插入该函数到start函数之后,只dump start函数到该函数之间的前反向数据,可以支持start-stop-start-stop-step分段采集。
|
|
398
|
+
# ...
|
|
399
|
+
loss.backward()
|
|
400
|
+
debugger.step() # 结束一个step的dump
|
|
401
|
+
```
|
|
402
|
+
|
|
368
403
|
#### 7.2.2 L2 级别
|
|
369
404
|
|
|
370
405
|
##### 7.2.2.1 未使用 Model 高阶 API
|
|
@@ -473,7 +508,7 @@ L2 级别 dump 的目录结构如下所示:
|
|
|
473
508
|
2. 若原始文件全名长度超过255个字符,则文件基础名会被转换为长度为32位的随机数字字符串,原始文件名与转换后文件名的对应关系会保存在同目录下的`mapping.csv`文件中。
|
|
474
509
|
3. acl_dump_{device_id}.json 为在 Dump 接口调用过程中生成的中间文件,一般情况下无需关注。
|
|
475
510
|
|
|
476
|
-
其他场景下,除 kernel_kbyk_dump.json(jit_level=O0/O1)、kernel_graph_dump.json(jit_level=O2)等无需关注的中间文件外的其他 dump 结果文件请参见 MindSpore 官方文档中的[ Ascend 下 O0/O1 模式 Dump 数据对象目录和数据文件介绍](https://www.mindspore.cn/docs/zh-CN/r2.5.0/model_train/debug/dump.html#%E6%95%B0%E6%8D%AE%E5%AF%B9%E8%B1%A1%E7%9B%AE%E5%BD%95%E5%92%8C%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D)
|
|
511
|
+
其他场景下,除 kernel_kbyk_dump.json(jit_level=O0/O1)、kernel_graph_dump.json(jit_level=O2)等无需关注的中间文件外的其他 dump 结果文件请参见 MindSpore 官方文档中的[ Ascend 下 O0/O1 模式 Dump 数据对象目录和数据文件介绍](https://www.mindspore.cn/docs/zh-CN/r2.5.0/model_train/debug/dump.html#%E6%95%B0%E6%8D%AE%E5%AF%B9%E8%B1%A1%E7%9B%AE%E5%BD%95%E5%92%8C%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D)
|
|
477
512
|
### 8.2 动态图场景
|
|
478
513
|
|
|
479
514
|
dump 结果目录结构示例如下:
|
|
@@ -518,7 +553,7 @@ dump 结果目录结构示例如下:
|
|
|
518
553
|
* `dump.json`: 保存API或Cell前反向数据的统计量信息。包含dump数据的API名称或Cell名称,各数据的dtype、 shape、max、min、mean、L2norm(L2范数,平方根)统计信息以及当配置summary_mode="md5"时的CRC-32数据。具体介绍可参考[dump.json文件说明](./27.dump_json_instruction.md#2-mindspore-场景下的-dumpjson-文件)。
|
|
519
554
|
* `dump_error_info.log`: 仅在dump工具报错时拥有此记录日志,用于记录dump错误日志。
|
|
520
555
|
* `stack.json`:API/Cell的调用栈信息。
|
|
521
|
-
* `construct.json
|
|
556
|
+
* `construct.json`:根据model层级展示分层分级结构,level为L1时,construct.json内容为空。
|
|
522
557
|
|
|
523
558
|
dump 过程中,npy 文件在对应API或者模块被执行后就会落盘,而 json 文件则需要在正常执行 PrecisionDebugger.stop() 后才会写入完整数据,因此,程序异常终止时,被执行API对应的 npy 文件已被保存,但 json 文件中的数据可能丢失。
|
|
524
559
|
|
|
@@ -548,6 +583,8 @@ dump 过程中,npy 文件在对应API或者模块被执行后就会落盘,
|
|
|
548
583
|
│ | | ├── ...
|
|
549
584
|
```
|
|
550
585
|
|
|
586
|
+
**注意**:因为在被 `mindspore.jit` 装饰的 construct 方法前后插入的 Dump 算子既处于动态图模式,也处于静态图模式,所以最外层被装饰的 Cell 对象的精度数据将被重复采集。
|
|
587
|
+
|
|
551
588
|
- config.json 文件配置 level 为 L1 时, 若 `mindspore.jit` 的 `capture_mode` 参数设置为 ast(原 PSJit 场景), 则被装饰的部分也作为 API 被 dump 到对应目录;若 `mindspore.jit` 的 `capture_mode` 参数设置为 bytecode(原 PIJit 场景), 则被装饰的部分会被还原为动态图,按 API 粒度进行 dump。
|
|
552
589
|
|
|
553
590
|
- config.json 文件配置 level 为 L2 时, 仅会 dump 被 `mindspore.jit` 装饰部分的 kernel 精度数据,其结果目录同 jit_level 为 O0/O1 时的静态图 dump 结果相同。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 1 简介
|
|
4
4
|
|
|
5
|
-
**PyTorch 离线精度预检**通过扫描昇腾 NPU
|
|
5
|
+
**PyTorch 离线精度预检**通过扫描昇腾 NPU 上用户训练模型中的PyTorch API,输出模型精度的诊断和分析结果。具体而言,该工具通过采集模型中所有 API 的前反向信息,构造相应的单元测试,将 NPU 输出与标杆(CPU 高精度)比对,从而计算对应的精度指标,该过程通过子命令 run_ut 执行;将 NPU 环境下采集的预检数据拷贝至 GPU 环境,同样执行 run_ut;最后通过**新精度标准比对法**<sup>a</sup>将 NPU 和 GPU 的预检结果进行比对,从而找出 NPU 中存在精度问题的 API。同时,本工具支持**随机生成模式和真实数据模式**<sup>b</sup>。
|
|
6
6
|
|
|
7
7
|
a. 依据新精度标准,对不同的API采取不同的比对算法(包括绝对阈值法,标杆比对法、二进制一致法、ULP误差比对法和双千指标法),最终给定预检判定结果;
|
|
8
8
|
|
|
@@ -51,15 +51,17 @@ msprobe -f pytorch compare -i ./compare.json -o ./output -s
|
|
|
51
51
|
|
|
52
52
|
完整参数说明:
|
|
53
53
|
|
|
54
|
-
| 参数名
|
|
55
|
-
|
|
56
|
-
| -f 或 --framework
|
|
57
|
-
| -i 或 --input_path | 指定[比对文件](#51-比对文件),str 类型。
|
|
58
|
-
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型,默认在当前目录创建output目录。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。<br>提示:output目录下与结果件同名文件将被删除覆盖。
|
|
59
|
-
| -s 或 --stack_mode | 比对结果展示调用栈信息(NPU_Stack_Info)的开关,bool 类型。单卡场景开启时,根据[比对文件](#51-比对文件)的参数说明配置stack_path;多卡场景开启时,自动识别npu_dump目录下stack.json文件,如存在生成详细调用栈信息,否则不生成,此参数不生效。通过直接配置该参数开启,默认未配置,表示关闭。
|
|
54
|
+
| 参数名 | 说明 | 是否必选 |
|
|
55
|
+
|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
|
|
56
|
+
| -f 或 --framework | 指定训练框架。pytorch。 | 是 |
|
|
57
|
+
| -i 或 --input_path | 指定[比对文件](#51-比对文件),str 类型。 | 是 |
|
|
58
|
+
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型,默认在当前目录创建output目录。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。<br>提示:output目录下与结果件同名文件将被删除覆盖。 | 否 |
|
|
59
|
+
| -s 或 --stack_mode | 比对结果展示调用栈信息(NPU_Stack_Info)的开关,bool 类型。单卡场景开启时,根据[比对文件](#51-比对文件)的参数说明配置stack_path;多卡场景开启时,自动识别npu_dump目录下stack.json文件,如存在生成详细调用栈信息,否则不生成,此参数不生效。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
|
|
60
60
|
| -c 或 --compare_only | 仅比对开关,bool 类型。该参数默认未配置,会启用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。通过配置该参数取消自动精度分析,仅输出比对结果表格。 | 否 |
|
|
61
|
-
| -f 或 --fuzzy_match | 模糊匹配,bool 类型。开启后,对于网络中同一层级且命名仅调用次数不同的 API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。
|
|
62
|
-
| -
|
|
61
|
+
| -f 或 --fuzzy_match | 模糊匹配,bool 类型。开启后,对于网络中同一层级且命名仅调用次数不同的 API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
|
|
62
|
+
| -hl 或 --highlight | 高亮颜色标记。开启后,比对结果件中通过红色或黄色标记精度可疑API或模块。通过直接配置该参数开启,默认未配置,表示关闭。 开启高亮颜色标记后,比对性能降低,如果比对结果行数超出excel单页限制,程序强制关闭高亮颜色标记。 | 否 |
|
|
63
|
+
| -dm或--data_mapping | 自定义映射关系比对。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件](#52-自定义映射文件)。仅[API和模块无法自动匹配场景](#213-api和模块无法自动匹配场景)需要配置。仅支持逐卡比对,即使用[比对文件](#51-比对文件)的单卡场景示例。 | 否 |
|
|
64
|
+
| -da或--diff_analyze | 自动识别网络中首差异节点,支持md5、统计量等dump数据。支持单卡/多卡场景。 | 否 |
|
|
63
65
|
|
|
64
66
|
#### 2.1.2 整网比对场景
|
|
65
67
|
|
|
@@ -120,6 +122,35 @@ msprobe -f pytorch compare -i ./compare.json -o ./output -s
|
|
|
120
122
|
|
|
121
123
|
4. 查看比对结果,请参见 [3 精度比对结果分析](#3-精度比对结果分析)。
|
|
122
124
|
|
|
125
|
+
#### 2.1.5 首差异算子节点识别场景
|
|
126
|
+
|
|
127
|
+
首差异算子节点识别场景是指:XPU与NPU环境的网络中通过 `msprobe dump`保存数据的数据分析,找到网络精度问题中出现的首个差异算子节点。
|
|
128
|
+
|
|
129
|
+
支持单卡和多卡,可同时比对多卡的dump数据。
|
|
130
|
+
|
|
131
|
+
执行步骤:
|
|
132
|
+
|
|
133
|
+
1. [config.json](../config.json)文件level配置为L0或L1、task配置为tensor或statistics(也可设置 `summary_mode`为 `md5`)并指定需要dump的API或模块名。
|
|
134
|
+
2. 参见[PyTorch 场景下的数据采集](./05.data_dump_PyTorch.md)章节完成 CPU 或 GPU 与 NPU 的精度数据 dump。
|
|
135
|
+
3. 创建[比对文件](#51-比对文件)。
|
|
136
|
+
4. 运行命令:
|
|
137
|
+
|
|
138
|
+
```shell
|
|
139
|
+
msprobe -f pytorch compare -i ./compare.json -o ./output -da
|
|
140
|
+
```
|
|
141
|
+
5. 查看比对结果,在用户指定输出目录下会生成`compare_result_rank{rank_id}_{timestamp}.json`以及`diff_analyze_{timestamp}.json`。
|
|
142
|
+
- 目录结构:
|
|
143
|
+
```
|
|
144
|
+
output/
|
|
145
|
+
├── compare_result_rank0_{timestamp}.json
|
|
146
|
+
├── compare_result_rank1_{timestamp}.json
|
|
147
|
+
├── diff_analyze_{timestamp}.json
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
- `compare_result_rank{rank_id}_{timestamp}.json`:包含该rank比对结果,包括API或模块名、比对状态、比对指标等。
|
|
151
|
+
- `diff_analyze_{timestamp}.json`:包含首差异算子节点识别结果,包括算子节点名、算子类型、算子位置等。
|
|
152
|
+
|
|
153
|
+
|
|
123
154
|
### 2.2 比对函数方式
|
|
124
155
|
|
|
125
156
|
#### 2.2.1 compare 函数
|
|
@@ -134,13 +165,14 @@ compare(input_param, output_path, stack_mode=False, auto_analyze=True, fuzzy_mat
|
|
|
134
165
|
|
|
135
166
|
**参数说明**:
|
|
136
167
|
|
|
137
|
-
| 参数名
|
|
138
|
-
|
|
168
|
+
| 参数名 | 说明 | 是否必选 |
|
|
169
|
+
|--------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
|
|
139
170
|
| input_param | 配置 dump 数据文件及目录,dict 类型。配置参数包括:<br> "npu_json_path":指定 NPU dump 目录下的 dump.json 文件。<br/>**配置示例**:"npu_json_path": "./npu_dump/dump.json"。<br/> "bench_json_path":指定 CPU、GPU 或 NPU dump 目录下的 dump.json 文件。<br/>**配置示例**:"bench_json_path": "./bench_dump/dump.json"。<br/> "stack_json_path":指定 NPU dump 目录下的 stack.json 文件。<br/>**配置示例**:"stack_json_path": "./npu_dump/stack.json"。<br/> "is_print_compare_log":配置是否开启单个算子的日志打屏。<br/>**配置示例**:True 或 False。 | 是 |
|
|
140
|
-
| output_path | 配置比对结果文件存盘目录,str 类型。<br/>**配置示例**:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。<br>提示:output目录下与结果件同名文件将被删除覆盖。
|
|
141
|
-
| stack_mode | 配置 stack_mode 的开关,bool 类型。仅当配置 stack_json_path 时需要,开启时比对结果呈现NPU_Stack_Info,关闭时不呈现。当不配置stack_json_path 时,自动识别是否存在stack.json,存在时呈现NPU_Stack_Info,否则不呈现。<br/>**配置示例**:stack_mode=True,默认为 False。
|
|
142
|
-
| auto_analyze | 自动精度分析,bool 类型。开启后工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 advisor_{timestamp}.txt 文件)。<br/>**配置示例**:auto_analyze=False,默认为 True。
|
|
143
|
-
| fuzzy_match | 模糊匹配,bool 类型。开启后,对于网络中同一层级且命名仅调用次数不同的 API,可匹配并进行比对。<br/>**配置示例**:fuzzy_match=True,默认为 False。
|
|
171
|
+
| output_path | 配置比对结果文件存盘目录,str 类型。<br/>**配置示例**:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。<br>提示:output目录下与结果件同名文件将被删除覆盖。 | 是 |
|
|
172
|
+
| stack_mode | 配置 stack_mode 的开关,bool 类型。仅当配置 stack_json_path 时需要,开启时比对结果呈现NPU_Stack_Info,关闭时不呈现。当不配置stack_json_path 时,自动识别是否存在stack.json,存在时呈现NPU_Stack_Info,否则不呈现。<br/>**配置示例**:stack_mode=True,默认为 False。 | 否 |
|
|
173
|
+
| auto_analyze | 自动精度分析,bool 类型。开启后工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 advisor_{timestamp}.txt 文件)。<br/>**配置示例**:auto_analyze=False,默认为 True。 | 否 |
|
|
174
|
+
| fuzzy_match | 模糊匹配,bool 类型。开启后,对于网络中同一层级且命名仅调用次数不同的 API,可匹配并进行比对。<br/>**配置示例**:fuzzy_match=True,默认为 False。 | 否 |
|
|
175
|
+
| highlight | 高亮颜色标记。开启后,比对结果件中通过红色或黄色标记精度可疑API或模块。 开启高亮颜色标记后,比对性能降低,如果比对结果行数超出excel单页限制,程序强制关闭高亮颜色标记。<br/>**配置示例**:highlight=True,默认为 False。 | 否 |
|
|
144
176
|
|
|
145
177
|
**函数示例**:
|
|
146
178
|
|
|
@@ -201,26 +233,69 @@ PyTorch 精度比对是以 CPU 或 GPU 的计算结果为标杆,通过计算
|
|
|
201
233
|
|
|
202
234
|
**公共表头**:
|
|
203
235
|
|
|
204
|
-
|dump 数据模式|NPU Name (NPU 的 API 名)|Bench Name (bench 的 API 名)|NPU Dtype (NPU 数据类型)|Bench Dtype (bench 数据类型)|NPU Tensor Shape (NPU 张量形状)|Bench Tensor Shape (bench 张量形状)|
|
|
205
|
-
|
|
206
|
-
|真实数据模式|√|√|√|√|√|√|
|
|
207
|
-
|统计数据模式|√|√|√|√|√|√|
|
|
208
|
-
|MD5 模式|√|√|√|√|√|√|
|
|
236
|
+
|dump 数据模式|NPU Name (NPU 的 API 名)|Bench Name (bench 的 API 名)|NPU Dtype (NPU 数据类型)|Bench Dtype (bench 数据类型)|NPU Tensor Shape (NPU 张量形状)|Bench Tensor Shape (bench 张量形状)| NPU Requires_grad (NPU tensor是否计算梯度) | Bench Requires_grad (Bench tensor是否计算梯度) |
|
|
237
|
+
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:------------------------------------:|:----------------------------------------:|
|
|
238
|
+
|真实数据模式|√|√|√|√|√|√| √ | √ |
|
|
239
|
+
|统计数据模式|√|√|√|√|√|√| √ | √ |
|
|
240
|
+
|MD5 模式|√|√|√|√|√|√| √ | √ |
|
|
209
241
|
|
|
210
242
|
**个性表头**:
|
|
211
243
|
|
|
212
244
|
统计量有 4 种:最大值(max)、最小值(min)、平均值(mean)和 L2-范数(L2 norm)。
|
|
213
245
|
|
|
214
|
-
|dump 数据模式|Cosine (tensor 余弦相似度)|EucDist (tensor 欧式距离)|MaxAbsErr (tensor 最大绝对误差)|MaxRelativeErr (tensor 最大相对误差)|One Thousandth Err Ratio (tensor 相对误差小于千分之一的比例)|Five Thousandth Err Ratio (tensor 相对误差小于千分之五的比例)|NPU 和 bench 的统计量绝对误差 (max, min, mean, L2 norm) diff| NPU 和 bench 的统计量相对误差 (max, min, mean, L2 norm) RelativeErr |NPU 和 bench 的统计量 (max, min, mean, L2 norm)|NPU MD5 (NPU 数据 CRC-32 值)|BENCH MD5 (bench 数据 CRC-32 值)|Result (比对结果)|Accuracy Reached or Not (计算精度是否达标)|Err_message (错误信息提示)|NPU_Stack_Info (堆栈信息)| Data_Name ([NPU真实数据名,Bench真实数据名]) |
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|MD5
|
|
246
|
+
|dump 数据模式|Cosine (tensor 余弦相似度)|EucDist (tensor 欧式距离)|MaxAbsErr (tensor 最大绝对误差)|MaxRelativeErr (tensor 最大相对误差)|One Thousandth Err Ratio (tensor 相对误差小于千分之一的比例)|Five Thousandth Err Ratio (tensor 相对误差小于千分之五的比例)|NPU 和 bench 的统计量绝对误差 (max, min, mean, L2 norm) diff| NPU 和 bench 的统计量相对误差 (max, min, mean, L2 norm) RelativeErr |NPU 和 bench 的统计量 (max, min, mean, L2 norm)|NPU MD5 (NPU 数据 CRC-32 值)|BENCH MD5 (bench 数据 CRC-32 值)| Requires_grad Consistent (计算梯度是否一致) | Result (比对结果) |Accuracy Reached or Not (计算精度是否达标)|Err_message (错误信息提示)|NPU_Stack_Info (堆栈信息)| Data_Name ([NPU真实数据名,Bench真实数据名]) |
|
|
247
|
+
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:-----------------------------------:|:-------------:|:---:|:---:|:---:|:---------------------------------:|
|
|
248
|
+
|真实数据模式|√|√|√|√|√|√|||√||| √ | |√|√|√| √ |
|
|
249
|
+
|统计数据模式|||||||√|√|√||| √ | √ ||√|√| |
|
|
250
|
+
|MD5 模式||||||||||√|√| √ | √ |||√| |
|
|
219
251
|
|
|
220
252
|
上表中NPU_Stack_Info字段需要配置-s参数生成。
|
|
221
253
|
|
|
222
|
-
### 3.2
|
|
254
|
+
### 3.2 比对指标计算公式
|
|
255
|
+
|
|
256
|
+
$N$: NPU侧tensor
|
|
257
|
+
|
|
258
|
+
$B$: Bench侧tensor
|
|
259
|
+
|
|
260
|
+
RE(Relative Error, 相对误差): $\vert\frac {N-B} {B}\vert$
|
|
261
|
+
|
|
262
|
+
真实数据模式:
|
|
263
|
+
|
|
264
|
+
Cosine: $\frac {{N}\cdot{B}} {{\vert\vert{N}\vert\vert}_2{\vert\vert{B}\vert\vert}_2}$
|
|
265
|
+
|
|
266
|
+
EucDist: ${\vert\vert{A-B}\vert\vert}_2$
|
|
267
|
+
|
|
268
|
+
MaxAbsErr: $max(\vert{N-B}\vert)$
|
|
269
|
+
|
|
270
|
+
MaxRelativeErr: $max(RE)$
|
|
271
|
+
|
|
272
|
+
One Thousandth Err Ratio: $\frac {\sum\mathbb{I}(RE<0.001)} {size(RE)}$
|
|
273
|
+
|
|
274
|
+
Five Thousandth Err Ratio: $\frac {\sum\mathbb{I}(RE<0.005)} {size(RE)}$
|
|
275
|
+
|
|
276
|
+
统计数据模式:
|
|
277
|
+
|
|
278
|
+
Max diff: $max(N)-max(B)$
|
|
279
|
+
|
|
280
|
+
Min diff: $min(N)-min(B)$
|
|
281
|
+
|
|
282
|
+
Mean diff: $mean(N)-mean(B)$
|
|
283
|
+
|
|
284
|
+
L2 Norm diff: $l2norm(N)-l2norm(B)$
|
|
285
|
+
|
|
286
|
+
MaxRelativeErr: $\vert\frac{max(N)-max(B)}{max(B)}\vert*100\%$
|
|
287
|
+
|
|
288
|
+
MinRelativeErr: $\vert\frac{min(N)-min(B)}{min(B)}\vert*100\%$
|
|
289
|
+
|
|
290
|
+
MeanRelativeErr: $\vert\frac{mean(N)-mean(B)}{mean(B)}\vert*100\%$
|
|
291
|
+
|
|
292
|
+
NormRelativeErr: $\vert\frac{l2norm(N)-l2norm(B)}{l2norm(B)}\vert*100\%$
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
### 3.3 颜色标记——真实数据模式、统计数据模式
|
|
223
296
|
|
|
297
|
+
通过在命令行中配置-hl或--highlight开启,或者在比对函数中配置参数highlight=True开启,用于标记精度可疑API或模块。开启后,比对性能会有降低,建议比对较大dump.json文件时不配置此参数。
|
|
298
|
+
颜色标记分为红色标记和黄色标记,红色标记优先级高于黄色标记。
|
|
224
299
|
在比对结果中的Err_message列呈现比对结果颜色标记的原因,具体含义如下:
|
|
225
300
|
|
|
226
301
|
红色标记情况:
|
|
@@ -229,13 +304,14 @@ PyTorch 精度比对是以 CPU 或 GPU 的计算结果为标杆,通过计算
|
|
|
229
304
|
3. 一个 API 或模块的 One Thousandth Err Ratio 的 input/parameters > 0.9 同时 output < 0.6(真实数据模式)(仅标记output);
|
|
230
305
|
4. 一个 API 或模块的 output 的最大值相对误差 (Max diff 除以 max(0.01, Bench max)) > 0.5(统计数据模式)(仅标记output)。
|
|
231
306
|
|
|
232
|
-
黄色标记情况(仅标记output):
|
|
307
|
+
黄色标记情况(1-4仅标记output,5无限制):
|
|
233
308
|
1. 一个 API 或模块的 input/parameters 与 output 的最大值绝对误差都大于 1,同时 output 比 input/parameters 大一个数量级以上(真实数据模式、统计数据模式);
|
|
234
309
|
2. 一个 API 或模块的 One Thousandth Err Ratio 的 input/parameters - output > 0.1(真实数据模式);
|
|
235
310
|
3. 一个 API 或模块的 output 的最大值相对误差 > 0.1 同时 input/parameters < 0.01(真实数据模式,统计数据模式);
|
|
236
|
-
4. 一个 API 或模块的 Cosine 的 input/parameters - output > 0.1
|
|
311
|
+
4. 一个 API 或模块的 Cosine 的 input/parameters - output > 0.1(真实数据模式);
|
|
312
|
+
5. 一个 API 或模块的 Requires_grad Consistent 为 False。
|
|
237
313
|
|
|
238
|
-
### 3.
|
|
314
|
+
### 3.4 比对结果(Result)——统计数据模式、MD5 模式
|
|
239
315
|
|
|
240
316
|
统计数据模式:
|
|
241
317
|
1. Warning 情况:4种统计值至少一种相对误差 > 0.5,要重点检查该 API;
|
|
@@ -247,7 +323,7 @@ MD5 模式:
|
|
|
247
323
|
2. Different 情况:NPU 与标杆的 CRC-32 值不一致,即 API 数据不完全一致;
|
|
248
324
|
3. N/A 情况:API 没有匹配上。
|
|
249
325
|
|
|
250
|
-
### 3.
|
|
326
|
+
### 3.5 判断计算精度达标情况(Accuracy Reached or Not)——真实数据模式
|
|
251
327
|
|
|
252
328
|
标记为 `No`,表示精度不达标:
|
|
253
329
|
1. Cosine < 0.99 且 MaxAbsError > 0.001;
|
|
@@ -265,22 +341,26 @@ MD5 模式:
|
|
|
265
341
|
标记为 `Yes`,表示精度达标:
|
|
266
342
|
1. 除以上情况外的其余情况。
|
|
267
343
|
|
|
268
|
-
### 3.
|
|
344
|
+
### 3.6 错误信息提示(Err_message)——真实数据模式、统计数据模式
|
|
269
345
|
|
|
270
346
|
1. "Need double check api accuracy.":四个统计值中至少 1 个相对误差 > 0.5(统计数据模式);
|
|
271
|
-
2. "Fuzzy matching data, the comparison
|
|
272
|
-
3. "Dump file: {} not found or read failed.":NPU 或 Bench
|
|
273
|
-
4. "No bench data matched.":Bench 的 API
|
|
274
|
-
5. "
|
|
275
|
-
6. "
|
|
276
|
-
7. "
|
|
277
|
-
8. "This is
|
|
278
|
-
9.
|
|
279
|
-
10. ""
|
|
347
|
+
2. "Fuzzy matching data, the comparison accuracy may be affected.":NPU 或 Bench 的真实数据名没有匹配上(真实数据模式);
|
|
348
|
+
3. "Dump file: {} not found or read failed.":NPU 或 Bench 的真实数据者读取出错(真实数据模式);
|
|
349
|
+
4. "No bench data matched.":Bench 的 API 没有匹配上(真实数据模式,统计数据模式);
|
|
350
|
+
5. "NPU does not have data file.": NPU的真实数据不存在(真实数据模式);
|
|
351
|
+
6. "Bench does not have data file.": Bench的真实数据不存在(真实数据模式);
|
|
352
|
+
7. "Bench api/module unmatched.":Bench 的 API 没有匹配上(真实数据模式);
|
|
353
|
+
8. "This is empty data, can not compare.":读取到的数据为空(真实数据模式);
|
|
354
|
+
9. "Shape of NPU and bench Tensor do not match. Skipped.":NPU 和 Bench 的数据结构不一致(真实数据模式);
|
|
355
|
+
10. "The Position of inf or nan in NPU and bench Tensor do not match.":NPU 和 Bench 的数据有 nan/inf(真实数据模式);
|
|
356
|
+
11. "This is type of 0-d tensor, can not calculate 'Cosine', 'EucDist', 'One Thousandth Err Ratio' and 'Five Thousandths Err Ratio'.":NPU 为0维张量(真实数据模式);
|
|
357
|
+
12. "Dtype of NPU and bench Tensor do not match.":NPU 和 Bench 数据的数据类型不同(真实数据模式);
|
|
358
|
+
13. "Requires_grad inconsistent.":NPU 和 Bench 的 Requires_grad 不一致(真实数据模式,统计数据模式);
|
|
359
|
+
14. "":除以上情况的其余情况(真实数据模式、统计数据模式)。
|
|
280
360
|
|
|
281
361
|
除以上错误信息提示外,异常数据颜色高亮标记的原因叠加呈现于此列。
|
|
282
362
|
|
|
283
|
-
### 3.
|
|
363
|
+
### 3.7 计算精度评价指标分析
|
|
284
364
|
|
|
285
365
|
1. Cosine:通过计算两个向量的余弦值来判断其相似度,数值越接近于 1 说明计算出的两个张量越相似,实际可接受阈值为大于 0.99。在计算中可能会存在 nan,主要由于可能会出现其中一个向量为 0。
|
|
286
366
|
|
|
@@ -335,10 +415,10 @@ compare_index:
|
|
|
335
415
|
- MeanRelativeErr
|
|
336
416
|
```
|
|
337
417
|
|
|
338
|
-
| 参数名 | 说明
|
|
339
|
-
| -------------
|
|
340
|
-
| api | 表示需要汇总的API或module名称。如果没有配置,工具会提示报错。<br>api名称配置格式为:`{api_type}.{api_name}.{API调用次数}.{前向反向}`<br>须按顺序配置以上四个字段,可按如下组合配置:<br/> {api_type}<br/> {api_type}.{api_name}<br/> {api_type}.{api_name}.{API调用次数}<br/> {api_type}.{api_name}.{API调用次数}.{前向反向}<br/>这里的api指代API或module。
|
|
341
|
-
| compare_index | 表示需要汇总的比对指标。compare_index需为dump_mode对应比对指标的子集。如果没有配置,工具将根据比对结果自动提取dump_mode对应的全部比对指标进行汇总。<br>统计数据模式比对指标:Max diff、Min diff、Mean diff、L2norm diff、MaxRelativeErr、MinRelativeErr、MeanRelativeErr、NormRelativeErr<br>真实数据模式比对指标:Cosine、EucDist、MaxAbsErr、MaxRelativeErr、One Thousandth Err Ratio、Five Thousandths Err Ratio |
|
|
418
|
+
| 参数名 | 说明 |
|
|
419
|
+
| ------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
420
|
+
| api | 表示需要汇总的API或module名称。如果没有配置,工具会提示报错。<br>api名称配置格式为:`{api_type}.{api_name}.{API调用次数}.{前向反向}`<br>须按顺序配置以上四个字段,可按如下组合配置:<br/> {api_type}<br/> {api_type}.{api_name}<br/> {api_type}.{api_name}.{API调用次数}<br/> {api_type}.{api_name}.{API调用次数}.{前向反向}<br/>这里的api指代API或module。 |
|
|
421
|
+
| compare_index | 表示需要汇总的比对指标。compare_index需为dump_mode对应比对指标的子集。如果没有配置,工具将根据比对结果自动提取dump_mode对应的全部比对指标进行汇总。<br>统计数据模式比对指标:Max diff、Min diff、Mean diff、L2norm diff、MaxRelativeErr、MinRelativeErr、MeanRelativeErr、NormRelativeErr、Requires_grad Consistent<br>真实数据模式比对指标:Cosine、EucDist、MaxAbsErr、MaxRelativeErr、One Thousandth Err Ratio、Five Thousandths Err Ratio、Requires_grad Consistent |
|
|
342
422
|
|
|
343
423
|
**汇总结果件说明**
|
|
344
424
|
|
|
@@ -35,18 +35,20 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
|
|
|
35
35
|
|
|
36
36
|
**完整参数说明**
|
|
37
37
|
|
|
38
|
-
| 参数名
|
|
39
|
-
|
|
40
|
-
| -f 或 --framework | 指定训练框架。mindspore。
|
|
38
|
+
| 参数名 | 说明 | 是否必选 |
|
|
39
|
+
|---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
|
|
40
|
+
| -f 或 --framework | 指定训练框架。mindspore。 | 是 |
|
|
41
41
|
| -i或--input_path | 指定比对文件。比对文件内容及示例请参见[比对文件](#41-比对文件)或[比对文件(kernel)](#42-比对文件kernel)(比对文件(kernel)仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | 是 |
|
|
42
42
|
| -o或--output_path | 配置比对结果文件存盘目录,默认会在当前目录创建output目录。文件名称基于时间戳自动生成,格式为:<br> `compare_result_{timestamp}.xlsx`<br/> `compare_result_{rank_id}_{step_id}_{timestamp}.xlsx`(仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。<br>提示:output目录下与结果件同名文件将被删除覆盖。 | 否 |
|
|
43
43
|
| -s或--stack_mode | 比对结果展示调用栈信息(NPU_Stack_Info)的开关,bool 类型。单卡场景开启时,需要使用[比对文件](#41-比对文件)的单卡场景配置stack_path指定stack.json文件,才能生成详细调用栈信息,否则在比对时会报错;暂不支持多卡场景。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
|
|
44
44
|
| -c或--compare_only | 仅比对开关,bool 类型。该参数默认未配置,会启用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。通过配置该参数取消自动精度分析,仅输出比对结果表格。 | 否 |
|
|
45
45
|
| -f或--fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
|
|
46
|
+
| -hl或--highlight | 高亮颜色标记。开启后,比对结果件中通过红色或黄色标记精度可疑API或模块。通过直接配置该参数开启,默认未配置,表示关闭。 开启高亮颜色标记后,比对性能降低,如果比对结果行数超出excel单页限制,程序强制关闭高亮颜色标记。 | 否 |
|
|
46
47
|
| -am或--api_mapping | 跨框架比对。配置该参数时表示开启跨框架API比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(api_mapping)](#43-自定义映射文件api_mapping)。仅[跨框架的API比对](#25-跨框架的api比对)场景需要配置。 | 否 |
|
|
47
48
|
| -cm或--cell_mapping | 跨框架比对。配置该参数时表示开启跨框架cell模块比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(cell_mapping)](#44-自定义映射文件cell_mapping)。仅[跨框架的cell模块比对](#26-跨框架的cell模块比对)场景需要配置。 | 否 |
|
|
48
49
|
| -dm或--data_mapping | 同框架或跨框架比对。通过映射文件指定两个具体参数的对应关系,可以在L0、L1或mix采集场景下使用。配置该参数的同时需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(data_mapping)](#45-自定义映射文件data_mapping)。 | 否 |
|
|
49
50
|
| -lm或--layer_mapping | 跨框架比对。配置该参数时表示开启跨框架Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer_mapping)](#46-自定义映射文件layer_mapping)。仅[跨框架的Layer层比对](#27-跨框架的layer层比对)场景需要配置。 | 否 |
|
|
51
|
+
| -da或--diff_analyze | 自动识别网络中首差异节点,支持md5、统计量等dump数据。支持单卡/多卡场景。 | 否 |
|
|
50
52
|
|
|
51
53
|
动态图模式没有填写任何mapping时,按照同框架比对的方式进行比对,比对数据和标杆数据的Cell或Api名称需要完全相同才能匹配得上。
|
|
52
54
|
|
|
@@ -202,6 +204,61 @@ MindSpore静态图场景比对结果:
|
|
|
202
204
|

|
|
203
205
|
具体字段含义同PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
|
|
204
206
|
|
|
207
|
+
### 2.9 动静态图场景L0混合dump数据比对
|
|
208
|
+
|
|
209
|
+
1. 参见 [msprobe工具MindSpore场景精度数据采集指南](./06.data_dump_MindSpore.md),执行dump操作。<br>动态图场景下使用 `mindspore.jit` 装饰特定 Cell 或 function 时,被装饰的部分会被编译成静态图执行。采集的数据文件目录结构示例如下:
|
|
210
|
+
```lua
|
|
211
|
+
├── graph
|
|
212
|
+
│ ├── step0
|
|
213
|
+
│ | ├── rank
|
|
214
|
+
│ | │ ├── dump_tensor_data
|
|
215
|
+
| | | | ├── Cell.wrap_net.net.Net.forward.0.input.0.npy
|
|
216
|
+
| | | | ├── Cell.wrap_net.net.Net.forward.0.output.0.npy
|
|
217
|
+
| | | | ...
|
|
218
|
+
│ | | ├── dump.json
|
|
219
|
+
│ | | ├── stack.json
|
|
220
|
+
│ | | └── construct.json
|
|
221
|
+
│ ├── ...
|
|
222
|
+
├── pynative
|
|
223
|
+
│ ├── step0
|
|
224
|
+
│ | ├── rank
|
|
225
|
+
│ | │ ├── dump_tensor_data
|
|
226
|
+
| | | | ├── Cell.dense1.Dense.forward.0.input.0.npy
|
|
227
|
+
| | | | ├── Cell.dense1.Dense.forward.0.output.0.npy
|
|
228
|
+
| | | | ...
|
|
229
|
+
│ | | ├── dump.json
|
|
230
|
+
│ | | ├── stack.json
|
|
231
|
+
│ | | └── construct.json
|
|
232
|
+
│ ├── ...
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
2. 创建比对文件,文件内容及示例请参见[比对文件(动静态图场景L0混合数据)](#48-比对文件动静态图场景l0混合数据)。
|
|
236
|
+
|
|
237
|
+
3. 执行如下示例命令进行比对:
|
|
238
|
+
|
|
239
|
+
```shell
|
|
240
|
+
msprobe -f mindspore compare -i ./compare.json -o ./output
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
4. 动静态图场景L0混合dump数据比对结果,示例如下:
|
|
244
|
+
```lua
|
|
245
|
+
├── graph
|
|
246
|
+
│ ├── step0
|
|
247
|
+
│ | ├── advisor_rank_20250805043414.txt
|
|
248
|
+
│ | ├── compare_result_rank_20250805043411.xlsx
|
|
249
|
+
├── pynative
|
|
250
|
+
│ ├── step0
|
|
251
|
+
│ | ├── advisor_rank_20250805043416.txt
|
|
252
|
+
│ | ├── compare_result_rank_20250805043414.xlsx
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
output目录下生成两个graph和pynative两个文件夹,每个文件夹下生成对应step的比对结果。
|
|
256
|
+
|
|
257
|
+
5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
|
|
258
|
+
|
|
259
|
+
### 2.10 首差异算子节点识别
|
|
260
|
+
参见《[PyTorch 场景的精度比对-首差异算子节点识别](./10.accuracy_compare_PyTorch.md#215-首差异算子节点识别场景)》章节。
|
|
261
|
+
|
|
205
262
|
## 3 多卡比对结果提取汇总通信算子数据
|
|
206
263
|
|
|
207
264
|
本功能是将多卡比对场景的比对结果,进行通信算子数据提取和汇总,输出整理好的通信算子多卡比对精度表。
|
|
@@ -244,10 +301,10 @@ compare_index:
|
|
|
244
301
|
- MeanRelativeErr
|
|
245
302
|
```
|
|
246
303
|
|
|
247
|
-
| 参数名 | 说明
|
|
248
|
-
| -------------
|
|
249
|
-
| api | 表示需要汇总的API或module名称。如果没有配置,工具会提示报错。<br/>api名称配置格式为:`{api_type}.{api_name}.{API调用次数}.{前向反向}`<br/>须按顺序配置以上四个字段,可按如下组合配置:<br/> {api_type}<br/> {api_type}.{api_name}<br/> {api_type}.{api_name}.{API调用次数}<br/> {api_type}.{api_name}.{API调用次数}.{前向反向}<br/>这里的api指代API或module。
|
|
250
|
-
| compare_index | 表示需要汇总的比对指标。compare_index需为dump_mode对应比对指标的子集。如果没有配置,工具将根据比对结果自动提取dump_mode对应的全部比对指标进行汇总。<br>统计数据模式比对指标:Max diff、Min diff、Mean diff、L2norm diff、MaxRelativeErr、MinRelativeErr、MeanRelativeErr、NormRelativeErr<br>真实数据模式比对指标:Cosine、EucDist、MaxAbsErr、MaxRelativeErr、One Thousandth Err Ratio、Five Thousandths Err Ratio |
|
|
304
|
+
| 参数名 | 说明 |
|
|
305
|
+
| ------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
306
|
+
| api | 表示需要汇总的API或module名称。如果没有配置,工具会提示报错。<br/>api名称配置格式为:`{api_type}.{api_name}.{API调用次数}.{前向反向}`<br/>须按顺序配置以上四个字段,可按如下组合配置:<br/> {api_type}<br/> {api_type}.{api_name}<br/> {api_type}.{api_name}.{API调用次数}<br/> {api_type}.{api_name}.{API调用次数}.{前向反向}<br/>这里的api指代API或module。 |
|
|
307
|
+
| compare_index | 表示需要汇总的比对指标。compare_index需为dump_mode对应比对指标的子集。如果没有配置,工具将根据比对结果自动提取dump_mode对应的全部比对指标进行汇总。<br>统计数据模式比对指标:Max diff、Min diff、Mean diff、L2norm diff、MaxRelativeErr、MinRelativeErr、MeanRelativeErr、NormRelativeErr、Requires_grad Consistent<br>真实数据模式比对指标:Cosine、EucDist、MaxAbsErr、MaxRelativeErr、One Thousandth Err Ratio、Five Thousandths Err Ratio、Requires_grad Consistent |
|
|
251
308
|
|
|
252
309
|
**汇总结果件说明**
|
|
253
310
|
|
|
@@ -699,3 +756,14 @@ MindSpore静态图场景(不区分单/多卡)示例如下:
|
|
|
699
756
|
- `bench_path`表示bench dump文件目录,指定同上。
|
|
700
757
|
- `common`表示开启MindSpore静态图单点保存比对,默认关闭。
|
|
701
758
|
- `map_dict`可用于当单点保存比对的`npy`文件名称不完全对应时,通过手动指定保证比对正确执行,比对指定名称对应,如{"input": "x"},则`input_float32_1.npy`会对应`x_float32_1.npy`。
|
|
759
|
+
|
|
760
|
+
### 4.8 比对文件(动静态图场景L0混合数据)
|
|
761
|
+
```json
|
|
762
|
+
{
|
|
763
|
+
"npu_path": "./npu_dump",
|
|
764
|
+
"bench_path": "./bench_dump",
|
|
765
|
+
"is_print_compare_log": true
|
|
766
|
+
}
|
|
767
|
+
```
|
|
768
|
+
- npu_path表示NPU dump文件目录,上面示例中的 ./npu_dump/ 是npu侧动静态图dump后graph和pynative目录的父目录。
|
|
769
|
+
- bench_path表示Bench dump文件目录,上面示例中的 ./bench_dump/ 是bench侧动静态图dump后graph和pynative目录的父目录。
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
使用场景:本工具主要用于精度比对前后两次 NPU kernel 层级 dump 数据的一致性。
|
|
8
8
|
|
|
9
|
-
依赖:CANN 包中的 msaccucmp 工具,需要安装 Ascend-CANN-toolkit,详见《[CANN 软件安装指南](https://
|
|
9
|
+
依赖:CANN 包中的 msaccucmp 工具,需要安装 Ascend-CANN-toolkit,详见《[CANN 软件安装指南](https://www.hiascend.com/document/detail/zh/canncommercial/700/envdeployment/instg/instg_0001.html)》。
|
|
10
10
|
|
|
11
11
|
## 2 数据解析操作指导
|
|
12
12
|
|