mindstudio-probe 1.2.2__py3-none-any.whl → 8.1.0__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 (261) hide show
  1. {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/METADATA +4 -3
  2. {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/RECORD +243 -191
  3. msprobe/README.md +57 -21
  4. msprobe/core/__init__.py +17 -0
  5. msprobe/core/common/const.py +224 -82
  6. msprobe/core/common/decorator.py +50 -0
  7. msprobe/core/common/exceptions.py +5 -3
  8. msprobe/core/common/file_utils.py +274 -40
  9. msprobe/core/common/framework_adapter.py +169 -0
  10. msprobe/core/common/global_lock.py +86 -0
  11. msprobe/core/common/runtime.py +25 -0
  12. msprobe/core/common/utils.py +148 -72
  13. msprobe/core/common_config.py +7 -0
  14. msprobe/core/compare/acc_compare.py +640 -462
  15. msprobe/core/compare/check.py +36 -107
  16. msprobe/core/compare/compare_cli.py +4 -0
  17. msprobe/core/compare/config.py +72 -0
  18. msprobe/core/compare/highlight.py +217 -215
  19. msprobe/core/compare/layer_mapping/layer_mapping.py +4 -1
  20. msprobe/core/compare/merge_result/merge_result.py +12 -6
  21. msprobe/core/compare/multiprocessing_compute.py +227 -107
  22. msprobe/core/compare/npy_compare.py +32 -16
  23. msprobe/core/compare/utils.py +218 -244
  24. msprobe/{mindspore/runtime.py → core/config_check/__init__.py} +2 -4
  25. msprobe/{pytorch/dump/kernel_dump/kernel_config.py → core/config_check/checkers/__init__.py} +8 -16
  26. msprobe/core/config_check/checkers/base_checker.py +60 -0
  27. msprobe/core/config_check/checkers/dataset_checker.py +138 -0
  28. msprobe/core/config_check/checkers/env_args_checker.py +96 -0
  29. msprobe/core/config_check/checkers/hyperparameter_checker.py +170 -0
  30. msprobe/core/config_check/checkers/pip_checker.py +90 -0
  31. msprobe/core/config_check/checkers/random_checker.py +367 -0
  32. msprobe/core/config_check/checkers/weights_checker.py +147 -0
  33. msprobe/core/config_check/ckpt_compare/ckpt_comparator.py +74 -0
  34. msprobe/core/config_check/ckpt_compare/megatron_loader.py +302 -0
  35. msprobe/core/config_check/ckpt_compare/metrics.py +83 -0
  36. msprobe/core/config_check/ckpt_compare/name_mapping.yaml +12 -0
  37. msprobe/core/config_check/config_check_cli.py +51 -0
  38. msprobe/core/config_check/config_checker.py +100 -0
  39. msprobe/{pytorch/parse.py → core/config_check/resource/dependency.yaml} +7 -4
  40. msprobe/core/config_check/resource/env.yaml +57 -0
  41. msprobe/core/config_check/resource/hyperparameter.yaml +21 -0
  42. msprobe/core/config_check/utils/hyperparameter_parser.py +115 -0
  43. msprobe/core/config_check/utils/utils.py +107 -0
  44. msprobe/core/data_dump/api_registry.py +239 -0
  45. msprobe/core/data_dump/data_collector.py +36 -9
  46. msprobe/core/data_dump/data_processor/base.py +74 -53
  47. msprobe/core/data_dump/data_processor/mindspore_processor.py +119 -78
  48. msprobe/core/data_dump/data_processor/pytorch_processor.py +134 -96
  49. msprobe/core/data_dump/json_writer.py +146 -57
  50. msprobe/core/debugger/precision_debugger.py +143 -0
  51. msprobe/core/grad_probe/constant.py +2 -1
  52. msprobe/core/grad_probe/grad_compare.py +2 -2
  53. msprobe/core/grad_probe/utils.py +1 -1
  54. msprobe/core/hook_manager.py +242 -0
  55. msprobe/core/monitor/anomaly_processor.py +384 -0
  56. msprobe/core/overflow_check/abnormal_scene.py +2 -0
  57. msprobe/core/service.py +356 -0
  58. msprobe/core/single_save/__init__.py +0 -0
  59. msprobe/core/single_save/single_comparator.py +243 -0
  60. msprobe/core/single_save/single_saver.py +157 -0
  61. msprobe/docs/01.installation.md +6 -5
  62. msprobe/docs/02.config_introduction.md +89 -30
  63. msprobe/docs/03.config_examples.md +1 -0
  64. msprobe/docs/04.kernel_dump_PyTorch.md +1 -1
  65. msprobe/docs/05.data_dump_PyTorch.md +184 -50
  66. msprobe/docs/06.data_dump_MindSpore.md +193 -28
  67. msprobe/docs/07.accuracy_checker_PyTorch.md +13 -3
  68. msprobe/docs/08.accuracy_checker_online_PyTorch.md +72 -10
  69. msprobe/docs/09.accuracy_checker_MindSpore.md +19 -7
  70. msprobe/docs/10.accuracy_compare_PyTorch.md +266 -102
  71. msprobe/docs/11.accuracy_compare_MindSpore.md +117 -43
  72. msprobe/docs/12.overflow_check_PyTorch.md +5 -3
  73. msprobe/docs/13.overflow_check_MindSpore.md +6 -4
  74. msprobe/docs/14.data_parse_PyTorch.md +4 -10
  75. msprobe/docs/17.grad_probe.md +2 -1
  76. msprobe/docs/18.online_dispatch.md +3 -3
  77. msprobe/docs/19.monitor.md +211 -103
  78. msprobe/docs/21.visualization_PyTorch.md +100 -28
  79. msprobe/docs/22.visualization_MindSpore.md +103 -31
  80. msprobe/docs/23.generate_operator_PyTorch.md +9 -9
  81. msprobe/docs/25.tool_function_introduction.md +23 -22
  82. msprobe/docs/26.data_dump_PyTorch_baseline.md +14 -3
  83. msprobe/docs/27.dump_json_instruction.md +278 -8
  84. msprobe/docs/28.debugger_save_instruction.md +111 -20
  85. msprobe/docs/28.kernel_dump_MindSpore.md +1 -1
  86. msprobe/docs/29.data_dump_MSAdapter.md +229 -0
  87. msprobe/docs/30.overflow_check_MSAdapter.md +31 -0
  88. msprobe/docs/31.config_check.md +95 -0
  89. msprobe/docs/32.ckpt_compare.md +69 -0
  90. msprobe/docs/33.generate_operator_MindSpore.md +190 -0
  91. msprobe/docs/34.RL_collect.md +92 -0
  92. msprobe/docs/35.nan_analyze.md +72 -0
  93. msprobe/docs/FAQ.md +3 -11
  94. msprobe/docs/data_dump_MindSpore/data_dump_MindSpore_baseline.md +12 -1
  95. msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md +3 -1
  96. msprobe/docs/img/compare_result.png +0 -0
  97. msprobe/docs/img/merge_result.png +0 -0
  98. msprobe/docs/img/save_compare_result_sample.png +0 -0
  99. msprobe/docs/img/visualization/proxy.png +0 -0
  100. msprobe/docs/img/visualization/vis_browser_1.png +0 -0
  101. msprobe/docs/img/visualization/vis_match_info.png +0 -0
  102. msprobe/docs/img/visualization/vis_precision_info.png +0 -0
  103. msprobe/docs/img/visualization/vis_search_info.png +0 -0
  104. msprobe/docs/img/visualization/vis_show_info.png +0 -0
  105. msprobe/docs/img/visualization/vis_showcase.png +0 -0
  106. msprobe/docs/img/visualization/vis_unmatch_info.png +0 -0
  107. msprobe/mindspore/__init__.py +3 -3
  108. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +151 -55
  109. msprobe/mindspore/api_accuracy_checker/api_runner.py +25 -11
  110. msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +2 -1
  111. msprobe/mindspore/api_accuracy_checker/bench_functions/flash_attention_score.py +580 -0
  112. msprobe/mindspore/api_accuracy_checker/bench_functions/fusion_operator.py +41 -0
  113. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +4 -0
  114. msprobe/mindspore/api_accuracy_checker/data_manager.py +4 -3
  115. msprobe/mindspore/api_accuracy_checker/generate_op_script/config_op.json +9 -0
  116. msprobe/mindspore/api_accuracy_checker/generate_op_script/op_generator.py +451 -0
  117. msprobe/mindspore/api_accuracy_checker/generate_op_script/operator_replication.template +2081 -0
  118. msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +11 -1
  119. msprobe/mindspore/api_accuracy_checker/torch_mindtorch_importer.py +2 -1
  120. msprobe/mindspore/cell_processor.py +204 -33
  121. msprobe/mindspore/code_mapping/graph_parser.py +4 -21
  122. msprobe/mindspore/common/const.py +73 -2
  123. msprobe/mindspore/common/utils.py +157 -29
  124. msprobe/mindspore/compare/common_dir_compare.py +382 -0
  125. msprobe/mindspore/compare/distributed_compare.py +2 -26
  126. msprobe/mindspore/compare/ms_compare.py +18 -398
  127. msprobe/mindspore/compare/ms_graph_compare.py +20 -10
  128. msprobe/mindspore/compare/utils.py +37 -0
  129. msprobe/mindspore/debugger/debugger_config.py +59 -7
  130. msprobe/mindspore/debugger/precision_debugger.py +83 -90
  131. msprobe/mindspore/dump/cell_dump_process.py +902 -0
  132. msprobe/mindspore/dump/cell_dump_with_insert_gradient.py +889 -0
  133. msprobe/mindspore/dump/dump_tool_factory.py +18 -8
  134. msprobe/mindspore/dump/graph_mode_cell_dump.py +139 -0
  135. msprobe/mindspore/dump/graph_tensor_dump.py +123 -0
  136. msprobe/mindspore/dump/hook_cell/api_register.py +176 -0
  137. msprobe/mindspore/dump/hook_cell/hook_cell.py +22 -12
  138. msprobe/mindspore/dump/hook_cell/ms_hook_manager.py +88 -0
  139. msprobe/mindspore/dump/hook_cell/primitive_hooks.py +8 -2
  140. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +42 -26
  141. msprobe/mindspore/dump/jit_dump.py +35 -27
  142. msprobe/mindspore/dump/kernel_kbyk_dump.py +6 -3
  143. msprobe/mindspore/dym_loader/hook_dynamic_loader.cpp +110 -0
  144. msprobe/mindspore/dym_loader/hook_dynamic_loader.h +15 -16
  145. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +22 -12
  146. msprobe/mindspore/free_benchmark/common/utils.py +1 -1
  147. msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +4 -2
  148. msprobe/mindspore/free_benchmark/self_check_tool_factory.py +6 -3
  149. msprobe/mindspore/grad_probe/global_context.py +9 -2
  150. msprobe/mindspore/grad_probe/grad_analyzer.py +2 -1
  151. msprobe/mindspore/grad_probe/grad_stat_csv.py +3 -2
  152. msprobe/mindspore/grad_probe/hook.py +2 -4
  153. msprobe/mindspore/mindspore_service.py +111 -0
  154. msprobe/mindspore/monitor/common_func.py +52 -0
  155. msprobe/mindspore/monitor/data_writers.py +237 -0
  156. msprobe/mindspore/monitor/distributed/wrap_distributed.py +1 -1
  157. msprobe/mindspore/monitor/features.py +13 -1
  158. msprobe/mindspore/monitor/module_hook.py +568 -444
  159. msprobe/mindspore/monitor/optimizer_collect.py +331 -0
  160. msprobe/mindspore/monitor/utils.py +71 -9
  161. msprobe/mindspore/ms_config.py +16 -15
  162. msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +5 -3
  163. msprobe/mindspore/task_handler_factory.py +5 -2
  164. msprobe/msprobe.py +19 -0
  165. msprobe/nan_analyze/__init__.py +14 -0
  166. msprobe/nan_analyze/analyzer.py +255 -0
  167. msprobe/nan_analyze/graph.py +189 -0
  168. msprobe/nan_analyze/utils.py +211 -0
  169. msprobe/pytorch/api_accuracy_checker/common/config.py +2 -2
  170. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +3 -6
  171. msprobe/pytorch/api_accuracy_checker/compare/compare.py +36 -34
  172. msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +15 -13
  173. msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +206 -4
  174. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +9 -9
  175. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +6 -5
  176. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +31 -9
  177. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +28 -20
  178. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +3 -1
  179. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +29 -13
  180. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +12 -2
  181. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +45 -31
  182. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +154 -0
  183. msprobe/pytorch/attl_manager.py +65 -0
  184. msprobe/pytorch/bench_functions/moe_gating_top_k_softmax.py +6 -0
  185. msprobe/pytorch/bench_functions/npu_fusion_attention.py +27 -0
  186. msprobe/pytorch/common/utils.py +53 -19
  187. msprobe/pytorch/compare/distributed_compare.py +4 -36
  188. msprobe/pytorch/compare/pt_compare.py +13 -84
  189. msprobe/pytorch/compare/utils.py +47 -0
  190. msprobe/pytorch/debugger/debugger_config.py +34 -17
  191. msprobe/pytorch/debugger/precision_debugger.py +50 -96
  192. msprobe/pytorch/dump/module_dump/hook_wrapper.py +93 -0
  193. msprobe/pytorch/dump/module_dump/module_dump.py +15 -61
  194. msprobe/pytorch/dump/module_dump/module_processer.py +150 -114
  195. msprobe/pytorch/free_benchmark/common/utils.py +1 -1
  196. msprobe/pytorch/free_benchmark/compare/single_benchmark.py +1 -1
  197. msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +3 -3
  198. msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +3 -3
  199. msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +1 -1
  200. msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +1 -1
  201. msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +1 -1
  202. msprobe/pytorch/function_factory.py +1 -1
  203. msprobe/pytorch/grad_probe/grad_monitor.py +2 -2
  204. msprobe/pytorch/grad_probe/grad_stat_csv.py +3 -2
  205. msprobe/pytorch/hook_module/api_register.py +155 -0
  206. msprobe/pytorch/hook_module/hook_module.py +18 -22
  207. msprobe/pytorch/hook_module/jit_script_wrapper.py +33 -0
  208. msprobe/pytorch/hook_module/pt_hook_manager.py +68 -0
  209. msprobe/pytorch/hook_module/register_optimizer_hook.py +2 -1
  210. msprobe/pytorch/hook_module/support_wrap_ops.yaml +193 -75
  211. msprobe/pytorch/hook_module/utils.py +28 -2
  212. msprobe/pytorch/monitor/csv2tb.py +14 -4
  213. msprobe/pytorch/monitor/data_writers.py +259 -0
  214. msprobe/pytorch/monitor/distributed/wrap_distributed.py +8 -2
  215. msprobe/pytorch/monitor/module_hook.py +336 -241
  216. msprobe/pytorch/monitor/module_metric.py +17 -0
  217. msprobe/pytorch/monitor/optimizer_collect.py +244 -224
  218. msprobe/pytorch/monitor/utils.py +84 -4
  219. msprobe/pytorch/online_dispatch/compare.py +0 -2
  220. msprobe/pytorch/online_dispatch/dispatch.py +13 -2
  221. msprobe/pytorch/online_dispatch/dump_compare.py +8 -2
  222. msprobe/pytorch/online_dispatch/utils.py +3 -0
  223. msprobe/pytorch/parse_tool/lib/interactive_cli.py +1 -6
  224. msprobe/pytorch/parse_tool/lib/utils.py +5 -4
  225. msprobe/pytorch/pt_config.py +16 -11
  226. msprobe/pytorch/pytorch_service.py +70 -0
  227. msprobe/visualization/builder/graph_builder.py +69 -10
  228. msprobe/visualization/builder/msprobe_adapter.py +24 -12
  229. msprobe/visualization/compare/graph_comparator.py +63 -51
  230. msprobe/visualization/compare/mode_adapter.py +22 -20
  231. msprobe/visualization/graph/base_node.py +11 -4
  232. msprobe/visualization/graph/distributed_analyzer.py +1 -10
  233. msprobe/visualization/graph/graph.py +2 -13
  234. msprobe/visualization/graph/node_op.py +1 -2
  235. msprobe/visualization/graph_service.py +251 -104
  236. msprobe/visualization/utils.py +26 -44
  237. msprobe/mindspore/dump/hook_cell/api_registry.py +0 -207
  238. msprobe/mindspore/dump/hook_cell/wrap_api.py +0 -212
  239. msprobe/mindspore/dym_loader/hook_dynamic_loader.cc +0 -140
  240. msprobe/mindspore/monitor/anomaly_detect.py +0 -404
  241. msprobe/mindspore/monitor/module_spec_verifier.py +0 -94
  242. msprobe/mindspore/service.py +0 -543
  243. msprobe/pytorch/hook_module/api_registry.py +0 -166
  244. msprobe/pytorch/hook_module/wrap_distributed.py +0 -79
  245. msprobe/pytorch/hook_module/wrap_functional.py +0 -66
  246. msprobe/pytorch/hook_module/wrap_npu_custom.py +0 -85
  247. msprobe/pytorch/hook_module/wrap_tensor.py +0 -69
  248. msprobe/pytorch/hook_module/wrap_torch.py +0 -84
  249. msprobe/pytorch/hook_module/wrap_vf.py +0 -60
  250. msprobe/pytorch/monitor/anomaly_analyse.py +0 -201
  251. msprobe/pytorch/monitor/anomaly_detect.py +0 -410
  252. msprobe/pytorch/monitor/module_spec_verifier.py +0 -95
  253. msprobe/pytorch/monitor/unittest/test_monitor.py +0 -160
  254. msprobe/pytorch/service.py +0 -470
  255. {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/LICENSE +0 -0
  256. {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/WHEEL +0 -0
  257. {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/entry_points.txt +0 -0
  258. {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/top_level.txt +0 -0
  259. /msprobe/{mindspore → core}/compare/ms_to_pt_api.yaml +0 -0
  260. /msprobe/{mindspore/dump → core}/kernel_dump/kernel_config.py +0 -0
  261. /msprobe/{pytorch/monitor/unittest → core/monitor}/__init__.py +0 -0
@@ -26,18 +26,20 @@
26
26
 
27
27
  msprobe 工具通过在训练脚本中添加 `PrecisionDebugger` 接口并启动训练的方式,采集模型在运行过程中的精度数据。该工具支持对MindSpore的静态图和动态图场景进行不同Level等级的精度数据采集。
28
28
 
29
- dump "tensor"模式采集数据量大小,可以参考[数据量基线](data_dump_MindSpore/data_dump_MindSpore_baseline.md)。
29
+ dump "statistics"模式的性能膨胀大小"与"tensor"模式采集的数据量大小,可以参考[dump基线](data_dump_MindSpore/data_dump_MindSpore_baseline.md)。
30
30
 
31
31
  ## 5. 场景介绍
32
32
 
33
33
  ### 5.1 静态图场景
34
- 在静态图场景下,msprobe 仅支持 **L2 Level** 的数据采集。
34
+ 在静态图场景下,msprobe 支持 **L0 Level** 和 **L2 Level** 的数据采集。且当 MindSpore 版本高于 2.5.0 时,若需采集 **L2 Level** 数据,必须使用编包时添加了`--include-mod=adump`选项的 mindstudio-probe whl 包进行 msprobe 工具安装。
35
+ - **L0 Level(Cell 级)** :采集 `Cell` 对象的数据,适用于需要分析特定网络模块的情况。仅支持 2.7.0 及以上版本的 MindSpore 框架。
36
+
35
37
  - **L2 Level(Kernel 级)** :采集底层算子的输入输出数据,适用于深入分析算子级别的精度问题。
36
38
 
37
39
  采集方式请参见[示例代码 > 静态图场景](#71-静态图场景)。详细介绍请参见[《config.json 配置文件介绍》](./02.config_introduction.md#11-通用配置)中的“level 参数”和[《config.json 配置示例》](./03.config_examples.md#2-mindspore-静态图场景) 中的“MindSpore 静态图场景”。
38
40
 
39
41
  ### 5.2 动态图场景
40
- 在动态图场景下,msprobe 支持 **L0** 、**L1** 、**mix** 、**L2 Level**、 **debug** 的数据采集,具体分为以下几种情况:
42
+ 在动态图场景下,msprobe 支持 **L0** 、**L1** 、**mix** 、**L2**、 **debug** 的数据采集,具体分为以下几种情况:
41
43
  - **使用高阶 API(如 `Model 高阶API`)** :
42
44
  - 需要使用 `MsprobeStep` 回调类来控制数据采集的启停,适用于 **L0** 、**L1** 、**mix** 、**L2** 数据采集。
43
45
 
@@ -46,7 +48,7 @@ dump 的"tensor"模式采集数据量大小,可以参考[数据量基线](data
46
48
 
47
49
  采集方式请参见[示例代码 > 动态图场景](#72-动态图场景)。
48
50
 
49
- > **注意** :动态图模式下,使用 `PSJit` 或 `PIJit` 装饰的部分实际以静态图模式执行,此时的 **Kernel 级(L2 Level)** 数据采集方式与静态图场景相同。
51
+ > **注意** :动态图模式下,使用 `mindspore.jit` 装饰的部分实际以静态图模式执行,此时的 **Kernel 级(L2 Level)** 数据采集方式与静态图场景相同。
50
52
  - **L0 Level(Cell 级)** :采集 `Cell` 对象的数据,适用于需要分析特定网络模块的情况。
51
53
 
52
54
  - **L1 Level(API 级)** :采集 MindSpore API 的输入输出数据,适用于定位 API 层面的精度问题。
@@ -56,7 +58,7 @@ dump 的"tensor"模式采集数据量大小,可以参考[数据量基线](data
56
58
  - **debug level (单点保存)**:单点保存网络中变量的正反向数据,适用于用户熟悉网络结构的场景。
57
59
 
58
60
 
59
- 详细介绍请参见[《config.json 配置文件介绍》](./02.config_introduction.md#11-通用配置)中的“level 参数”和[《config.json 配置示例》](./03.config_examples.md#3-mindspore-动态图场景) 中的“MindSpore 动态图场景”。
61
+ 详细介绍请参见[《config.json 配置文件介绍》](./02.config_introduction.md#11-通用配置)中的“level 参数”。
60
62
 
61
63
 
62
64
  ## 6 接口介绍
@@ -85,12 +87,15 @@ PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None, step=
85
87
  **原型**:
86
88
 
87
89
  ```Python
88
- start(model=None)
90
+ start(model=None, token_range=None)
89
91
  ```
90
92
 
91
93
  **参数说明**:
92
94
 
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 数据。
95
+ 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 数据。token_range不为None时,必须传入model参数。
96
+ <br>对于复杂模型,如果仅需要监控一部分(如model.A,model.A extends mindspore.nn.Cell),传入需要监控的部分(如model.A)即可。
97
+ 注意:传入的当前层不会被dump,工具只会dump传入层的子层级。如传入了model.A,A本身不会被dump,而是会dump A.x, A.x.xx等。
98
+ 2. token_range:指定推理模型采集时的token循环始末范围,支持传入[int, int]类型,代表[start, end],范围包含边界,默认未配置。
94
99
 
95
100
  #### 6.1.2 stop
96
101
 
@@ -110,7 +115,7 @@ stop()
110
115
 
111
116
  **功能说明**:结束一个 step 的数据采集,完成所有数据落盘并更新 dump 参数。在一个 step 结束的位置添加,且必须在 **stop** 函数之后的位置调用。
112
117
  该函数需要配合 **start** 和 **stop** 函数使用,尽量添加在反向计算代码之后,否则可能会导致反向数据丢失。
113
- **仅未使用 Model 高阶 API 的动态图场景支持。**
118
+ **仅未使用 Model 高阶 API 的动态图和静态图场景支持。**
114
119
 
115
120
  **原型**:
116
121
 
@@ -144,15 +149,66 @@ save(variable, name, save_backward=True)
144
149
  **参数说明**:
145
150
  | 参数名称 | 参数含义 | 支持数据类型 | 是否必选|
146
151
  | ---------- | ------------------| ------------------- | ------------------- |
147
- | variable | 需要保存的变量 |dict, list, torch.tensor, int, float, str | 是 |
152
+ | variable | 需要保存的变量 |dict, list, tuple, torch.tensor, int, float, str | 是 |
148
153
  | name | 指定的名称 | str | 是 |
149
154
  | save_backward | 是否保存反向数据 | boolean | 否 |
150
155
 
151
156
 
157
+ #### 6.1.6 set_init_step
158
+
159
+ **功能说明**:设置起始step数,step数默认从0开始计数,使用该接口后step从指定值开始计数。该函数需要写在训练迭代的循环开始前,不能写在循环内。
160
+
161
+ **原型**:
162
+
163
+ ```Python
164
+ set_init_step(step)
165
+ ```
166
+
167
+ **参数说明**:
168
+
169
+ 1.step: 指定的起始step数。
170
+
171
+
172
+ #### 6.1.7 register_custom_api
173
+
174
+ **功能说明**:注册用户自定义的api到工具,用于 L1 dump 。
175
+
176
+ **原型**:
177
+
178
+ ```Python
179
+ debugger.register_custom_api(module, api_name, api_prefix)
180
+ ```
181
+ **参数说明**:
182
+
183
+ 以 torch.matmul api 为例
184
+
185
+ 1.module: api 所属的包,即传入 torch。
186
+
187
+ 2.api_name: api 名,string类型,即传入 "matmul"。
188
+
189
+ 3.api_prefix: [dump.json](./27.dump_json_instruction.md) 中 api 名的前缀,可选,默认为包名的字符串格式, 即 "torch"。
190
+
191
+ #### 6.1.8 restore_custom_api
152
192
 
153
- ### 6.2 msprobe.mindspore.common.utils.MsprobeStep
193
+ **功能说明**:恢复用户原有的自定义的api,取消 dump
154
194
 
155
- **功能说明**:MindSpore Callback类,自动在每个step开始时调用start()接口,在每个step结束时调用stop()、step()接口。实现使用 Model 高阶 API 的动态图场景下 L0、L1、mix 级别的精度数据采集控制,控制粒度为单个 **Step** ,而 PrecisionDebugger.start, PrecisionDebugger.stop 接口的控制粒度任意训练代码段。
195
+ **原型**:
196
+
197
+ ```Python
198
+ debugger.restore_custom_api(module, api_name)
199
+ ```
200
+ **参数说明**:
201
+
202
+ 以 torch.matmul api 为例
203
+
204
+ 1.module: api 所属的包,即传入 torch。
205
+
206
+ 2.api_name: api 名,string类型,即传入 "matmul"。
207
+
208
+
209
+ ### 6.2 msprobe.mindspore.MsprobeStep
210
+
211
+ **功能说明**:MindSpore Callback类,自动在每个step开始时调用start()接口,在每个step结束时调用stop()、step()接口。实现使用 Model 高阶 API 的动态图场景下 L0、L1、mix 级别,和静态图场景下 L0级别的精度数据采集控制,控制粒度为单个 **Step** ,而 PrecisionDebugger.start, PrecisionDebugger.stop 接口的控制粒度为任意训练代码段。
156
212
 
157
213
  **原型**:
158
214
 
@@ -164,7 +220,17 @@ MsprobeStep(debugger)
164
220
 
165
221
  1. debugger:PrecisionDebugger对象。
166
222
 
167
- ### 6.3 msprobe.mindspore.seed_all
223
+ ### 6.3 msprobe.mindspore.MsprobeInitStep
224
+
225
+ **功能说明**:MindSpore Callback 类,自动获取并设置初始 step 值。仅适用于静态图 O0/O1 模式的断点续训场景。
226
+
227
+ **原型**:
228
+
229
+ ```Python
230
+ MsprobeInitStep()
231
+ ```
232
+
233
+ ### 6.4 msprobe.mindspore.seed_all
168
234
 
169
235
  **功能说明**:用于固定网络中的随机性和开启确定性计算。
170
236
 
@@ -181,12 +247,59 @@ seed_all(seed=1234, mode=False, rm_dropout=True)
181
247
 
182
248
  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实例前调用才能生效。
183
249
 
250
+ ## 7. 示例代码
251
+
252
+ ### 7.1 静态图场景
184
253
 
254
+ #### 7.1.1 L0 级别
185
255
 
256
+ **说明**: 静态图 L0 级别的Dump功能是基于mindspore.ops.TensorDump算子实现。在Ascend平台上的Graph模式下,可以通过设置环境变量 [MS_DUMP_SLICE_SIZE 和 MS_DUMP_WAIT_TIME](https://www.mindspore.cn/docs/zh-CN/r2.5.0/api_python/env_var_list.html) 解决在输出大Tesnor或输出Tensor比较密集场景下算子执行失败的问题。
186
257
 
187
- ## 7. 示例代码
258
+ ##### 7.1.1.1 未使用 Model 高阶 API
188
259
 
189
- ### 7.1 静态图场景
260
+
261
+ ```python
262
+ import mindspore as ms
263
+ ms.set_context(mode=ms.GRAPH_MODE, device_target="Ascend")
264
+
265
+ from msprobe.mindspore import PrecisionDebugger
266
+ debugger = PrecisionDebugger(config_path="./config.json")
267
+
268
+ # 模型、损失函数的定义以及初始化等操作
269
+ # ...
270
+ model = Network()
271
+ # 数据集迭代的地方往往是模型开始训练的地方
272
+ for data, label in data_loader:
273
+ debugger.start(model) # 进行 L0 级别下Cell 对象的数据采集时调用
274
+ # 如下是模型每个 step 执行的逻辑
275
+ grad_net = ms.grad(model)(data)
276
+ # ...
277
+ debugger.step() # 更新迭代数
278
+ ```
279
+
280
+ ##### 7.1.1.2 使用 Model 高阶 API
281
+
282
+
283
+ ```python
284
+ import mindspore as ms
285
+ from mindspore.train import Model
286
+ ms.set_context(mode=ms.GRAPH_MODE, device_target="Ascend")
287
+
288
+ from msprobe.mindspore import PrecisionDebugger
289
+ from msprobe.mindspore.common.utils import MsprobeStep
290
+ debugger = PrecisionDebugger(config_path="./config.json")
291
+
292
+ # 模型、损失函数的定义以及初始化等操作
293
+ # ...
294
+
295
+ model = Network()
296
+ # 进行 L0 级别下 Cell 对象的数据采集时调用
297
+ debugger.start(model)
298
+ trainer = Model(model, loss_fn=loss_fn, optimizer=optimizer, metrics={'accuracy'})
299
+ trainer.train(1, train_dataset, callbacks=[MsprobeStep(debugger)])
300
+ ```
301
+
302
+ #### 7.1.2 L2 级别
190
303
 
191
304
  ```python
192
305
  import mindspore as ms
@@ -198,7 +311,8 @@ debugger.start()
198
311
  # 请勿将以上初始化流程置于模型实例化或 mindspore.communication.init 调用后
199
312
  # 模型定义和训练代码
200
313
  # ...
201
-
314
+ debugger.stop()
315
+ debugger.step()
202
316
  ```
203
317
 
204
318
  ### 7.2 动态图场景
@@ -297,15 +411,43 @@ trainer = Model(model, loss_fn=loss_fn, optimizer=optimizer, metrics={'accuracy'
297
411
  trainer.train(1, train_dataset)
298
412
  ```
299
413
 
414
+
415
+ #### 7.2.3 推理模型采集指定token_range
416
+ 需要配合mindtorch套件改造原推理代码,套件包装后使用方式与torch一致,唯一区别为import的是msprobe.mindspore下的PrecisionDebugger。
417
+
418
+ ```Python
419
+ from vllm import LLM, SamplingParams
420
+ from msprobe.mindspore import PrecisionDebugger, seed_all
421
+ # 在模型训练开始前固定随机性
422
+ seed_all()
423
+ # 请勿将PrecisionDebugger的初始化流程插入到循环代码中
424
+ debugger = PrecisionDebugger(config_path="./config.json", dump_path="./dump_path")
425
+ # 模型定义及初始化等操作
426
+ prompts = ["Hello, my name is"]
427
+ sampling_params = SamplingParams(temprature=0.8, top_p=0.95)
428
+ llm = LLM(model='...')
429
+ model = llm.llm_engine.model_executor.driver_worker.worker.model_runner.get_model()
430
+ # 开启数据dump, 指定采集推理模型逐字符循环推理中的第1~3次
431
+ debugger.start(model=model, token_range=[1,3])
432
+ # 推理模型生成的逻辑
433
+ output = llm.generate(prompts, sampling_params=sampling_params)
434
+ # 关闭数据dump并落盘
435
+ debugger.stop()
436
+ debugger.step()
437
+ ```
438
+
300
439
  ## 8. dump 结果文件介绍
301
440
 
302
441
  ### 8.1 静态图场景
303
442
 
304
- 训练结束后,数据将保存在 `dump_path` 指定的目录下。
443
+ 训练结束后,数据将保存在 `dump_path` 指定的目录下。<br/>
444
+ L0 级别 dump 的目录结构与动态图场景下目录结构一致。<br/>
445
+ L2 级别 dump 的目录结构如下所示:
305
446
 
306
- 若jit_level=O2,且使用mindstudio-probe发布包或源码编包时添加了`--include-mod=adump`选项,目录结构示例如下:
447
+ 若jit_level=O2,MindSpore 版本不低于 2.5.0,且使用mindstudio-probe发布包或源码编包时添加了`--include-mod=adump`选项,目录结构示例如下:
307
448
  ```
308
449
  ├── dump_path
450
+ │ ├── acl_dump_{device_id}.json
309
451
  │ ├── rank_0
310
452
  │ | ├── {timestamp}
311
453
  │ | │ ├── step_0
@@ -329,10 +471,9 @@ trainer.train(1, train_dataset)
329
471
  **说明**
330
472
  1. 若配置文件中指定落盘npy格式,但是实际数据格式不在npy支持范围内(如bf16、int4等),则该tensor会以原始码流落盘,并不会转换为npy格式。
331
473
  2. 若原始文件全名长度超过255个字符,则文件基础名会被转换为长度为32位的随机数字字符串,原始文件名与转换后文件名的对应关系会保存在同目录下的`mapping.csv`文件中。
474
+ 3. acl_dump_{device_id}.json 为在 Dump 接口调用过程中生成的中间文件,一般情况下无需关注。
332
475
 
333
-
334
- 其他场景请参见 MindSpore 官方文档中的[数据对象目录](https://www.mindspore.cn/docs/zh-CN/r2.4.0/model_train/debug/dump.html)。
335
-
476
+ 其他场景下,除 kernel_kbyk_dump.json(jit_level=O0/O1)、kernel_graph_dump.json(jit_level=O2)等无需关注的中间文件外的其他 dump 结果文件请参见 MindSpore 官方文档中的[ Ascend 下 O0/O1 模式 Dump 数据对象目录和数据文件介绍](https://www.mindspore.cn/docs/zh-CN/r2.5.0/model_train/debug/dump.html#%E6%95%B0%E6%8D%AE%E5%AF%B9%E8%B1%A1%E7%9B%AE%E5%BD%95%E5%92%8C%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D)与[ Ascend 下 O2 模式 Dump 数据对象目录和数据文件介绍](https://www.mindspore.cn/docs/zh-CN/r2.5.0/model_train/debug/dump.html#%E6%95%B0%E6%8D%AE%E5%AF%B9%E8%B1%A1%E7%9B%AE%E5%BD%95%E5%92%8C%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D-1)。
336
477
  ### 8.2 动态图场景
337
478
 
338
479
  dump 结果目录结构示例如下:
@@ -348,9 +489,9 @@ dump 结果目录结构示例如下:
348
489
  | | | | ├── Tensor.__add__.0.forward.output.0.npy
349
490
  | | | | ...
350
491
  | | | | ├── Jit.AlexNet.0.forward.input.0.npy
351
- | | | | ├── Primitive.conv2d.Conv2D.0.forward.input.0.npy
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}。因为同一模块的参数使用同一梯度进行更新,所以参数梯度文件名不包含调用次数。
492
+ | | | | ├── Primitive.conv2d.Conv2d.0.forward.input.0.npy
493
+ | | | | ├── Cell.conv1.Conv2d.forward.0.parameters.weight.npy # 模块参数数据:命名格式为{Cell}.{cell_name}.{class_name}.forward.{调用次数}.parameters.{parameter_name}。
494
+ | | | | ├── Cell.conv1.Conv2d.parameters_grad.weight.npy # 模块参数梯度数据:命名格式为{Cell}.{cell_name}.{class_name}.parameters_grad.{parameter_name}。因为同一模块的参数使用同一梯度进行更新,所以参数梯度文件名不包含调用次数。
354
495
  | | | | └── 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
496
  | | | | # 当dump时传入的model参数为List[mindspore.nn.Cell]或Tuple[mindspore.nn.Cell]时,模块级数据的命名中包含该模块在列表中的索引index,命名格式为{Cell}.{index}.*,*表示以上三种模块级数据的命名格式,例如:Cell.0.relu.ReLU.forward.0.input.0.npy。
356
497
  │ | | ├── dump.json
@@ -372,17 +513,41 @@ dump 结果目录结构示例如下:
372
513
 
373
514
  * `rank`:设备 ID,每张卡的数据保存在对应的 `rank{ID}` 目录下。非分布式场景下没有 rank ID,目录名称为 rank。
374
515
  * `dump_tensor_data`:保存采集到的张量数据。
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)。
516
+ * `dump.json`: 保存API或Cell前反向数据的统计量信息。包含dump数据的API名称或Cell名称,各数据的dtype、 shape、max、min、mean、L2norm(L2范数,平方根)统计信息以及当配置summary_mode="md5"时的CRC-32数据。具体介绍可参考[dump.json文件说明](./27.dump_json_instruction.md#2-mindspore-场景下的-dumpjson-文件)。
376
517
  * `stack.json`:API/Cell的调用栈信息。
377
518
  * `construct.json`:分层分级结构,level为L1时,construct.json内容为空。
378
519
 
379
520
  dump 过程中,npy 文件在对应API或者模块被执行后就会落盘,而 json 文件则需要在正常执行 PrecisionDebugger.stop() 后才会写入完整数据,因此,程序异常终止时,被执行API对应的 npy 文件已被保存,但 json 文件中的数据可能丢失。
380
521
 
381
- 动态图场景下使能 PSJit PIJit,装饰特定 Cell 或 function,被装饰的部分会全部/部分使能**静态图**流程。
522
+ 动态图场景下使用 `mindspore.jit` 装饰特定 Cell 或 function 时,被装饰的部分会被编译成**静态图**执行。
382
523
 
383
- - PSJit 场景下 config.json 文件配置 level 为 L1 时,被 PSJit 装饰的部分也作为 API dump 到对应目录;配置 level L2 时,则只会 dump 用户网络中静态图流程下的相关 kernel,其结果目录同jit_level O0/O1 时的静态图 dump 相同。
384
- - PIJit 场景下 config.json 文件配置 level 为 L1 时,会被还原为动态图,按 API 粒度进行 dump;配置 level 为 L2 时,则只会 dump 用户网络中静态图流程下的相关 kernel。
524
+ - config.json 文件配置 level 为 L0 mix,且 MindSpore 版本不低于 2.7.0 时, 若存在 construct 方法被 `mindspore.jit` 装饰的 Cell 对象,则 dump_path 下将生成 `graph` `pynative` 目录,分别存放 construct 方法被 `mindspore.jit` 装饰的 Cell 对象的精度数据、其它Cell 或 API 对象的精度数据。示例如下:
385
525
 
526
+ ```lua
527
+ ├── dump_path
528
+ │ ├── graph
529
+ │ | ├── step0
530
+ │ | | ├── rank0
531
+ │ | │ | ├── dump_tensor_data
532
+ | | | | | ├── ...
533
+ │ | | | ├── dump.json
534
+ │ | | | ├── stack.json
535
+ │ | | | └── construct.json
536
+ │ | | ├── ...
537
+ │ ├── pynative
538
+ │ | ├── step0
539
+ │ | | ├── rank0
540
+ │ | │ | ├── dump_tensor_data
541
+ | | | | | ├── ...
542
+ │ | | | ├── dump.json
543
+ │ | | | ├── stack.json
544
+ │ | | | └── construct.json
545
+ │ | | ├── ...
546
+ ```
547
+
548
+ - config.json 文件配置 level 为 L1 时, 若 `mindspore.jit` 的 `capture_mode` 参数设置为 ast(原 PSJit 场景), 则被装饰的部分也作为 API 被 dump 到对应目录;若 `mindspore.jit` 的 `capture_mode` 参数设置为 bytecode(原 PIJit 场景), 则被装饰的部分会被还原为动态图,按 API 粒度进行 dump。
549
+
550
+ - config.json 文件配置 level 为 L2 时, 仅会 dump 被 `mindspore.jit` 装饰部分的 kernel 精度数据,其结果目录同 jit_level 为 O0/O1 时的静态图 dump 结果相同。
386
551
 
387
552
  npy文件名的前缀含义如下:
388
553
 
@@ -393,12 +558,12 @@ npy文件名的前缀含义如下:
393
558
  | Primitive | mindspore.ops.Primitive API数据 |
394
559
  | Mint | mindspore.mint API数据 |
395
560
  | MintFunctional | mindspore.mint.nn.functional API数据 |
561
+ | MintDistributed | mindspore.mint.distributed API数据 |
396
562
  | Distributed | mindspore.communication.comm_func API数据 |
397
563
  | Jit | 被"jit"装饰的模块或函数数据 |
398
564
  | Cell | mindspore.nn.Cell 类(模块)数据 |
399
565
 
400
566
 
401
-
402
567
  ## 9.补充说明
403
568
 
404
569
  ### 9.1 修改 API 支持列表
@@ -13,9 +13,9 @@ b. 在预检 dump 时可以选择由工具构造随机数获得 dump 数据或
13
13
  1. 在 NPU 和 GPU 环境下分别安装 msprobe。详见[ msprobe 安装](./01.installation.md)章节。
14
14
  2. 在 NPU 训练脚本内添加 msprobe 工具 dump 接口 PrecisionDebugger,采集待预检数据。注意需要配置 level="L1"。
15
15
  3. 将 NPU 环境下 dump 的预检数据拷贝至 GPU 环境。
16
- 4. 在 NPU 和 GPU 环境下分别执行 run_ut,生成的结果最终用于 api_precision_compare.py 函数的输入。详见 [3 离线预检操作指导](#3-离线预检操作指导)。
16
+ 4. 在 NPU 和 GPU 环境下分别执行 run_ut,生成的结果最终用于 api_precision_compare 的输入。详见 [3 离线预检操作指导](#3-离线预检操作指导)。
17
17
  5. 将 NPU 和 GPU 执行 run_ut 生成的 `accuracy_checking_details_{timestamp}.csv` 结果文件拷贝至同一环境下。
18
- 6. 运行 api_precision_compare.py,输出结果为预检操作的最终结果。详见 [5 预检结果比对](#5-预检结果比对)章节。
18
+ 6. 运行 api_precision_compare,输出结果为预检操作的最终结果。详见 [5 预检结果比对](#5-预检结果比对)章节。
19
19
 
20
20
  ## 3 离线预检操作指导
21
21
 
@@ -107,7 +107,7 @@ msprobe -f pytorch multi_run_ut -api_info ./dump_path/step{step_number}/rank{ran
107
107
  | -save_error_data | 保存精度未达标的 API 输入输出数据。 | 否 |
108
108
  | -o 或 --out_path | 指定 run_ut 执行结果存盘路径,默认“./”。 | 否 |
109
109
  | -j 或 --jit_compile | 开启 jit 编译。 | 否 |
110
- | -n | 同时执行 run_ut 线程的数量,默认为 8,最大支持 64,但每个 Device 最大支持 8 个线程。当指定多个线程和多个 Device 时,线程数在每张卡上均分。 | 否 |
110
+ | -n 或 --num_splits | 同时执行 run_ut 线程的数量,默认为 8,最大支持 64,但每个 Device 最大支持 8 个线程。当指定多个线程和多个 Device 时,线程数在每张卡上均分。 | 否 |
111
111
  | -d 或 --device | 指定 Device ID,选择 UT 代码运行所在的卡,默认值为 0,支持同时指定 0~7,共 8 个 Device。 | 否 |
112
112
  | -csv_path 或 --result_csv_path | 指定本次运行中断时生成的 `accuracy_checking_result_{timestamp}.csv` 文件路径,执行 run_ut 中断时,若想从中断处继续执行,配置此参数即可。需要指定为上次中断的 `accuracy_checking_result_{timestamp}.csv` 文件。详见 [3.3 断点续检](#33-断点续检)。 | run_ut 操作中断后继续执行场景下必须配置 |
113
113
  | -f 或 --filter_api | 过滤模型中除最大值和最小值以外其他参数和结构相同的 API。适用于模型较大且重复 API 较多的场景。 | 否 |
@@ -295,3 +295,13 @@ a:误差比对法指标。
295
295
  - npu_scaled_masked_softmax
296
296
 
297
297
  - npu_swiglu
298
+
299
+ - npu_apply_adam
300
+
301
+ - npu_group_norm_silu
302
+
303
+ - npu_mish
304
+
305
+ - npu_moe_gating_top_k_softmax
306
+
307
+ - npu_sort_v2
@@ -3,7 +3,7 @@
3
3
  ## 1 简介
4
4
 
5
5
  为了应对大模型场景下,通过离线预检方式 dump API 输入输出数据导致的存储资源紧张问题,提供在线精度预检功能。本功能实现在执行 NPU 训练操作的过程中,通过 TCP/IP 协议在 NPU
6
- Host 与 GPU Host 设备间建立连接,将 NPU 上对应 API 的输入数据在 GPU 设备上运行,将两份输出数据进行比对,得到预检比对结果,从而减少数据 dump 的步骤,降低存储资源的占用。针对偏差较大的算子,两方比对(NPU vs. GPU)的方法缺少裁判进行裁定。 参考离线预检,在线预检场景同时支持两方比对和三方比对方式,按照 api 的精度标准要求,选择比对两方比对和三方比对。
6
+ Host 与 GPU Host 设备间建立连接,将 NPU 上对应 API 的输入数据在 GPU 设备上运行,将两份输出数据进行比对,得到预检比对结果,从而减少数据 dump 的步骤,降低存储资源的占用。针对偏差较大的算子,两方比对(NPU vs. GPU)的方法缺少裁判进行裁定。 参考离线预检,在线预检场景同时支持两方比对和三方比对方式,按照 api 的精度标准要求,选择两方比对或三方比对。
7
7
 
8
8
  ## 2 在线精度预检流程
9
9
 
@@ -37,7 +37,7 @@ Host 与 GPU Host 设备间建立连接,将 NPU 上对应 API 的输入数据
37
37
  | host | 在线预检模式局域网场景信息接收端 IP,str 类型,用于 GPU 设备和 NPU 设备间进行通信,GPU 侧配置为本机地址 127.0.0.1 或本机局域网 IP。局域网场景时,不能配置 nfs_path 参数,否则局域网场景不生效。 | 否 |
38
38
  | port | 在线预检模式局域网场景信息接收端端口号,int 类型,用于 GPU 设备和 NPU 设备间进行通信,GPU 侧配置为本机可用端口。局域网场景时,不能配置 nfs_path 参数,否则局域网场景不生效。 | 否 |
39
39
  | rank_list | 指定在线预检的 Rank ID,默认值为 [0],list[int] 类型,应配置为大于等于 0 的整数,且须根据实际卡的 Rank ID 配置,若所配置的值大于实际训练所运行的卡的 Rank ID,则在线预检输出数据为空。GPU 和 NPU 须配置一致。 | 是 |
40
- | tls_path | 在线预检模式局域网场景 SSL 证书路径,该路径下包含私钥文件 server.key 和公钥文件 server.crt,str 类型,未配置该参数时默认取值当前路径。tls_path配置为空字符串时,采用TCP协议明文传输api数据;当配置为路径时,采用TLS1.2协议加密传输数据,加密传输时安全性较高,传输速率较低。 | 否 |
40
+ | tls_path | 在线预检模式局域网场景 SSL 证书路径,该路径下包含私钥 server.key、证书 server.crt、自建CA证书 ca.crt、CRL吊销证书 crl.pem,str 类型,未配置该参数时默认取值当前路径。tls_path配置为空字符串时,采用TCP协议明文传输api数据;当配置为路径时,采用TLS1.2协议加密传输数据,加密传输时安全性较高,传输速率较低。其中 crl.pem 为非必需文件,仅当用户存在吊销记录时使用。 | 否 |
41
41
 
42
42
 
43
43
  #### 3.1.2 NPU 侧在线预检配置说明
@@ -55,21 +55,73 @@ Host 与 GPU Host 设备间建立连接,将 NPU 上对应 API 的输入数据
55
55
  | nfs_path | 在线预检模式共享存储目录路径,str 类型,用于 GPU 设备和 NPU 设备间进行通信。配置该参数后 host 和 port 不生效。 | 否 |
56
56
  | host | 在线预检模式局域网场景信息接收端 IP,str 类型,用于 GPU 设备和 NPU 设备间进行通信,NPU 侧须配置为 GPU 侧的局域网 IP 地址。局域网场景时,不能配置 nfs_path 参数,否则局域网场景不生效。 | 否 |
57
57
  | port | 在线预检模式局域网场景信息接收端端口号,int 类型,用于 GPU 设备和 NPU 设备间进行通信,NPU 侧须配置为 GPU 侧的端口号。局域网场景时,不能配置 nfs_path 参数,否则局域网场景不生效。 | 否 |
58
- | tls_path | 在线预检模式局域网场景 SSL 证书路径,该路径下包含私钥文件 client.key 和公钥文件 client.crt,str 类型,未配置该参数时默认取值当前路径。tls_path配置为空字符串时,采用TCP协议明文传输api数据;当配置为路径时,采用TLS1.2协议加密传输数据,加密传输时安全性较高,传输速率较低。 | 否 |
58
+ | tls_path | 在线预检模式局域网场景 SSL 证书路径,该路径下包含私钥 client.key、证书 client.crt、自建CA证书 ca.crt、CRL吊销证书 crl.pem,str 类型,未配置该参数时默认取值当前路径。tls_path配置为空字符串时,采用TCP协议明文传输api数据;当配置为路径时,采用TLS1.2协议加密传输数据,加密传输时安全性较高,传输速率较低。其中 crl.pem 为非必需文件,仅当用户存在吊销记录时使用。 | 否 |
59
59
  | online_run_ut_recompute | 模型训练是否使用重计算机制,bool类型,默认为False,表示模型没有使用重计算。在线预检暂不支持重计算机制下反向算子的预检,当模型训练使用重计算时,跳过反向算子预检,默认模型关闭重计算。 | 否 |
60
60
 
61
61
  #### 3.1.3 局域网场景配置示例
62
62
 
63
- 若采用 TLS1.2 协议加密传输 api 数据,需配置 SSL 证书,可参考如下生成自签名证书方法,仅供调试使用,生产环境请申请正式证书。
63
+ 若采用 TLS1.2 协议加密传输 api 数据,需配置 SSL 证书,可参考如下生成自签名证书方法。
64
+
65
+ 以下秘钥生成方法仅为简单示例,客户应使用与自己需求相符的秘钥生成和存储机制并保证秘钥安全性与机密性,必要时可采用分层秘钥机制。
66
+ 以下示例中加密口令仅供参考,使用时请更换为复杂口令,并保护口令安全。
64
67
  ```shell
65
- # 创建私钥文件server.key
66
- openssl genrsa -out server.key 2048
68
+ # 生成CA证书的根私钥和证书签名请求,其中ca_password为CA私钥加密口令,仅作演示,请更换使用
69
+ openssl req -new -newkey rsa:3072 -passout pass:ca_password -subj "/CN=*ca.com/O=ca.Inc./C=CN/ST=Zhejiang/L=Hangzhou" -keyout ca.key -out ca.csr
70
+ # 自签发根证书
71
+ openssl x509 -req -days 365 -in ca.csr -signkey ca.key -passin pass:ca_password -out ca.crt -extensions v3_ca -extfile <(cat <<-EOF
72
+ [v3_ca]
73
+ basicConstraints = critical,CA:true
74
+ keyUsage = critical, keyCertSign, cRLSign
75
+ EOF
76
+ )
77
+
78
+ # 生成client公私钥,其中client_password为私钥加密口令,仅作演示,请更换使用
79
+ openssl genrsa -aes256 -passout pass:client_password -out client.key 3072
80
+ # 基于client公私钥生成签名请求
81
+ openssl req -new -key client.key -passin pass:client_password -subj "/CN=*example.com/O=Test, Inc./C=CN/ST=Zhejiang/L=Hangzhou" -out client.csr
82
+ # 利用自签发的根证书,签发client证书
83
+ openssl x509 -req -days 180 -CA ca.crt -CAkey ca.key -passin pass:ca_password -in client.csr -out client.crt -CAcreateserial -extfile <(cat <<-EOF
84
+ [v3_server]
85
+ basicConstraints = CA:FALSE
86
+ keyUsage = critical, digitalSignature, keyEncipherment
87
+ extendedKeyUsage = serverAuth
88
+ EOF
89
+ )
90
+
91
+ # 生成server公私钥,server_password
92
+ openssl genrsa -aes256 -passout pass:server_password -out server.key 3072
93
+ # 基于server公私钥生成签名请求
94
+ openssl req -new -key server.key -passin pass:server_password -subj "/CN=*example.com/O=Test, Inc./C=CN/ST=Zhejiang/L=Hangzhou" -out server.csr
95
+ # 利用自签发的根证书,签发server证书
96
+ openssl x509 -req -days 180 -CA ca.crt -CAkey ca.key -passin pass:ca_password -in server.csr -out server.crt -CAcreateserial -extfile <(cat <<-EOF
97
+ [v3_server]
98
+ basicConstraints = CA:FALSE
99
+ keyUsage = critical, digitalSignature, keyEncipherment
100
+ extendedKeyUsage = serverAuth
101
+ EOF
102
+ )
67
103
 
68
- # 创建签名请求文件server.csr
69
- openssl req -new -key server.key -out server.csr
104
+ ```
105
+
106
+ 当需要吊销已创建的SSL证书时,通过openssl命令生成CRL证书 crl.pem,示例如下:
107
+ ```shell
108
+ # 创建证书信息的文本数据库,空文件即可
109
+ touch index.txt
110
+
111
+ # 创建ca配置文件ca.cnf,内容如下,用于吊销证书使用
112
+ [ca]
113
+ default_ca = CA_default
114
+ [CA_default]
115
+ database = ./index.txt
116
+ default_md = sha256
117
+
118
+ # 吊销证书 client.crt
119
+ openssl ca -revoke client.crt -config ca.cnf -cert ca.crt -keyfile ca.key -passin pass:ca_password
120
+ # 生成CRL文件
121
+ openssl ca -gencrl -config ca.cnf -cert ca.crt -keyfile ca.key -passin pass:ca_password -out crl.pem -crldays 30
122
+ # 查看生成的CRL文件内容:
123
+ openssl工具的命令: openssl crl -inform PEM -in crl.pem -text
70
124
 
71
- # 自签名, 生成1年期公钥文件server.crt
72
- openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
73
125
  ```
74
126
 
75
127
  注意:配置TLS协议时,传输性能受机器环境和网络质量的影响,可能触发NPU超时中断模型训练,为避免训练和预检中断,丢弃长时间未传输的api数据,同时NPU侧配置HCCL环境变量,配置方式如下:
@@ -231,3 +283,13 @@ bash train.sh
231
283
  - npu_scaled_masked_softmax
232
284
 
233
285
  - npu_swiglu
286
+
287
+ - npu_apply_adam
288
+
289
+ - npu_group_norm_silu
290
+
291
+ - npu_mish
292
+
293
+ - npu_moe_gating_top_k_softmax
294
+
295
+ - npu_sort_v2
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## 1 简介
4
4
 
5
- **MindSpore 动态图精度预检**<sup>a</sup>通过扫描昇腾 NPU 上用户训练 MindSpore 模型中的所有 Mint API,输出精度情况的诊断和分析。工具以模型中所有 Mint API 前反向的 dump 结果为输入,构造相应的 API 单元测试,将 NPU 输出与标杆(CPU 高精度)比对,计算对应的精度指标,从而找出 NPU 中存在精度问题的 Mint API。本工具支持**随机生成模式和真实数据模式**<sup>b</sup>。
5
+ **MindSpore 动态图精度预检**<sup>a</sup>通过扫描昇腾 NPU 上用户训练 MindSpore 模型中的所有 Mint API 以及 Msadapter场景下迁移的 Mindspore API,输出精度情况的诊断和分析。工具以模型中所有 API 前反向的 dump 结果为输入,构造相应的 API 单元测试,将 NPU 输出与标杆(CPU 高精度)比对,计算对应的精度指标,从而找出 NPU 中存在精度问题的 API。本工具支持**随机生成模式和真实数据模式**<sup>b</sup>。
6
6
 
7
7
  a. 支持 Mindspore 版本:2.4/2.5;
8
8
 
@@ -34,9 +34,18 @@ msprobe -f mindspore run_ut -api_info ./dump.json -o ./checker_result
34
34
  | -api_info 或 --api_info_file | 指定 API 信息文件 dump.json。对其中的mint api以及部分Tensor api进行预检,预检支持的Tensor api列表详见 [ 预检支持列表](../mindspore/api_accuracy_checker/checker_support_api.yaml)。 | str | 是 |
35
35
  | -o 或 --out_path | 指定预检结果存盘路径,默认“./”。 | str | 否 |
36
36
  | -csv_path 或 --result_csv_path | 指定本次运行中断时生成的 `accuracy_checking_result_{timestamp}.csv` 文件路径,执行 run_ut 中断时,若想从中断处继续执行,配置此参数即可。需要指定为上次中断的 `accuracy_checking_result_{timestamp}.csv` 文件。详见 [3.3 断点续检](#33-断点续检)。 | str | 否 |
37
+ | -save_error_data | 保存(随机数据模式)精度未达标的 API 输入输出数据。 | 空 | 否 |
37
38
 
38
39
  预检执行结果包括 `accuracy_checking_result_{timestamp}.csv` 和 `accuracy_checking_details_{timestamp}.csv` 两个文件。`accuracy_checking_result_{timestamp}.csv` 属于 API 级,标明每个 API 是否通过测试。建议用户先查看 `accuracy_checking_result_{timestamp}.csv` 文件,对于其中没有通过测试的或者特定感兴趣的 API,根据其 API Name 字段在 `accuracy_checking_details_{timestamp}.csv` 中查询其各个输出的达标情况以及比较指标。详细介绍请参见 [4 预检结果](#4-预检结果)。
39
40
 
41
+ 随机数据模式下,如果需要保存比对不达标的输入和输出数据,可以在 run_ut 执行命令结尾添加 `-save_error_data`,例如:
42
+
43
+ ```bash
44
+ msprobe -f mindspore run_ut -api_info ./dump.json -o ./checker_result -save_error_data
45
+ ```
46
+
47
+ 数据默认会存盘到 '{out_path}/error_data' 路径下。
48
+
40
49
  ### 3.2 使用 multi_run_ut 执行多线程预检
41
50
 
42
51
  multi_run_ut 脚本,可以并行在多个Device执行 run_ut 操作,从而减少预检耗时。示例如下:
@@ -45,16 +54,19 @@ multi_run_ut 脚本,可以并行在多个Device执行 run_ut 操作,从而
45
54
  msprobe -f mindspore multi_run_ut -api_info ./dump.json -d 0 1 2 3
46
55
  ```
47
56
 
48
- | 参数名称 | 说明 |参数类型 | 是否必选 |
49
- | ---------------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------- | ---------------------------------- |
50
- | -api_info 或 --api_info_file | 指定 API 信息文件 dump.json。对其中的mint api以及部分Tensor api进行预检,预检支持的Tensor api列表详见 [ 预检支持列表](../mindspore/api_accuracy_checker/checker_support_api.yaml)。 | str | 是 |
51
- | -o 或 --out_path | 指定预检结果存盘路径,默认“./”。 | str | 否 |
52
- | -csv_path 或 --result_csv_path | 指定本次运行中断时生成的 `accuracy_checking_result_{timestamp}.csv` 文件路径,执行 run_ut 中断时,若想从中断处继续执行,配置此参数即可。需要指定为上次中断的 `accuracy_checking_result_{timestamp}.csv` 文件。详见 [3.3 断点续检](#33-断点续检)。 | str | 否 |
53
- | -d 或 --device | 指定 Device ID,选择 UT 代码运行所在的卡,默认值为 0,支持同时指定 0 ~ Device数量 - 1 ,例如 0 1 2 3 4。 | List[int] | 否 |
57
+ | 参数名称 | 说明 | 参数类型 | 是否必选 |
58
+ | ---------------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------| ---------------------------------- |
59
+ | -api_info 或 --api_info_file | 指定 API 信息文件 dump.json。对其中的mint api以及部分Tensor api进行预检,预检支持的Tensor api列表详见 [ 预检支持列表](../mindspore/api_accuracy_checker/checker_support_api.yaml)。 | str | 是 |
60
+ | -o 或 --out_path | 指定预检结果存盘路径,默认“./”。 | str | 否 |
61
+ | -csv_path 或 --result_csv_path | 指定本次运行中断时生成的 `accuracy_checking_result_{timestamp}.csv` 文件路径,执行 run_ut 中断时,若想从中断处继续执行,配置此参数即可。需要指定为上次中断的 `accuracy_checking_result_{timestamp}.csv` 文件。详见 [3.3 断点续检](#33-断点续检)。 | str | 否 |
62
+ | -d 或 --device | 指定 Device ID,选择 UT 代码运行所在的卡,默认值为 0,支持同时指定 0 ~ Device数量 - 1 ,例如 0 1 2 3 4。 | List[int] | 否 |
63
+ | -save_error_data | 保存(随机数据模式)精度未达标的 API 输入输出数据。 | 空 | 否 |
54
64
 
55
65
  在不同卡数下,使用38B语言大模型的预检耗时基线参考 [multi_run_ut耗时基线](accuracy_checker_MindSpore/accuracy_checker_MindSpore_baseline.md)
56
66
 
57
67
 
68
+ 数据默认会存盘到 './ut_error_data{timestamp}' 路径下
69
+
58
70
  ### 3.3 断点续检
59
71
 
60
72
  断点续检操作通过如下命令执行: