mindstudio-probe 1.1.1__py3-none-any.whl → 1.2.2__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 (226) hide show
  1. {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.2.dist-info}/METADATA +3 -2
  2. mindstudio_probe-1.2.2.dist-info/RECORD +415 -0
  3. msprobe/CMakeLists.txt +5 -0
  4. msprobe/README.md +16 -21
  5. msprobe/config.json +1 -0
  6. msprobe/core/common/const.py +185 -11
  7. msprobe/core/common/exceptions.py +3 -1
  8. msprobe/core/common/file_utils.py +33 -7
  9. msprobe/core/common/inplace_ops.yaml +4 -0
  10. msprobe/core/common/utils.py +42 -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 +19 -8
  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 +381 -0
  20. msprobe/core/compare/merge_result/merge_result_cli.py +31 -0
  21. msprobe/core/compare/merge_result/utils.py +81 -0
  22. msprobe/core/compare/multiprocessing_compute.py +2 -2
  23. msprobe/core/compare/npy_compare.py +109 -147
  24. msprobe/core/compare/utils.py +199 -69
  25. msprobe/core/data_dump/data_collector.py +100 -25
  26. msprobe/core/data_dump/data_processor/base.py +130 -28
  27. msprobe/core/data_dump/data_processor/factory.py +8 -3
  28. msprobe/core/data_dump/data_processor/mindspore_processor.py +170 -23
  29. msprobe/core/data_dump/data_processor/pytorch_processor.py +175 -64
  30. msprobe/core/data_dump/json_writer.py +54 -8
  31. msprobe/core/data_dump/scope.py +19 -18
  32. msprobe/core/overflow_check/abnormal_scene.py +9 -5
  33. msprobe/core/overflow_check/checker.py +1 -1
  34. msprobe/core/overflow_check/utils.py +1 -1
  35. msprobe/docs/01.installation.md +121 -17
  36. msprobe/docs/02.config_introduction.md +18 -16
  37. msprobe/docs/03.config_examples.md +24 -0
  38. msprobe/docs/05.data_dump_PyTorch.md +107 -58
  39. msprobe/docs/06.data_dump_MindSpore.md +95 -34
  40. msprobe/docs/07.accuracy_checker_PyTorch.md +18 -18
  41. msprobe/docs/09.accuracy_checker_MindSpore.md +8 -6
  42. msprobe/docs/10.accuracy_compare_PyTorch.md +99 -41
  43. msprobe/docs/11.accuracy_compare_MindSpore.md +249 -48
  44. msprobe/docs/12.overflow_check_PyTorch.md +1 -1
  45. msprobe/docs/19.monitor.md +310 -220
  46. msprobe/docs/21.visualization_PyTorch.md +125 -35
  47. msprobe/docs/22.visualization_MindSpore.md +149 -41
  48. msprobe/docs/23.generate_operator_PyTorch.md +107 -0
  49. msprobe/docs/24.code_mapping_Mindspore.md +28 -0
  50. msprobe/docs/{23.tool_function_introduction.md → 25.tool_function_introduction.md} +1 -0
  51. msprobe/docs/26.data_dump_PyTorch_baseline.md +37 -0
  52. msprobe/docs/27.dump_json_instruction.md +525 -0
  53. msprobe/docs/28.debugger_save_instruction.md +94 -0
  54. msprobe/docs/28.kernel_dump_MindSpore.md +69 -0
  55. msprobe/docs/FAQ.md +26 -2
  56. msprobe/docs/accuracy_checker_MindSpore/accuracy_checker_MindSpore_baseline.md +14 -0
  57. msprobe/docs/data_dump_MindSpore/data_dump_MindSpore_baseline.md +22 -0
  58. msprobe/docs/img/merge_result.png +0 -0
  59. msprobe/docs/img/monitor/step_count_per_record.png +0 -0
  60. msprobe/docs/img/visualization/fuzzy_match_ms.png +0 -0
  61. msprobe/docs/img/visualization/fuzzy_match_pt.png +0 -0
  62. msprobe/docs/img/visualization/tensorboard_1.png +0 -0
  63. msprobe/docs/img/visualization/tensorboard_2.png +0 -0
  64. msprobe/docs/img/visualization/vis_browser_1.png +0 -0
  65. msprobe/docs/img/visualization/vis_browser_2.png +0 -0
  66. msprobe/docs/img/visualization/vis_precision_info.png +0 -0
  67. msprobe/docs/img/visualization/vis_search_info.png +0 -0
  68. msprobe/docs/img/visualization/vis_show_info.png +0 -0
  69. msprobe/docs/img/visualization/vis_showcase.png +0 -0
  70. msprobe/docs/img/visualization/vis_unmatch_info.png +0 -0
  71. msprobe/docs/visualization/GPTModel.png +0 -0
  72. msprobe/docs/visualization/ParallelMLP.png +0 -0
  73. msprobe/docs/visualization/layer_mapping_example.md +132 -0
  74. msprobe/docs/visualization/mapping.png +0 -0
  75. msprobe/docs/visualization/mapping1.png +0 -0
  76. msprobe/docs/visualization/module_name.png +0 -0
  77. msprobe/docs/visualization/module_name1.png +0 -0
  78. msprobe/docs/visualization/no_mapping.png +0 -0
  79. msprobe/docs/visualization/no_mapping1.png +0 -0
  80. msprobe/docs/visualization/no_mapping_analyze.png +0 -0
  81. msprobe/docs/visualization/top_layer.png +0 -0
  82. msprobe/mindspore/__init__.py +11 -0
  83. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +80 -28
  84. msprobe/mindspore/api_accuracy_checker/api_runner.py +54 -16
  85. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +2 -1
  86. msprobe/mindspore/api_accuracy_checker/compute_element.py +52 -8
  87. msprobe/mindspore/api_accuracy_checker/data_manager.py +37 -0
  88. msprobe/mindspore/api_accuracy_checker/main.py +1 -0
  89. msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +12 -6
  90. msprobe/mindspore/api_accuracy_checker/multi_data_manager.py +3 -1
  91. msprobe/mindspore/api_accuracy_checker/torch_mindtorch_importer.py +129 -0
  92. msprobe/mindspore/api_accuracy_checker/type_mapping.py +24 -1
  93. msprobe/mindspore/api_accuracy_checker/utils.py +6 -1
  94. msprobe/mindspore/code_mapping/bind.py +264 -0
  95. msprobe/mindspore/code_mapping/cmd_parser.py +40 -0
  96. msprobe/mindspore/code_mapping/graph.py +49 -0
  97. msprobe/mindspore/code_mapping/graph_parser.py +226 -0
  98. msprobe/mindspore/code_mapping/main.py +24 -0
  99. msprobe/mindspore/code_mapping/processor.py +34 -0
  100. msprobe/mindspore/common/const.py +3 -1
  101. msprobe/mindspore/common/utils.py +68 -5
  102. msprobe/mindspore/compare/distributed_compare.py +0 -2
  103. msprobe/mindspore/compare/ms_compare.py +105 -63
  104. msprobe/mindspore/compare/ms_graph_compare.py +14 -5
  105. msprobe/mindspore/debugger/debugger_config.py +28 -2
  106. msprobe/mindspore/debugger/precision_debugger.py +100 -12
  107. msprobe/mindspore/dump/hook_cell/api_registry.py +85 -16
  108. msprobe/mindspore/dump/hook_cell/hook_cell.py +60 -38
  109. msprobe/mindspore/dump/hook_cell/primitive_hooks.py +33 -15
  110. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +11 -1
  111. msprobe/mindspore/dump/hook_cell/wrap_api.py +92 -1
  112. msprobe/mindspore/dump/jit_dump.py +7 -6
  113. msprobe/mindspore/dump/kernel_dump/kernel_config.py +33 -0
  114. msprobe/mindspore/dump/kernel_graph_dump.py +7 -0
  115. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +13 -4
  116. msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +2 -2
  117. msprobe/mindspore/grad_probe/grad_analyzer.py +24 -12
  118. msprobe/mindspore/grad_probe/hook.py +13 -4
  119. msprobe/mindspore/mindtorch/__init__.py +18 -0
  120. msprobe/mindspore/mindtorch/mindtorch_adaptor.py +255 -0
  121. msprobe/mindspore/monitor/anomaly_detect.py +404 -0
  122. msprobe/mindspore/monitor/distributed/__init__.py +0 -0
  123. msprobe/mindspore/monitor/distributed/distributed_ops.yaml +15 -0
  124. msprobe/mindspore/monitor/distributed/stack_blacklist.yaml +5 -0
  125. msprobe/mindspore/monitor/distributed/wrap_distributed.py +300 -0
  126. msprobe/mindspore/monitor/features.py +63 -0
  127. msprobe/mindspore/monitor/module_hook.py +821 -0
  128. msprobe/mindspore/monitor/module_spec_verifier.py +94 -0
  129. msprobe/mindspore/monitor/utils.py +267 -0
  130. msprobe/mindspore/ms_config.py +13 -3
  131. msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +7 -0
  132. msprobe/mindspore/service.py +347 -107
  133. msprobe/msprobe.py +24 -3
  134. msprobe/pytorch/__init__.py +7 -7
  135. msprobe/pytorch/api_accuracy_checker/common/utils.py +31 -16
  136. msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +41 -8
  137. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +100 -267
  138. msprobe/pytorch/api_accuracy_checker/compare/api_precision_standard.yaml +4 -1
  139. msprobe/pytorch/api_accuracy_checker/compare/compare.py +69 -68
  140. msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +54 -0
  141. msprobe/pytorch/api_accuracy_checker/compare/compare_input.py +51 -0
  142. msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +2 -4
  143. msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +55 -31
  144. msprobe/pytorch/api_accuracy_checker/precision_standard/absolute_threshold.py +106 -0
  145. msprobe/pytorch/api_accuracy_checker/precision_standard/accumulative_error_compare.py +107 -0
  146. msprobe/pytorch/api_accuracy_checker/precision_standard/base_standard.py +151 -0
  147. msprobe/pytorch/api_accuracy_checker/precision_standard/benchmark_compare.py +226 -0
  148. msprobe/pytorch/api_accuracy_checker/precision_standard/binary_consistency.py +68 -0
  149. msprobe/pytorch/api_accuracy_checker/precision_standard/standard_config.py +218 -0
  150. msprobe/pytorch/api_accuracy_checker/precision_standard/standard_register.py +104 -0
  151. msprobe/pytorch/api_accuracy_checker/precision_standard/thousandth_standard.py +63 -0
  152. msprobe/pytorch/api_accuracy_checker/precision_standard/ulp_compare.py +200 -0
  153. msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +57 -1
  154. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +2 -1
  155. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +42 -14
  156. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +64 -19
  157. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +34 -4
  158. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +5 -3
  159. msprobe/pytorch/bench_functions/apply_adam.py +215 -0
  160. msprobe/pytorch/bench_functions/group_norm_silu.py +27 -0
  161. msprobe/pytorch/bench_functions/mish.py +21 -0
  162. msprobe/pytorch/bench_functions/moe_gating_top_k_softmax.py +44 -0
  163. msprobe/pytorch/bench_functions/npu_fusion_attention.py +42 -10
  164. msprobe/pytorch/bench_functions/sort_v2.py +21 -0
  165. msprobe/pytorch/common/parse_json.py +2 -1
  166. msprobe/pytorch/common/utils.py +116 -2
  167. msprobe/pytorch/compare/distributed_compare.py +17 -29
  168. msprobe/pytorch/compare/pt_compare.py +40 -20
  169. msprobe/pytorch/debugger/debugger_config.py +42 -17
  170. msprobe/pytorch/debugger/precision_debugger.py +56 -12
  171. msprobe/pytorch/dump/module_dump/__init__.py +0 -0
  172. msprobe/pytorch/dump/module_dump/module_dump.py +86 -0
  173. msprobe/pytorch/dump/module_dump/module_processer.py +204 -0
  174. msprobe/pytorch/free_benchmark/common/params.py +2 -1
  175. msprobe/pytorch/free_benchmark/common/utils.py +3 -0
  176. msprobe/pytorch/free_benchmark/compare/grad_saver.py +0 -2
  177. msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +31 -47
  178. msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +0 -4
  179. msprobe/pytorch/function_factory.py +7 -1
  180. msprobe/pytorch/hook_module/__init__.py +1 -1
  181. msprobe/pytorch/hook_module/hook_module.py +14 -11
  182. msprobe/pytorch/hook_module/register_optimizer_hook.py +59 -0
  183. msprobe/pytorch/hook_module/support_wrap_ops.yaml +36 -1
  184. msprobe/pytorch/hook_module/wrap_distributed.py +10 -8
  185. msprobe/pytorch/hook_module/wrap_functional.py +0 -40
  186. msprobe/pytorch/monitor/anomaly_analyse.py +1 -1
  187. msprobe/pytorch/monitor/anomaly_detect.py +98 -28
  188. msprobe/pytorch/monitor/csv2tb.py +164 -0
  189. msprobe/pytorch/monitor/distributed/wrap_distributed.py +25 -14
  190. msprobe/pytorch/monitor/features.py +3 -3
  191. msprobe/pytorch/monitor/module_hook.py +543 -318
  192. msprobe/pytorch/monitor/module_metric.py +27 -48
  193. msprobe/pytorch/monitor/module_spec_verifier.py +3 -1
  194. msprobe/pytorch/monitor/optimizer_collect.py +76 -56
  195. msprobe/pytorch/monitor/unittest/test_monitor.py +24 -9
  196. msprobe/pytorch/monitor/utils.py +84 -48
  197. msprobe/pytorch/online_dispatch/dispatch.py +8 -2
  198. msprobe/pytorch/parse_tool/lib/compare.py +10 -10
  199. msprobe/pytorch/parse_tool/lib/config.py +5 -7
  200. msprobe/pytorch/parse_tool/lib/file_desc.py +15 -1
  201. msprobe/pytorch/parse_tool/lib/interactive_cli.py +10 -10
  202. msprobe/pytorch/parse_tool/lib/parse_exception.py +7 -7
  203. msprobe/pytorch/parse_tool/lib/parse_tool.py +11 -10
  204. msprobe/pytorch/parse_tool/lib/utils.py +18 -19
  205. msprobe/pytorch/parse_tool/lib/visualization.py +9 -10
  206. msprobe/pytorch/pt_config.py +19 -22
  207. msprobe/pytorch/service.py +264 -115
  208. msprobe/visualization/builder/graph_builder.py +93 -10
  209. msprobe/visualization/builder/msprobe_adapter.py +30 -6
  210. msprobe/visualization/compare/graph_comparator.py +64 -14
  211. msprobe/visualization/compare/mode_adapter.py +1 -15
  212. msprobe/visualization/graph/base_node.py +15 -19
  213. msprobe/visualization/graph/distributed_analyzer.py +395 -0
  214. msprobe/visualization/graph/graph.py +9 -0
  215. msprobe/visualization/graph/node_op.py +4 -2
  216. msprobe/visualization/graph_service.py +100 -27
  217. msprobe/visualization/utils.py +24 -31
  218. mindstudio_probe-1.1.1.dist-info/RECORD +0 -341
  219. msprobe/pytorch/functional/module_dump.py +0 -84
  220. msprobe/pytorch/module_processer.py +0 -150
  221. {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.2.dist-info}/LICENSE +0 -0
  222. {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.2.dist-info}/WHEEL +0 -0
  223. {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.2.dist-info}/entry_points.txt +0 -0
  224. {mindstudio_probe-1.1.1.dist-info → mindstudio_probe-1.2.2.dist-info}/top_level.txt +0 -0
  225. /msprobe/docs/{data_dump_Mindspore → data_dump_MindSpore}/dynamic_graph_quick_start_example.md +0 -0
  226. /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,18 @@ 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]Tuple[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**](#15-step) 函数添加到反向计算代码之后,才能采集 **start** 和该函数之间的前反向数据。
56
+ 使用示例可参见 [2.1 快速上手](#21-快速上手) 和 [2.2 采集完整的前反向数据](#22-采集完整的前反向数据)。
57
+
58
+ **注意**:**stop** 函数必须调用,否则可能导致精度数据落盘不全。
47
59
 
48
60
  **原型**:
49
61
 
@@ -53,7 +65,8 @@ debugger.stop()
53
65
 
54
66
  ### 1.4 forward_backward_dump_end
55
67
 
56
- **功能说明**:停止精度数据采集。用于 dump 指定代码的前反向数据。在 **start** 函数之后,反向计算代码(如,loss.backward)之前的任意位置添加,可以采集 **start** 函数和该函数之间的前反向数据,可以通过调整 **start** 函数与该函数的位置,来指定需要 dump 的代码块。要求 **stop** 函数添加在反向计算代码(如,loss.backward)之后,此时该函数与 **stop** 函数之间的代码不会被 dump。使用示例可参见 [2.3 采集指定代码块的前反向数据](#23-采集指定代码块的前反向数据)
68
+ **功能说明**:停止精度数据采集。与 **stop** 函数功能相同,该函数在将来会被移除,建议使用 **stop** 函数。
69
+ 使用示例可参见 [2.3 采集指定代码块的前反向数据](#23-采集指定代码块的前反向数据)。
57
70
 
58
71
  **原型**:
59
72
 
@@ -63,7 +76,8 @@ forward_backward_dump_end()
63
76
 
64
77
  ### 1.5 step
65
78
 
66
- **功能说明**:更新 dump 参数。在最后一个 **stop** 函数后或一个 step 结束的位置添加。需要与 **start** 函数一起添加在 for 循环内。
79
+ **功能说明**:结束一个 step 的数据采集,完成所有数据落盘并更新 dump 参数。在一个 step 结束的位置添加,且必须在 **stop** 函数之后的位置调用。
80
+ 该函数需要配合 **start** 和 **stop** 函数使用,尽量添加在反向计算代码(如loss.backward)之后,否则可能会导致反向数据丢失。使用示例可参见[2.2 采集完整的前反向数据](#22-采集完整的前反向数据)。
67
81
 
68
82
  **原型**:
69
83
 
@@ -103,13 +117,18 @@ module_dump_end()
103
117
 
104
118
  **原型**:
105
119
  ```python
106
- seed_all(seed=1234, mode=False)
120
+ seed_all(seed=1234, mode=False, rm_dropout=True)
107
121
  ```
108
122
 
109
123
  **参数说明**:
110
124
 
111
125
  1. seed: 随机性种子。参数示例: seed=1000。默认值:1234。非必选
112
126
  2. mode:确定性计算模式。可配置True或False。参数示例:mode=True。默认为False。非必选(注意:确定性计算会导致API执行性能降低,建议在发现模型多次执行结果不同的情况下开启)
127
+ 3. rm_dropout:控制dropout失效的开关。可配置 True 或 False,默认值:True,非必选。参数示例:rm_dropout=True。
128
+ 该参数设置为 True 后, 工具会自动将 `torch.nn.functional.dropout`、`torch.nn.functional.dropout2d`、`torch.nn.functional.dropout3d`、`torch.nn.Dropout`、`torch.nn.Dropout2d`、`torch.nn.Dropout3d`
129
+ 的接口参数 p 置为0,以避免因随机dropout造成的网络随机性。 注意:通过rm_dropout控制dropout失效或生效需要在初始化dropout实例前调用才能生效。
130
+
131
+ 当前工具 dump 默认不会固定随机性和使 dropout 失效,若希望每次采集的数据保持一致,建议在 dump 数据前调用 seed_all 接口。
113
132
 
114
133
  seed_all 函数可固定随机数的范围如下表。
115
134
 
@@ -128,28 +147,45 @@ seed_all 函数可固定随机数的范围如下表。
128
147
  | torch.backends.cudnn.enable=False | 关闭 cuDNN |
129
148
  | torch.backends.cudnn.benchmark=False | cuDNN 确定性地选择算法 |
130
149
  | torch.backends.cudnn.deterministic=True | cuDNN 仅使用确定性的卷积算法 |
150
+ | torch.nn.functional.dropout | 将 dropout 的接口参数 p 置为0 |
151
+ | torch.nn.functional.dropout2d | 将 dropout2d 的接口参数 p 置为0 |
152
+ | torch.nn.functional.dropout3d | 将 dropout3d 的接口参数 p 置为0 |
153
+ | torch.nn.Dropout | 将 Dropout 的接口参数 p 置为0 |
154
+ | torch.nn.Dropout2d | 将 Dropout2d 的接口参数 p 置为0 |
155
+ | torch.nn.Dropout3d | 将 Dropout3d 的接口参数 p 置为0 |
131
156
 
132
157
  需要保证 CPU 或 GPU 以及 NPU 的模型输入完全一致,dump 数据的比对才有意义,seed_all 并不能保证模型输入完全一致,如下表所示场景需要保证输入的一致性。
133
158
 
134
159
  | 场景 | 固定方法 |
135
160
  | --------------- | ------------- |
136
161
  | 数据集的 shuffle | 关闭 shuffle。 |
137
- | dropout | 关闭 dropout。 |
138
162
 
139
163
  关闭 shuffle 示例:
140
164
 
141
165
  ```python
142
166
  train_loader = torch.utils.data.DataLoader(
143
- train_dataset,
144
- batch_size = batch_size,
145
- shuffle = False,
146
- num_workers = num_workers
167
+ train_dataset,
168
+ batch_size=batch_size,
169
+ shuffle=False,
170
+ num_workers=num_workers
147
171
  )
148
172
  ```
149
173
 
150
- 关闭 dropout:
174
+ ### 1.9 save
151
175
 
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.
176
+ **功能说明**:单点保存网络执行过程中正反向数值,并以统计值/张量文件落盘。
177
+
178
+ **原型**:
179
+ ```python
180
+ save(variable, name, save_backward=True)
181
+ ```
182
+
183
+ **参数说明**:
184
+ | 参数名称 | 参数含义 | 支持数据类型 | 是否必选|
185
+ | ---------- | ------------------| ------------------- | ------------------- |
186
+ | variable | 需要保存的变量 |dict, list, torch.tensor, int, float, str | 是 |
187
+ | name | 指定的名称 | str | 是 |
188
+ | save_backward | 是否保存反向数据 | boolean | 否 |
153
189
 
154
190
  ## 2 示例代码
155
191
 
@@ -161,38 +197,43 @@ num_workers = num_workers
161
197
  # 根据需要import包
162
198
  import torch
163
199
  import torch.nn as nn
164
- import torch_npu # 需安装 torch_npu
165
200
  import torch.nn.functional as F
201
+
202
+ # 导入工具的数据采集接口
166
203
  from msprobe.pytorch import PrecisionDebugger, seed_all
204
+
167
205
  # 在模型训练开始前固定随机性
168
206
  seed_all()
207
+ # 在模型训练开始前实例化PrecisionDebugger
208
+ debugger = PrecisionDebugger(config_path='./config.json')
169
209
 
170
- torch.npu.set_device("npu:0")
171
210
  # 定义网络
172
211
  class ModuleOP(nn.Module):
173
212
  def __init__(self) -> None:
174
213
  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)
214
+ self.linear_1 = nn.Linear(in_features=8, out_features=4)
215
+ self.linear_2 = nn.Linear(in_features=4, out_features=2)
177
216
 
178
- def forward(self,x):
217
+ def forward(self, x):
179
218
  x1 = self.linear_1(x)
180
219
  x2 = self.linear_2(x1)
181
220
  r1 = F.relu(x2)
182
221
  return r1
183
222
 
184
223
  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()
224
+ module = ModuleOP()
225
+ # 开启数据 dump
226
+ debugger.start(model=module)
194
227
 
228
+ x = torch.randn(10, 8)
229
+ out = module(x)
230
+ loss = out.sum()
231
+ loss.backward()
232
+
233
+ # 关闭数据 dump
234
+ debugger.stop()
195
235
  ```
236
+
196
237
  ### 2.2 采集完整的前反向数据
197
238
 
198
239
  ```Python
@@ -205,19 +246,20 @@ debugger = PrecisionDebugger(config_path="./config.json", dump_path="./dump_path
205
246
  # ...
206
247
  # 数据集迭代的位置一般为模型训练开始的位置
207
248
  for data, label in data_loader:
208
- debugger.start() # 开启数据dump
209
- # 如下是模型每个step执行的逻辑
249
+ debugger.start() # 开启数据dump
250
+ # 如下是模型每个step执行的逻辑
210
251
  output = model(data)
211
252
  #...
212
253
  loss.backward()
213
- debugger.stop() # 关闭数据dump
214
- debugger.step() # 结束一个step的dump
254
+ debugger.stop() # 关闭数据dump
255
+ debugger.step() # 结束一个step的dump
215
256
  ```
216
257
 
217
258
  ### 2.3 采集指定代码块的前反向数据
218
259
 
219
260
  ```Python
220
261
  from msprobe.pytorch import PrecisionDebugger, seed_all
262
+
221
263
  # 在模型训练开始前固定随机性
222
264
  seed_all()
223
265
  # 请勿将PrecisionDebugger的初始化流程插入到循环代码中
@@ -227,14 +269,14 @@ debugger = PrecisionDebugger(config_path="./config.json", dump_path="./dump_path
227
269
  # ...
228
270
  # 数据集迭代的位置一般为模型训练开始的位置
229
271
  for data, label in data_loader:
230
- debugger.start() # 开启数据dump
231
- # 如下是模型每个step执行的逻辑
272
+ debugger.start() # 开启数据dump
273
+ # 如下是模型每个step执行的逻辑
232
274
  output = model(data)
233
- debugger.forward_backward_dump_end() # 插入该函数到start函数之后,只dump start函数到该函数之间代码的前反向数据,本函数到stop函数之间的数据则不dump
234
- #...
275
+
276
+ debugger.forward_backward_dump_end() # 插入该函数到start函数之后,只dump start函数到该函数之间的前反向数据。
277
+ # ...
235
278
  loss.backward()
236
- debugger.stop() # 关闭数据dump
237
- debugger.step() # 结束一个step的dump
279
+ debugger.step() # 结束一个step的dump
238
280
  ```
239
281
 
240
282
  ### 2.4 采集函数模块化数据
@@ -243,11 +285,14 @@ for data, label in data_loader:
243
285
  # 根据需要import包
244
286
  import torch
245
287
  import torch.nn as nn
246
- import torch_npu # 需安装 torch_npu
247
288
  import torch.nn.functional as F
289
+
290
+ # 导入工具的数据采集接口
248
291
  from msprobe.pytorch import PrecisionDebugger, module_dump, module_dump_end
249
292
 
250
- torch.npu.set_device("npu:0")
293
+ # 在模型训练开始前实例化PrecisionDebugger
294
+ debugger = PrecisionDebugger(config_path='./config.json')
295
+
251
296
  # 定义网络
252
297
  class ModuleOP(nn.Module):
253
298
  def __init__(self) -> None:
@@ -263,37 +308,38 @@ class ModuleOP(nn.Module):
263
308
 
264
309
  if __name__ == "__main__":
265
310
  module = ModuleOP()
266
- # 注册工具
267
- debugger = PrecisionDebugger(config_path='./config.json')
268
- debugger.start() # 开启数据dump
269
-
270
- x = torch.randn(10, 8)
311
+ # 开启数据dump
312
+ debugger.start()
313
+ x = torch.randn(10, 8)
271
314
  # ... # start和module_dump接口之间的数据正常dump
272
315
  module_dump(module, "MyModuleOP") # 开启模块级精度数据dump
273
- out = module(x) # module内部的child modules或API不会被dump
316
+ out = module(x) # module内部的child modules或API将不会被dump
274
317
  module_dump_end() # 关闭模块级精度数据dump
275
318
  loss = out.sum() # module_dump_end和stop接口之间的数据正常dump
276
- loss.backward()
277
-
278
- debugger.stop() # 关闭数据dump
319
+ loss.backward()
320
+ # 关闭数据dump
321
+ debugger.stop()
279
322
  ```
280
323
 
281
324
  ## 3 dump 结果文件介绍
282
325
 
283
326
  训练结束后,工具将 dump 的数据保存在 dump_path 参数指定的目录下。目录结构示例如下:
284
327
 
285
- ```Python
328
+ ```lua
286
329
  ├── dump_path
287
330
  │ ├── step0
288
331
  │ | ├── rank0
289
332
  │ | │ ├── dump_tensor_data
290
333
  | | | | ├── Tensor.permute.1.forward.pt
291
- | | | | ├── MyModule.0.forward.input.pt # 开启模块级精度数据dump时存在模块级的dump数据文件
334
+ | | | | ├── 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个元素。
292
335
  | | | | ...
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 # 分层分级结构
336
+ | | | | ├── 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个元素。
337
+ | | | | ├── Module.conv1.Conv2D.forward.0.parameters.bias.pt # 模块参数数据:命名格式为{Module}.{module_name}.{class_name}.forward.{调用次数}.parameters.{parameter_name}
338
+ | | | | └── Module.conv1.Conv2D.parameters_grad.weight.pt # 模块参数梯度数据:命名格式为{Module}.{module_name}.{class_name}.parameters_grad.{parameter_name}。因为同一模块的参数使用同一梯度进行更新,所以参数梯度文件名不包含调用次数。
339
+ | | | | # 当dump时传入的model参数为List[torch.nn.Module]或Tuple[torch.nn.Module]时,模块级数据的命名中包含该模块在列表中的索引index,命名格式为{Module}.{index}.*,*表示以上三种模块级数据的命名格式,例如:Module.0.conv1.Conv2d.forward.0.input.0.pt。
340
+ │ | | ├── dump.json
341
+ │ | | ├── stack.json
342
+ │ | | └── construct.json
297
343
  │ | ├── rank1
298
344
  | | | ├── dump_tensor_data
299
345
  | | | | └── ...
@@ -307,6 +353,12 @@ if __name__ == "__main__":
307
353
  │ | ├── ...
308
354
  │ ├── step2
309
355
  ```
356
+ * `rank`:设备 ID,每张卡的数据保存在对应的 `rank{ID}` 目录下。非分布式场景下没有 rank ID,目录名称为 rank。
357
+ * `dump_tensor_data`:保存采集到的张量数据。
358
+ * `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)。
359
+ * `stack.json`:API/Module的调用栈信息。
360
+ * `construct.json`:分层分级结构,level为L1时,construct.json内容为空。
361
+
310
362
 
311
363
  dump 过程中,pt 文件在对应算子或者模块被执行后就会落盘,而 json 文件则需要在正常执行 PrecisionDebugger.stop() 后才会写入完整数据,异常的程序终止会保存终止前被执行算子的相关 npy 文件,可能会导致 json 文件中数据丢失。
312
364
 
@@ -323,6 +375,3 @@ pt 文件保存的前缀和 PyTorch 对应关系如下:
323
375
  | VF | torch._VF |
324
376
  | Aten | torch.ops.aten |
325
377
  | Distributed | torch.distributed |
326
-
327
-
328
-
@@ -20,38 +20,41 @@
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
- ## 5. 场景介绍
31
+ ## 5. 场景介绍
31
32
 
32
- ### 5.1 静态图场景
33
- 在静态图场景下,msprobe 仅支持 **L2 Level** 的数据采集。
33
+ ### 5.1 静态图场景
34
+ 在静态图场景下,msprobe 仅支持 **L2 Level** 的数据采集。
34
35
  - **L2 Level(Kernel 级)** :采集底层算子的输入输出数据,适用于深入分析算子级别的精度问题。
35
36
 
36
37
  采集方式请参见[示例代码 > 静态图场景](#71-静态图场景)。详细介绍请参见[《config.json 配置文件介绍》](./02.config_introduction.md#11-通用配置)中的“level 参数”和[《config.json 配置示例》](./03.config_examples.md#2-mindspore-静态图场景) 中的“MindSpore 静态图场景”。
37
38
 
38
- ### 5.2 动态图场景
39
- 在动态图场景下,msprobe 支持 **L0** 、**L1** 、**mix** 、**L2 Level** 的数据采集,具体分为以下几种情况:
40
- - **使用高阶 API(如 `Model 高阶API`)** :
39
+ ### 5.2 动态图场景
40
+ 在动态图场景下,msprobe 支持 **L0** 、**L1** 、**mix** 、**L2 Level**、 **debug** 的数据采集,具体分为以下几种情况:
41
+ - **使用高阶 API(如 `Model 高阶API`)** :
41
42
  - 需要使用 `MsprobeStep` 回调类来控制数据采集的启停,适用于 **L0** 、**L1** 、**mix** 、**L2** 数据采集。
42
-
43
- - **未使用高阶 API** :
43
+
44
+ - **未使用高阶 API** :
44
45
  - 手动在训练循环中调用 `start`、`stop`、`step` 等接口,适用于 **L0** 、**L1** 、**mix** 、**L2** 数据采集。
45
46
 
46
- 采集方式请参见[示例代码 > 动态图场景](#72-动态图场景-)。
47
+ 采集方式请参见[示例代码 > 动态图场景](#72-动态图场景)。
47
48
 
48
- > **注意** :动态图模式下,使用 `PSJit` 或 `PIJit` 装饰的部分实际以静态图模式执行,此时的 **Kernel 级(L2 Level)** 数据采集方式与静态图场景相同。
49
+ > **注意** :动态图模式下,使用 `PSJit` 或 `PIJit` 装饰的部分实际以静态图模式执行,此时的 **Kernel 级(L2 Level)** 数据采集方式与静态图场景相同。
49
50
  - **L0 Level(Cell 级)** :采集 `Cell` 对象的数据,适用于需要分析特定网络模块的情况。
50
-
51
+
51
52
  - **L1 Level(API 级)** :采集 MindSpore API 的输入输出数据,适用于定位 API 层面的精度问题。
52
53
 
53
54
  - **mix(模块级 + API 级)** :在 `L0` 和 `L1` 级别的基础上同时采集模块级和 API 级数据,适用于需要分析模块和 API 层面精度问题的场景。
54
55
 
56
+ - **debug level (单点保存)**:单点保存网络中变量的正反向数据,适用于用户熟悉网络结构的场景。
57
+
55
58
 
56
59
  详细介绍请参见[《config.json 配置文件介绍》](./02.config_introduction.md#11-通用配置)中的“level 参数”和[《config.json 配置示例》](./03.config_examples.md#3-mindspore-动态图场景) 中的“MindSpore 动态图场景”。
57
60
 
@@ -65,12 +68,15 @@ msprobe 工具通过在训练脚本中添加 `PrecisionDebugger` 接口并启动
65
68
  **原型**:
66
69
 
67
70
  ```Python
68
- PrecisionDebugger(config_path=None)
71
+ PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None, step=None)
69
72
  ```
70
73
 
71
74
  **参数说明**:
72
75
 
73
76
  1. config_path:指定 dump 配置文件路径,string 类型。参数示例:"./config.json"。未配置该路径时,默认使用 [config.json](../config.json) 文件的默认配置,配置选项含义可见 [config.json 介绍](./02.config_introduction.md)。
77
+ 2. 其他参数均在 [config.json](../config.json) 文件中可配,详细配置可见 [config.json 介绍](./02.config_introduction.md)。
78
+
79
+ 此接口的参数均不是必要,且优先级高于 [config.json](../config.json) 文件中的配置,但可配置的参数相比 config.json 较少。
74
80
 
75
81
  #### 6.1.1 start
76
82
 
@@ -84,11 +90,15 @@ start(model=None)
84
90
 
85
91
  **参数说明**:
86
92
 
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 数据。
93
+ 1. model:指定需要采集数据的实例化模型,支持传入mindspore.nn.Cell、List[mindspore.nn.Cell]或Tuple[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 数据。
88
94
 
89
95
  #### 6.1.2 stop
90
96
 
91
- **功能说明**:停止数据采集。在 **start** 函数之后的任意位置添加。需要与 start 函数一起添加在 for 循环内。若需要 dump 反向数据,则需要添加在反向计算代码之后。**仅未使用 Model 高阶 API 的动态图场景支持。**
97
+ **功能说明**:停止精度数据采集。在 **start** 函数之后的任意位置添加。若 **stop** 函数添加在反向计算代码之后,则会采集 **start** 和该函数之间的前反向数据。
98
+ 若 **stop** 函数添加在反向计算代码之前,则需要将 [**step**](#613-step) 函数添加到反向计算代码之后,才能采集 **start** 和该函数之间的前反向数据。
99
+ **仅未使用 Model 高阶 API 的动态图场景支持。**
100
+
101
+ **注意**:**stop** 函数必须调用,否则可能导致精度数据落盘不全。
92
102
 
93
103
  **原型**:
94
104
 
@@ -98,7 +108,9 @@ stop()
98
108
 
99
109
  #### 6.1.3 step
100
110
 
101
- **功能说明**:在最后一个 **stop** 函数后或一个 step 训练结束的位置添加。**仅未使用 Model 高阶 API 的动态图场景支持。**
111
+ **功能说明**:结束一个 step 的数据采集,完成所有数据落盘并更新 dump 参数。在一个 step 结束的位置添加,且必须在 **stop** 函数之后的位置调用。
112
+ 该函数需要配合 **start** 和 **stop** 函数使用,尽量添加在反向计算代码之后,否则可能会导致反向数据丢失。
113
+ **仅未使用 Model 高阶 API 的动态图场景支持。**
102
114
 
103
115
  **原型**:
104
116
 
@@ -108,9 +120,7 @@ step()
108
120
 
109
121
  #### 6.1.4 forward_backward_dump_end
110
122
 
111
- **功能说明**:在 **start** 函数和在 **stop** 函数之间调用,表示采集 **start** 到 **forward_backward_dump_end**之间的L1级别的正反向数据。
112
-
113
- **仅支持L1级别数据采集场景。**
123
+ **功能说明**:停止精度数据采集。与 **stop** 函数功能相同,该函数在将来会被移除,建议使用 **stop** 函数。
114
124
 
115
125
  **L1级别数据中的jit数据采集行为不受此接口影响。**
116
126
 
@@ -122,6 +132,24 @@ step()
122
132
  forward_backward_dump_end()
123
133
  ```
124
134
 
135
+ #### 6.1.5 save
136
+
137
+ **功能说明**:单点保存网络执行过程中正反向数值,并以统计值/张量文件落盘。
138
+
139
+ **原型**:
140
+ ```python
141
+ save(variable, name, save_backward=True)
142
+ ```
143
+
144
+ **参数说明**:
145
+ | 参数名称 | 参数含义 | 支持数据类型 | 是否必选|
146
+ | ---------- | ------------------| ------------------- | ------------------- |
147
+ | variable | 需要保存的变量 |dict, list, torch.tensor, int, float, str | 是 |
148
+ | name | 指定的名称 | str | 是 |
149
+ | save_backward | 是否保存反向数据 | boolean | 否 |
150
+
151
+
152
+
125
153
  ### 6.2 msprobe.mindspore.common.utils.MsprobeStep
126
154
 
127
155
  **功能说明**:MindSpore Callback类,自动在每个step开始时调用start()接口,在每个step结束时调用stop()、step()接口。实现使用 Model 高阶 API 的动态图场景下 L0、L1、mix 级别的精度数据采集控制,控制粒度为单个 **Step** ,而 PrecisionDebugger.start, PrecisionDebugger.stop 接口的控制粒度任意训练代码段。
@@ -173,11 +201,11 @@ debugger.start()
173
201
 
174
202
  ```
175
203
 
176
- ### 7.2 动态图场景
204
+ ### 7.2 动态图场景
177
205
 
178
206
  #### 7.2.1 L0 ,L1, mix 级别
179
207
 
180
- ##### 7.2.1.1 未使用 Model 高阶 API
208
+ ##### 7.2.1.1 未使用 Model 高阶 API
181
209
 
182
210
 
183
211
  ```python
@@ -201,7 +229,7 @@ for data, label in data_loader:
201
229
  debugger.step() # 更新迭代数
202
230
  ```
203
231
 
204
- ##### 7.2.1.2 使用 Model 高阶 API
232
+ ##### 7.2.1.2 使用 Model 高阶 API
205
233
 
206
234
 
207
235
  ```python
@@ -225,7 +253,7 @@ trainer.train(1, train_dataset, callbacks=[MsprobeStep(debugger)])
225
253
 
226
254
  #### 7.2.2 L2 级别
227
255
 
228
- ##### 7.2.2.1 未使用 Model 高阶 API
256
+ ##### 7.2.2.1 未使用 Model 高阶 API
229
257
 
230
258
 
231
259
  ```python
@@ -248,7 +276,7 @@ for data, label in data_loader:
248
276
  ```
249
277
 
250
278
 
251
- ##### 7.2.2.2 使用 Model 高阶 API
279
+ ##### 7.2.2.2 使用 Model 高阶 API
252
280
 
253
281
 
254
282
  ```python
@@ -273,7 +301,37 @@ trainer.train(1, train_dataset)
273
301
 
274
302
  ### 8.1 静态图场景
275
303
 
276
- 训练结束后,数据将保存在 `dump_path` 指定的目录下,目录结构请参见 MindSpore 官方文档中的[数据对象目录](https://www.mindspore.cn/docs/zh-CN/r2.4.0/model_train/debug/dump.html)。
304
+ 训练结束后,数据将保存在 `dump_path` 指定的目录下。
305
+
306
+ 若jit_level=O2,且使用mindstudio-probe发布包或源码编包时添加了`--include-mod=adump`选项,目录结构示例如下:
307
+ ```
308
+ ├── dump_path
309
+ │ ├── rank_0
310
+ │ | ├── {timestamp}
311
+ │ | │ ├── step_0
312
+ | | | | ├── AssignAdd.Default_network-TrainOneStepCell_optimzer-Gsd_AssignAdd-op0.0.10.1735011096403740.input.0.ND.INT32.npy
313
+ | | | | ├── Cast.Default_network-TrainOneStepCell_network-WithLossCell__backbone-Net_Cast-op0.9.10.1735011096426349.input.0.ND.FLOAT.npy
314
+ | | | | ├── GetNext.Default_GetNext-op0.0.11.17350110964032987.output.0.ND.FLOAT.npy
315
+ | | | | ...
316
+ | | | | ├── RefDAata.accum_bias1.6.10.1735011096424907.output.0.ND.FLOAT.npy
317
+ | | | | ├── Sub.Default_network-TrainOneStepCell_network-WithLossCell__backbone-Net_Sub-op0.10.10.1735011096427368.input.0.ND.BF16
318
+ | | | | └── mapping.csv
319
+ │ | │ ├── step_1
320
+ | | | | ├── ...
321
+ | | | ├── ...
322
+ | | ├── ...
323
+ | |
324
+ │ ├── ...
325
+ | |
326
+ │ └── rank_7
327
+ │ ├── ...
328
+ ```
329
+ **说明**
330
+ 1. 若配置文件中指定落盘npy格式,但是实际数据格式不在npy支持范围内(如bf16、int4等),则该tensor会以原始码流落盘,并不会转换为npy格式。
331
+ 2. 若原始文件全名长度超过255个字符,则文件基础名会被转换为长度为32位的随机数字字符串,原始文件名与转换后文件名的对应关系会保存在同目录下的`mapping.csv`文件中。
332
+
333
+
334
+ 其他场景请参见 MindSpore 官方文档中的[数据对象目录](https://www.mindspore.cn/docs/zh-CN/r2.4.0/model_train/debug/dump.html)。
277
335
 
278
336
  ### 8.2 动态图场景
279
337
 
@@ -286,15 +344,18 @@ dump 结果目录结构示例如下:
286
344
  │ | │ ├── dump_tensor_data
287
345
  | | | | ├── MintFunctional.relu.0.backward.input.0.npy
288
346
  | | | | ├── Mint.abs.0.forward.input.0.npy
289
- | | | | ├── Functional.split.0.forward.input.0.npy
347
+ | | | | ├── 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
348
  | | | | ├── Tensor.__add__.0.forward.output.0.npy
291
349
  | | | | ...
292
350
  | | | | ├── Jit.AlexNet.0.forward.input.0.npy
293
351
  | | | | ├── 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内容为空
352
+ | | | | ├── Cell.conv1.Conv2D.forward.0.parameters.weight.npy # 模块参数数据:命名格式为{Cell}.{cell_name}.{class_name}.forward.{调用次数}.parameters.{parameter_name}。
353
+ | | | | ├── Cell.conv1.Conv2D.parameters_grad.weight.npy # 模块参数梯度数据:命名格式为{Cell}.{cell_name}.{class_name}.parameters_grad.{parameter_name}。因为同一模块的参数使用同一梯度进行更新,所以参数梯度文件名不包含调用次数。
354
+ | | | | └── 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个元素。
355
+ | | | | # 当dump时传入的model参数为List[mindspore.nn.Cell]或Tuple[mindspore.nn.Cell]时,模块级数据的命名中包含该模块在列表中的索引index,命名格式为{Cell}.{index}.*,*表示以上三种模块级数据的命名格式,例如:Cell.0.relu.ReLU.forward.0.input.0.npy。
356
+ │ | | ├── dump.json
357
+ │ | | ├── stack.json
358
+ │ | | └── construct.json
298
359
  │ | ├── rank1
299
360
  | | | ├── dump_tensor_data
300
361
  | | | | └── ...
@@ -311,9 +372,9 @@ dump 结果目录结构示例如下:
311
372
 
312
373
  * `rank`:设备 ID,每张卡的数据保存在对应的 `rank{ID}` 目录下。非分布式场景下没有 rank ID,目录名称为 rank。
313
374
  * `dump_tensor_data`:保存采集到的张量数据。
314
- * `dump.json`:记录模块或 API 的统计信息。
315
- * `stack.json`:API调用栈信息。
316
- * `construct.json`:分层分级结构信息。
375
+ * `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)。
376
+ * `stack.json`:API/Cell的调用栈信息。
377
+ * `construct.json`:分层分级结构,level为L1时,construct.json内容为空。
317
378
 
318
379
  dump 过程中,npy 文件在对应API或者模块被执行后就会落盘,而 json 文件则需要在正常执行 PrecisionDebugger.stop() 后才会写入完整数据,因此,程序异常终止时,被执行API对应的 npy 文件已被保存,但 json 文件中的数据可能丢失。
319
380
 
@@ -332,6 +393,7 @@ npy文件名的前缀含义如下:
332
393
  | Primitive | mindspore.ops.Primitive API数据 |
333
394
  | Mint | mindspore.mint API数据 |
334
395
  | MintFunctional | mindspore.mint.nn.functional API数据 |
396
+ | Distributed | mindspore.communication.comm_func API数据 |
335
397
  | Jit | 被"jit"装饰的模块或函数数据 |
336
398
  | Cell | mindspore.nn.Cell 类(模块)数据 |
337
399
 
@@ -349,4 +411,3 @@ ops:
349
411
  - adaptive_avg_pool2d
350
412
  - adaptive_avg_pool3d
351
413
  ```
352
-