mindstudio-probe 1.1.1__py3-none-any.whl → 1.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-1.1.1.dist-info → mindstudio_probe-1.2.1.dist-info}/METADATA +3 -2
- {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.1.dist-info}/RECORD +196 -141
- msprobe/CMakeLists.txt +5 -0
- msprobe/README.md +14 -19
- msprobe/config.json +1 -0
- msprobe/core/common/const.py +155 -6
- msprobe/core/common/exceptions.py +3 -1
- msprobe/core/common/file_utils.py +33 -7
- msprobe/core/common/inplace_ops.yaml +3 -0
- msprobe/core/common/utils.py +28 -14
- msprobe/core/common_config.py +6 -0
- msprobe/core/compare/acc_compare.py +139 -128
- msprobe/core/compare/check.py +31 -29
- msprobe/core/compare/compare_cli.py +17 -16
- msprobe/core/compare/highlight.py +186 -99
- msprobe/core/compare/layer_mapping/data_scope_parser.py +18 -7
- msprobe/core/compare/layer_mapping/layer_mapping.py +21 -14
- msprobe/core/compare/layer_mapping/postprocess_pass.py +4 -3
- msprobe/core/compare/merge_result/merge_result.py +380 -0
- msprobe/core/compare/merge_result/merge_result_cli.py +31 -0
- msprobe/core/compare/multiprocessing_compute.py +2 -2
- msprobe/core/compare/npy_compare.py +109 -147
- msprobe/core/compare/utils.py +189 -69
- msprobe/core/data_dump/data_collector.py +51 -21
- msprobe/core/data_dump/data_processor/base.py +38 -20
- msprobe/core/data_dump/data_processor/factory.py +5 -3
- msprobe/core/data_dump/data_processor/mindspore_processor.py +154 -20
- msprobe/core/data_dump/data_processor/pytorch_processor.py +118 -58
- msprobe/core/data_dump/json_writer.py +29 -1
- msprobe/core/data_dump/scope.py +19 -18
- msprobe/core/overflow_check/abnormal_scene.py +9 -5
- msprobe/core/overflow_check/checker.py +1 -1
- msprobe/core/overflow_check/utils.py +1 -1
- msprobe/docs/01.installation.md +96 -17
- msprobe/docs/02.config_introduction.md +5 -5
- msprobe/docs/05.data_dump_PyTorch.md +91 -61
- msprobe/docs/06.data_dump_MindSpore.md +57 -19
- msprobe/docs/07.accuracy_checker_PyTorch.md +18 -18
- msprobe/docs/09.accuracy_checker_MindSpore.md +4 -4
- msprobe/docs/10.accuracy_compare_PyTorch.md +99 -41
- msprobe/docs/11.accuracy_compare_MindSpore.md +249 -48
- msprobe/docs/12.overflow_check_PyTorch.md +1 -1
- msprobe/docs/19.monitor.md +120 -27
- msprobe/docs/21.visualization_PyTorch.md +115 -35
- msprobe/docs/22.visualization_MindSpore.md +138 -41
- msprobe/docs/23.generate_operator_PyTorch.md +107 -0
- msprobe/docs/24.code_mapping_Mindspore.md +28 -0
- msprobe/docs/{23.tool_function_introduction.md → 25.tool_function_introduction.md} +1 -0
- msprobe/docs/26.data_dump_PyTorch_baseline.md +37 -0
- msprobe/docs/27.dump_json_instruction.md +521 -0
- msprobe/docs/FAQ.md +26 -2
- msprobe/docs/accuracy_checker_MindSpore/accuracy_checker_MindSpore_baseline.md +14 -0
- msprobe/docs/data_dump_MindSpore/data_dump_MindSpore_baseline.md +22 -0
- msprobe/docs/img/merge_result.png +0 -0
- msprobe/docs/img/visualization/fuzzy_match_ms.png +0 -0
- msprobe/docs/img/visualization/fuzzy_match_pt.png +0 -0
- msprobe/docs/img/visualization/tensorboard_1.png +0 -0
- msprobe/docs/img/visualization/tensorboard_2.png +0 -0
- msprobe/docs/img/visualization/vis_browser_1.png +0 -0
- msprobe/docs/img/visualization/vis_browser_2.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/GPTModel.png +0 -0
- msprobe/docs/visualization/ParallelMLP.png +0 -0
- msprobe/docs/visualization/layer_mapping_example.md +132 -0
- msprobe/docs/visualization/mapping.png +0 -0
- msprobe/docs/visualization/mapping1.png +0 -0
- msprobe/docs/visualization/module_name.png +0 -0
- msprobe/docs/visualization/module_name1.png +0 -0
- msprobe/docs/visualization/no_mapping.png +0 -0
- msprobe/docs/visualization/no_mapping1.png +0 -0
- msprobe/docs/visualization/no_mapping_analyze.png +0 -0
- msprobe/docs/visualization/top_layer.png +0 -0
- msprobe/mindspore/__init__.py +10 -0
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +57 -25
- msprobe/mindspore/api_accuracy_checker/cmd_parser.py +2 -1
- msprobe/mindspore/api_accuracy_checker/compute_element.py +5 -7
- msprobe/mindspore/api_accuracy_checker/data_manager.py +37 -0
- msprobe/mindspore/api_accuracy_checker/main.py +1 -0
- msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +12 -6
- msprobe/mindspore/api_accuracy_checker/multi_data_manager.py +3 -1
- msprobe/mindspore/code_mapping/bind.py +264 -0
- msprobe/mindspore/code_mapping/cmd_parser.py +40 -0
- msprobe/mindspore/code_mapping/graph.py +49 -0
- msprobe/mindspore/code_mapping/graph_parser.py +226 -0
- msprobe/mindspore/code_mapping/main.py +24 -0
- msprobe/mindspore/code_mapping/processor.py +34 -0
- msprobe/mindspore/common/const.py +3 -1
- msprobe/mindspore/common/utils.py +50 -5
- msprobe/mindspore/compare/distributed_compare.py +0 -2
- msprobe/mindspore/compare/ms_compare.py +105 -63
- msprobe/mindspore/compare/ms_graph_compare.py +14 -5
- msprobe/mindspore/debugger/debugger_config.py +3 -0
- msprobe/mindspore/debugger/precision_debugger.py +81 -12
- msprobe/mindspore/dump/hook_cell/api_registry.py +83 -16
- msprobe/mindspore/dump/hook_cell/hook_cell.py +60 -38
- msprobe/mindspore/dump/hook_cell/primitive_hooks.py +33 -15
- msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +11 -1
- msprobe/mindspore/dump/hook_cell/wrap_api.py +92 -1
- msprobe/mindspore/dump/kernel_dump/kernel_config.py +33 -0
- msprobe/mindspore/dump/kernel_graph_dump.py +7 -0
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +13 -4
- msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +2 -2
- msprobe/mindspore/grad_probe/grad_analyzer.py +24 -12
- msprobe/mindspore/grad_probe/hook.py +13 -4
- msprobe/mindspore/mindtorch/__init__.py +18 -0
- msprobe/mindspore/mindtorch/mindtorch_adaptor.py +255 -0
- msprobe/mindspore/ms_config.py +5 -1
- msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +7 -0
- msprobe/mindspore/service.py +267 -101
- msprobe/msprobe.py +24 -3
- msprobe/pytorch/__init__.py +7 -6
- msprobe/pytorch/api_accuracy_checker/common/utils.py +31 -16
- msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +41 -8
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +100 -267
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_standard.yaml +4 -1
- msprobe/pytorch/api_accuracy_checker/compare/compare.py +69 -68
- msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +54 -0
- msprobe/pytorch/api_accuracy_checker/compare/compare_input.py +51 -0
- msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +2 -4
- msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +54 -30
- msprobe/pytorch/api_accuracy_checker/precision_standard/absolute_threshold.py +106 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/accumulative_error_compare.py +107 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/base_standard.py +151 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/benchmark_compare.py +226 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/binary_consistency.py +68 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/standard_config.py +218 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/standard_register.py +104 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/thousandth_standard.py +63 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/ulp_compare.py +200 -0
- msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +57 -1
- msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +2 -1
- msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +42 -14
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +64 -19
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +34 -4
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +5 -3
- msprobe/pytorch/bench_functions/npu_fusion_attention.py +42 -10
- msprobe/pytorch/common/parse_json.py +2 -1
- msprobe/pytorch/common/utils.py +45 -2
- msprobe/pytorch/compare/distributed_compare.py +17 -29
- msprobe/pytorch/compare/pt_compare.py +40 -20
- msprobe/pytorch/debugger/debugger_config.py +27 -12
- msprobe/pytorch/debugger/precision_debugger.py +42 -12
- msprobe/pytorch/dump/module_dump/__init__.py +0 -0
- msprobe/pytorch/dump/module_dump/module_dump.py +86 -0
- msprobe/pytorch/{module_processer.py → dump/module_dump/module_processer.py} +80 -6
- msprobe/pytorch/free_benchmark/common/params.py +2 -1
- msprobe/pytorch/free_benchmark/common/utils.py +3 -0
- msprobe/pytorch/free_benchmark/compare/grad_saver.py +0 -2
- msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +31 -47
- msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +0 -4
- msprobe/pytorch/hook_module/__init__.py +1 -1
- msprobe/pytorch/hook_module/hook_module.py +14 -11
- msprobe/pytorch/hook_module/register_optimizer_hook.py +59 -0
- msprobe/pytorch/hook_module/support_wrap_ops.yaml +34 -0
- msprobe/pytorch/hook_module/wrap_distributed.py +6 -8
- msprobe/pytorch/hook_module/wrap_functional.py +0 -40
- msprobe/pytorch/monitor/anomaly_analyse.py +1 -1
- msprobe/pytorch/monitor/anomaly_detect.py +107 -22
- msprobe/pytorch/monitor/csv2tb.py +166 -0
- msprobe/pytorch/monitor/distributed/wrap_distributed.py +25 -14
- msprobe/pytorch/monitor/features.py +3 -3
- msprobe/pytorch/monitor/module_hook.py +483 -277
- msprobe/pytorch/monitor/module_metric.py +27 -48
- msprobe/pytorch/monitor/module_spec_verifier.py +3 -1
- msprobe/pytorch/monitor/optimizer_collect.py +52 -14
- msprobe/pytorch/monitor/unittest/test_monitor.py +24 -9
- msprobe/pytorch/monitor/utils.py +77 -6
- msprobe/pytorch/online_dispatch/dispatch.py +8 -2
- msprobe/pytorch/parse_tool/lib/compare.py +10 -10
- msprobe/pytorch/parse_tool/lib/config.py +5 -7
- msprobe/pytorch/parse_tool/lib/file_desc.py +15 -1
- msprobe/pytorch/parse_tool/lib/interactive_cli.py +10 -10
- msprobe/pytorch/parse_tool/lib/parse_exception.py +7 -7
- msprobe/pytorch/parse_tool/lib/parse_tool.py +11 -10
- msprobe/pytorch/parse_tool/lib/utils.py +18 -19
- msprobe/pytorch/parse_tool/lib/visualization.py +9 -10
- msprobe/pytorch/service.py +176 -106
- msprobe/visualization/builder/graph_builder.py +62 -5
- msprobe/visualization/builder/msprobe_adapter.py +24 -2
- msprobe/visualization/compare/graph_comparator.py +64 -14
- msprobe/visualization/compare/mode_adapter.py +1 -15
- msprobe/visualization/graph/base_node.py +12 -17
- msprobe/visualization/graph/distributed_analyzer.py +318 -0
- msprobe/visualization/graph/graph.py +9 -0
- msprobe/visualization/graph_service.py +97 -23
- msprobe/visualization/utils.py +14 -29
- msprobe/pytorch/functional/module_dump.py +0 -84
- {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.1.dist-info}/LICENSE +0 -0
- {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.1.dist-info}/WHEEL +0 -0
- {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.1.dist-info}/entry_points.txt +0 -0
- {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.1.dist-info}/top_level.txt +0 -0
- /msprobe/docs/{data_dump_Mindspore → data_dump_MindSpore}/dynamic_graph_quick_start_example.md +0 -0
- /msprobe/{pytorch/functional → mindspore/code_mapping}/__init__.py +0 -0
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
msprobe 工具主要通过在训练脚本内添加 dump 接口、启动训练的方式采集精度数据。
|
|
4
4
|
|
|
5
|
+
dump的'tensor'模式采集数据量大小,可以参考[数据量基线](./26.data_dump_PyTorch_baseline.md)。
|
|
6
|
+
|
|
5
7
|
本工具提供固定的 API 支持列表,若需要删除或增加 dump 的 API,可以在 msprobe/pytorch/hook_module/support_wrap_ops.yaml 文件内手动修改,如下示例:
|
|
6
8
|
|
|
7
9
|
```yaml
|
|
@@ -25,8 +27,12 @@ functional: # functional为算子类别,找到对应的类别,在该类别
|
|
|
25
27
|
PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None, model=None, step=None)
|
|
26
28
|
```
|
|
27
29
|
|
|
28
|
-
1. config_path:指定 dump 配置文件路径;
|
|
29
|
-
2.
|
|
30
|
+
1. config_path:指定 dump 配置文件路径;
|
|
31
|
+
2. model:指定需要采集 Module 级数据的模型,支持传入 torch.nn.Module 或 list[torch.nn.Module] 类型,默认未配置。
|
|
32
|
+
level 配置为"L0"或"mix"时,必须在该接口或 **start** 接口中配置该参数。该参数在将来会从该接口移除,建议在 **start** 接口中配置该参数。
|
|
33
|
+
3. 其他参数均在 [config.json](../config.json) 文件中可配,详细配置可见 [config.json 介绍](./02.config_introduction.md)。
|
|
34
|
+
|
|
35
|
+
此接口的参数均不是必要,且优先级高于 [config.json](../config.json) 文件中的配置,但可配置的参数相比 config.json 较少。
|
|
30
36
|
|
|
31
37
|
### 1.2 start
|
|
32
38
|
|
|
@@ -38,12 +44,16 @@ PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None, model
|
|
|
38
44
|
debugger.start(model=None)
|
|
39
45
|
```
|
|
40
46
|
|
|
41
|
-
1.
|
|
47
|
+
1. model:指定需要采集 Module 级数据的模型,支持传入 torch.nn.Module 或 list[torch.nn.Module] 类型,默认未配置。
|
|
48
|
+
level 配置为"L0"或"mix"时,必须在该接口或 **PrecisionDebugger** 接口中配置该参数。
|
|
42
49
|
本接口中的 model 比 PrecisionDebugger 中 model 参数优先级更高,会覆盖 PrecisionDebugger 中的 model 参数。
|
|
43
50
|
|
|
44
51
|
### 1.3 stop
|
|
45
52
|
|
|
46
|
-
**功能说明**:停止精度数据采集。在 **start**
|
|
53
|
+
**功能说明**:停止精度数据采集。在 **start** 函数之后的任意位置添加。
|
|
54
|
+
若 **stop** 函数添加在反向计算代码(如loss.backward)之后,则会采集 **start** 和该函数之间的前反向数据。
|
|
55
|
+
若 **stop** 函数添加在反向计算代码之前,则需要将 **step** 函数添加到反向计算代码之后,才能采集 **start** 和该函数之间的前反向数据。
|
|
56
|
+
**step** 函数详细介绍见1.5章节。使用示例可参见 [2.1 快速上手](#21-快速上手) 和 [2.2 采集完整的前反向数据](#22-采集完整的前反向数据)。
|
|
47
57
|
|
|
48
58
|
**原型**:
|
|
49
59
|
|
|
@@ -53,7 +63,8 @@ debugger.stop()
|
|
|
53
63
|
|
|
54
64
|
### 1.4 forward_backward_dump_end
|
|
55
65
|
|
|
56
|
-
|
|
66
|
+
**功能说明**:停止精度数据采集。与 **stop** 函数功能相同,该函数在将来会被移除,建议使用 **stop** 函数。
|
|
67
|
+
使用示例可参见 [2.3 采集指定代码块的前反向数据](#23-采集指定代码块的前反向数据)。
|
|
57
68
|
|
|
58
69
|
**原型**:
|
|
59
70
|
|
|
@@ -63,7 +74,8 @@ forward_backward_dump_end()
|
|
|
63
74
|
|
|
64
75
|
### 1.5 step
|
|
65
76
|
|
|
66
|
-
|
|
77
|
+
**功能说明**:结束一个 step 的数据采集,完成所有数据落盘并更新 dump 参数。在一个 step 结束的位置添加,且必须在 **stop** 函数之后的位置调用。
|
|
78
|
+
该函数需要配合 **start** 和 **stop** 函数使用,尽量添加在反向计算代码(如loss.backward)之后,否则可能会导致反向数据丢失。使用示例可参见[2.2 采集完整的前反向数据](#22-采集完整的前反向数据)。
|
|
67
79
|
|
|
68
80
|
**原型**:
|
|
69
81
|
|
|
@@ -103,13 +115,18 @@ module_dump_end()
|
|
|
103
115
|
|
|
104
116
|
**原型**:
|
|
105
117
|
```python
|
|
106
|
-
seed_all(seed=1234, mode=False)
|
|
118
|
+
seed_all(seed=1234, mode=False, rm_dropout=True)
|
|
107
119
|
```
|
|
108
120
|
|
|
109
121
|
**参数说明**:
|
|
110
122
|
|
|
111
123
|
1. seed: 随机性种子。参数示例: seed=1000。默认值:1234。非必选
|
|
112
124
|
2. mode:确定性计算模式。可配置True或False。参数示例:mode=True。默认为False。非必选(注意:确定性计算会导致API执行性能降低,建议在发现模型多次执行结果不同的情况下开启)
|
|
125
|
+
3. rm_dropout:控制dropout失效的开关。可配置 True 或 False,默认值:True,非必选。参数示例:rm_dropout=True。
|
|
126
|
+
该参数设置为 True 后, 工具会自动将 `torch.nn.functional.dropout`、`torch.nn.functional.dropout2d`、`torch.nn.functional.dropout3d`、`torch.nn.Dropout`、`torch.nn.Dropout2d`、`torch.nn.Dropout3d`
|
|
127
|
+
的接口参数 p 置为0,以避免因随机dropout造成的网络随机性。 注意:通过rm_dropout控制dropout失效或生效需要在初始化dropout实例前调用才能生效。
|
|
128
|
+
|
|
129
|
+
当前工具 dump 默认不会固定随机性和使 dropout 失效,若希望每次采集的数据保持一致,建议在 dump 数据前调用 seed_all 接口。
|
|
113
130
|
|
|
114
131
|
seed_all 函数可固定随机数的范围如下表。
|
|
115
132
|
|
|
@@ -128,29 +145,30 @@ seed_all 函数可固定随机数的范围如下表。
|
|
|
128
145
|
| torch.backends.cudnn.enable=False | 关闭 cuDNN |
|
|
129
146
|
| torch.backends.cudnn.benchmark=False | cuDNN 确定性地选择算法 |
|
|
130
147
|
| torch.backends.cudnn.deterministic=True | cuDNN 仅使用确定性的卷积算法 |
|
|
148
|
+
| torch.nn.functional.dropout | 将 dropout 的接口参数 p 置为0 |
|
|
149
|
+
| torch.nn.functional.dropout2d | 将 dropout2d 的接口参数 p 置为0 |
|
|
150
|
+
| torch.nn.functional.dropout3d | 将 dropout3d 的接口参数 p 置为0 |
|
|
151
|
+
| torch.nn.Dropout | 将 Dropout 的接口参数 p 置为0 |
|
|
152
|
+
| torch.nn.Dropout2d | 将 Dropout2d 的接口参数 p 置为0 |
|
|
153
|
+
| torch.nn.Dropout3d | 将 Dropout3d 的接口参数 p 置为0 |
|
|
131
154
|
|
|
132
155
|
需要保证 CPU 或 GPU 以及 NPU 的模型输入完全一致,dump 数据的比对才有意义,seed_all 并不能保证模型输入完全一致,如下表所示场景需要保证输入的一致性。
|
|
133
156
|
|
|
134
157
|
| 场景 | 固定方法 |
|
|
135
158
|
| --------------- | ------------- |
|
|
136
159
|
| 数据集的 shuffle | 关闭 shuffle。 |
|
|
137
|
-
| dropout | 关闭 dropout。 |
|
|
138
160
|
|
|
139
161
|
关闭 shuffle 示例:
|
|
140
162
|
|
|
141
163
|
```python
|
|
142
164
|
train_loader = torch.utils.data.DataLoader(
|
|
143
|
-
train_dataset,
|
|
144
|
-
batch_size
|
|
145
|
-
shuffle
|
|
146
|
-
num_workers
|
|
165
|
+
train_dataset,
|
|
166
|
+
batch_size=batch_size,
|
|
167
|
+
shuffle=False,
|
|
168
|
+
num_workers=num_workers
|
|
147
169
|
)
|
|
148
170
|
```
|
|
149
171
|
|
|
150
|
-
关闭 dropout:
|
|
151
|
-
|
|
152
|
-
在使用 `from msprobe.pytorch import PrecisionDebugger` 后,工具会自动将 `torch.nn.functional.dropout`、`torch.nn.functional.dropout2d`、`torch.nn.functional.dropout3d`、`torch.nn.Dropout`、`torch.nn.Dropout2d`、`torch.nn.Dropout3d` 的接口参数 p 置为0.
|
|
153
|
-
|
|
154
172
|
## 2 示例代码
|
|
155
173
|
|
|
156
174
|
### 2.1 快速上手
|
|
@@ -161,38 +179,43 @@ num_workers = num_workers
|
|
|
161
179
|
# 根据需要import包
|
|
162
180
|
import torch
|
|
163
181
|
import torch.nn as nn
|
|
164
|
-
import torch_npu # 需安装 torch_npu
|
|
165
182
|
import torch.nn.functional as F
|
|
183
|
+
|
|
184
|
+
# 导入工具的数据采集接口
|
|
166
185
|
from msprobe.pytorch import PrecisionDebugger, seed_all
|
|
186
|
+
|
|
167
187
|
# 在模型训练开始前固定随机性
|
|
168
188
|
seed_all()
|
|
189
|
+
# 在模型训练开始前实例化PrecisionDebugger
|
|
190
|
+
debugger = PrecisionDebugger(config_path='./config.json')
|
|
169
191
|
|
|
170
|
-
torch.npu.set_device("npu:0")
|
|
171
192
|
# 定义网络
|
|
172
193
|
class ModuleOP(nn.Module):
|
|
173
194
|
def __init__(self) -> None:
|
|
174
195
|
super().__init__()
|
|
175
|
-
self.linear_1 = nn.Linear(in_features=8,out_features=4)
|
|
176
|
-
self.linear_2 = nn.Linear(in_features=4,out_features=2)
|
|
196
|
+
self.linear_1 = nn.Linear(in_features=8, out_features=4)
|
|
197
|
+
self.linear_2 = nn.Linear(in_features=4, out_features=2)
|
|
177
198
|
|
|
178
|
-
def forward(self,x):
|
|
199
|
+
def forward(self, x):
|
|
179
200
|
x1 = self.linear_1(x)
|
|
180
201
|
x2 = self.linear_2(x1)
|
|
181
202
|
r1 = F.relu(x2)
|
|
182
203
|
return r1
|
|
183
204
|
|
|
184
205
|
if __name__ == "__main__":
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
debugger.start()
|
|
189
|
-
x = torch.randn(10,8)
|
|
190
|
-
out = module(x)
|
|
191
|
-
loss = out.sum()
|
|
192
|
-
loss.backward()
|
|
193
|
-
debugger.stop()
|
|
206
|
+
module = ModuleOP()
|
|
207
|
+
# 开启数据 dump
|
|
208
|
+
debugger.start(model=module)
|
|
194
209
|
|
|
210
|
+
x = torch.randn(10, 8)
|
|
211
|
+
out = module(x)
|
|
212
|
+
loss = out.sum()
|
|
213
|
+
loss.backward()
|
|
214
|
+
|
|
215
|
+
# 关闭数据 dump
|
|
216
|
+
debugger.stop()
|
|
195
217
|
```
|
|
218
|
+
|
|
196
219
|
### 2.2 采集完整的前反向数据
|
|
197
220
|
|
|
198
221
|
```Python
|
|
@@ -205,19 +228,20 @@ debugger = PrecisionDebugger(config_path="./config.json", dump_path="./dump_path
|
|
|
205
228
|
# ...
|
|
206
229
|
# 数据集迭代的位置一般为模型训练开始的位置
|
|
207
230
|
for data, label in data_loader:
|
|
208
|
-
|
|
209
|
-
|
|
231
|
+
debugger.start() # 开启数据dump
|
|
232
|
+
# 如下是模型每个step执行的逻辑
|
|
210
233
|
output = model(data)
|
|
211
234
|
#...
|
|
212
235
|
loss.backward()
|
|
213
|
-
|
|
214
|
-
|
|
236
|
+
debugger.stop() # 关闭数据dump
|
|
237
|
+
debugger.step() # 结束一个step的dump
|
|
215
238
|
```
|
|
216
239
|
|
|
217
240
|
### 2.3 采集指定代码块的前反向数据
|
|
218
241
|
|
|
219
242
|
```Python
|
|
220
243
|
from msprobe.pytorch import PrecisionDebugger, seed_all
|
|
244
|
+
|
|
221
245
|
# 在模型训练开始前固定随机性
|
|
222
246
|
seed_all()
|
|
223
247
|
# 请勿将PrecisionDebugger的初始化流程插入到循环代码中
|
|
@@ -227,14 +251,14 @@ debugger = PrecisionDebugger(config_path="./config.json", dump_path="./dump_path
|
|
|
227
251
|
# ...
|
|
228
252
|
# 数据集迭代的位置一般为模型训练开始的位置
|
|
229
253
|
for data, label in data_loader:
|
|
230
|
-
|
|
231
|
-
|
|
254
|
+
debugger.start() # 开启数据dump
|
|
255
|
+
# 如下是模型每个step执行的逻辑
|
|
232
256
|
output = model(data)
|
|
233
|
-
|
|
234
|
-
|
|
257
|
+
|
|
258
|
+
debugger.forward_backward_dump_end() # 插入该函数到start函数之后,只dump start函数到该函数之间的前反向数据。
|
|
259
|
+
# ...
|
|
235
260
|
loss.backward()
|
|
236
|
-
|
|
237
|
-
debugger.step() # 结束一个step的dump
|
|
261
|
+
debugger.step() # 结束一个step的dump
|
|
238
262
|
```
|
|
239
263
|
|
|
240
264
|
### 2.4 采集函数模块化数据
|
|
@@ -243,11 +267,14 @@ for data, label in data_loader:
|
|
|
243
267
|
# 根据需要import包
|
|
244
268
|
import torch
|
|
245
269
|
import torch.nn as nn
|
|
246
|
-
import torch_npu # 需安装 torch_npu
|
|
247
270
|
import torch.nn.functional as F
|
|
271
|
+
|
|
272
|
+
# 导入工具的数据采集接口
|
|
248
273
|
from msprobe.pytorch import PrecisionDebugger, module_dump, module_dump_end
|
|
249
274
|
|
|
250
|
-
|
|
275
|
+
# 在模型训练开始前实例化PrecisionDebugger
|
|
276
|
+
debugger = PrecisionDebugger(config_path='./config.json')
|
|
277
|
+
|
|
251
278
|
# 定义网络
|
|
252
279
|
class ModuleOP(nn.Module):
|
|
253
280
|
def __init__(self) -> None:
|
|
@@ -263,37 +290,37 @@ class ModuleOP(nn.Module):
|
|
|
263
290
|
|
|
264
291
|
if __name__ == "__main__":
|
|
265
292
|
module = ModuleOP()
|
|
266
|
-
#
|
|
267
|
-
debugger
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
x = torch.randn(10, 8)
|
|
293
|
+
# 开启数据dump
|
|
294
|
+
debugger.start()
|
|
295
|
+
x = torch.randn(10, 8)
|
|
271
296
|
# ... # start和module_dump接口之间的数据正常dump
|
|
272
297
|
module_dump(module, "MyModuleOP") # 开启模块级精度数据dump
|
|
273
|
-
out = module(x) # module内部的child modules或API
|
|
298
|
+
out = module(x) # module内部的child modules或API将不会被dump
|
|
274
299
|
module_dump_end() # 关闭模块级精度数据dump
|
|
275
300
|
loss = out.sum() # module_dump_end和stop接口之间的数据正常dump
|
|
276
|
-
loss.backward()
|
|
277
|
-
|
|
278
|
-
debugger.stop()
|
|
301
|
+
loss.backward()
|
|
302
|
+
# 关闭数据dump
|
|
303
|
+
debugger.stop()
|
|
279
304
|
```
|
|
280
305
|
|
|
281
306
|
## 3 dump 结果文件介绍
|
|
282
307
|
|
|
283
308
|
训练结束后,工具将 dump 的数据保存在 dump_path 参数指定的目录下。目录结构示例如下:
|
|
284
309
|
|
|
285
|
-
```
|
|
310
|
+
```lua
|
|
286
311
|
├── dump_path
|
|
287
312
|
│ ├── step0
|
|
288
313
|
│ | ├── rank0
|
|
289
314
|
│ | │ ├── dump_tensor_data
|
|
290
315
|
| | | | ├── Tensor.permute.1.forward.pt
|
|
291
|
-
| | | | ├──
|
|
316
|
+
| | | | ├── Module.conv1.Conv2d.forward.0.input.0.pt # 命名格式为{Module}.{module_name}.{class_name}.{forward/backward}.{调用次数}.{input/output}.{参数序号}, 其中,“参数序号”表示该Module的第n个参数,例如1,则为第一个参数,若该参数为list格式,则根据list继续排序,例如1.1,表示该Module的第1个参数的第1个元素。
|
|
317
|
+
| | | | ├── Module.conv1.Conv2D.forward.0.parameters.bias.pt # 模块参数数据:命名格式为{Module}.{module_name}.{class_name}.forward.{调用次数}.parameters.{parameter_name}。
|
|
318
|
+
| | | | ├── Module.conv1.Conv2D.parameters_grad.weight.pt # 模块参数梯度数据:命名格式为{Module}.{module_name}.{class_name}.parameters_grad.{parameter_name}。因为同一模块的参数使用同一梯度进行更新,所以参数梯度文件名不包含调用次数。
|
|
292
319
|
| | | | ...
|
|
293
|
-
| | | | └──
|
|
294
|
-
│ | | ├── dump.json
|
|
295
|
-
│ | | ├── stack.json
|
|
296
|
-
│ | | └── construct.json
|
|
320
|
+
| | | | └── Functional.linear.5.backward.output.pt # 命名格式为{api_type}.{api_name}.{API调用次数}.{forward/backward}.{input/output}.{参数序号}, 其中,“参数序号”表示该API的第n个输入或输出,例如1,则为第一个参数,若该参数为list格式,则根据list继续排序,例如1.1,表示该API的第1个参数的第1个元素。
|
|
321
|
+
│ | | ├── dump.json
|
|
322
|
+
│ | | ├── stack.json
|
|
323
|
+
│ | | └── construct.json
|
|
297
324
|
│ | ├── rank1
|
|
298
325
|
| | | ├── dump_tensor_data
|
|
299
326
|
| | | | └── ...
|
|
@@ -306,7 +333,13 @@ if __name__ == "__main__":
|
|
|
306
333
|
│ ├── step1
|
|
307
334
|
│ | ├── ...
|
|
308
335
|
│ ├── step2
|
|
309
|
-
```
|
|
336
|
+
```
|
|
337
|
+
* `rank`:设备 ID,每张卡的数据保存在对应的 `rank{ID}` 目录下。非分布式场景下没有 rank ID,目录名称为 rank。
|
|
338
|
+
* `dump_tensor_data`:保存采集到的张量数据。
|
|
339
|
+
* `dump.json`: 保存API或Module前反向数据的统计量信息。包含dump数据的API名称或Module名称,各数据的dtype、 shape、max、min、mean、L2norm(L2范数,平方根)统计信息以及当配置summary_mode="md5"时的CRC-32数据。具体介绍可参考[dump.json文件说明](./27.dump_json_instruction.md#1-dumpjson文件介绍pytorch)。
|
|
340
|
+
* `stack.json`:API/Module的调用栈信息。
|
|
341
|
+
* `construct.json`:分层分级结构,level为L1时,construct.json内容为空。
|
|
342
|
+
|
|
310
343
|
|
|
311
344
|
dump 过程中,pt 文件在对应算子或者模块被执行后就会落盘,而 json 文件则需要在正常执行 PrecisionDebugger.stop() 后才会写入完整数据,异常的程序终止会保存终止前被执行算子的相关 npy 文件,可能会导致 json 文件中数据丢失。
|
|
312
345
|
|
|
@@ -323,6 +356,3 @@ pt 文件保存的前缀和 PyTorch 对应关系如下:
|
|
|
323
356
|
| VF | torch._VF |
|
|
324
357
|
| Aten | torch.ops.aten |
|
|
325
358
|
| Distributed | torch.distributed |
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
@@ -20,12 +20,13 @@
|
|
|
20
20
|
|
|
21
21
|
以下通过一个简单的示例,展示如何在 MindSpore 中使用 msprobe 工具进行精度数据采集。
|
|
22
22
|
|
|
23
|
-
您可以参考 [动态图快速入门示例](
|
|
23
|
+
您可以参考 [动态图快速入门示例](data_dump_MindSpore/dynamic_graph_quick_start_example.md) 了解详细步骤。
|
|
24
24
|
|
|
25
25
|
## 4. 概述
|
|
26
26
|
|
|
27
27
|
msprobe 工具通过在训练脚本中添加 `PrecisionDebugger` 接口并启动训练的方式,采集模型在运行过程中的精度数据。该工具支持对MindSpore的静态图和动态图场景进行不同Level等级的精度数据采集。
|
|
28
28
|
|
|
29
|
+
dump 的"tensor"模式采集数据量大小,可以参考[数据量基线](data_dump_MindSpore/data_dump_MindSpore_baseline.md)。
|
|
29
30
|
|
|
30
31
|
## 5. 场景介绍
|
|
31
32
|
|
|
@@ -43,7 +44,7 @@ msprobe 工具通过在训练脚本中添加 `PrecisionDebugger` 接口并启动
|
|
|
43
44
|
- **未使用高阶 API** :
|
|
44
45
|
- 手动在训练循环中调用 `start`、`stop`、`step` 等接口,适用于 **L0** 、**L1** 、**mix** 、**L2** 数据采集。
|
|
45
46
|
|
|
46
|
-
采集方式请参见[示例代码 > 动态图场景](#72
|
|
47
|
+
采集方式请参见[示例代码 > 动态图场景](#72-动态图场景)。
|
|
47
48
|
|
|
48
49
|
> **注意** :动态图模式下,使用 `PSJit` 或 `PIJit` 装饰的部分实际以静态图模式执行,此时的 **Kernel 级(L2 Level)** 数据采集方式与静态图场景相同。
|
|
49
50
|
- **L0 Level(Cell 级)** :采集 `Cell` 对象的数据,适用于需要分析特定网络模块的情况。
|
|
@@ -65,12 +66,15 @@ msprobe 工具通过在训练脚本中添加 `PrecisionDebugger` 接口并启动
|
|
|
65
66
|
**原型**:
|
|
66
67
|
|
|
67
68
|
```Python
|
|
68
|
-
PrecisionDebugger(config_path=None)
|
|
69
|
+
PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None, step=None)
|
|
69
70
|
```
|
|
70
71
|
|
|
71
72
|
**参数说明**:
|
|
72
73
|
|
|
73
74
|
1. config_path:指定 dump 配置文件路径,string 类型。参数示例:"./config.json"。未配置该路径时,默认使用 [config.json](../config.json) 文件的默认配置,配置选项含义可见 [config.json 介绍](./02.config_introduction.md)。
|
|
75
|
+
2. 其他参数均在 [config.json](../config.json) 文件中可配,详细配置可见 [config.json 介绍](./02.config_introduction.md)。
|
|
76
|
+
|
|
77
|
+
此接口的参数均不是必要,且优先级高于 [config.json](../config.json) 文件中的配置,但可配置的参数相比 config.json 较少。
|
|
74
78
|
|
|
75
79
|
#### 6.1.1 start
|
|
76
80
|
|
|
@@ -88,7 +92,9 @@ start(model=None)
|
|
|
88
92
|
|
|
89
93
|
#### 6.1.2 stop
|
|
90
94
|
|
|
91
|
-
|
|
95
|
+
**功能说明**:停止精度数据采集。在 **start** 函数之后的任意位置添加。若 **stop** 函数添加在反向计算代码之后,则会采集 **start** 和该函数之间的前反向数据。
|
|
96
|
+
若 **stop** 函数添加在反向计算代码之前,则需要将 **step** 函数添加到反向计算代码之后,才能采集 **start** 和该函数之间的前反向数据。
|
|
97
|
+
**step** 函数详细介绍见6.1.3章节。**仅未使用 Model 高阶 API 的动态图场景支持。**
|
|
92
98
|
|
|
93
99
|
**原型**:
|
|
94
100
|
|
|
@@ -98,7 +104,9 @@ stop()
|
|
|
98
104
|
|
|
99
105
|
#### 6.1.3 step
|
|
100
106
|
|
|
101
|
-
|
|
107
|
+
**功能说明**:结束一个 step 的数据采集,完成所有数据落盘并更新 dump 参数。在一个 step 结束的位置添加,且必须在 **stop** 函数之后的位置调用。
|
|
108
|
+
该函数需要配合 **start** 和 **stop** 函数使用,尽量添加在反向计算代码之后,否则可能会导致反向数据丢失。
|
|
109
|
+
**仅未使用 Model 高阶 API 的动态图场景支持。**
|
|
102
110
|
|
|
103
111
|
**原型**:
|
|
104
112
|
|
|
@@ -108,9 +116,7 @@ step()
|
|
|
108
116
|
|
|
109
117
|
#### 6.1.4 forward_backward_dump_end
|
|
110
118
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
**仅支持L1级别数据采集场景。**
|
|
119
|
+
**功能说明**:停止精度数据采集。与 **stop** 函数功能相同,该函数在将来会被移除,建议使用 **stop** 函数。
|
|
114
120
|
|
|
115
121
|
**L1级别数据中的jit数据采集行为不受此接口影响。**
|
|
116
122
|
|
|
@@ -173,7 +179,7 @@ debugger.start()
|
|
|
173
179
|
|
|
174
180
|
```
|
|
175
181
|
|
|
176
|
-
### 7.2 动态图场景
|
|
182
|
+
### 7.2 动态图场景
|
|
177
183
|
|
|
178
184
|
#### 7.2.1 L0 ,L1, mix 级别
|
|
179
185
|
|
|
@@ -273,7 +279,37 @@ trainer.train(1, train_dataset)
|
|
|
273
279
|
|
|
274
280
|
### 8.1 静态图场景
|
|
275
281
|
|
|
276
|
-
训练结束后,数据将保存在 `dump_path`
|
|
282
|
+
训练结束后,数据将保存在 `dump_path` 指定的目录下。
|
|
283
|
+
|
|
284
|
+
若jit_level=O2,且使用mindstudio-probe发布包或源码编包时添加了`--include-mod=adump`选项,目录结构示例如下:
|
|
285
|
+
```
|
|
286
|
+
├── dump_path
|
|
287
|
+
│ ├── rank_0
|
|
288
|
+
│ | ├── {timestamp}
|
|
289
|
+
│ | │ ├── step_0
|
|
290
|
+
| | | | ├── AssignAdd.Default_network-TrainOneStepCell_optimzer-Gsd_AssignAdd-op0.0.10.1735011096403740.input.0.ND.INT32.npy
|
|
291
|
+
| | | | ├── Cast.Default_network-TrainOneStepCell_network-WithLossCell__backbone-Net_Cast-op0.9.10.1735011096426349.input.0.ND.FLOAT.npy
|
|
292
|
+
| | | | ├── GetNext.Default_GetNext-op0.0.11.17350110964032987.output.0.ND.FLOAT.npy
|
|
293
|
+
| | | | ...
|
|
294
|
+
| | | | ├── RefDAata.accum_bias1.6.10.1735011096424907.output.0.ND.FLOAT.npy
|
|
295
|
+
| | | | ├── Sub.Default_network-TrainOneStepCell_network-WithLossCell__backbone-Net_Sub-op0.10.10.1735011096427368.input.0.ND.BF16
|
|
296
|
+
| | | | └── mapping.csv
|
|
297
|
+
│ | │ ├── step_1
|
|
298
|
+
| | | | ├── ...
|
|
299
|
+
| | | ├── ...
|
|
300
|
+
| | ├── ...
|
|
301
|
+
| |
|
|
302
|
+
│ ├── ...
|
|
303
|
+
| |
|
|
304
|
+
│ └── rank_7
|
|
305
|
+
│ ├── ...
|
|
306
|
+
```
|
|
307
|
+
**说明**
|
|
308
|
+
1. 若配置文件中指定落盘npy格式,但是实际数据格式不在npy支持范围内(如bf16、int4等),则该tensor会以原始码流落盘,并不会转换为npy格式。
|
|
309
|
+
2. 若原始文件全名长度超过255个字符,则文件基础名会被转换为长度为32位的随机数字字符串,原始文件名与转换后文件名的对应关系会保存在同目录下的`mapping.csv`文件中。
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
其他场景请参见 MindSpore 官方文档中的[数据对象目录](https://www.mindspore.cn/docs/zh-CN/r2.4.0/model_train/debug/dump.html)。
|
|
277
313
|
|
|
278
314
|
### 8.2 动态图场景
|
|
279
315
|
|
|
@@ -286,15 +322,17 @@ dump 结果目录结构示例如下:
|
|
|
286
322
|
│ | │ ├── dump_tensor_data
|
|
287
323
|
| | | | ├── MintFunctional.relu.0.backward.input.0.npy
|
|
288
324
|
| | | | ├── Mint.abs.0.forward.input.0.npy
|
|
289
|
-
| | | | ├── Functional.split.0.forward.input.0.npy
|
|
325
|
+
| | | | ├── Functional.split.0.forward.input.0.npy # 命名格式为{api_type}.{api_name}.{API调用次数}.{forward/backward}.{input/output}.{参数序号}, 其中,“参数序号”表示该API的第n个输入或输出,例如1,则为第一个参数,若该参数为list格式,则根据list继续排序,例如1.1,表示该API的第1个参数的第1个元素。
|
|
290
326
|
| | | | ├── Tensor.__add__.0.forward.output.0.npy
|
|
291
327
|
| | | | ...
|
|
292
328
|
| | | | ├── Jit.AlexNet.0.forward.input.0.npy
|
|
293
329
|
| | | | ├── Primitive.conv2d.Conv2D.0.forward.input.0.npy
|
|
294
|
-
| | | |
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
│ | |
|
|
330
|
+
| | | | ├── Cell.conv1.Conv2D.forward.0.parameters.weight.npy # 模块参数数据:命名格式为{Cell}.{cell_name}.{class_name}.forward.{调用次数}.parameters.{parameter_name}。
|
|
331
|
+
| | | | ├── Cell.conv1.Conv2D.parameters_grad.weight.npy # 模块参数梯度数据:命名格式为{Cell}.{cell_name}.{class_name}.parameters_grad.{parameter_name}。因为同一模块的参数使用同一梯度进行更新,所以参数梯度文件名不包含调用次数。
|
|
332
|
+
| | | | └── Cell.relu.ReLU.forward.0.input.0.npy # 命名格式为{Cell}.{cell_name}.{class_name}.{forward/backward}.{调用次数}.{input/output}.{参数序号}, 其中,“参数序号”表示该Cell的第n个参数,例如1,则为第一个参数,若该参数为list格式,则根据list继续排序,例如1.1,表示该Cell的第1个参数的第1个元素。
|
|
333
|
+
│ | | ├── dump.json
|
|
334
|
+
│ | | ├── stack.json
|
|
335
|
+
│ | | └── construct.json
|
|
298
336
|
│ | ├── rank1
|
|
299
337
|
| | | ├── dump_tensor_data
|
|
300
338
|
| | | | └── ...
|
|
@@ -311,9 +349,9 @@ dump 结果目录结构示例如下:
|
|
|
311
349
|
|
|
312
350
|
* `rank`:设备 ID,每张卡的数据保存在对应的 `rank{ID}` 目录下。非分布式场景下没有 rank ID,目录名称为 rank。
|
|
313
351
|
* `dump_tensor_data`:保存采集到的张量数据。
|
|
314
|
-
* `dump.json
|
|
315
|
-
* `stack.json`:API
|
|
316
|
-
* `construct.json
|
|
352
|
+
* `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-dumpjson文件示例mindspore)。
|
|
353
|
+
* `stack.json`:API/Cell的调用栈信息。
|
|
354
|
+
* `construct.json`:分层分级结构,level为L1时,construct.json内容为空。
|
|
317
355
|
|
|
318
356
|
dump 过程中,npy 文件在对应API或者模块被执行后就会落盘,而 json 文件则需要在正常执行 PrecisionDebugger.stop() 后才会写入完整数据,因此,程序异常终止时,被执行API对应的 npy 文件已被保存,但 json 文件中的数据可能丢失。
|
|
319
357
|
|
|
@@ -332,6 +370,7 @@ npy文件名的前缀含义如下:
|
|
|
332
370
|
| Primitive | mindspore.ops.Primitive API数据 |
|
|
333
371
|
| Mint | mindspore.mint API数据 |
|
|
334
372
|
| MintFunctional | mindspore.mint.nn.functional API数据 |
|
|
373
|
+
| Distributed | mindspore.communication.comm_func API数据 |
|
|
335
374
|
| Jit | 被"jit"装饰的模块或函数数据 |
|
|
336
375
|
| Cell | mindspore.nn.Cell 类(模块)数据 |
|
|
337
376
|
|
|
@@ -349,4 +388,3 @@ ops:
|
|
|
349
388
|
- adaptive_avg_pool2d
|
|
350
389
|
- adaptive_avg_pool3d
|
|
351
390
|
```
|
|
352
|
-
|
|
@@ -31,7 +31,7 @@ run_ut 预检操作包括以下两种方式:
|
|
|
31
31
|
将 API 信息输入到 run_ut 模块进行精度检测并比对,运行如下命令:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
msprobe -f pytorch run_ut -api_info ./dump.json
|
|
34
|
+
msprobe -f pytorch run_ut -api_info ./dump_path/step{step_number}/rank{rank_number}/dump.json
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
| 参数名称 | 解释 | 是否必选 |
|
|
@@ -50,7 +50,7 @@ run_ut 执行结果包括 `accuracy_checking_result_{timestamp}.csv` 和 `accura
|
|
|
50
50
|
如果需要保存比对不达标的输入和输出数据,可以在 run_ut 执行命令结尾添加 `-save_error_data`,例如:
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
|
-
msprobe -f pytorch run_ut -api_info ./dump.json -save_error_data
|
|
53
|
+
msprobe -f pytorch run_ut -api_info ./dump_path/step{step_number}/rank{rank_number}/dump.json -save_error_data
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
数据默认会存盘到 './ut_error_data{timestamp}' 路径下,如有需要,用户可以通过 error_data_path 参数来配置保存路径,error_data_path 参数在 [config.json](../config.json) 文件或 [config.yaml](../pytorch/api_accuracy_checker/config.yaml) 文件配置,config.json 文件需要在 run_ut 操作时通过 -config 参数指定。
|
|
@@ -98,7 +98,7 @@ msprobe -f pytorch run_ut -api_info ./dump.json -save_error_data
|
|
|
98
98
|
multi_run_ut 脚本,可以并行执行多个 run_ut 操作,从而减少预检耗时。示例如下:
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
|
-
msprobe -f pytorch multi_run_ut -api_info ./dump.json -n 32 -d 0 1 2 3
|
|
101
|
+
msprobe -f pytorch multi_run_ut -api_info ./dump_path/step{step_number}/rank{rank_number}/dump.json -n 32 -d 0 1 2 3
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
| 参数名称 | 解释 | 是否必选 |
|
|
@@ -117,7 +117,7 @@ msprobe -f pytorch multi_run_ut -api_info ./dump.json -n 32 -d 0 1 2 3
|
|
|
117
117
|
断点续检操作通过如下命令执行:
|
|
118
118
|
|
|
119
119
|
```bash
|
|
120
|
-
msprobe -f pytorch run_ut -api_info ./dump.json -csv_path /home/xxx/ut/accuracy_checking_result_{timestamp}.csv
|
|
120
|
+
msprobe -f pytorch run_ut -api_info ./dump_path/step{step_number}/rank{rank_number}/dump.json -csv_path /home/xxx/ut/accuracy_checking_result_{timestamp}.csv
|
|
121
121
|
```
|
|
122
122
|
|
|
123
123
|
精度预检 run_ut 过程中,若因环境、数据量过大等原因导致预检进程中断,那么当用户解决这些问题后,重新执行 run_ut 操作,可以通过断点续检操作继续前面未完成的预检,会在 -csv_path 指定的 `accuracy_checking_result_{timestamp}.csv` 文件以及对应的 `accuracy_checking_details_{timestamp}.csv` 文件中继续写入后续的结果,不会重新创建结果文件。
|
|
@@ -194,15 +194,15 @@ Forward Test Success 和 Backward Test Success 是否通过测试是由 `accurac
|
|
|
194
194
|
|
|
195
195
|
判定为小值的阈值:
|
|
196
196
|
|
|
197
|
-
- torch.float32:
|
|
198
|
-
- torch.float16:
|
|
199
|
-
- torch.bfloat16:
|
|
197
|
+
- torch.float32:2**-20
|
|
198
|
+
- torch.float16:2**-10
|
|
199
|
+
- torch.bfloat16:2**-10
|
|
200
200
|
|
|
201
201
|
小值域的绝对误差阈值:
|
|
202
202
|
|
|
203
|
-
- torch.float32:
|
|
204
|
-
- torch.float16:
|
|
205
|
-
- torch.bfloat16:
|
|
203
|
+
- torch.float32:2**-30
|
|
204
|
+
- torch.float16:2**-16
|
|
205
|
+
- torch.bfloat16:2**-16
|
|
206
206
|
|
|
207
207
|
## 5 预检结果比对
|
|
208
208
|
|
|
@@ -229,8 +229,8 @@ msprobe -f pytorch api_precision_compare -npu /home/xxx/npu/accuracy_checking_de
|
|
|
229
229
|
| 字段 | 含义 |
|
|
230
230
|
| --------------------- | ------------------------------------------------------------ |
|
|
231
231
|
| API name | API 名称。 |
|
|
232
|
-
| Forward Test Success | 前向 API 是否通过测试。pass 为通过;
|
|
233
|
-
| Backward Test Success | 反向 API 是否通过测试。pass 为通过;
|
|
232
|
+
| Forward Test Success | 前向 API 是否通过测试。pass 为通过;error 为错误;SKIP 表示跳过该 API 的计算,跳过原因在 Message 字段中提示,包括:该 API 的数据类型不支持使用新精度标准进行比对(如 float64),或该 API 不支持精度预检,或该 API 被黑名单过滤或不在白名单上,或运行错误等。 |
|
|
233
|
+
| Backward Test Success | 反向 API 是否通过测试。pass 为通过;error 为错误;如果是空白的话代表该 API 没有反向输出;SKIP 表示该 API 的数据类型不支持使用新精度标准进行比对(如 float64)。 |
|
|
234
234
|
| Message | 提示信息。 |
|
|
235
235
|
|
|
236
236
|
Forward Test Success 和 Backward Test Success 是否通过测试是由 `api_precision_compare_details_{timestamp}.csv` 中的各个指标判定结果决定的。需要注意的是 `api_precision_compare_details_{timestamp}.csv` 中可能存在一个 API 的前向(反向)有多个输出,那么每个输出记录一行,而在 `api_precision_compare_result_{timestamp}.csv` 中的结果需要该 API 的所有结果均为 pass 才能标记为 pass,只要存在一个 error 则标记 error,仅存在 warning 和 pass 且不存在 error 标记 warning。
|
|
@@ -243,15 +243,15 @@ Forward Test Success 和 Backward Test Success 是否通过测试是由 `api_pre
|
|
|
243
243
|
| ------------------------ | ------------------------------------------------------------ |
|
|
244
244
|
| API name | NPU 或 GPU 下的 API 名称。 |
|
|
245
245
|
| 小值域错误比值 | NPU 与 CPU 的小值域的错误比率 / GPU 与 CPU 的小值域的错误比率。标杆比对法指标。 |
|
|
246
|
-
| 小值域错误判定结果 | 小值域错误比值小于等于
|
|
246
|
+
| 小值域错误判定结果 | 小值域错误比值小于等于 2 标记为 pass,大于 2 标记为 error。 |
|
|
247
247
|
| 均方根误差比值 | NPU 与 CPU 的均方根误差 / GPU 与 CPU 的均方根误差。标杆比对法指标。 |
|
|
248
|
-
| 均方根误差判定结果 | 均方根误差比值小于等于
|
|
248
|
+
| 均方根误差判定结果 | 均方根误差比值小于等于 2 标记为 pass,大于 2 标记为 error。 |
|
|
249
249
|
| 相对误差最大值比值 | NPU 与 CPU 的相对误差最大值 / GPU 与 CPU 的相对误差最大值。标杆比对法指标。 |
|
|
250
|
-
| 相对误差最大值判定结果 | 相对误差最大值比值小于等于
|
|
250
|
+
| 相对误差最大值判定结果 | 相对误差最大值比值小于等于 10 标记为 pass,大于 10 标记为 error。 |
|
|
251
251
|
| 相对误差平均值比值 | NPU 与 CPU 的相对误差的平均值 / GPU 与 CPU 的相对误差的平均值。标杆比对法指标。 |
|
|
252
|
-
| 相对误差平均值判定结果 | 相对误差平均值比值小于等于
|
|
252
|
+
| 相对误差平均值判定结果 | 相对误差平均值比值小于等于 2 标记为 pass,大于 2 标记为 error。 |
|
|
253
253
|
| 误差均衡性比值 | NPU 与 CPU 的误差均衡性 / GPU 与 CPU 的误差均衡性。标杆比对法指标。 |
|
|
254
|
-
| 误差均衡性判定结果 | 误差均衡性比值小于等于
|
|
254
|
+
| 误差均衡性判定结果 | 误差均衡性比值小于等于 2 标记为 pass,大于 2 标记为 error。该字段暂不参与 api_precision_compare_result 的结果判定。 |
|
|
255
255
|
| inf / nan 错误率 | NPU 与标杆 inf / nan 计算不一致的元素个数占总元素的个数比例。绝对阈值法指标。 |
|
|
256
256
|
| inf / nan 判定结果 | inf / nan 错误率判定结果,等于 0 标记为 pass,其余情况标记为 error。 |
|
|
257
257
|
| 相对误差错误率 | NPU 与标杆的正常值计算相对误差,其大于错误阈值的元素个数占正常值元素个数的比例。绝对阈值法指标。 |
|
|
@@ -286,7 +286,7 @@ a:误差比对法指标。
|
|
|
286
286
|
|
|
287
287
|
- npu_linear
|
|
288
288
|
|
|
289
|
-
- npu_fusion_attention(该算子在 GPU 上预检时,需要额外安装 flash_attn
|
|
289
|
+
- npu_fusion_attention(该算子在 GPU 上预检时,需要额外安装 flash_attn,请用户自行安装,建议安装2.1以上版本。)
|
|
290
290
|
|
|
291
291
|
- npu_rms_norm
|
|
292
292
|
|
|
@@ -29,7 +29,7 @@ msprobe -f mindspore run_ut -api_info ./dump.json -o ./checker_result
|
|
|
29
29
|
|
|
30
30
|
| 参数名称 | 说明 |参数类型 | 是否必选 |
|
|
31
31
|
| ---------------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------- | ---------------------------------- |
|
|
32
|
-
| -api_info 或 --api_info_file | 指定 API 信息文件 dump.json。对其中的mint api以及部分Tensor api
|
|
32
|
+
| -api_info 或 --api_info_file | 指定 API 信息文件 dump.json。对其中的mint api以及部分Tensor api进行预检,预检支持的Tensor api列表详见 [ 预检支持列表](../mindspore/api_accuracy_checker/checker_support_api.yaml)。 | str | 是 |
|
|
33
33
|
| -o 或 --out_path | 指定预检结果存盘路径,默认“./”。 | str | 否 |
|
|
34
34
|
| -csv_path 或 --result_csv_path | 指定本次运行中断时生成的 `accuracy_checking_result_{timestamp}.csv` 文件路径,执行 run_ut 中断时,若想从中断处继续执行,配置此参数即可。需要指定为上次中断的 `accuracy_checking_result_{timestamp}.csv` 文件。详见 [3.3 断点续检](#33-断点续检)。 | str | 否 |
|
|
35
35
|
|
|
@@ -45,12 +45,12 @@ msprobe -f mindspore multi_run_ut -api_info ./dump.json -d 0 1 2 3
|
|
|
45
45
|
|
|
46
46
|
| 参数名称 | 说明 |参数类型 | 是否必选 |
|
|
47
47
|
| ---------------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------- | ---------------------------------- |
|
|
48
|
-
| -api_info 或 --api_info_file | 指定 API 信息文件 dump.json。对其中的mint api以及部分Tensor api
|
|
48
|
+
| -api_info 或 --api_info_file | 指定 API 信息文件 dump.json。对其中的mint api以及部分Tensor api进行预检,预检支持的Tensor api列表详见 [ 预检支持列表](../mindspore/api_accuracy_checker/checker_support_api.yaml)。 | str | 是 |
|
|
49
49
|
| -o 或 --out_path | 指定预检结果存盘路径,默认“./”。 | str | 否 |
|
|
50
50
|
| -csv_path 或 --result_csv_path | 指定本次运行中断时生成的 `accuracy_checking_result_{timestamp}.csv` 文件路径,执行 run_ut 中断时,若想从中断处继续执行,配置此参数即可。需要指定为上次中断的 `accuracy_checking_result_{timestamp}.csv` 文件。详见 [3.3 断点续检](#33-断点续检)。 | str | 否 |
|
|
51
|
-
| -d 或 --device | 指定 Device ID,选择 UT 代码运行所在的卡,默认值为 0,支持同时指定 0 ~ Device
|
|
52
|
-
|
|
51
|
+
| -d 或 --device | 指定 Device ID,选择 UT 代码运行所在的卡,默认值为 0,支持同时指定 0 ~ Device数量 - 1 ,例如 0 1 2 3 4。 | List[int] | 否 |
|
|
53
52
|
|
|
53
|
+
在不同卡数下,使用38B语言大模型的预检耗时基线参考 [multi_run_ut耗时基线](accuracy_checker_MindSpore/accuracy_checker_MindSpore_baseline.md)
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
### 3.3 断点续检
|