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.
Files changed (197) hide show
  1. {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.1.dist-info}/METADATA +3 -2
  2. {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.1.dist-info}/RECORD +196 -141
  3. msprobe/CMakeLists.txt +5 -0
  4. msprobe/README.md +14 -19
  5. msprobe/config.json +1 -0
  6. msprobe/core/common/const.py +155 -6
  7. msprobe/core/common/exceptions.py +3 -1
  8. msprobe/core/common/file_utils.py +33 -7
  9. msprobe/core/common/inplace_ops.yaml +3 -0
  10. msprobe/core/common/utils.py +28 -14
  11. msprobe/core/common_config.py +6 -0
  12. msprobe/core/compare/acc_compare.py +139 -128
  13. msprobe/core/compare/check.py +31 -29
  14. msprobe/core/compare/compare_cli.py +17 -16
  15. msprobe/core/compare/highlight.py +186 -99
  16. msprobe/core/compare/layer_mapping/data_scope_parser.py +18 -7
  17. msprobe/core/compare/layer_mapping/layer_mapping.py +21 -14
  18. msprobe/core/compare/layer_mapping/postprocess_pass.py +4 -3
  19. msprobe/core/compare/merge_result/merge_result.py +380 -0
  20. msprobe/core/compare/merge_result/merge_result_cli.py +31 -0
  21. msprobe/core/compare/multiprocessing_compute.py +2 -2
  22. msprobe/core/compare/npy_compare.py +109 -147
  23. msprobe/core/compare/utils.py +189 -69
  24. msprobe/core/data_dump/data_collector.py +51 -21
  25. msprobe/core/data_dump/data_processor/base.py +38 -20
  26. msprobe/core/data_dump/data_processor/factory.py +5 -3
  27. msprobe/core/data_dump/data_processor/mindspore_processor.py +154 -20
  28. msprobe/core/data_dump/data_processor/pytorch_processor.py +118 -58
  29. msprobe/core/data_dump/json_writer.py +29 -1
  30. msprobe/core/data_dump/scope.py +19 -18
  31. msprobe/core/overflow_check/abnormal_scene.py +9 -5
  32. msprobe/core/overflow_check/checker.py +1 -1
  33. msprobe/core/overflow_check/utils.py +1 -1
  34. msprobe/docs/01.installation.md +96 -17
  35. msprobe/docs/02.config_introduction.md +5 -5
  36. msprobe/docs/05.data_dump_PyTorch.md +91 -61
  37. msprobe/docs/06.data_dump_MindSpore.md +57 -19
  38. msprobe/docs/07.accuracy_checker_PyTorch.md +18 -18
  39. msprobe/docs/09.accuracy_checker_MindSpore.md +4 -4
  40. msprobe/docs/10.accuracy_compare_PyTorch.md +99 -41
  41. msprobe/docs/11.accuracy_compare_MindSpore.md +249 -48
  42. msprobe/docs/12.overflow_check_PyTorch.md +1 -1
  43. msprobe/docs/19.monitor.md +120 -27
  44. msprobe/docs/21.visualization_PyTorch.md +115 -35
  45. msprobe/docs/22.visualization_MindSpore.md +138 -41
  46. msprobe/docs/23.generate_operator_PyTorch.md +107 -0
  47. msprobe/docs/24.code_mapping_Mindspore.md +28 -0
  48. msprobe/docs/{23.tool_function_introduction.md → 25.tool_function_introduction.md} +1 -0
  49. msprobe/docs/26.data_dump_PyTorch_baseline.md +37 -0
  50. msprobe/docs/27.dump_json_instruction.md +521 -0
  51. msprobe/docs/FAQ.md +26 -2
  52. msprobe/docs/accuracy_checker_MindSpore/accuracy_checker_MindSpore_baseline.md +14 -0
  53. msprobe/docs/data_dump_MindSpore/data_dump_MindSpore_baseline.md +22 -0
  54. msprobe/docs/img/merge_result.png +0 -0
  55. msprobe/docs/img/visualization/fuzzy_match_ms.png +0 -0
  56. msprobe/docs/img/visualization/fuzzy_match_pt.png +0 -0
  57. msprobe/docs/img/visualization/tensorboard_1.png +0 -0
  58. msprobe/docs/img/visualization/tensorboard_2.png +0 -0
  59. msprobe/docs/img/visualization/vis_browser_1.png +0 -0
  60. msprobe/docs/img/visualization/vis_browser_2.png +0 -0
  61. msprobe/docs/img/visualization/vis_precision_info.png +0 -0
  62. msprobe/docs/img/visualization/vis_search_info.png +0 -0
  63. msprobe/docs/img/visualization/vis_show_info.png +0 -0
  64. msprobe/docs/img/visualization/vis_showcase.png +0 -0
  65. msprobe/docs/img/visualization/vis_unmatch_info.png +0 -0
  66. msprobe/docs/visualization/GPTModel.png +0 -0
  67. msprobe/docs/visualization/ParallelMLP.png +0 -0
  68. msprobe/docs/visualization/layer_mapping_example.md +132 -0
  69. msprobe/docs/visualization/mapping.png +0 -0
  70. msprobe/docs/visualization/mapping1.png +0 -0
  71. msprobe/docs/visualization/module_name.png +0 -0
  72. msprobe/docs/visualization/module_name1.png +0 -0
  73. msprobe/docs/visualization/no_mapping.png +0 -0
  74. msprobe/docs/visualization/no_mapping1.png +0 -0
  75. msprobe/docs/visualization/no_mapping_analyze.png +0 -0
  76. msprobe/docs/visualization/top_layer.png +0 -0
  77. msprobe/mindspore/__init__.py +10 -0
  78. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +57 -25
  79. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +2 -1
  80. msprobe/mindspore/api_accuracy_checker/compute_element.py +5 -7
  81. msprobe/mindspore/api_accuracy_checker/data_manager.py +37 -0
  82. msprobe/mindspore/api_accuracy_checker/main.py +1 -0
  83. msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +12 -6
  84. msprobe/mindspore/api_accuracy_checker/multi_data_manager.py +3 -1
  85. msprobe/mindspore/code_mapping/bind.py +264 -0
  86. msprobe/mindspore/code_mapping/cmd_parser.py +40 -0
  87. msprobe/mindspore/code_mapping/graph.py +49 -0
  88. msprobe/mindspore/code_mapping/graph_parser.py +226 -0
  89. msprobe/mindspore/code_mapping/main.py +24 -0
  90. msprobe/mindspore/code_mapping/processor.py +34 -0
  91. msprobe/mindspore/common/const.py +3 -1
  92. msprobe/mindspore/common/utils.py +50 -5
  93. msprobe/mindspore/compare/distributed_compare.py +0 -2
  94. msprobe/mindspore/compare/ms_compare.py +105 -63
  95. msprobe/mindspore/compare/ms_graph_compare.py +14 -5
  96. msprobe/mindspore/debugger/debugger_config.py +3 -0
  97. msprobe/mindspore/debugger/precision_debugger.py +81 -12
  98. msprobe/mindspore/dump/hook_cell/api_registry.py +83 -16
  99. msprobe/mindspore/dump/hook_cell/hook_cell.py +60 -38
  100. msprobe/mindspore/dump/hook_cell/primitive_hooks.py +33 -15
  101. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +11 -1
  102. msprobe/mindspore/dump/hook_cell/wrap_api.py +92 -1
  103. msprobe/mindspore/dump/kernel_dump/kernel_config.py +33 -0
  104. msprobe/mindspore/dump/kernel_graph_dump.py +7 -0
  105. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +13 -4
  106. msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +2 -2
  107. msprobe/mindspore/grad_probe/grad_analyzer.py +24 -12
  108. msprobe/mindspore/grad_probe/hook.py +13 -4
  109. msprobe/mindspore/mindtorch/__init__.py +18 -0
  110. msprobe/mindspore/mindtorch/mindtorch_adaptor.py +255 -0
  111. msprobe/mindspore/ms_config.py +5 -1
  112. msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +7 -0
  113. msprobe/mindspore/service.py +267 -101
  114. msprobe/msprobe.py +24 -3
  115. msprobe/pytorch/__init__.py +7 -6
  116. msprobe/pytorch/api_accuracy_checker/common/utils.py +31 -16
  117. msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +41 -8
  118. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +100 -267
  119. msprobe/pytorch/api_accuracy_checker/compare/api_precision_standard.yaml +4 -1
  120. msprobe/pytorch/api_accuracy_checker/compare/compare.py +69 -68
  121. msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +54 -0
  122. msprobe/pytorch/api_accuracy_checker/compare/compare_input.py +51 -0
  123. msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +2 -4
  124. msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +54 -30
  125. msprobe/pytorch/api_accuracy_checker/precision_standard/absolute_threshold.py +106 -0
  126. msprobe/pytorch/api_accuracy_checker/precision_standard/accumulative_error_compare.py +107 -0
  127. msprobe/pytorch/api_accuracy_checker/precision_standard/base_standard.py +151 -0
  128. msprobe/pytorch/api_accuracy_checker/precision_standard/benchmark_compare.py +226 -0
  129. msprobe/pytorch/api_accuracy_checker/precision_standard/binary_consistency.py +68 -0
  130. msprobe/pytorch/api_accuracy_checker/precision_standard/standard_config.py +218 -0
  131. msprobe/pytorch/api_accuracy_checker/precision_standard/standard_register.py +104 -0
  132. msprobe/pytorch/api_accuracy_checker/precision_standard/thousandth_standard.py +63 -0
  133. msprobe/pytorch/api_accuracy_checker/precision_standard/ulp_compare.py +200 -0
  134. msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +57 -1
  135. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +2 -1
  136. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +42 -14
  137. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +64 -19
  138. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +34 -4
  139. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +5 -3
  140. msprobe/pytorch/bench_functions/npu_fusion_attention.py +42 -10
  141. msprobe/pytorch/common/parse_json.py +2 -1
  142. msprobe/pytorch/common/utils.py +45 -2
  143. msprobe/pytorch/compare/distributed_compare.py +17 -29
  144. msprobe/pytorch/compare/pt_compare.py +40 -20
  145. msprobe/pytorch/debugger/debugger_config.py +27 -12
  146. msprobe/pytorch/debugger/precision_debugger.py +42 -12
  147. msprobe/pytorch/dump/module_dump/__init__.py +0 -0
  148. msprobe/pytorch/dump/module_dump/module_dump.py +86 -0
  149. msprobe/pytorch/{module_processer.py → dump/module_dump/module_processer.py} +80 -6
  150. msprobe/pytorch/free_benchmark/common/params.py +2 -1
  151. msprobe/pytorch/free_benchmark/common/utils.py +3 -0
  152. msprobe/pytorch/free_benchmark/compare/grad_saver.py +0 -2
  153. msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +31 -47
  154. msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +0 -4
  155. msprobe/pytorch/hook_module/__init__.py +1 -1
  156. msprobe/pytorch/hook_module/hook_module.py +14 -11
  157. msprobe/pytorch/hook_module/register_optimizer_hook.py +59 -0
  158. msprobe/pytorch/hook_module/support_wrap_ops.yaml +34 -0
  159. msprobe/pytorch/hook_module/wrap_distributed.py +6 -8
  160. msprobe/pytorch/hook_module/wrap_functional.py +0 -40
  161. msprobe/pytorch/monitor/anomaly_analyse.py +1 -1
  162. msprobe/pytorch/monitor/anomaly_detect.py +107 -22
  163. msprobe/pytorch/monitor/csv2tb.py +166 -0
  164. msprobe/pytorch/monitor/distributed/wrap_distributed.py +25 -14
  165. msprobe/pytorch/monitor/features.py +3 -3
  166. msprobe/pytorch/monitor/module_hook.py +483 -277
  167. msprobe/pytorch/monitor/module_metric.py +27 -48
  168. msprobe/pytorch/monitor/module_spec_verifier.py +3 -1
  169. msprobe/pytorch/monitor/optimizer_collect.py +52 -14
  170. msprobe/pytorch/monitor/unittest/test_monitor.py +24 -9
  171. msprobe/pytorch/monitor/utils.py +77 -6
  172. msprobe/pytorch/online_dispatch/dispatch.py +8 -2
  173. msprobe/pytorch/parse_tool/lib/compare.py +10 -10
  174. msprobe/pytorch/parse_tool/lib/config.py +5 -7
  175. msprobe/pytorch/parse_tool/lib/file_desc.py +15 -1
  176. msprobe/pytorch/parse_tool/lib/interactive_cli.py +10 -10
  177. msprobe/pytorch/parse_tool/lib/parse_exception.py +7 -7
  178. msprobe/pytorch/parse_tool/lib/parse_tool.py +11 -10
  179. msprobe/pytorch/parse_tool/lib/utils.py +18 -19
  180. msprobe/pytorch/parse_tool/lib/visualization.py +9 -10
  181. msprobe/pytorch/service.py +176 -106
  182. msprobe/visualization/builder/graph_builder.py +62 -5
  183. msprobe/visualization/builder/msprobe_adapter.py +24 -2
  184. msprobe/visualization/compare/graph_comparator.py +64 -14
  185. msprobe/visualization/compare/mode_adapter.py +1 -15
  186. msprobe/visualization/graph/base_node.py +12 -17
  187. msprobe/visualization/graph/distributed_analyzer.py +318 -0
  188. msprobe/visualization/graph/graph.py +9 -0
  189. msprobe/visualization/graph_service.py +97 -23
  190. msprobe/visualization/utils.py +14 -29
  191. msprobe/pytorch/functional/module_dump.py +0 -84
  192. {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.1.dist-info}/LICENSE +0 -0
  193. {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.1.dist-info}/WHEEL +0 -0
  194. {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.1.dist-info}/entry_points.txt +0 -0
  195. {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.1.dist-info}/top_level.txt +0 -0
  196. /msprobe/docs/{data_dump_Mindspore → data_dump_MindSpore}/dynamic_graph_quick_start_example.md +0 -0
  197. /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 配置文件路径;model:指定具体的 torch.nn.Module,默认未配置,level 配置为"L0"或"mix"时,必须在该接口或 **start** 接口中配置该参数。其他参数均在 [config.json](../config.json) 文件中可配,详细配置可见 [config.json 介绍](./02.config_introduction.md)。
