mindstudio-probe 1.1.0__py3-none-any.whl → 1.1.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 (220) hide show
  1. {mindstudio_probe-1.1.0.dist-info → mindstudio_probe-1.1.1.dist-info}/METADATA +5 -5
  2. mindstudio_probe-1.1.1.dist-info/RECORD +341 -0
  3. {mindstudio_probe-1.1.0.dist-info → mindstudio_probe-1.1.1.dist-info}/WHEEL +1 -1
  4. {mindstudio_probe-1.1.0.dist-info → mindstudio_probe-1.1.1.dist-info}/entry_points.txt +0 -1
  5. msprobe/README.md +39 -3
  6. msprobe/config.json +1 -3
  7. msprobe/core/advisor/advisor.py +8 -3
  8. msprobe/core/common/const.py +113 -13
  9. msprobe/core/common/exceptions.py +25 -3
  10. msprobe/core/common/file_utils.py +150 -26
  11. msprobe/core/common/inplace_op_checker.py +15 -0
  12. msprobe/core/common/log.py +27 -9
  13. msprobe/core/common/utils.py +182 -69
  14. msprobe/core/common_config.py +44 -15
  15. msprobe/core/compare/acc_compare.py +207 -142
  16. msprobe/core/compare/check.py +2 -5
  17. msprobe/core/compare/compare_cli.py +21 -4
  18. msprobe/core/compare/highlight.py +124 -55
  19. msprobe/core/compare/layer_mapping/__init__.py +19 -0
  20. msprobe/core/compare/layer_mapping/data_scope_parser.py +235 -0
  21. msprobe/core/compare/layer_mapping/layer_mapping.py +242 -0
  22. msprobe/core/compare/layer_mapping/postprocess_pass.py +94 -0
  23. msprobe/core/compare/npy_compare.py +52 -23
  24. msprobe/core/compare/utils.py +272 -247
  25. msprobe/core/data_dump/data_collector.py +13 -11
  26. msprobe/core/data_dump/data_processor/base.py +46 -16
  27. msprobe/core/data_dump/data_processor/mindspore_processor.py +4 -4
  28. msprobe/core/data_dump/data_processor/pytorch_processor.py +156 -59
  29. msprobe/core/data_dump/scope.py +113 -34
  30. msprobe/core/grad_probe/constant.py +27 -13
  31. msprobe/core/grad_probe/grad_compare.py +18 -1
  32. msprobe/core/grad_probe/utils.py +30 -2
  33. msprobe/core/overflow_check/abnormal_scene.py +185 -0
  34. msprobe/core/overflow_check/api_info.py +55 -0
  35. msprobe/core/overflow_check/checker.py +138 -0
  36. msprobe/core/overflow_check/filter.py +157 -0
  37. msprobe/core/overflow_check/ignore_rules.yaml +55 -0
  38. msprobe/core/overflow_check/level.py +22 -0
  39. msprobe/core/overflow_check/utils.py +28 -0
  40. msprobe/docs/01.installation.md +10 -0
  41. msprobe/docs/02.config_introduction.md +49 -22
  42. msprobe/docs/03.config_examples.md +2 -9
  43. msprobe/docs/04.kernel_dump_PyTorch.md +73 -0
  44. msprobe/docs/05.data_dump_PyTorch.md +3 -1
  45. msprobe/docs/06.data_dump_MindSpore.md +157 -90
  46. msprobe/docs/07.accuracy_checker_PyTorch.md +12 -12
  47. msprobe/docs/08.accuracy_checker_online_PyTorch.md +1 -6
  48. msprobe/docs/09.accuracy_checker_MindSpore.md +44 -8
  49. msprobe/docs/10.accuracy_compare_PyTorch.md +19 -13
  50. msprobe/docs/11.accuracy_compare_MindSpore.md +104 -13
  51. msprobe/docs/12.overflow_check_PyTorch.md +1 -1
  52. msprobe/docs/13.overflow_check_MindSpore.md +6 -6
  53. msprobe/docs/15.free_benchmarking_PyTorch.md +4 -5
  54. msprobe/docs/16.free_benchmarking_MindSpore.md +56 -37
  55. msprobe/docs/17.grad_probe.md +5 -6
  56. msprobe/docs/19.monitor.md +468 -0
  57. msprobe/docs/20.monitor_performance_baseline.md +52 -0
  58. msprobe/docs/21.visualization_PyTorch.md +386 -0
  59. msprobe/docs/22.visualization_MindSpore.md +384 -0
  60. msprobe/docs/23.tool_function_introduction.md +28 -0
  61. msprobe/docs/FAQ.md +3 -0
  62. msprobe/docs/data_dump_Mindspore/dynamic_graph_quick_start_example.md +211 -0
  63. msprobe/docs/img/compare_result.png +0 -0
  64. msprobe/docs/img/monitor/cpu_info.png +0 -0
  65. msprobe/mindspore/__init__.py +15 -0
  66. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +113 -145
  67. msprobe/mindspore/api_accuracy_checker/api_info.py +21 -6
  68. msprobe/mindspore/api_accuracy_checker/api_runner.py +43 -18
  69. msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +21 -7
  70. msprobe/mindspore/api_accuracy_checker/checker_support_api.yaml +77 -0
  71. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +63 -1
  72. msprobe/mindspore/api_accuracy_checker/compute_element.py +59 -24
  73. msprobe/mindspore/api_accuracy_checker/data_manager.py +264 -0
  74. msprobe/mindspore/api_accuracy_checker/main.py +27 -3
  75. msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +206 -0
  76. msprobe/mindspore/api_accuracy_checker/multi_data_manager.py +58 -0
  77. msprobe/mindspore/api_accuracy_checker/type_mapping.py +22 -5
  78. msprobe/mindspore/api_accuracy_checker/utils.py +34 -17
  79. msprobe/mindspore/cell_processor.py +33 -12
  80. msprobe/mindspore/common/const.py +33 -13
  81. msprobe/mindspore/common/log.py +5 -9
  82. msprobe/mindspore/common/utils.py +43 -4
  83. msprobe/mindspore/compare/distributed_compare.py +22 -22
  84. msprobe/mindspore/compare/ms_compare.py +271 -248
  85. msprobe/mindspore/compare/ms_graph_compare.py +81 -47
  86. msprobe/mindspore/debugger/debugger_config.py +4 -1
  87. msprobe/mindspore/debugger/precision_debugger.py +7 -1
  88. msprobe/mindspore/dump/dump_tool_factory.py +3 -1
  89. msprobe/mindspore/dump/hook_cell/api_registry.py +12 -2
  90. msprobe/mindspore/dump/hook_cell/primitive_hooks.py +13 -16
  91. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +25 -0
  92. msprobe/mindspore/dump/jit_dump.py +17 -5
  93. msprobe/mindspore/dump/kernel_graph_dump.py +2 -4
  94. msprobe/mindspore/dump/kernel_kbyk_dump.py +2 -4
  95. msprobe/mindspore/dym_loader/hook_dynamic_loader.cc +140 -0
  96. msprobe/mindspore/dym_loader/hook_dynamic_loader.h +53 -0
  97. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +145 -39
  98. msprobe/mindspore/free_benchmark/common/handler_params.py +1 -2
  99. msprobe/mindspore/free_benchmark/common/utils.py +19 -4
  100. msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +0 -204
  101. msprobe/mindspore/free_benchmark/handler/base_handler.py +3 -3
  102. msprobe/mindspore/free_benchmark/handler/check_handler.py +4 -5
  103. msprobe/mindspore/free_benchmark/handler/fix_handler.py +4 -4
  104. msprobe/mindspore/free_benchmark/handler/handler_factory.py +4 -4
  105. msprobe/mindspore/free_benchmark/perturbation/add_noise.py +2 -2
  106. msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +15 -6
  107. msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +4 -4
  108. msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +2 -2
  109. msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +13 -6
  110. msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +2 -2
  111. msprobe/mindspore/free_benchmark/self_check_tool_factory.py +2 -2
  112. msprobe/mindspore/grad_probe/global_context.py +28 -8
  113. msprobe/mindspore/grad_probe/grad_analyzer.py +27 -13
  114. msprobe/mindspore/grad_probe/grad_monitor.py +16 -1
  115. msprobe/mindspore/grad_probe/grad_stat_csv.py +33 -5
  116. msprobe/mindspore/grad_probe/hook.py +24 -10
  117. msprobe/mindspore/grad_probe/utils.py +18 -5
  118. msprobe/mindspore/ms_config.py +22 -15
  119. msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +2 -4
  120. msprobe/mindspore/runtime.py +15 -0
  121. msprobe/mindspore/service.py +36 -30
  122. msprobe/mindspore/task_handler_factory.py +15 -0
  123. msprobe/msprobe.py +24 -7
  124. msprobe/pytorch/__init__.py +3 -2
  125. msprobe/pytorch/api_accuracy_checker/common/config.py +62 -0
  126. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +3 -4
  127. msprobe/pytorch/api_accuracy_checker/generate_op_script/config_op.json +9 -0
  128. msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +454 -0
  129. msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +365 -0
  130. msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +6 -1
  131. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +19 -14
  132. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +13 -9
  133. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +77 -53
  134. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +15 -4
  135. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +9 -24
  136. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +4 -12
  137. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/dump_dispatch.py +9 -4
  138. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +3 -11
  139. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +2 -2
  140. msprobe/pytorch/bench_functions/confusion_transpose.py +5 -1
  141. msprobe/pytorch/bench_functions/matmul_backward.py +12 -0
  142. msprobe/pytorch/bench_functions/npu_fusion_attention.py +100 -6
  143. msprobe/pytorch/bench_functions/rotary_mul.py +4 -0
  144. msprobe/pytorch/bench_functions/swiglu.py +10 -2
  145. msprobe/pytorch/common/parse_json.py +6 -6
  146. msprobe/pytorch/common/utils.py +56 -5
  147. msprobe/pytorch/compare/distributed_compare.py +8 -9
  148. msprobe/pytorch/compare/pt_compare.py +8 -6
  149. msprobe/pytorch/debugger/debugger_config.py +19 -15
  150. msprobe/pytorch/dump/kernel_dump/kernel_config.py +33 -0
  151. msprobe/pytorch/free_benchmark/common/constant.py +15 -0
  152. msprobe/pytorch/free_benchmark/common/counter.py +15 -0
  153. msprobe/pytorch/free_benchmark/common/enums.py +15 -0
  154. msprobe/pytorch/free_benchmark/common/params.py +8 -1
  155. msprobe/pytorch/free_benchmark/common/utils.py +26 -4
  156. msprobe/pytorch/free_benchmark/compare/grad_saver.py +20 -3
  157. msprobe/pytorch/free_benchmark/compare/single_benchmark.py +2 -0
  158. msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +3 -1
  159. msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +6 -4
  160. msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +2 -0
  161. msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +4 -0
  162. msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +10 -0
  163. msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +6 -5
  164. msprobe/pytorch/grad_probe/grad_monitor.py +23 -6
  165. msprobe/pytorch/grad_probe/grad_stat_csv.py +40 -10
  166. msprobe/pytorch/hook_module/support_wrap_ops.yaml +1 -0
  167. msprobe/pytorch/hook_module/wrap_functional.py +14 -12
  168. msprobe/pytorch/module_processer.py +2 -5
  169. msprobe/pytorch/monitor/anomaly_analyse.py +201 -0
  170. msprobe/pytorch/monitor/anomaly_detect.py +340 -0
  171. msprobe/pytorch/monitor/distributed/__init__.py +0 -0
  172. msprobe/pytorch/monitor/distributed/distributed_ops.yaml +19 -0
  173. msprobe/pytorch/monitor/distributed/stack_blacklist.yaml +5 -0
  174. msprobe/pytorch/monitor/distributed/wrap_distributed.py +272 -0
  175. msprobe/pytorch/monitor/features.py +108 -0
  176. msprobe/pytorch/monitor/module_hook.py +870 -0
  177. msprobe/pytorch/monitor/module_metric.py +193 -0
  178. msprobe/pytorch/monitor/module_spec_verifier.py +93 -0
  179. msprobe/pytorch/monitor/optimizer_collect.py +295 -0
  180. msprobe/pytorch/monitor/unittest/__init__.py +0 -0
  181. msprobe/pytorch/monitor/unittest/test_monitor.py +145 -0
  182. msprobe/pytorch/monitor/utils.py +250 -0
  183. msprobe/pytorch/monitor/visualizer.py +59 -0
  184. msprobe/pytorch/online_dispatch/__init__.py +2 -3
  185. msprobe/pytorch/online_dispatch/compare.py +29 -38
  186. msprobe/pytorch/online_dispatch/dispatch.py +50 -25
  187. msprobe/pytorch/online_dispatch/dump_compare.py +21 -9
  188. msprobe/pytorch/online_dispatch/single_compare.py +53 -32
  189. msprobe/pytorch/online_dispatch/torch_ops_config.yaml +1 -1
  190. msprobe/pytorch/online_dispatch/utils.py +49 -21
  191. msprobe/pytorch/parse_tool/lib/compare.py +12 -18
  192. msprobe/pytorch/parse_tool/lib/config.py +1 -1
  193. msprobe/pytorch/parse_tool/lib/parse_tool.py +1 -2
  194. msprobe/pytorch/parse_tool/lib/utils.py +16 -35
  195. msprobe/pytorch/parse_tool/lib/visualization.py +2 -0
  196. msprobe/pytorch/pt_config.py +31 -8
  197. msprobe/pytorch/service.py +15 -5
  198. msprobe/visualization/__init__.py +14 -0
  199. msprobe/visualization/builder/__init__.py +14 -0
  200. msprobe/visualization/builder/graph_builder.py +165 -0
  201. msprobe/visualization/builder/msprobe_adapter.py +205 -0
  202. msprobe/visualization/compare/__init__.py +14 -0
  203. msprobe/visualization/compare/graph_comparator.py +130 -0
  204. msprobe/visualization/compare/mode_adapter.py +211 -0
  205. msprobe/visualization/graph/__init__.py +14 -0
  206. msprobe/visualization/graph/base_node.py +124 -0
  207. msprobe/visualization/graph/graph.py +200 -0
  208. msprobe/visualization/graph/node_colors.py +95 -0
  209. msprobe/visualization/graph/node_op.py +39 -0
  210. msprobe/visualization/graph_service.py +214 -0
  211. msprobe/visualization/utils.py +232 -0
  212. mindstudio_probe-1.1.0.dist-info/RECORD +0 -287
  213. msprobe/docs/04.acl_config_examples.md +0 -78
  214. msprobe/mindspore/compare/layer_mapping.py +0 -146
  215. msprobe/mindspore/compare/modify_mapping.py +0 -107
  216. msprobe/mindspore/free_benchmark/decorator/dec_forward.py +0 -57
  217. msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +0 -122
  218. {mindstudio_probe-1.1.0.dist-info → mindstudio_probe-1.1.1.dist-info}/LICENSE +0 -0
  219. {mindstudio_probe-1.1.0.dist-info → mindstudio_probe-1.1.1.dist-info}/top_level.txt +0 -0
  220. /msprobe/{mindspore/free_benchmark/decorator → pytorch/monitor}/__init__.py +0 -0
