mindstudio-probe 1.0.3__py3-none-any.whl → 1.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 (278) hide show
  1. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/LICENSE +201 -201
  2. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/METADATA +36 -34
  3. mindstudio_probe-1.1.0.dist-info/RECORD +287 -0
  4. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/WHEEL +1 -1
  5. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/entry_points.txt +1 -0
  6. msprobe/README.md +131 -237
  7. msprobe/__init__.py +16 -1
  8. msprobe/{config/config.json → config.json} +47 -49
  9. msprobe/core/advisor/advisor.py +124 -124
  10. msprobe/core/advisor/advisor_const.py +58 -59
  11. msprobe/core/advisor/advisor_result.py +58 -58
  12. msprobe/core/common/const.py +402 -318
  13. msprobe/core/common/exceptions.py +99 -99
  14. msprobe/core/common/{file_check.py → file_utils.py} +523 -283
  15. msprobe/core/common/inplace_op_checker.py +38 -0
  16. msprobe/core/common/inplace_ops.yaml +251 -0
  17. msprobe/core/common/log.py +86 -69
  18. msprobe/core/common/utils.py +371 -616
  19. msprobe/core/common_config.py +78 -71
  20. msprobe/core/compare/acc_compare.py +472 -298
  21. msprobe/core/compare/check.py +180 -95
  22. msprobe/core/compare/compare_cli.py +69 -49
  23. msprobe/core/compare/highlight.py +259 -222
  24. msprobe/core/compare/multiprocessing_compute.py +174 -149
  25. msprobe/core/compare/npy_compare.py +310 -295
  26. msprobe/core/compare/utils.py +464 -429
  27. msprobe/core/data_dump/data_collector.py +153 -144
  28. msprobe/core/data_dump/data_processor/base.py +337 -293
  29. msprobe/core/data_dump/data_processor/factory.py +76 -59
  30. msprobe/core/data_dump/data_processor/mindspore_processor.py +192 -198
  31. msprobe/core/data_dump/data_processor/pytorch_processor.py +383 -389
  32. msprobe/core/data_dump/json_writer.py +117 -116
  33. msprobe/core/data_dump/scope.py +194 -178
  34. msprobe/core/grad_probe/constant.py +74 -70
  35. msprobe/core/grad_probe/grad_compare.py +170 -175
  36. msprobe/core/grad_probe/utils.py +77 -52
  37. msprobe/docs/01.installation.md +99 -0
  38. msprobe/docs/02.config_introduction.md +137 -0
  39. msprobe/docs/03.config_examples.md +237 -0
  40. msprobe/docs/04.acl_config_examples.md +78 -0
  41. msprobe/docs/05.data_dump_PyTorch.md +326 -0
  42. msprobe/docs/06.data_dump_MindSpore.md +285 -0
  43. msprobe/docs/07.accuracy_checker_PyTorch.md +297 -0
  44. msprobe/docs/08.accuracy_checker_online_PyTorch.md +238 -0
  45. msprobe/docs/09.accuracy_checker_MindSpore.md +68 -0
  46. msprobe/docs/10.accuracy_compare_PyTorch.md +327 -0
  47. msprobe/docs/11.accuracy_compare_MindSpore.md +333 -0
  48. msprobe/docs/12.overflow_check_PyTorch.md +79 -0
  49. msprobe/docs/13.overflow_check_MindSpore.md +31 -0
  50. msprobe/{pytorch/doc/parse_tool.md → docs/14.data_parse_PyTorch.md} +283 -286
  51. msprobe/docs/15.free_benchmarking_PyTorch.md +170 -0
  52. msprobe/docs/16.free_benchmarking_MindSpore.md +140 -0
  53. msprobe/{doc/grad_probe/grad_probe.md → docs/17.grad_probe.md} +205 -207
  54. msprobe/{pytorch/doc//321/205/320/254/320/270/321/207/342/225/221/342/224/220/321/207/342/226/223/342/225/233/321/205/342/225/221/320/266/321/206/320/277/320/244/321/205/320/277/342/225/243.md → docs/18.online_dispatch.md} +89 -90
  55. msprobe/docs/FAQ.md +189 -0
  56. msprobe/docs/S02.report_free_benchmarking_validation_performance_baseline.md +146 -0
  57. msprobe/docs/img/free_benchmark_framework.png +0 -0
  58. msprobe/docs/img/ms_dump.png +0 -0
  59. msprobe/docs/img/ms_layer.png +0 -0
  60. msprobe/docs/img/pt_dump.png +0 -0
  61. msprobe/mindspore/__init__.py +2 -1
  62. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +278 -245
  63. msprobe/mindspore/api_accuracy_checker/api_info.py +76 -69
  64. msprobe/mindspore/api_accuracy_checker/api_runner.py +155 -151
  65. msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +196 -196
  66. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +6 -0
  67. msprobe/mindspore/api_accuracy_checker/compute_element.py +238 -223
  68. msprobe/mindspore/api_accuracy_checker/main.py +8 -15
  69. msprobe/mindspore/api_accuracy_checker/type_mapping.py +113 -113
  70. msprobe/mindspore/api_accuracy_checker/utils.py +79 -62
  71. msprobe/mindspore/cell_processor.py +58 -34
  72. msprobe/mindspore/common/const.py +108 -87
  73. msprobe/mindspore/common/log.py +37 -37
  74. msprobe/mindspore/common/utils.py +97 -57
  75. msprobe/mindspore/compare/distributed_compare.py +62 -75
  76. msprobe/mindspore/compare/layer_mapping.py +146 -0
  77. msprobe/mindspore/compare/modify_mapping.py +107 -0
  78. msprobe/mindspore/compare/ms_compare.py +357 -117
  79. msprobe/mindspore/compare/ms_graph_compare.py +364 -317
  80. msprobe/mindspore/compare/ms_to_pt_api.yaml +399 -399
  81. msprobe/mindspore/debugger/debugger_config.py +69 -74
  82. msprobe/mindspore/debugger/precision_debugger.py +150 -107
  83. msprobe/mindspore/dump/dump_tool_factory.py +50 -35
  84. msprobe/mindspore/dump/hook_cell/api_registry.py +128 -104
  85. msprobe/mindspore/dump/hook_cell/hook_cell.py +55 -53
  86. msprobe/mindspore/dump/hook_cell/primitive_hooks.py +206 -0
  87. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +994 -925
  88. msprobe/mindspore/dump/hook_cell/wrap_api.py +121 -0
  89. msprobe/mindspore/dump/jit_dump.py +96 -56
  90. msprobe/mindspore/dump/kernel_graph_dump.py +75 -60
  91. msprobe/mindspore/dump/kernel_kbyk_dump.py +79 -65
  92. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +131 -116
  93. msprobe/mindspore/free_benchmark/common/config.py +27 -12
  94. msprobe/mindspore/free_benchmark/common/handler_params.py +32 -17
  95. msprobe/mindspore/free_benchmark/common/utils.py +85 -71
  96. msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +842 -842
  97. msprobe/mindspore/free_benchmark/decorator/dec_forward.py +57 -42
  98. msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +122 -107
  99. msprobe/mindspore/free_benchmark/handler/base_handler.py +105 -90
  100. msprobe/mindspore/free_benchmark/handler/check_handler.py +56 -41
  101. msprobe/mindspore/free_benchmark/handler/fix_handler.py +51 -36
  102. msprobe/mindspore/free_benchmark/handler/handler_factory.py +36 -21
  103. msprobe/mindspore/free_benchmark/perturbation/add_noise.py +82 -67
  104. msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +36 -21
  105. msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +78 -63
  106. msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +77 -0
  107. msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +49 -34
  108. msprobe/mindspore/free_benchmark/perturbation/no_change.py +27 -12
  109. msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +44 -27
  110. msprobe/mindspore/free_benchmark/self_check_tool_factory.py +48 -33
  111. msprobe/mindspore/grad_probe/global_context.py +100 -91
  112. msprobe/mindspore/grad_probe/grad_analyzer.py +231 -231
  113. msprobe/mindspore/grad_probe/grad_monitor.py +27 -27
  114. msprobe/mindspore/grad_probe/grad_stat_csv.py +131 -131
  115. msprobe/mindspore/grad_probe/hook.py +94 -92
  116. msprobe/mindspore/grad_probe/utils.py +29 -28
  117. msprobe/mindspore/ms_config.py +128 -126
  118. msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +60 -45
  119. msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +49 -34
  120. msprobe/mindspore/runtime.py +4 -4
  121. msprobe/mindspore/service.py +297 -354
  122. msprobe/mindspore/task_handler_factory.py +24 -24
  123. msprobe/msprobe.py +105 -107
  124. msprobe/pytorch/__init__.py +23 -4
  125. msprobe/pytorch/api_accuracy_checker/common/config.py +70 -55
  126. msprobe/pytorch/api_accuracy_checker/common/utils.py +246 -165
  127. msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +230 -213
  128. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +632 -581
  129. msprobe/pytorch/api_accuracy_checker/compare/api_precision_standard.yaml +132 -132
  130. msprobe/pytorch/api_accuracy_checker/compare/api_precision_threshold.yaml +390 -390
  131. msprobe/pytorch/api_accuracy_checker/compare/compare.py +416 -381
  132. msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +90 -73
  133. msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +265 -244
  134. msprobe/pytorch/api_accuracy_checker/config.yaml +10 -10
  135. msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +370 -332
  136. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +221 -199
  137. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +150 -134
  138. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +518 -581
  139. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +213 -74
  140. msprobe/pytorch/api_accuracy_checker/run_ut/torch_ut_setting.json +7 -4
  141. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +218 -202
  142. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +370 -324
  143. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +227 -204
  144. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/dump_dispatch.py +110 -0
  145. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +244 -218
  146. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/torch_ops_config.yaml +63 -0
  147. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +44 -0
  148. msprobe/pytorch/bench_functions/__init__.py +30 -15
  149. msprobe/pytorch/bench_functions/apply_adam_w.py +43 -28
  150. msprobe/pytorch/bench_functions/confusion_transpose.py +34 -19
  151. msprobe/pytorch/bench_functions/fast_gelu.py +70 -55
  152. msprobe/pytorch/bench_functions/layer_norm_eval.py +21 -6
  153. msprobe/pytorch/bench_functions/linear.py +27 -12
  154. msprobe/pytorch/bench_functions/matmul_backward.py +63 -48
  155. msprobe/pytorch/bench_functions/npu_fusion_attention.py +538 -421
  156. msprobe/pytorch/bench_functions/rms_norm.py +30 -15
  157. msprobe/pytorch/bench_functions/rotary_mul.py +71 -52
  158. msprobe/pytorch/bench_functions/scaled_mask_softmax.py +41 -26
  159. msprobe/pytorch/bench_functions/swiglu.py +70 -55
  160. msprobe/pytorch/common/__init__.py +17 -2
  161. msprobe/pytorch/common/compare_script.template +14 -14
  162. msprobe/pytorch/common/log.py +33 -32
  163. msprobe/pytorch/common/parse_json.py +54 -39
  164. msprobe/pytorch/common/utils.py +310 -300
  165. msprobe/pytorch/compare/distributed_compare.py +66 -66
  166. msprobe/pytorch/compare/mapping.yaml +607 -607
  167. msprobe/pytorch/compare/match.py +49 -33
  168. msprobe/pytorch/compare/pt_compare.py +82 -40
  169. msprobe/pytorch/debugger/debugger_config.py +108 -95
  170. msprobe/pytorch/debugger/precision_debugger.py +173 -125
  171. msprobe/pytorch/free_benchmark/__init__.py +23 -8
  172. msprobe/pytorch/free_benchmark/common/constant.py +70 -70
  173. msprobe/pytorch/free_benchmark/common/counter.py +71 -71
  174. msprobe/pytorch/free_benchmark/common/enums.py +65 -37
  175. msprobe/pytorch/free_benchmark/common/params.py +144 -129
  176. msprobe/pytorch/free_benchmark/common/utils.py +118 -102
  177. msprobe/pytorch/free_benchmark/compare/grad_saver.py +200 -179
  178. msprobe/pytorch/free_benchmark/compare/single_benchmark.py +119 -104
  179. msprobe/pytorch/free_benchmark/main.py +120 -105
  180. msprobe/pytorch/free_benchmark/perturbed_layers/base_layer.py +28 -13
  181. msprobe/pytorch/free_benchmark/perturbed_layers/layer_factory.py +56 -41
  182. msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +105 -90
  183. msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +119 -104
  184. msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +87 -63
  185. msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +83 -68
  186. msprobe/pytorch/free_benchmark/perturbed_layers/npu/no_change.py +43 -28
  187. msprobe/pytorch/free_benchmark/perturbed_layers/npu/npu_base_layser.py +60 -45
  188. msprobe/pytorch/free_benchmark/perturbed_layers/run_cpu.py +34 -19
  189. msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +256 -217
  190. msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +54 -39
  191. msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +38 -23
  192. msprobe/pytorch/free_benchmark/result_handlers/handler_factory.py +45 -30
  193. msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +185 -170
  194. msprobe/pytorch/function_factory.py +91 -75
  195. msprobe/pytorch/functional/module_dump.py +84 -0
  196. msprobe/pytorch/grad_probe/grad_monitor.py +91 -90
  197. msprobe/pytorch/grad_probe/grad_stat_csv.py +128 -128
  198. msprobe/pytorch/hook_module/__init__.py +16 -1
  199. msprobe/pytorch/hook_module/api_registry.py +166 -161
  200. msprobe/pytorch/hook_module/hook_module.py +118 -120
  201. msprobe/pytorch/hook_module/support_wrap_ops.yaml +1879 -1877
  202. msprobe/pytorch/hook_module/utils.py +28 -29
  203. msprobe/pytorch/hook_module/wrap_aten.py +111 -110
  204. msprobe/pytorch/hook_module/wrap_distributed.py +77 -78
  205. msprobe/pytorch/hook_module/wrap_functional.py +104 -105
  206. msprobe/pytorch/hook_module/wrap_npu_custom.py +85 -84
  207. msprobe/pytorch/hook_module/wrap_tensor.py +69 -71
  208. msprobe/pytorch/hook_module/wrap_torch.py +84 -86
  209. msprobe/pytorch/hook_module/wrap_vf.py +60 -62
  210. msprobe/pytorch/module_processer.py +153 -138
  211. msprobe/pytorch/online_dispatch/__init__.py +20 -20
  212. msprobe/pytorch/online_dispatch/compare.py +235 -236
  213. msprobe/pytorch/online_dispatch/dispatch.py +271 -271
  214. msprobe/pytorch/online_dispatch/dump_compare.py +155 -156
  215. msprobe/pytorch/online_dispatch/single_compare.py +391 -391
  216. msprobe/pytorch/online_dispatch/torch_ops_config.yaml +57 -49
  217. msprobe/pytorch/online_dispatch/utils.py +127 -146
  218. msprobe/pytorch/parse.py +19 -4
  219. msprobe/pytorch/parse_tool/cli.py +31 -32
  220. msprobe/pytorch/parse_tool/lib/compare.py +259 -271
  221. msprobe/pytorch/parse_tool/lib/config.py +52 -52
  222. msprobe/pytorch/parse_tool/lib/file_desc.py +31 -31
  223. msprobe/pytorch/parse_tool/lib/interactive_cli.py +102 -102
  224. msprobe/pytorch/parse_tool/lib/parse_exception.py +54 -54
  225. msprobe/pytorch/parse_tool/lib/parse_tool.py +161 -158
  226. msprobe/pytorch/parse_tool/lib/utils.py +320 -321
  227. msprobe/pytorch/parse_tool/lib/visualization.py +85 -91
  228. msprobe/pytorch/pt_config.py +317 -187
  229. msprobe/pytorch/service.py +311 -252
  230. mindstudio_probe-1.0.3.dist-info/RECORD +0 -272
  231. msprobe/config/README.md +0 -539
  232. msprobe/mindspore/doc/compare.md +0 -58
  233. msprobe/mindspore/doc/dump.md +0 -217
  234. msprobe/mindspore/dump/hook_cell/wrap_functional.py +0 -91
  235. msprobe/mindspore/dump/hook_cell/wrap_tensor.py +0 -63
  236. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/ssl_config.py +0 -10
  237. msprobe/pytorch/doc/FAQ.md +0 -193
  238. msprobe/pytorch/doc/api_accuracy_checker.md +0 -313
  239. msprobe/pytorch/doc/api_accuracy_checker_online.md +0 -187
  240. msprobe/pytorch/doc/dump.md +0 -260
  241. msprobe/pytorch/doc/msprobe/321/207/342/226/223/342/225/233/321/205/342/225/221/320/266/321/205/342/225/226/320/265/321/205/320/225/342/225/226/321/206/320/245/342/226/221/321/206/320/235/320/276dump/321/206/320/260/320/227/321/205/320/227/320/226/321/206/320/220/320/267/321/210/320/223/342/225/234/321/205/320/257/342/225/221/321/207/342/225/221/342/224/220/321/206/320/232/320/265/321/205/320/241/320/232.md +0 -182
  242. msprobe/pytorch/doc/ptdbg_ascend_compare.md +0 -240
  243. msprobe/pytorch/doc/ptdbg_ascend_overview.md +0 -68
  244. msprobe/pytorch/doc/ptdbg_ascend_quickstart.md +0 -381
  245. msprobe/pytorch/doc/run_overflow_check.md +0 -25
  246. msprobe/pytorch/doc//321/206/320/247/320/260/321/206/320/260/320/227/321/206/320/255/320/226/321/205/342/225/226/320/265/321/205/320/225/342/225/226/321/205/320/254/342/225/221/321/206/320/251/320/277/321/211/320/272/320/234/321/210/320/277/320/221/321/205/320/242/320/234/321/206/320/220/320/267/321/210/320/223/342/225/234/321/205/320/257/342/225/221/321/207/342/225/221/342/224/220/321/206/320/232/320/265/321/205/320/241/320/232.md +0 -151
  247. msprobe/pytorch/functional/data_processor.py +0 -0
  248. msprobe/pytorch/functional/dump_module.py +0 -39
  249. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/top_level.txt +0 -0
  250. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_1.png +0 -0
  251. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_2.png +0 -0
  252. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_3.png +0 -0
  253. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_4.png +0 -0
  254. /msprobe/{pytorch/doc → docs}/img/GPT-3_1.png +0 -0
  255. /msprobe/{pytorch/doc → docs}/img/GPT-3_2.png +0 -0
  256. /msprobe/{pytorch/doc → docs}/img/GPT-3_3.png +0 -0
  257. /msprobe/{pytorch/doc → docs}/img/GPT-3_4.png +0 -0
  258. /msprobe/{pytorch/doc → docs}/img/GPT-3_5.png +0 -0
  259. /msprobe/{pytorch/doc → docs}/img/GPT-3_6.png +0 -0
  260. /msprobe/{pytorch/doc → docs}/img/GPT-3_7.png +0 -0
  261. /msprobe/{pytorch/doc → docs}/img/GPT-3_8.png +0 -0
  262. /msprobe/{pytorch/doc → docs}/img/YOLOV5S_1.png +0 -0
  263. /msprobe/{pytorch/doc → docs}/img/YOLOV5S_2.png +0 -0
  264. /msprobe/{pytorch/doc → docs}/img/accuracy_checking_details.png +0 -0
  265. /msprobe/{pytorch/doc → docs}/img/accuracy_checking_result.png +0 -0
  266. /msprobe/{pytorch/doc → docs}/img/api_precision_compare_details.png +0 -0
  267. /msprobe/{pytorch/doc → docs}/img/api_precision_compare_result.png +0 -0
  268. /msprobe/{pytorch/doc → docs}/img/auto_analyze_log.png +0 -0
  269. /msprobe/{pytorch/doc → docs}/img/compare_result_pkl.png +0 -0
  270. /msprobe/{pytorch/doc → docs}/img/compare_result_pkl_md5.png.png +0 -0
  271. /msprobe/{pytorch/doc → docs}/img/cpu_info.png +0 -0
  272. /msprobe/{config → docs}/img/free_benchmark.png +0 -0
  273. /msprobe/{doc/grad_probe/img/image-1.png → docs/img/grad_probe_image-1.png} +0 -0
  274. /msprobe/{doc/grad_probe/img/image-2.png → docs/img/grad_probe_image-2.png} +0 -0
  275. /msprobe/{doc/grad_probe/img/image-3.png → docs/img/grad_probe_image-3.png} +0 -0
  276. /msprobe/{doc/grad_probe/img/image-4.png → docs/img/grad_probe_image-4.png} +0 -0
  277. /msprobe/{doc/grad_probe/img/image.png → docs/img/grad_probe_image.png} +0 -0
  278. /msprobe/{pytorch/doc → docs}/img/module_compare.png +0 -0
@@ -1,207 +1,205 @@
1
- # Ascend模型梯度状态监测工具
2
-
3
- 梯度状态监测工具提供了两种能力:
4
-
5
- - 将模型权重的梯度数据导出。这种功能可以将模型权重的梯度值以统计量的形式采集出来,用以分析问题。
6
- - 将两份梯度数据进行相似度对比。在有标杆问题中,可以确认训练过程中精度问题出现的step,以及抓取反向过程中的问题。
7
-
8
- 工具支持PyTorch版本:2.0/2.1/2.2;支持MindSpore版本:r2.3。
9
-
10
- ## 工具特性
11
-
12
- - 使用便捷,无需在训练流程里插入代码
13
- - 可以精准定位问题出现的step
14
-
15
- ## 使用方式
16
-
17
- ### 梯度数据导出
18
-
19
- 1. 创建配置文件config.json,样例如下:
20
-
21
- ```json
22
- {
23
- "task": "grad_probe",
24
- "dump_path": "./dump_path",
25
- "rank": [],
26
- "step": [],
27
- "grad_probe": {
28
- "grad_level": "L1",
29
- "param_list": [],
30
- "bounds": [-1, 0, 1]
31
- }
32
- }
33
- ```
34
- > step指的是优化器被调用的次数(并非模型跑的step,某些step,例如loss为nan时,不会调用优化器)
35
-
36
- **参数说明**
37
-
38
- | 参数 | 说明 | 输入类型 | 是否必选 |
39
- |--------------------------------|-----------------------------------|-----------------|----------|
40
- | task | 填为"grad_probe"。 | str | 是 |
41
- | grad_level | 输出级别。决定导出数据的详细程度,级别越大导出数据越详细。可取值:L0, L1, L2|str | 是 |
42
- | param_list | 权重名称列表,表示需要监控的权重。列表为空就表示监控所有权重。 | List[str] | |
43
- | rank | rank id列表,在多卡场景下,表示需要导出梯度数据的进程的rank id。列表为空就表示导出所有rank的数据。(MindSpore静态图模式下,当前暂不支持指定rank功能) | List[int] | |
44
- | step | step列表,表示需要导出数据的step列表。列表为空就表示导出所有step的数据。(MindSpore静态图模式下,当前暂不支持指定step功能) | List[int] | |
45
- | bounds | 区间列表,用来划分区间以统计数值的分布。需要保证由数据小到大排列。可以使用默认值[-1, 0, 1] | List[float] | |
46
- | dump_path | 输出目录。如果不存在就会创建一个新目录。 | str | |
47
-
48
- **不同级别的level的导出数据**
49
-
50
-
51
- | 级别 | 特征数据表头 | 是否有方向数据 |
52
- | ---- | ------------------------------------------------------------ | -------------- |
53
- | L0 | ("param_name", "MD5", "max", "min", "norm", "shape") | 否 |
54
- | L1 | ("param_name", "max", "min", "norm", "shape") | 是 |
55
- | L2 | ("param_name", *intervals, "=0", "max", "min", "norm", "shape") | 是 |
56
-
57
- intervals就是根据值分布bounds划分出的区间。
58
- MindSpore静态图模式下,L0级别中暂不支持"MD5"
59
-
60
- **方向数据解释**
61
-
62
- 因为模型的参数往往非常大,所以存储真实数据是不可接受的,这里折衷一下,只存储梯度数据的正负号(一个布尔值),也就是方向。
63
-
64
- **bounds和值分布解释**
65
-
66
- + 值分布:梯度数据落在各个区间的元素个数占总元素个数的比例。
67
- + bounds:一个列表,用来划分出区间以统计值分布。例如传入bounds = [-10, 0, 10],此时有一个 grad_value: Tensor = [9.3 , 5.4, -1.0, -12.3],依据 bounds 划分出 (-inf, -10]、(-10, 0]、(0, 10]、(10, inf) 四个区间,然后统计grad_value里的数据落在每个区间内的个数,得到 1、1、2、0。如下图所示:
68
- ![Alt text](img/image-1.png)
69
-
70
- 2. 插入代码。示例代码如下:
71
-
72
- - PyTorch框架:模型构造完成后,传入config.json的路径实例化一个GradientMonitor对象,然后调用gm.monitor并将`模型`作为参数传入。
73
- ```python
74
- from msprobe.pytorch import PrecisionDebugger
75
- debugger = PrecisionDebugger("config_json_path")
76
- debugger.monitor(model)
77
- ```
78
- - MindSpore框架:优化器构造完成后,传入config.json的路径实例化一个GradientMonitor对象,然后调用gm.monitor并将`优化器`作为参数传入。
79
- ```python
80
- from msprobe.mindspore import PrecisionDebugger
81
- debugger = PrecisionDebugger("config_json_path")
82
- debugger.monitor(optimizer)
83
- ```
84
-
85
- 3. 结束监控(MindSpore静态图模式下需要)
86
-
87
- 在训练结束之后,调用stop接口
88
-
89
- ```python
90
- gm.stop()
91
- ```
92
-
93
- ### 输出结果
94
- **输出目录结构**(以level配置L2为例)
95
-
96
- ```bash
97
- {dump_path}
98
- ├── rank{rank_id}
99
- │ ├── grad_summary_{step}.csv
100
- │ ├── step{step}
101
- │ │ ├── {param_name}.npy
102
- ```
103
- + {timestamp}:梯度工具导出数据的时候会在output_path下生成一个时间戳目录,然后在这个时间戳目录下输出结果。
104
- + rank_{rank_id}:在分布式场景下,会记录卡的rank_id。非分布式场景下,如果是CPU则记录进程号,如果是CPU或GPU则记录卡号
105
- + grad_summary_{step}.csv:会分step记录每一步的梯度数据统计值。
106
- + step_{step}:这个目录下会存放该step的梯度的方向数据。
107
- + {param_name}.pt(npy):模型参数的梯度方向数据,PyTorch保存的是pt文件,MindSpore是npy文件。
108
-
109
- **grad_summary_{step}.csv**
110
-
111
- 样例如下:
112
-
113
- ![Alt text](img/image.png)
114
-
115
- | 字段 | 含义 |
116
- | --------------------- | ------------------------------------------------------------|
117
- | Param_name | 模型参数名称。 |
118
- | MD5 | 梯度数据的MD5值。 |
119
- | (-inf, -0.01]...[0.01, inf) | 梯度值落在区间内的元素个数占总元素的比例。 |
120
- | =0 | 梯度为0的元素个数占总元素的比例。 |
121
- | Max | 最大值。 |
122
- | Min | 最小值。 |
123
- | Norm | L2norm值。 |
124
- | Shape | 形状。 |
125
-
126
- ### 梯度相似度比对
127
-
128
- 会根据所导出的权重,分step比对梯度相似度,输出每个权重的梯度相似度和总的梯度相似度。单个权重的梯度相似度为两份方向数据的重合度,总的梯度相似度为每个权重的梯度相似度按元素个数加权。
129
-
130
- #### 前提条件
131
-
132
- - 相同配置下,以Level为L1或L2分别采集npu和gpu环境下的梯度数据。
133
- - 将两份梯度数据传到同一环境下。
134
-
135
- #### 使用方式
136
-
137
-
138
- 新建如下Python脚本,传入npu和gpu的dump_path以及输出目录,比对结果输出目录不存在的话会新建:
139
-
140
- ```python
141
- from msprobe import *
142
- GradComparator.compare_distributed("配置文件里写的dump_path",
143
- "配置文件里写的dump_path",
144
- "比对结果输出目录")
145
- ```
146
-
147
-
148
- ### 比对结果
149
-
150
- **输出目录结构**
151
-
152
- 如下为多卡比对结果,单卡则没有rank_{rank_id}这一级目录。
153
-
154
- ```bash
155
- 比对结果输出目录
156
- ├── rank{rank_id}
157
- │ ├── similarities.csv
158
- │ └── similarities_picture
159
- │ ├── {param_name}.png
160
- │ └── summary_similarities.png
161
- ```
162
-
163
- **问题界定**
164
-
165
- 原则:对于任意权重,第0步的梯度相似度低于0.97,或者某一步的梯度相似度下降超过0.03,认为这一步存在精度问题。例子如下:
166
-
167
- - 第0步相似度低于0.97
168
-
169
- ![Alt text](img/image-3.png)
170
-
171
- - 第3步相似度下降超过0.03
172
-
173
- ![Alt text](img/image-4.png)
174
-
175
- - 正常情况
176
-
177
- ![Alt text](img/image-2.png)
178
-
179
- 这个原则是一个经验性的指标,并不是严格的标注,还需要结合实际情况具体分析。
180
-
181
- ## 公开接口
182
-
183
- **接口说明**
184
-
185
- ```python
186
- PrecisionDebugger.monitor(module)
187
- ```
188
-
189
- | 参数 | 说明 | 是否必选 |
190
- | ----- | -------------------- | -------- |
191
- | module |Pytorch框架下传入模型,必须是torch.nn.Module;MindSpore框架下传入优化器。 | 是 |
192
-
193
-
194
- **接口说明**
195
-
196
- ```python
197
- GradComparator.compare_distributed(dump_path1, dump_path2, output_path)
198
- ```
199
-
200
- | 参数 | 说明 | 是否必选 |
201
- | ----- | -------------------- | -------- |
202
- | dump_path1 |需要比对的其中一个dump目录,也就是配置文件里写的dump_path。 | |
203
- | dump_path2 |需要比对的其中一个dump目录,也就是配置文件里写的dump_path,与dump_path1可以互换。 | 是 |
204
- | output_path |输出结果目录,不存在会新建。 | 是 |
205
-
206
-
207
- # FAQ
1
+ # Ascend模型梯度状态监测工具
2
+
3
+ 梯度状态监测工具提供了两种能力:
4
+
5
+ - 将模型权重的梯度数据导出。这种功能可以将模型权重的梯度值以统计量的形式采集出来,用以分析问题。
6
+ - 将两份梯度数据进行相似度对比。在有标杆问题中,可以确认训练过程中精度问题出现的step,以及抓取反向过程中的问题。
7
+
8
+ 工具支持PyTorch版本:2.0/2.1/2.2;支持MindSpore版本:r2.3。
9
+
10
+ ## 工具特性
11
+
12
+ - 使用便捷,无需在训练流程里插入代码
13
+ - 可以精准定位问题出现的step
14
+
15
+ ## 使用方式
16
+
17
+ ### 梯度数据导出
18
+
19
+ 1. 创建配置文件config.json,样例如下:
20
+
21
+ ```json
22
+ {
23
+ "task": "grad_probe",
24
+ "dump_path": "./dump_path",
25
+ "rank": [],
26
+ "step": [],
27
+ "grad_probe": {
28
+ "grad_level": "L1",
29
+ "param_list": [],
30
+ "bounds": [-1, 0, 1]
31
+ }
32
+ }
33
+ ```
34
+ > step指的是优化器被调用的次数(并非模型跑的step,某些step,例如loss为nan时,不会调用优化器)
35
+
36
+ **参数说明**
37
+
38
+ | 参数 | 说明 | 输入类型 | 是否必选 |
39
+ |--------------------------------|-----------------------------------|-----------------|----------|
40
+ | task | 填为"grad_probe"。 | str | 是 |
41
+ | dump_path | 输出目录。如果不存在就会创建一个新目录。 | str | 是 |
42
+ | rank | rank id列表,在多卡场景下,表示需要导出梯度数据的进程的rank id。列表为空就表示导出所有rank的数据。默认为空。(MindSpore静态图模式下,当前暂不支持指定rank功能) | List[int] | |
43
+ | step | step列表,表示需要导出数据的step列表。列表为空就表示导出所有step的数据。默认为空。(MindSpore静态图模式下,当前暂不支持指定step功能) | List[int] | |
44
+ | grad_level | 输出级别。决定导出数据的详细程度,级别越大导出数据越详细。可取值:L0, L1, L2。默认L1。|str | |
45
+ | param_list | 权重名称列表,表示需要监控的权重。列表为空就表示监控所有权重。默认为空。 | List[str] | |
46
+ | bounds | 区间列表,用来划分区间以统计数值的分布。需要保证由数据小到大排列,并且列表中的元素需要在int64取值范围内。可以使用默认值[-1, 0, 1]。 | List[float, int] | 否 |
47
+
48
+ **不同级别的level的导出数据**
49
+
50
+
51
+ | 级别 | 特征数据表头 | 是否有方向数据 |
52
+ | ---- | ------------------------------------------------------------ | -------------- |
53
+ | L0 | ("param_name", "MD5", "max", "min", "norm", "shape") | 否 |
54
+ | L1 | ("param_name", "max", "min", "norm", "shape") | 是 |
55
+ | L2 | ("param_name", *intervals, "=0", "max", "min", "norm", "shape") | 是 |
56
+
57
+ intervals就是根据值分布bounds划分出的区间。
58
+ MindSpore静态图模式下,L0级别中暂不支持"MD5"
59
+
60
+ **方向数据解释**
61
+
62
+ 因为模型的参数往往非常大,所以存储真实数据是不可接受的,这里折衷一下,只存储梯度数据的正负号(一个布尔值),也就是方向。
63
+
64
+ **bounds和值分布解释**
65
+
66
+ + 值分布:梯度数据落在各个区间的元素个数占总元素个数的比例。
67
+ + bounds:一个列表,用来划分出区间以统计值分布。例如传入bounds = [-10, 0, 10],此时有一个 grad_value: Tensor = [9.3 , 5.4, -1.0, -12.3],依据 bounds 划分出 (-inf, -10]、(-10, 0]、(0, 10]、(10, inf) 四个区间,然后统计grad_value里的数据落在每个区间内的个数,得到 1、1、2、0。如下图所示:
68
+ ![Alt text](./img/grad_probe_image-1.png)
69
+
70
+ 2. 插入代码。示例代码如下:
71
+
72
+ - PyTorch框架:模型构造完成后,传入config.json的路径实例化一个PrecisionDebugger对象,然后调用debugger.monitor并将`模型`作为参数传入。
73
+ ```python
74
+ from msprobe.pytorch import PrecisionDebugger
75
+ debugger = PrecisionDebugger("config_json_path")
76
+ debugger.monitor(model)
77
+ ```
78
+ - MindSpore框架:优化器构造完成后,传入config.json的路径实例化一个PrecisionDebugger对象,然后调用debugger.monitor并将`优化器`作为参数传入。
79
+ ```python
80
+ from msprobe.mindspore import PrecisionDebugger
81
+ debugger = PrecisionDebugger("config_json_path")
82
+ debugger.monitor(optimizer)
83
+ ```
84
+
85
+ 3. 结束监控(MindSpore静态图模式下需要)
86
+
87
+ 在训练结束之后,调用stop接口
88
+
89
+ ```python
90
+ debugger.stop()
91
+ ```
92
+
93
+ ### 输出结果
94
+ **输出目录结构**(以level配置L2为例)
95
+
96
+ ```bash
97
+ {dump_path}
98
+ ├── rank{rank_id}
99
+ │ ├── grad_summary_{step}.csv
100
+ │ ├── step{step}
101
+ │ │ ├── {param_name}.npy
102
+ ```
103
+ + {timestamp}:梯度工具导出数据的时候会在output_path下生成一个时间戳目录,然后在这个时间戳目录下输出结果。
104
+ + rank_{rank_id}:在分布式场景下,会记录卡的rank_id。非分布式场景下,如果是CPU则记录进程号,如果是CPU或GPU则记录卡号
105
+ + grad_summary_{step}.csv:会分step记录每一步的梯度数据统计值。
106
+ + step_{step}:这个目录下会存放该step的梯度的方向数据。
107
+ + {param_name}.pt(npy):模型参数的梯度方向数据,PyTorch保存的是pt文件,MindSpore是npy文件。
108
+
109
+ **grad_summary_{step}.csv**
110
+
111
+ 样例如下:
112
+
113
+ ![Alt text](./img/grad_probe_image.png)
114
+
115
+ | 字段 | 含义 |
116
+ | --------------------- | ------------------------------------------------------------|
117
+ | Param_name | 模型参数名称。 |
118
+ | MD5 | 梯度数据的MD5值。 |
119
+ | (-inf, -0.01]...[0.01, inf) | 梯度值落在区间内的元素个数占总元素的比例。 |
120
+ | =0 | 梯度为0的元素个数占总元素的比例。 |
121
+ | Max | 最大值。 |
122
+ | Min | 最小值。 |
123
+ | Norm | L2norm值。 |
124
+ | Shape | 形状。 |
125
+
126
+ ### 梯度相似度比对
127
+
128
+ 会根据所导出的权重,分step比对梯度相似度,输出每个权重的梯度相似度和总的梯度相似度。单个权重的梯度相似度为两份方向数据的重合度,总的梯度相似度为每个权重的梯度相似度按元素个数加权。
129
+
130
+ #### 前提条件
131
+
132
+ - 相同配置下,以Level为L1或L2分别采集npu和gpu环境下的梯度数据。
133
+ - 将两份梯度数据传到同一环境下。
134
+
135
+ #### 使用方式
136
+
137
+
138
+ 新建如下Python脚本,传入npu和gpu的dump_path以及输出目录,比对结果输出目录不存在的话会新建:
139
+
140
+ ```python
141
+ from msprobe import *
142
+ GradComparator.compare_distributed("配置文件里写的dump_path",
143
+ "配置文件里写的dump_path",
144
+ "比对结果输出目录")
145
+ ```
146
+
147
+
148
+ ### 比对结果
149
+
150
+ **输出目录结构**
151
+
152
+ 如下为多卡比对结果,单卡则没有rank_{rank_id}这一级目录。
153
+
154
+ ```bash
155
+ 比对结果输出目录
156
+ ├── rank{rank_id}
157
+ │ ├── similarities.csv
158
+ │ └── similarities_picture
159
+ │ ├── {param_name}.png
160
+ │ └── summary_similarities.png
161
+ ```
162
+
163
+ **问题界定**
164
+
165
+ 原则:对于任意权重,第0步的梯度相似度低于0.97,或者某一步的梯度相似度下降超过0.03,认为这一步存在精度问题。例子如下:
166
+
167
+ - 第0步相似度低于0.97
168
+
169
+ ![Alt text](./img/grad_probe_image-3.png)
170
+
171
+ - 第3步相似度下降超过0.03
172
+
173
+ ![Alt text](./img/grad_probe_image-4.png)
174
+
175
+ - 正常情况
176
+
177
+ ![Alt text](./img/grad_probe_image-2.png)
178
+
179
+ 这个原则是一个经验性的指标,并不是严格的标注,还需要结合实际情况具体分析。
180
+
181
+ ## 公开接口
182
+
183
+ **接口说明**
184
+
185
+ ```python
186
+ PrecisionDebugger.monitor(module)
187
+ ```
188
+
189
+ | 参数 | 说明 | 是否必选 |
190
+ | ----- | -------------------- | -------- |
191
+ | module |Pytorch框架下传入模型,必须是torch.nn.Module;MindSpore框架下传入优化器。 | 是 |
192
+
193
+ Pytorch场景,传入的模型不能被torch.jit.trace修饰。MindSpore动态图场景,传入的优化器不能被mindspore.jit修饰。
194
+
195
+ **接口说明**
196
+
197
+ ```python
198
+ GradComparator.compare_distributed(dump_path1, dump_path2, output_path)
199
+ ```
200
+
201
+ | 参数 | 说明 | 数据类型 | 是否必选 |
202
+ | ----- | -------------------- | -------- | ----- |
203
+ | dump_path1 |需要比对的其中一个dump目录,也就是配置文件里写的dump_path | str | 是 |
204
+ | dump_path2 |需要比对的其中一个dump目录,也就是配置文件里写的dump_path,与dump_path1可以互换。 | str | 是 |
205
+ | output_path |输出结果目录,不存在会新建。 | str | 是 |
@@ -1,90 +1,89 @@
1
- # **PyTorch NPU在线精度比对工具使用指南**
2
-
3
- PyTorch NPU在线精度比对是ptdbg_ascend工具实现在PyTorch训练过程中直接完成精度比对并输出比对结果的功能。
4
-
5
- 在线精度比对实现的是NPU与CPU之间的精度比对。
6
-
7
- ## PyTorch NPU在线精度比对总体流程
8
-
9
- 1. 准备NPU训练工程。
10
-
11
- 2. 在NPU环境下安装ptdbg_ascend工具,参见《[PyTorch精度工具](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/ptdbg_ascend/README.md)》。
12
-
13
- 3. 在训练脚本内插入ptdbg_ascend工具在线精度比对接口。
14
-
15
- 4. 执行训练并获取在线精度比对NPU和CPU分别执行后的精度比对结果。
16
-
17
- 5. 比对结果分析。
18
-
19
- ## PyTorch NPU在线精度比对
20
- ### 总体说明
21
- - 本节主要介绍NPU精度比对所需要的函数以及示例。
22
- - 在线精度比对工具通过截获PyTorch框架中部分Aten Ir及其输入输出,并将输入数据转到CPU执行,最后将NPU和CPU的执行结果进行精度比对得到比对结果。
23
-
24
- ### 约束
25
-
26
- - Pytorch 只支持2.0及其以上版本。
27
- - 只支持Aten Ir级在线精度比对,所有Aten Ir可以通过dir(torch.ops.aten)查看,其中部分IR不支持在线比对:Aten Ir无对应CPU实现、NPU和CPU同AtenIR实现逻辑不一致,导致同输入不同输出。
28
- - 正反向不支持同时在线精度比对,不支持跨step在线精度比对。
29
-
30
-
31
- ### 场景示例
32
- 1. 在NPU训练脚本中添加在线精度比对接口,示例如下:
33
-
34
- ```python
35
- from msprobe.pytorch.common.utils import seed_all
36
- from msprobe.pytorch.online_dispatch import PtdbgDispatch
37
-
38
- # 在main函数开始前固定随机数
39
- seed_all()
40
-
41
-
42
- ...
43
-
44
- # 在需要调试精度的正向或反向代码前设置
45
- # 正向示例
46
- with PtdbgDispatch(dump_mode="auto", dump_path="/home/dump"):
47
- output = model_cpu(inputs)
48
- # 反向示例
49
- with PtdbgDispatch(dump_mode="auto", dump_path="/home/dump"):
50
- loss.backward()
51
- ```
52
-
53
- 2. 执行训练。
54
-
55
- 3. 找出精度不达标的Aten IR。
56
-
57
- 执行过程中会打屏Failed,Failed在比对结果csv中的Accuracy Reached or Not列标记为No,并在Dump目录下存盘精度不达标Aten IR的输入输出。
58
- ![图片说明](http://image.huawei.com/tiny-lts/v1/images/d83d564e337e80c7cfb557ca3600d0d4_1689x178.png@900-0-90-f.png)
59
-
60
- ### 计算精度评价指标
61
-
62
- 1. Cosine < 0.99 且 MaxAbsError > 0.001时,精度不达标;
63
- 2. Cosine < 0.9,精度不达标;
64
- 3. MaxAbsError > 1,精度不达标。
65
-
66
- ### 在线精度比对参数设置说明
67
-
68
- | 参数名称 | 说明 | 是否必选 |
69
- | -------- |-------------------------------------------------------------------------------------------------| -------- |
70
- | dump_mode| dump模式,可取值"all"、"list"、"auto"、"OFF",默认值为OFF(表示不Dump数据)。 | 否 |
71
- | api_list | dump范围,dump_mode="list"时设置,需要Dump Aten Ir API名称,默认为None,Aten Ir API名称可以通过dir(torch.ops.aten)查看。 | |
72
- | dump_path| dump文件生成的路径。 | |
73
- | tag | 传入tag字符串,成为dump文件夹名一部分,默认为None | 否 |
74
- | process_num | 多进程并发数,默认为0 | 否 |
75
- | debug | debug信息打印,默认为False。 | 否 |
76
- ### dump数据存盘说明
77
- dump数据存盘目录名格式:`msprobe_tag_rankid_{timestamp}`。
78
-
79
- 子目录下包含1个比对结果csv文件、cpu和npudump数据目录,npu目录下包含Aten IR在NPU上的输入输出的dump数据,由于CPU的输入是直接使用NPU的输入执行,因此cpu目录下只包含执行输出的dump数据。
80
-
81
- ```bash
82
- msprobe_rank4_20230911170521
83
- ├── compare_result_rank4_20230911170521.csv
84
- ├── cpu
85
-    ├── native_batch_norm_backward_10_output.0.npy
86
- │ ............
87
- └── npu
88
- ├── native_batch_norm_backward_10_input.0.npy
89
- ............
90
- ```
1
+ # **PyTorch NPU在线精度比对工具使用指南**
2
+
3
+ PyTorch NPU在线精度比对是msprobe工具实现在PyTorch训练过程中直接完成精度比对并输出比对结果的功能。
4
+
5
+ 在线精度比对实现的是NPU与CPU之间的精度比对。
6
+
7
+ ## PyTorch NPU在线精度比对总体流程
8
+
9
+ 1. 准备NPU训练工程。
10
+
11
+ 2. 在NPU环境下安装msprobe工具。
12
+
13
+ 3. 在训练脚本内插入msprobe工具在线精度比对接口。
14
+
15
+ 4. 执行训练并获取在线精度比对NPU和CPU分别执行后的精度比对结果。
16
+
17
+ 5. 比对结果分析。
18
+
19
+ ## PyTorch NPU在线精度比对
20
+ ### 总体说明
21
+ - 本节主要介绍NPU精度比对所需要的函数以及示例。
22
+ - 在线精度比对工具通过截获PyTorch框架中部分Aten Ir及其输入输出,并将输入数据转到CPU执行,最后将NPU和CPU的执行结果进行精度比对得到比对结果。
23
+
24
+ ### 约束
25
+
26
+ - Pytorch 只支持2.0及其以上版本。
27
+ - 只支持Aten Ir级在线精度比对,所有Aten Ir可以通过dir(torch.ops.aten)查看,其中部分IR不支持在线比对:Aten Ir无对应CPU实现、NPU和CPU同AtenIR实现逻辑不一致,导致同输入不同输出。
28
+ - 正反向不支持同时在线精度比对,不支持跨step在线精度比对。
29
+
30
+
31
+ ### 场景示例
32
+ 1. 在NPU训练脚本中添加在线精度比对接口,示例如下:
33
+
34
+ ```python
35
+ from msprobe.pytorch.common import seed_all
36
+ from msprobe.pytorch.online_dispatch import PtdbgDispatch
37
+
38
+ # 在main函数开始前固定随机数
39
+ seed_all()
40
+
41
+
42
+ ...
43
+
44
+ # 在需要调试精度的正向或反向代码前设置
45
+ # 正向示例
46
+ with PtdbgDispatch(dump_mode="auto", dump_path="/home/dump"):
47
+ output = model_cpu(inputs)
48
+ # 反向示例
49
+ with PtdbgDispatch(dump_mode="auto", dump_path="/home/dump"):
50
+ loss.backward()
51
+ ```
52
+
53
+ 2. 执行训练。
54
+
55
+ 3. 找出精度不达标的Aten IR。
56
+
57
+ 执行过程中会打屏Failed,Failed在比对结果csv中的Accuracy Reached or Not列标记为No,并在Dump目录下存盘精度不达标Aten IR的输入输出。
58
+
59
+ ### 计算精度评价指标
60
+
61
+ 1. Cosine < 0.99 且 MaxAbsError > 0.001时,精度不达标;
62
+ 2. Cosine < 0.9,精度不达标;
63
+ 3. MaxAbsError > 1,精度不达标。
64
+
65
+ ### 在线精度比对参数设置说明
66
+
67
+ | 参数名称 | 说明 | 是否必选 |
68
+ | -------- |-------------------------------------------------------------------------------------------------| -------- |
69
+ | dump_mode| dump模式,可取值"all"、"list"、"auto"、"OFF",默认值为OFF(表示不Dump数据)。 | |
70
+ | api_list | dump范围,dump_mode="list"时设置,需要Dump Aten Ir API名称,默认为None,Aten Ir API名称可以通过dir(torch.ops.aten)查看。 | 否 |
71
+ | dump_path| dump文件生成的路径。 | |
72
+ | tag | 传入tag字符串,成为dump文件夹名一部分,默认为None。 | |
73
+ | process_num | 多进程并发数,默认为0 | 否 |
74
+ | debug | debug信息打印,默认为False | 否 |
75
+ ### dump数据存盘说明
76
+ dump数据存盘目录名格式:`atat_tag_rankid_{timestamp}`。
77
+
78
+ 子目录下包含1个比对结果csv文件、cpu和npudump数据目录,npu目录下包含Aten IR在NPU上的输入输出的dump数据,由于CPU的输入是直接使用NPU的输入执行,因此cpu目录下只包含执行输出的dump数据。
79
+
80
+ ```bash
81
+ atat_rank4_20230911170521
82
+ ├── compare_result_rank4_20230911170521.csv
83
+ ├── cpu
84
+ ├── native_batch_norm_backward_10_output.0.npy
85
+ ............
86
+ └── npu
87
+ ├── native_batch_norm_backward_10_input.0.npy
88
+ ............
89
+ ```