29
- 2. 此接口的参数均不是必要,且优先级高于 [config.json](../config.json) 文件中的配置,但可配置的参数相比 config.json 较少。
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. model:指定具体的 torch.nn.Module,默认未配置,level 配置为"L0""mix"时,必须在该接口或 **PrecisionDebugger** 接口中配置该参数。
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** 函数之后的任意位置添加。若需要 dump 反向数据,则需要添加在反向计算代码(如,loss.backward)之后。使用示例可参见 [2.1 快速上手](#21-快速上手)和 [2.2 采集完整的前反向数据](#22-采集完整的前反向数据)。
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
- **功能说明**:停止精度数据采集。用于 dump 指定代码的前反向数据。在 **start** 函数之后,反向计算代码(如,loss.backward)之前的任意位置添加,可以采集 **start** 函数和该函数之间的前反向数据,可以通过调整 **start** 函数与该函数的位置,来指定需要 dump 的代码块。要求 **stop** 函数添加在反向计算代码(如,loss.backward)之后,此时该函数与 **stop** 函数之间的代码不会被 dump。使用示例可参见 [2.3 采集指定代码块的前反向数据](#23-采集指定代码块的前反向数据)
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
- **功能说明**:更新 dump 参数。在最后一个 **stop** 函数后或一个 step 结束的位置添加。需要与 **start** 函数一起添加在 for 循环内。
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 = batch_size,
145
- shuffle = False,
146
- num_workers = 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
- module = ModuleOP()
186
- # 注册工具
187
- debugger = PrecisionDebugger('./config.json', model=module)
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
- debugger.start() # 开启数据dump
209
- # 如下是模型每个step执行的逻辑
231
+ debugger.start() # 开启数据dump
232
+ # 如下是模型每个step执行的逻辑
210
233
  output = model(data)
211
234
  #...
212
235
  loss.backward()
213
- debugger.stop() # 关闭数据dump
214
- debugger.step() # 结束一个step的dump
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
- debugger.start() # 开启数据dump
231
- # 如下是模型每个step执行的逻辑
254
+ debugger.start() # 开启数据dump
255
+ # 如下是模型每个step执行的逻辑
232
256
  output = model(data)
233
- debugger.forward_backward_dump_end() # 插入该函数到start函数之后,只dump start函数到该函数之间代码的前反向数据,本函数到stop函数之间的数据则不dump
234
- #...
257
+
258
+ debugger.forward_backward_dump_end() # 插入该函数到start函数之后,只dump start函数到该函数之间的前反向数据。
259
+ # ...
235
260
  loss.backward()
236
- debugger.stop() # 关闭数据dump
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
- torch.npu.set_device("npu:0")
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 = PrecisionDebugger(config_path='./config.json')
268
- debugger.start() # 开启数据dump
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不会被dump
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() # 关闭数据dump
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
- ```Python
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
- | | | | ├── MyModule.0.forward.input.pt # 开启模块级精度数据dump时存在模块级的dump数据文件
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
- | | | | └── Fcuntion.linear.5.backward.output.pt
294
- │ | | ├── dump.json # 保存前反向算子、算子的统计量信息或溢出算子信息。包含dump数据的API名称(命名格式为:`{api_type}_{api_name}_{API调用次数}_{前向反向}_{input/output}.{参数序号}`)、dtype、 shape、各数据的max、min、mean、L2norm统计信息以及当配置summary_mode="md5"时的CRC-32数据。其中,“参数序号”表示该API下的第n个参数,例如1,则为第一个参数,若该参数为list格式,则根据list继续排序,例如1.1,表示该API的第1个参数的第1个子参数;L2norm表示L2范数(平方根)
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
- 您可以参考 [动态图快速入门示例](./data_dump_Mindspore/dynamic_graph_quick_start_example.md) 了解详细步骤。
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
- **功能说明**:停止数据采集。在 **start** 函数之后的任意位置添加。需要与 start 函数一起添加在 for 循环内。若需要 dump 反向数据,则需要添加在反向计算代码之后。**仅未使用 Model 高阶 API 的动态图场景支持。**
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
- **功能说明**:在最后一个 **stop** 函数后或一个 step 训练结束的位置添加。**仅未使用 Model 高阶 API 的动态图场景支持。**
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
- **功能说明**:在 **start** 函数和在 **stop** 函数之间调用,表示采集 **start** 到 **forward_backward_dump_end**之间的L1级别的正反向数据。
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` 指定的目录下,目录结构请参见 MindSpore 官方文档中的[数据对象目录](https://www.mindspore.cn/docs/zh-CN/r2.4.0/model_train/debug/dump.html)。
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
- | | | | └── Cell.relu.ReLU.forward.0.input.0.npy
295
- | | ├── dump.json # 保存前反向API、API的统计量信息或溢出API信息。包含dump数据的API名称或Cell名称(Api命名格式为:{api_type}_{api_name}_{API调用次数}_{前向反向}_{input/output}.{参数序号},Cell命名格式为:{Cell}_{cell_name}_{class_name}_{前向反向}.{index}.{input/output}.{参数序号})、dtype、 shape、各数据的max、min、mean、L2norm统计信息以及当配置summary_mode="md5"时的CRC-32数据。其中,“参数序号”表示该API或Cell下的第n个参数,例如1,则为第一个参数,若该参数为list格式,则根据list继续排序,例如1.1,表示该API或Cell的第1个参数的第1个子参数;L2norm表示L2范数(平方根)。
296
- | | ├── stack.json # API 调用栈信息
297
- │ | | └── construct.json # 分层分级结构,level为L1时,construct.json内容为空
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`:记录模块或 API 的统计信息。
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:e-6
198
- - torch.float16:e-3
199
- - torch.bfloat16:e-3
197
+ - torch.float32:2**-20
198
+ - torch.float16:2**-10
199
+ - torch.bfloat16:2**-10
200
200
 
201
201
  小值域的绝对误差阈值:
202
202
 
203
- - torch.float32:e-9
204
- - torch.float16:e-5
205
- - torch.bfloat16:e-5
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 为通过;warning 为待观察;error 为错误;SKIP 表示跳过该 API 的计算,跳过原因在 Message 字段中提示,包括:该 API 的数据类型不支持使用新精度标准进行比对(如 float64),或该 API 不支持精度预检,或该 API 被黑名单过滤或不在白名单上,或运行错误等。 |
233
- | Backward Test Success | 反向 API 是否通过测试。pass 为通过;warning 为待观察;error 为错误;如果是空白的话代表该 API 没有反向输出;SKIP 表示该 API 的数据类型不支持使用新精度标准进行比对(如 float64)。 |
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
- | 小值域错误判定结果 | 小值域错误比值小于等于 1 标记为 pass,1 ~ 2 之间标记为 warning,大于 2 标记为 error。 |
246
+ | 小值域错误判定结果 | 小值域错误比值小于等于 2 标记为 pass,大于 2 标记为 error。 |
247
247
  | 均方根误差比值 | NPU 与 CPU 的均方根误差 / GPU 与 CPU 的均方根误差。标杆比对法指标。 |
248
- | 均方根误差判定结果 | 均方根误差比值小于等于 1 标记为 pass,1~2 之间标记为 warning,大于 2 标记为 error。 |
248
+ | 均方根误差判定结果 | 均方根误差比值小于等于 2 标记为 pass,大于 2 标记为 error。 |
249
249
  | 相对误差最大值比值 | NPU 与 CPU 的相对误差最大值 / GPU 与 CPU 的相对误差最大值。标杆比对法指标。 |
250
- | 相对误差最大值判定结果 | 相对误差最大值比值小于等于 1 标记为 pass,1 ~ 10 之间标记为 warning,大于 10 标记为 error。 |
250
+ | 相对误差最大值判定结果 | 相对误差最大值比值小于等于 10 标记为 pass,大于 10 标记为 error。 |
251
251
  | 相对误差平均值比值 | NPU 与 CPU 的相对误差的平均值 / GPU 与 CPU 的相对误差的平均值。标杆比对法指标。 |
252
- | 相对误差平均值判定结果 | 相对误差平均值比值小于等于 1 标记为 pass,1 ~ 2 之间标记为 warning,大于 2 标记为 error。 |
252
+ | 相对误差平均值判定结果 | 相对误差平均值比值小于等于 2 标记为 pass,大于 2 标记为 error。 |
253
253
  | 误差均衡性比值 | NPU 与 CPU 的误差均衡性 / GPU 与 CPU 的误差均衡性。标杆比对法指标。 |
254
- | 误差均衡性判定结果 | 误差均衡性比值小于等于 1 标记为 pass,1 ~ 2 之间标记为 warning,大于 2 标记为 error。该字段暂不参与 api_precision_compare_result 的结果判定。 |
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进行预检 | str | 是 |
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进行预检 | str | 是 |
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数量的N - 1 ,例如 0 1 2 3 4 | List[int] | 否 |
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 断点续检