@@ -0,0 +1,73 @@
1
+ # PyTorch 场景的 kernel dump 说明
2
+
3
+ 当使用 msprobe 数据采集功能时,level 配置为 "L2" 表示采集 kernel 层级的算子数据,仅支持昇腾 NPU 平台。
4
+
5
+ 本文主要介绍 kernel dump 的配置示例和采集结果介绍, msprobe 数据采集功能的详细使用参考 《[PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)》。
6
+
7
+ ## 1 kernel dump 配置示例
8
+
9
+ 使用 kernel dump 时,list 必须要填一个 API 名称,kernel dump 目前每个 step 只支持采集一个 API 的数据。
10
+ API 名称填写参考 L1 dump 结果文件 dump.json 中的API名称,命名格式为:`{api_type}.{api_name}.{API调用次数}.{forward/backward}`。
11
+
12
+ ```json
13
+ {
14
+ "task": "tensor",
15
+ "dump_path": "/home/data_dump",
16
+ "level": "L2",
17
+ "rank": [],
18
+ "step": [],
19
+ "tensor": {
20
+ "scope": [],
21
+ "list": ["Functional.linear.0.backward"]
22
+ }
23
+ }
24
+ ```
25
+
26
+ ## 2 结果文件介绍
27
+
28
+ ### 2.1 采集结果说明
29
+
30
+ 如果 API kernel 级数据采集成功,会打印以下信息:
31
+
32
+ ```bash
33
+ The kernel data of {api_name} is dumped successfully.
34
+ ```
35
+
36
+ 注意:如果打印该信息后,没有数据生成,参考**常见问题3.1**进行排查。
37
+
38
+ 如果 kernel dump 遇到不支持的 API, 会打印以下信息:
39
+
40
+ ```bash
41
+ The kernel dump does not support the {api_name} API.
42
+ ```
43
+
44
+ 其中 {api_name} 是对应溢出的 API 名称。
45
+
46
+ ### 2.2 输出文件说明
47
+ kernel dump 采集成功后,会在指定的 dump_path 目录下生成如下文件:
48
+
49
+ ```
50
+ ├── /home/data_dump/
51
+ │ ├── step0
52
+ │ │ ├── 20241201103000 # 日期时间格式,表示2024-12-01 10:30:00
53
+ │ │ │ ├── 0 # 表示 device id
54
+ │ │ │ │ ├──{op_type}.{op_name}.{task_id}.{stream_id}.{timestamp} # kernel 层算子数据
55
+ │ │ │ ...
56
+ │ │ ├── kernel_config_{device_id}.json # kernel dump 在接口调用过程中生成的中间文件,一般情况下无需关注
57
+ │ │ ...
58
+ │ ├── step1
59
+ │ ...
60
+ ```
61
+ 成功采集到数据后,可以使用 msprobe 工具提供的《[PyTorch 场景的数据解析](./14.data_parse_PyTorch.md)》功能分析数据。
62
+
63
+ ## 3 常见问题
64
+
65
+ #### 3.1 采集结果文件为空,有可能是什么原因?
66
+
67
+ 1. 首先需要确认工具使用方式、配置文件内容、list 填写的 API 名称格式是否都正确无误。
68
+
69
+ 2. 其次需要确认 API 是否运行在昇腾 NPU 上,如果是运行在其他设备上则不会存在 kernel 级数据。
70
+
71
+ 3. 如果排除上述两点仍然没有数据,您可以使用《[Ascend Extension for PyTorch 插件](https://gitee.com/ascend/pytorch)》提供的
72
+ torch_npu.npu 接口进行 kernel 层数据采集,工具的 kernel dump 也是基于其中的init_dump、set_dump和finalize_dump三个子接口实现的。
73
+ torch_npu.npu 接口详细描述见《[torch_npu.npu API 概述](https://www.hiascend.com/document/detail/zh/Pytorch/60RC3/apiref/apilist/ptaoplist_000192.html)》。
@@ -11,6 +11,8 @@ functional: # functional为算子类别,找到对应的类别,在该类别
11
11
  - conv3d
12
12
  ```
13
13
 
14
+ 删除API的场景:部分模型代码逻辑会存在API原生类型校验,工具执行dump操作时,对模型的API封装可能与模型的原生API类型不一致,此时可能引发校验失败,详见《[FAQ](FAQ.md)》中“异常情况”的第10和11条。
15
+
14
16
  ## 1 接口介绍
15
17
 
16
18
  ### 1.1 PrecisionDebugger
@@ -289,7 +291,7 @@ if __name__ == "__main__":
289
291
  | | | | ├── MyModule.0.forward.input.pt # 开启模块级精度数据dump时存在模块级的dump数据文件
290
292
  | | | | ...
291
293
  | | | | └── Fcuntion.linear.5.backward.output.pt
292
- │ | | ├── dump.json # 保存前反向算子、算子的统计量信息或溢出算子信息。包含dump数据的API名称(命名格式为:`{api_type}_{api_name}_{API调用次数}_{前向反向}_{input/output}.{参数序号}`)、dtype、 shape、各数据的max、min、mean、L2norm统计信息以及当配置summary_mode="md5"时的md5数据。其中,“参数序号”表示该API下的第n个参数,例如1,则为第一个参数,若该参数为list格式,则根据list继续排序,例如1.1,表示该API的第1个参数的第1个子参数;L2norm表示L2范数(平方根)
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范数(平方根)
293
295
  │ | | ├── stack.json # 算子调用栈信息
294
296
  │ | | └── construct.json # 分层分级结构
295
297
  │ | ├── rank1
@@ -1,23 +1,64 @@
1
- # MindSpore 场景的精度数据采集
2
1
 
3
- msprobe 工具主要通过在训练脚本内添加 dump 接口、启动训练的方式采集精度数据。目前,静态图场景仅支持 kernel 级数据采集,对应 config.json 配置中的 "L2" level;动态图场景支持cell、API、kernel级数据采集,对应 config.json 配置中的 "L0"、"L1" 、"L2"、"mix" level。
2
+ # msprobe 工具 MindSpore场景精度数据采集指南
4
3
 
5
- 需要注意,**动态图 kernel 级**("L2" level)精度数据采集对象为被 PSJit 或 PIJit 装饰的 Cell 或 function 内的算子,其被装饰部分实际以**静态图**模式执行,所以此场景下的工具使用方式与静态图场景完全相同。下文无特殊说明时,介绍的动态图场景不包括 kernel 级("L2" level)dump 情形。
6
4
 
7
- 精度数据采集功能的配置示例见[MindSpore 静态图场景下 task 配置为 statistics](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#21-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-statistics)、[MindSpore 静态图场景下 task 配置为 tensor](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#22-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-tensor)、[MindSpore 动态图场景下 task 配置为 statistics](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#31-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-statistics)、[MindSpore 动态图场景下 task 配置为 tensor](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#32-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-tensor)。
5
+ ## 1. 专业名词解释
8
6
 
9
- 动态图 API 级 dump 时,本工具提供固定的 API 支持列表,仅支持对列表中的 API 进行精度数据采集。一般情况下,无需修改该列表,而是通过config.json中的scope/list字段进行 dump API 指定。若需要改变 API 支持列表,可以在 `msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml` 文件内手动修改,如下示例:
7
+ * **静态图**:在编译时就确定网络结构,静态图模式拥有较高的训练性能,但难以调试。
8
+ * **动态图**:运行时动态构建网络,相较于静态图模式虽然易于调试,但难以高效执行。
9
+ * **高阶 API**:如 `mindspore.train.Model`,封装了训练过程的高级接口。
10
+ * **JIT(Just-In-Time 编译)**:MindSpore提供JIT(just-in-time)技术进一步进行性能优化。JIT模式会通过AST树解析的方式或者Python字节码解析的方式,将代码解析为一张中间表示图(IR,intermediate representation)。IR图作为该代码的唯一表示,编译器通过对该IR图的优化,来达到对代码的优化,提高运行性能。与动态图模式相对应,这种JIT的编译模式被称为静态图模式。
11
+ * **Primitive op**:MindSpore 中的基本算子,通常由 `mindspore.ops.Primitive` 定义,提供底层的算子操作接口。
12
+
13
+
14
+ ## 2. 工具安装
15
+
16
+ 请参见[《msprobe 工具安装指南》](./01.installation.md)。
17
+
18
+
19
+ ## 3. 快速入门
20
+
21
+ 以下通过一个简单的示例,展示如何在 MindSpore 中使用 msprobe 工具进行精度数据采集。
22
+
23
+ 您可以参考 [动态图快速入门示例](./data_dump_Mindspore/dynamic_graph_quick_start_example.md) 了解详细步骤。
24
+
25
+ ## 4. 概述
26
+
27
+ msprobe 工具通过在训练脚本中添加 `PrecisionDebugger` 接口并启动训练的方式,采集模型在运行过程中的精度数据。该工具支持对MindSpore的静态图和动态图场景进行不同Level等级的精度数据采集。
28
+
29
+
30
+ ## 5. 场景介绍
31
+
32
+ ### 5.1 静态图场景
33
+ 在静态图场景下,msprobe 仅支持 **L2 Level** 的数据采集。
34
+ - **L2 Level(Kernel 级)** :采集底层算子的输入输出数据,适用于深入分析算子级别的精度问题。
35
+
36
+ 采集方式请参见[示例代码 > 静态图场景](#71-静态图场景)。详细介绍请参见[《config.json 配置文件介绍》](./02.config_introduction.md#11-通用配置)中的“level 参数”和[《config.json 配置示例》](./03.config_examples.md#2-mindspore-静态图场景) 中的“MindSpore 静态图场景”。
37
+
38
+ ### 5.2 动态图场景
39
+ 在动态图场景下,msprobe 支持 **L0** 、**L1** 、**mix** 、**L2 Level** 的数据采集,具体分为以下几种情况:
40
+ - **使用高阶 API(如 `Model 高阶API`)** :
41
+ - 需要使用 `MsprobeStep` 回调类来控制数据采集的启停,适用于 **L0** 、**L1** 、**mix** 、**L2** 数据采集。
42
+
43
+ - **未使用高阶 API** :
44
+ - 手动在训练循环中调用 `start`、`stop`、`step` 等接口,适用于 **L0** 、**L1** 、**mix** 、**L2** 数据采集。
45
+
46
+ 采集方式请参见[示例代码 > 动态图场景](#72-动态图场景-)。
47
+
48
+ > **注意** :动态图模式下,使用 `PSJit` 或 `PIJit` 装饰的部分实际以静态图模式执行,此时的 **Kernel 级(L2 Level)** 数据采集方式与静态图场景相同。
49
+ - **L0 Level(Cell 级)** :采集 `Cell` 对象的数据,适用于需要分析特定网络模块的情况。
50
+
51
+ - **L1 Level(API 级)** :采集 MindSpore API 的输入输出数据,适用于定位 API 层面的精度问题。
52
+
53
+ - **mix(模块级 + API 级)** :在 `L0` 和 `L1` 级别的基础上同时采集模块级和 API 级数据,适用于需要分析模块和 API 层面精度问题的场景。
10
54
 
11
- ```yaml
12
- ops: # ops为算子类别,找到对应的类别,在该类别下按照下列格式删除或添加API
13
- - adaptive_avg_pool1d
14
- - adaptive_avg_pool2d
15
- - adaptive_avg_pool3d
16
- ```
17
55
 
18
- ## 1 接口介绍
56
+ 详细介绍请参见[《config.json 配置文件介绍》](./02.config_introduction.md#11-通用配置)中的“level 参数”和[《config.json 配置示例》](./03.config_examples.md#3-mindspore-动态图场景) 中的“MindSpore 动态图场景”。
19
57
 
20
- ### 1.1 msprobe.mindspore.PrecisionDebugger
58
+
59
+ ## 6 接口介绍
60
+
61
+ ### 6.1 msprobe.mindspore.PrecisionDebugger
21
62
 
22
63
  **功能说明**:通过加载 dump 配置文件的方式来确定 dump 操作的详细配置。
23
64
 
@@ -31,7 +72,7 @@ PrecisionDebugger(config_path=None)
31
72
 
32
73
  1. config_path:指定 dump 配置文件路径,string 类型。参数示例:"./config.json"。未配置该路径时,默认使用 [config.json](../config.json) 文件的默认配置,配置选项含义可见 [config.json 介绍](./02.config_introduction.md)。
33
74
 
34
- #### 1.1.1 start
75
+ #### 6.1.1 start
35
76
 
36
77
  **功能说明**:启动精度数据采集。需在模型执行模式(静态图/动态图、O0/O1/O2编译等级)设置后调用。静态图场景下,必须在模型初始化及 mindspore.communication.init 调用前添加;动态图场景下,如果没有使用 [Model](https://gitee.com/link?target=https%3A%2F%2Fwww.mindspore.cn%2Ftutorials%2Fzh-CN%2Fr2.3.1%2Fadvanced%2Fmodel.html) 高阶 API 进行训练,则需要与 stop 函数一起添加在 for 循环内,否则只有需要传入model参数时,才使用该接口。
37
78
 
@@ -43,9 +84,9 @@ start(model=None)
43
84
 
44
85
  **参数说明**:
45
86
 
46
- 1. model:指具体的 mindspore.nn.Cell,默认不配置。Cell级别("L0" level)dump 时,传入 model 可以采集 model 内的所有Cell 对象数据。API级别("L1" level)dump 时,传入 model 可以采集 model 内包含 primitive op 对象在内的所有 API 数据,若不传入 model 参数,则只采集非 primitive op 的 API 数据。
87
+ 1. model:指具体的 mindspore.nn.Cell对象,默认不配置。Cell级别("L0" level)dump "mix" level dump 时,必须传入 model 才可以采集 model 内的所有Cell 对象数据。API级别("L1" level)dump 时,传入 model 可以采集 model 内包含 primitive op 对象在内的所有 API 数据,若不传入 model 参数,则只采集非 primitive op 的 API 数据。
47
88
 
48
- #### 1.1.2 stop
89
+ #### 6.1.2 stop
49
90
 
50
91
  **功能说明**:停止数据采集。在 **start** 函数之后的任意位置添加。需要与 start 函数一起添加在 for 循环内。若需要 dump 反向数据,则需要添加在反向计算代码之后。**仅未使用 Model 高阶 API 的动态图场景支持。**
51
92
 
@@ -55,7 +96,7 @@ start(model=None)
55
96
  stop()
56
97
  ```
57
98
 
58
- #### 1.1.3 step
99
+ #### 6.1.3 step
59
100
 
60
101
  **功能说明**:在最后一个 **stop** 函数后或一个 step 训练结束的位置添加。**仅未使用 Model 高阶 API 的动态图场景支持。**
61
102
 
@@ -65,13 +106,13 @@ stop()
65
106
  step()
66
107
  ```
67
108
 
68
- #### 1.1.4 forward_backward_dump_end
109
+ #### 6.1.4 forward_backward_dump_end
69
110
 
70
111
  **功能说明**:在 **start** 函数和在 **stop** 函数之间调用,表示采集 **start** 到 **forward_backward_dump_end**之间的L1级别的正反向数据。
71
112
 
72
113
  **仅支持L1级别数据采集场景。**
73
114
 
74
- **L1级别数据中的jit数据采集行为不受此接口影响**
115
+ **L1级别数据中的jit数据采集行为不受此接口影响。**
75
116
 
76
117
  **仅未使用 Model 高阶 API 的动态图场景支持。**
77
118
 
@@ -81,9 +122,9 @@ step()
81
122
  forward_backward_dump_end()
82
123
  ```
83
124
 
84
- ### 1.2 msprobe.mindspore.common.utils.MsprobeStep
125
+ ### 6.2 msprobe.mindspore.common.utils.MsprobeStep
85
126
 
86
- **功能说明**:MindSpore Callback类,自动在每个step开始时调用start()接口,在每个step结束时调用stop()、step()接口。实现使用 Model 高阶 API 的动态图场景下 L0、L1 级别的精度数据采集控制,控制粒度为单个 **Step** ,而 PrecisionDebugger.start, PrecisionDebugger.stop 接口的控制粒度任意训练代码段。
127
+ **功能说明**:MindSpore Callback类,自动在每个step开始时调用start()接口,在每个step结束时调用stop()、step()接口。实现使用 Model 高阶 API 的动态图场景下 L0、L1、mix 级别的精度数据采集控制,控制粒度为单个 **Step** ,而 PrecisionDebugger.start, PrecisionDebugger.stop 接口的控制粒度任意训练代码段。
87
128
 
88
129
  **原型**:
89
130
 
@@ -95,13 +136,13 @@ MsprobeStep(debugger)
95
136
 
96
137
  1. debugger:PrecisionDebugger对象。
97
138
 
98
- ### 1.3 msprobe.mindspore.seed_all
139
+ ### 6.3 msprobe.mindspore.seed_all
99
140
 
100
141
  **功能说明**:用于固定网络中的随机性和开启确定性计算。
101
142
 
102
143
  **原型**:
103
144
  ```python
104
- seed_all(seed=1234, mode=False)
145
+ seed_all(seed=1234, mode=False, rm_dropout=True)
105
146
  ```
106
147
 
107
148
  **参数说明**:
@@ -110,26 +151,36 @@ seed_all(seed=1234, mode=False)
110
151
 
111
152
  2. mode:确定性计算使能,可配置 True 或 False,默认值:False,非必选。参数示例:mode=True。该参数设置为 True 后,将会开启算子确定性运行模式与归约类通信算子(AllReduce、ReduceScatter、Reduce)的确定性计算。注意:确定性计算会导致API执行性能降低,建议在发现模型多次执行结果不同的情况下开启。
112
153
 
113
- ## 2 示例代码
154
+ 3. rm_dropout:控制dropout失效的开关。可配置 True 或 False,默认值:True,非必选。参数示例: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实例前调用才能生效。
114
155
 
115
- ### 2.1 MindSpore 静态图场景
116
156
 
117
- ```Python
157
+
158
+
159
+ ## 7. 示例代码
160
+
161
+ ### 7.1 静态图场景
162
+
163
+ ```python
118
164
  import mindspore as ms
119
165
  ms.set_context(mode=ms.GRAPH_MODE, device_target="Ascend")
120
166
 
121
167
  from msprobe.mindspore import PrecisionDebugger
122
168
  debugger = PrecisionDebugger(config_path="./config.json")
123
169
  debugger.start()
124
- # 请勿将以上初始化流程置于模型实例化或mindspore.communication.init调用后
170
+ # 请勿将以上初始化流程置于模型实例化或 mindspore.communication.init 调用后
171
+ # 模型定义和训练代码
125
172
  # ...
173
+
126
174
  ```
127
175
 
128
- ### 2.2 MindSpore 动态图场景
176
+ ### 7.2 动态图场景
129
177
 
130
- #### 2.2.1 未使用 Model 高阶 API(非 L2 级别)
178
+ #### 7.2.1 L0 ,L1, mix 级别
131
179
 
132
- ```Python
180
+ ##### 7.2.1.1 未使用 Model 高阶 API
181
+
182
+
183
+ ```python
133
184
  import mindspore as ms
134
185
  ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
135
186
 
@@ -141,60 +192,66 @@ debugger = PrecisionDebugger(config_path="./config.json")
141
192
  model = Network()
142
193
  # 数据集迭代的地方往往是模型开始训练的地方
143
194
  for data, label in data_loader:
144
- debugger.start() # 进行L1级别下非primitive op采集时调用
145
- # debugger.start(model) # 进行L0级别或L1级别下primitive op的数据采集时调用
146
- # 如下是模型每个step执行的逻辑
195
+ debugger.start() # 进行 L1 级别下非 primitive op 采集时调用
196
+ # debugger.start(model) # 进行 L0, mix 级别或 L1 级别下 primitive op 的数据采集时调用
197
+ # 如下是模型每个 step 执行的逻辑
147
198
  grad_net = ms.grad(model)(data)
148
199
  # ...
149
- debugger.stop() # 关闭数据dump
150
- debugger.step() # 结束一个step的dump
200
+ debugger.stop() # 关闭数据 dump
201
+ debugger.step() # 更新迭代数
151
202
  ```
152
203
 
153
- #### 2.2.2 未使用 Model 高阶 API(L2 级别)
204
+ ##### 7.2.1.2 使用 Model 高阶 API
154
205
 
155
- ```Python
206
+
207
+ ```python
156
208
  import mindspore as ms
209
+ from mindspore.train import Model
157
210
  ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
158
211
 
159
212
  from msprobe.mindspore import PrecisionDebugger
213
+ from msprobe.mindspore.common.utils import MsprobeStep
160
214
  debugger = PrecisionDebugger(config_path="./config.json")
161
- debugger.start()
162
- # 请勿将以上初始化流程置于模型实例化或mindspore.communication.init调用后
163
215
 
164
216
  # 模型、损失函数的定义以及初始化等操作
165
217
  # ...
218
+
166
219
  model = Network()
167
- # 数据集迭代的地方往往是模型开始训练的地方
168
- for data, label in data_loader:
169
- # 如下是模型每个step执行的逻辑
170
- grad_net = ms.grad(model)(data)
171
- # ...
220
+ # 只有进行 L0 级别下 Cell 对象,mix 级别,L1 级别下 primitive op 的数据采集时才需要调用
221
+ # debugger.start(model)
222
+ trainer = Model(model, loss_fn=loss_fn, optimizer=optimizer, metrics={'accuracy'})
223
+ trainer.train(1, train_dataset, callbacks=[MsprobeStep(debugger)])
172
224
  ```
173
225
 
174
- #### 2.2.3 使用 Model 高阶 API(非 L2 级别)
226
+ #### 7.2.2 L2 级别
175
227
 
176
- ```Python
228
+ ##### 7.2.2.1 未使用 Model 高阶 API
229
+
230
+
231
+ ```python
177
232
  import mindspore as ms
178
- from mindspore.train import Model
179
233
  ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
180
234
 
181
235
  from msprobe.mindspore import PrecisionDebugger
182
- from msprobe.mindspore.common.utils import MsprobeStep
183
236
  debugger = PrecisionDebugger(config_path="./config.json")
237
+ debugger.start()
238
+ # 请勿将以上初始化流程置于模型实例化或 mindspore.communication.init 调用后
184
239
 
185
240
  # 模型、损失函数的定义以及初始化等操作
186
241
  # ...
187
-
188
242
  model = Network()
189
- # 只有进行L0级别下Cell对象或L1级别下primitive op的数据采集时才需要调用
190
- # debugger.start(model)
191
- trainer = Model(model, loss_fn=loss_fn, optimizer=optimizer, metrics={'accuracy'})
192
- trainer.train(1, train_dataset, callbacks=[MsprobeStep(debugger)])
243
+ # 数据集迭代的地方往往是模型开始训练的地方
244
+ for data, label in data_loader:
245
+ # 如下是模型每个 step 执行的逻辑
246
+ grad_net = ms.grad(model)(data)
247
+ # ...
193
248
  ```
194
249
 
195
- #### 2.2.4 使用 Model 高阶 API(L2 级别)
196
250
 
197
- ```Python
251
+ ##### 7.2.2.2 使用 Model 高阶 API
252
+
253
+
254
+ ```python
198
255
  import mindspore as ms
199
256
  from mindspore.train import Model
200
257
  ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
@@ -202,7 +259,7 @@ ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
202
259
  from msprobe.mindspore import PrecisionDebugger
203
260
  debugger = PrecisionDebugger(config_path="./config.json")
204
261
  debugger.start()
205
- # 请勿将以上初始化流程置于模型实例化或mindspore.communication.init调用后
262
+ # 请勿将以上初始化流程置于模型实例化或 mindspore.communication.init 调用后
206
263
 
207
264
  # 模型、损失函数的定义以及初始化等操作
208
265
  # ...
@@ -212,29 +269,17 @@ trainer = Model(model, loss_fn=loss_fn, optimizer=optimizer, metrics={'accuracy'
212
269
  trainer.train(1, train_dataset)
213
270
  ```
214
271
 
215
- ## 3 dump 结果文件介绍
216
-
217
- ### 3.1 MindSpore 静态图场景
218
-
219
- 训练结束后,工具将 dump 的数据保存在 dump_path 参数指定的目录下。
220
-
221
- - jit_level 为O0/O1时:
222
-
223
- dump 结果目录请参见 MindSpore 官网中的[同步 Dump 数据对象目录](https://www.mindspore.cn/tutorials/experts/zh-CN/r2.3.1/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)。
224
-
225
- - jit_level 为O2时:
272
+ ## 8. dump 结果文件介绍
226
273
 
227
- dump 结果目录请参见 MindSpore 官网中的[异步 Dump 数据对象目录](https://www.mindspore.cn/tutorials/experts/zh-CN/r2.3.1/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-1)。
274
+ ### 8.1 静态图场景
228
275
 
229
- jit_level 请参见 [mindspore.set_context](https://www.mindspore.cn/docs/zh-CN/r2.3.1/api_python/mindspore/mindspore.set_context.html) 中的 jit_config 参数。
276
+ 训练结束后,数据将保存在 `dump_path` 指定的目录下,目录结构请参见 MindSpore 官方文档中的[数据对象目录](https://www.mindspore.cn/docs/zh-CN/r2.4.0/model_train/debug/dump.html)
230
277
 
231
- ### 3.2 MindSpore 动态图场景
278
+ ### 8.2 动态图场景
232
279
 
233
- 训练结束后,工具将 dump 的数据保存在dump_path参数指定的目录下。
280
+ dump 结果目录结构示例如下:
234
281
 
235
- dump结果目录结构示例如下:
236
-
237
- ```bash
282
+ ```lua
238
283
  ├── dump_path
239
284
  │ ├── step0
240
285
  │ | ├── rank0
@@ -245,9 +290,10 @@ dump结果目录结构示例如下:
245
290
  | | | | ├── Tensor.__add__.0.forward.output.0.npy
246
291
  | | | | ...
247
292
  | | | | ├── Jit.AlexNet.0.forward.input.0.npy
248
- | | | | └── Cell.relu.ReLU.forward.0.input.0.npy # config.json文件配置level为L0时dump的cell模块级数据,命名格式为{Cell}_{cell_name}_{class_name}_{前向反向}.{index}.{input/output}.{参数序号}
249
- | | ├── dump.json # 保存前反向算子、算子的统计量信息或溢出算子信息。包含dump数据的API名称(命名格式为:{api_type}_{api_name}_{API调用次数}_{前向反向}_{input/output}.{参数序号})、dtype、 shape、各数据的max、min、mean、L2norm统计信息以及当配置summary_mode="md5"时的md5数据。其中,“参数序号”表示该API下的第n个参数,例如1,则为第一个参数,若该参数为list格式,则根据list继续排序,例如1.1,表示该API的第1个参数的第1个子参数;L2norm表示L2范数(平方根)
250
- │ | | ├── stack.json # 算子调用栈信息
293
+ | | | | ├── 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 调用栈信息
251
297
  │ | | └── construct.json # 分层分级结构,level为L1时,construct.json内容为空
252
298
  │ | ├── rank1
253
299
  | | | ├── dump_tensor_data
@@ -263,23 +309,44 @@ dump结果目录结构示例如下:
263
309
  │ ├── step2
264
310
  ```
265
311
 
266
- dump 过程中,npy 文件在对应算子或者模块被执行后就会落盘,而 json 文件则需要在正常执行 PrecisionDebugger.stop() 后才会写入完整数据,异常的程序终止会保存终止前被执行算子的相关 npy 文件,可能会导致 json 文件中数据丢失。
312
+ * `rank`:设备 ID,每张卡的数据保存在对应的 `rank{ID}` 目录下。非分布式场景下没有 rank ID,目录名称为 rank。
313
+ * `dump_tensor_data`:保存采集到的张量数据。
314
+ * `dump.json`:记录模块或 API 的统计信息。
315
+ * `stack.json`:API调用栈信息。
316
+ * `construct.json`:分层分级结构信息。
267
317
 
268
- 其中 rank 为设备上各卡的 ID,每张卡上 dump 的数据会生成对应 dump 目录。非分布式场景下没有 rank ID,目录名称为 rank。
318
+ dump 过程中,npy 文件在对应API或者模块被执行后就会落盘,而 json 文件则需要在正常执行 PrecisionDebugger.stop() 后才会写入完整数据,因此,程序异常终止时,被执行API对应的 npy 文件已被保存,但 json 文件中的数据可能丢失。
269
319
 
270
320
  动态图场景下使能 PSJit 或 PIJit,装饰特定 Cell 或 function,被装饰的部分会全部/部分使能**静态图**流程。
271
321
 
272
322
  - PSJit 场景下 config.json 文件配置 level 为 L1 时,被 PSJit 装饰的部分也作为 API 被 dump 到对应目录;配置 level 为 L2 时,则只会 dump 用户网络中静态图流程下的相关 kernel,其结果目录同jit_level 为 O0/O1 时的静态图 dump 相同。
273
323
  - PIJit 场景下 config.json 文件配置 level 为 L1 时,会被还原为动态图,按 API 粒度进行 dump;配置 level 为 L2 时,则只会 dump 用户网络中静态图流程下的相关 kernel。
274
324
 
275
- npy 文件保存的前缀和 MindSpore 对应关系如下:
276
-
277
- | 前缀 | MindSpore 模块 |
278
- | -------------- | ---------------------------- |
279
- | Tensor | mindspore.Tensor |
280
- | Functional | mindspore.ops |
281
- | Primitive | mindspore.ops.Primitive |
282
- | Mint | mindspore.mint |
283
- | MintFunctional | mindspore.mint.nn.functional |
284
- | Jit | mindspore.jit |
285
- | Cell | mindspore.nn.Cell |
325
+
326
+ npy文件名的前缀含义如下:
327
+
328
+ | 前缀 | 含义 |
329
+ | -------------- |------------------------------|
330
+ | Tensor | mindspore.Tensor API数据 |
331
+ | Functional | mindspore.ops API数据 |
332
+ | Primitive | mindspore.ops.Primitive API数据 |
333
+ | Mint | mindspore.mint API数据 |
334
+ | MintFunctional | mindspore.mint.nn.functional API数据 |
335
+ | Jit | 被"jit"装饰的模块或函数数据 |
336
+ | Cell | mindspore.nn.Cell 类(模块)数据 |
337
+
338
+
339
+
340
+ ## 9.补充说明
341
+
342
+ ### 9.1 修改 API 支持列表
343
+
344
+ 动态图 API 级 dump 时,本工具提供固定的 API 支持列表,仅支持对列表中的 API 进行精度数据采集。一般情况下,无需修改该列表,而是通过config.json中的scope/list字段进行 dump API 指定。若需要改变 API 支持列表,可以在 `msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml` 文件内手动修改,如下示例:
345
+
346
+ ```yaml
347
+ ops:
348
+ - adaptive_avg_pool1d
349
+ - adaptive_avg_pool2d
350
+ - adaptive_avg_pool3d
351
+ ```
352
+
@@ -137,8 +137,8 @@ msprobe -f pytorch run_ut -api_info ./dump.json -csv_path /home/xxx/ut/accuracy_
137
137
  | 字段 | 含义 |
138
138
  | --------------------- | ------------------------- |
139
139
  | API name | API 名称。 |
140
- | Forward Test Success | 前向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误。SKIP 表示跳过该 API 的计算,跳过原因在 Message 中说明。 |
141
- | Backward Test Success | 反向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误。如果是空白的话代表该 API 没有反向输出,SKIP 表示该 API 的某个参数的反向不计算梯度。 |
140
+ | Forward Test Success | 前向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误。SKIP 表示跳过该 API 的计算,跳过原因在 Message 字段中提示,包括:该 API 不支持精度预检,或该 API 被黑名单过滤或不在白名单上,或运行错误等。 |
141
+ | Backward Test Success | 反向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误。如果是空白的话代表该 API 没有反向输出。SKIP 表示跳过该 API 的计算,跳过原因在 Message 字段中提示,包括:该 API 不支持精度预检,或该 API 被黑名单过滤或不在白名单上,或运行错误等。 |
142
142
  | Message | 提示信息。 |
143
143
 
144
144
  该结果为中间结果,仅作为参考,建议完成 [5 预检结果比对](#5-预检结果比对)后查看比对结果。该结果后续将会删除。
@@ -174,8 +174,8 @@ Forward Test Success 和 Backward Test Success 是否通过测试是由 `accurac
174
174
  | ULP 误差最大值 | NPU 或 GPU 数据与标杆数据 ULP 误差的最大值(取绝对值后)。 |
175
175
  | ULP 误差平均值 | NPU 或 GPU 数据与标杆数据 ULP 误差的平均值(取绝对值后)。 |
176
176
  | ULP 误差大于阈值占比 | NPU 或 GPU 数据与标杆数据的 ULP 误差(取绝对值后)大于阈值(当 NPU 或 GPU 数据类型为 float16 或 bfloat16 时,阈值为 1;当 NPU 或 GPU 数据类型为 float32 时,阈值为 32)的元素个数占总元素的个数比例。 |
177
- | Status | API 预检通过状态,pass 表示通过测试,error 表示未通过,warning 表示测试未通过双千或双万精度指标,SKIP 表示该 API 的某个参数的反向不要计算梯度,所以没有任何计算过程,其他信息均为空。 |
178
- | message | 提示信息。 |
177
+ | Status | API 预检通过状态。pass 表示通过测试;error 表示未通过;warning 表示测试未通过双千或双万精度指标;SKIP 表示跳过该 API 的计算,跳过原因在 Message 字段中提示,包括:该 API 的某个参数的反向不计算梯度,没有任何计算过程,其他信息均为空,或该 API 的数据类型不支持使用新精度标准进行比对(如 float64),或该 API 不支持精度预检,或该 API 被黑名单过滤或不在白名单上,或运行错误等。 |
178
+ | Message | 提示信息。 |
179
179
 
180
180
  ### 4.1 API 预检指标
181
181
 
@@ -214,8 +214,8 @@ msprobe -f pytorch api_precision_compare -npu /home/xxx/npu/accuracy_checking_de
214
214
 
215
215
  | 参数名称 | 说明 | 是否必选 |
216
216
  | -------------------- | ------------- | -------- |
217
- | -npu 或 --npu_csv_path | NPU 预检结果 `accuracy_checking_details_{timestamp}.csv` 文件路径。默认从当前目录下识别该文件。 | |
218
- | -gpu 或 --gpu_csv_path | GPU 预检结果 `accuracy_checking_details_{timestamp}.csv` 文件路径。默认从当前目录下识别该文件。 | |
217
+ | -npu 或 --npu_csv_path | NPU 预检结果 `accuracy_checking_details_{timestamp}.csv` 文件路径。默认从当前目录下识别该文件。 | |
218
+ | -gpu 或 --gpu_csv_path | GPU 预检结果 `accuracy_checking_details_{timestamp}.csv` 文件路径。默认从当前目录下识别该文件。 | |
219
219
  | -o 或 --out_path | 指定 api_precision_compare.py 执行结果存盘路径,默认为当前目录。 | 否 |
220
220
 
221
221
  执行完成后输出 `api_precision_compare_result_{timestamp}.csv` 和 `api_precision_compare_details_{timestamp}.csv` 文件。文件示例如下:
@@ -228,10 +228,10 @@ msprobe -f pytorch api_precision_compare -npu /home/xxx/npu/accuracy_checking_de
228
228
 
229
229
  | 字段 | 含义 |
230
230
  | --------------------- | ------------------------------------------------------------ |
231
- | API name | API 名称。 |
232
- | Forward Test Success | 前向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误,SKIP 表示该 API 的数据类型不支持使用新精度标准进行比对,如 float64 |
233
- | Backward Test Success | 反向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误,如果是空白的话代表该 API 没有反向输出,SKIP 表示该 API 的数据类型不支持使用新精度标准进行比对,如 float64 |
234
- | Message | 提示信息。 |
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)。 |
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。
237
237
 
@@ -266,9 +266,9 @@ Forward Test Success 和 Backward Test Success 是否通过测试是由 `api_pre
266
266
  | ULP 误差判定结果 | ULP 误差判定结果。<br/> 当 NPU 或 GPU 数据类型是 float16 或 bfloat16 时,以下两条标准满足其一标记为 pass,否则标记为 error:<br> NPU ULP 误差大于阈值占比小于 0.001;<br/> NPU ULP 误差大于阈值占比小于 GPU ULP 误差大于阈值占比。<br/> 当 NPU 或 GPU 数据类型是 float32 时,以下三条标准满足其一标记为 pass,否则标记为 error:<br/> NPU ULP 误差平均值小于 64;<br/> NPU ULP 误差大于阈值占比小于 0.05;<br/> NPU ULP 误差大于阈值占比小于 GPU ULP 误差大于阈值占比。 |
267
267
  | 双千指标 | 双千精度指标。是指 NPU 的 Tensor 中的元素逐个与对应的标杆数据对比,相对误差小于千分之一的个数占总元素个数的比例。测试通过标准为相对误差大于千分之一的个数占总元素个数的比例小于千分之一。仅 conv1d 和 conv2d 使用该指标。双千指标法指标。 |
268
268
  | 双千指标判定结果 | 双千指标判定结果。双千指标大于 0.999 标记为 pass,否则标记为 error。 |
269
- | 比对结果 | 综合所有指标的最终结果。如果比对指标中有 error,则标记为 error;有 warning,则标记为 warning;否则标记为 pass;SKIP 表示该 API 的数据类型不支持使用新精度标准进行比对,如 float64 |
269
+ | 比对结果 | 综合所有指标的最终结果。如果比对指标中有 error,则标记为 error,在 Message 字段中提示该 API 比对结果不符合标准的指标;有 warning,则标记为 warning,在 Message 字段中提示该 API 比对结果不符合标准的指标;否则标记为 pass;SKIP 表示跳过该 API 的计算,跳过原因在 Message 字段中提示,包括:该 API 的某个参数的反向不计算梯度,没有任何计算过程,其他信息均为空,或该 API 的数据类型不支持使用新精度标准进行比对(如 float64),或该 API 不支持精度预检,或该 API 被黑名单过滤或不在白名单上,或运行错误等。 |
270
270
  | 比对算法 | API 使用的比对算法,为标杆比对法、二进制一致法、绝对阈值法和 ULP 误差比对法中的一种。 |
271
- | Message | 提示信息。当前提示该 API 比对结果为 error 或 warning 时对应不符合标准的指标。 |
271
+ | Message | 提示信息。 |
272
272
 
273
273
  a:误差比对法指标。
274
274
 
@@ -49,8 +49,6 @@ Host 与 GPU Host 设备间建立连接,将 NPU 上对应 API 的输入数据
49
49
  | level | dump 级别,str 类型,在线预检时配置为 L1,表示 dump API 级精度数据。在线预检可不配置,默认取值 L1。 | 是 |
50
50
  | rank | 指定对某张卡上的数据进行 dump,list[int] 类型,默认未配置(表示 dump所有卡的数据),需要与 GPU 侧配置项 rank_list 保持一致。 | 否 |
51
51
  | step | 指定 dump 某个 step 的数据,list[int] 类型,默认未配置,表示 dump 所有 step 的数据。dump 特定 step 时,须指定为训练脚本中存在的 step。 | 否 |
52
- | seed | 随机种子数,int 类型,默认值为 1234。通过固定随机数保证模型的输入或输出一致。 | 否 |
53
- | is_deterministic | 确定性计算模式,bool 类型,可取值 true(开启)或 false(关闭),默认关闭。 | 否 |
54
52
  | scope | dump 范围,list[str] 类型,默认未配置(list 也未配置时表示 dump 所有 api 的数据),配置方式参考 [config.json 配置介绍](./02.config_introduction.md)。 | 否 |
55
53
  | list | dump 范围,list[str] 类型,默认未配置(scope 也未配置时表示 dump 所有 api 的数据),配置方式参考 [config.json 配置介绍](./02.config_introduction.md)。 | 否 |
56
54
  | online_run_ut | 在线预检模式开关,bool 类型,可取值 True(开启)、False(关闭),默认关闭。 | 是 |
@@ -58,6 +56,7 @@ Host 与 GPU Host 设备间建立连接,将 NPU 上对应 API 的输入数据
58
56
  | host | 在线预检模式局域网场景信息接收端 IP,str 类型,用于 GPU 设备和 NPU 设备间进行通信,NPU 侧须配置为 GPU 侧的局域网 IP 地址。局域网场景时,不能配置 nfs_path 参数,否则局域网场景不生效。 | 否 |
59
57
  | port | 在线预检模式局域网场景信息接收端端口号,int 类型,用于 GPU 设备和 NPU 设备间进行通信,NPU 侧须配置为 GPU 侧的端口号。局域网场景时,不能配置 nfs_path 参数,否则局域网场景不生效。 | 否 |
60
58
  | tls_path | 在线预检模式局域网场景 SSL 证书路径,该路径下包含私钥文件 client.key 和公钥文件 client.crt,str 类型,未配置该参数时默认取值当前路径。tls_path配置为空字符串时,采用TCP协议明文传输api数据;当配置为路径时,采用TLS1.2协议加密传输数据,加密传输时安全性较高,传输速率较低。 | 否 |
59
+ | online_run_ut_recompute | 模型训练是否使用重计算机制,bool类型,默认为False,表示模型没有使用重计算。在线预检暂不支持重计算机制下反向算子的预检,当模型训练使用重计算时,跳过反向算子预检,默认模型关闭重计算。 | 否 |
61
60
 
62
61
  #### 3.1.3 局域网场景配置示例
63
62
 
@@ -114,8 +113,6 @@ NPU 侧:
114
113
  "rank": [0],
115
114
  "step": [0],
116
115
  "level": "L1",
117
- "seed": 1234,
118
- "is_deterministic": true,
119
116
  "tensor": {
120
117
  "scope": [],
121
118
  "list": [],
@@ -158,8 +155,6 @@ NPU 侧:
158
155
  "rank": [0],
159
156
  "step": [0],
160
157
  "level": "L1",
161
- "seed": 1234,
162
- "is_deterministic": true,
163
158
  "tensor": {
164
159
  "scope": [],
165
160
  "list": [],