mindstudio-probe 1.0.3__py3-none-any.whl → 1.0.4__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 (262) hide show
  1. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/LICENSE +201 -201
  2. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/METADATA +36 -34
  3. mindstudio_probe-1.0.4.dist-info/RECORD +276 -0
  4. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/WHEEL +1 -1
  5. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/entry_points.txt +1 -0
  6. msprobe/README.md +101 -237
  7. msprobe/{config/config.json → config.json} +49 -49
  8. msprobe/core/advisor/advisor.py +124 -124
  9. msprobe/core/advisor/advisor_const.py +59 -59
  10. msprobe/core/advisor/advisor_result.py +58 -58
  11. msprobe/core/common/const.py +341 -318
  12. msprobe/core/common/exceptions.py +99 -99
  13. msprobe/core/common/{file_check.py → file_utils.py} +478 -283
  14. msprobe/core/common/log.py +76 -69
  15. msprobe/core/common/utils.py +385 -616
  16. msprobe/core/common_config.py +85 -71
  17. msprobe/core/compare/acc_compare.py +299 -298
  18. msprobe/core/compare/check.py +95 -95
  19. msprobe/core/compare/compare_cli.py +49 -49
  20. msprobe/core/compare/highlight.py +223 -222
  21. msprobe/core/compare/multiprocessing_compute.py +149 -149
  22. msprobe/core/compare/npy_compare.py +295 -295
  23. msprobe/core/compare/utils.py +430 -429
  24. msprobe/core/data_dump/data_collector.py +154 -144
  25. msprobe/core/data_dump/data_processor/base.py +314 -293
  26. msprobe/core/data_dump/data_processor/factory.py +59 -59
  27. msprobe/core/data_dump/data_processor/mindspore_processor.py +186 -198
  28. msprobe/core/data_dump/data_processor/pytorch_processor.py +366 -389
  29. msprobe/core/data_dump/json_writer.py +96 -116
  30. msprobe/core/data_dump/scope.py +178 -178
  31. msprobe/core/grad_probe/constant.py +70 -70
  32. msprobe/core/grad_probe/grad_compare.py +171 -175
  33. msprobe/core/grad_probe/utils.py +64 -52
  34. msprobe/docs/01.installation.md +89 -0
  35. msprobe/docs/02.config_introduction.md +165 -0
  36. msprobe/docs/03.config_examples.md +247 -0
  37. msprobe/docs/04.acl_config_examples.md +76 -0
  38. msprobe/docs/05.data_dump_PyTorch.md +198 -0
  39. msprobe/docs/06.data_dump_MindSpore.md +243 -0
  40. msprobe/docs/07.accuracy_checker_PyTorch.md +274 -0
  41. msprobe/docs/08.accuracy_checker_online_PyTorch.md +198 -0
  42. msprobe/docs/09.accuracy_checker_MindSpore.md +68 -0
  43. msprobe/docs/10.accuracy_compare_PyTorch.md +245 -0
  44. msprobe/docs/11.accuracy_compare_MindSpore.md +202 -0
  45. msprobe/docs/12.overflow_check_PyTorch.md +79 -0
  46. msprobe/docs/13.overflow_check_MindSpore.md +31 -0
  47. msprobe/{pytorch/doc/parse_tool.md → docs/14.data_parse_PyTorch.md} +283 -286
  48. msprobe/docs/15.free_benchmarking_PyTorch.md +164 -0
  49. msprobe/{doc/grad_probe/grad_probe.md → docs/17.grad_probe.md} +207 -207
  50. msprobe/docs/FAQ_PyTorch.md +177 -0
  51. msprobe/docs/S02.report_free_benchmarking_validation_performance_baseline.md +146 -0
  52. msprobe/docs/img/free_benchmark_framework.png +0 -0
  53. msprobe/mindspore/__init__.py +1 -1
  54. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +254 -245
  55. msprobe/mindspore/api_accuracy_checker/api_info.py +69 -69
  56. msprobe/mindspore/api_accuracy_checker/api_runner.py +155 -151
  57. msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +196 -196
  58. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +6 -0
  59. msprobe/mindspore/api_accuracy_checker/compute_element.py +238 -223
  60. msprobe/mindspore/api_accuracy_checker/main.py +8 -15
  61. msprobe/mindspore/api_accuracy_checker/type_mapping.py +113 -113
  62. msprobe/mindspore/api_accuracy_checker/utils.py +79 -62
  63. msprobe/mindspore/cell_processor.py +34 -34
  64. msprobe/mindspore/common/const.py +106 -87
  65. msprobe/mindspore/common/log.py +37 -37
  66. msprobe/mindspore/common/utils.py +81 -57
  67. msprobe/mindspore/compare/distributed_compare.py +75 -75
  68. msprobe/mindspore/compare/ms_compare.py +219 -117
  69. msprobe/mindspore/compare/ms_graph_compare.py +348 -317
  70. msprobe/mindspore/compare/ms_to_pt_api.yaml +399 -399
  71. msprobe/mindspore/debugger/debugger_config.py +66 -74
  72. msprobe/mindspore/debugger/precision_debugger.py +126 -107
  73. msprobe/mindspore/dump/dump_tool_factory.py +35 -35
  74. msprobe/mindspore/dump/hook_cell/api_registry.py +118 -104
  75. msprobe/mindspore/dump/hook_cell/hook_cell.py +55 -53
  76. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +922 -925
  77. msprobe/mindspore/dump/hook_cell/wrap_api.py +113 -0
  78. msprobe/mindspore/dump/jit_dump.py +72 -56
  79. msprobe/mindspore/dump/kernel_graph_dump.py +59 -60
  80. msprobe/mindspore/dump/kernel_kbyk_dump.py +64 -65
  81. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +116 -116
  82. msprobe/mindspore/free_benchmark/common/config.py +12 -12
  83. msprobe/mindspore/free_benchmark/common/handler_params.py +17 -17
  84. msprobe/mindspore/free_benchmark/common/utils.py +71 -71
  85. msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +842 -842
  86. msprobe/mindspore/free_benchmark/decorator/dec_forward.py +43 -42
  87. msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +107 -107
  88. msprobe/mindspore/free_benchmark/handler/base_handler.py +90 -90
  89. msprobe/mindspore/free_benchmark/handler/check_handler.py +41 -41
  90. msprobe/mindspore/free_benchmark/handler/fix_handler.py +36 -36
  91. msprobe/mindspore/free_benchmark/handler/handler_factory.py +21 -21
  92. msprobe/mindspore/free_benchmark/perturbation/add_noise.py +67 -67
  93. msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +21 -21
  94. msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +63 -63
  95. msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +51 -0
  96. msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +35 -34
  97. msprobe/mindspore/free_benchmark/perturbation/no_change.py +12 -12
  98. msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +29 -27
  99. msprobe/mindspore/free_benchmark/self_check_tool_factory.py +33 -33
  100. msprobe/mindspore/grad_probe/global_context.py +90 -91
  101. msprobe/mindspore/grad_probe/grad_analyzer.py +231 -231
  102. msprobe/mindspore/grad_probe/grad_monitor.py +27 -27
  103. msprobe/mindspore/grad_probe/grad_stat_csv.py +131 -131
  104. msprobe/mindspore/grad_probe/hook.py +94 -92
  105. msprobe/mindspore/grad_probe/utils.py +29 -28
  106. msprobe/mindspore/ms_config.py +128 -126
  107. msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +44 -45
  108. msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +34 -34
  109. msprobe/mindspore/runtime.py +4 -4
  110. msprobe/mindspore/service.py +378 -354
  111. msprobe/mindspore/task_handler_factory.py +24 -24
  112. msprobe/msprobe.py +105 -107
  113. msprobe/pytorch/__init__.py +3 -3
  114. msprobe/pytorch/api_accuracy_checker/common/config.py +53 -55
  115. msprobe/pytorch/api_accuracy_checker/common/utils.py +214 -165
  116. msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +213 -213
  117. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +606 -581
  118. msprobe/pytorch/api_accuracy_checker/compare/api_precision_standard.yaml +132 -132
  119. msprobe/pytorch/api_accuracy_checker/compare/api_precision_threshold.yaml +390 -390
  120. msprobe/pytorch/api_accuracy_checker/compare/compare.py +386 -381
  121. msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +73 -73
  122. msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +245 -244
  123. msprobe/pytorch/api_accuracy_checker/config.yaml +10 -10
  124. msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +335 -332
  125. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +200 -199
  126. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +133 -134
  127. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +592 -581
  128. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +70 -74
  129. msprobe/pytorch/api_accuracy_checker/run_ut/torch_ut_setting.json +7 -4
  130. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +197 -202
  131. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +325 -324
  132. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +204 -204
  133. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +219 -218
  134. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/ssl_config.py +10 -10
  135. msprobe/pytorch/bench_functions/__init__.py +15 -15
  136. msprobe/pytorch/bench_functions/apply_adam_w.py +28 -28
  137. msprobe/pytorch/bench_functions/confusion_transpose.py +19 -19
  138. msprobe/pytorch/bench_functions/fast_gelu.py +55 -55
  139. msprobe/pytorch/bench_functions/layer_norm_eval.py +6 -6
  140. msprobe/pytorch/bench_functions/linear.py +12 -12
  141. msprobe/pytorch/bench_functions/matmul_backward.py +48 -48
  142. msprobe/pytorch/bench_functions/npu_fusion_attention.py +509 -421
  143. msprobe/pytorch/bench_functions/rms_norm.py +15 -15
  144. msprobe/pytorch/bench_functions/rotary_mul.py +52 -52
  145. msprobe/pytorch/bench_functions/scaled_mask_softmax.py +26 -26
  146. msprobe/pytorch/bench_functions/swiglu.py +55 -55
  147. msprobe/pytorch/common/__init__.py +2 -2
  148. msprobe/pytorch/common/compare_script.template +14 -14
  149. msprobe/pytorch/common/log.py +20 -31
  150. msprobe/pytorch/common/parse_json.py +39 -39
  151. msprobe/pytorch/common/utils.py +305 -300
  152. msprobe/pytorch/compare/distributed_compare.py +66 -66
  153. msprobe/pytorch/compare/mapping.yaml +607 -607
  154. msprobe/pytorch/compare/match.py +34 -33
  155. msprobe/pytorch/compare/pt_compare.py +50 -40
  156. msprobe/pytorch/debugger/debugger_config.py +95 -95
  157. msprobe/pytorch/debugger/precision_debugger.py +125 -125
  158. msprobe/pytorch/free_benchmark/__init__.py +8 -8
  159. msprobe/pytorch/free_benchmark/common/constant.py +70 -70
  160. msprobe/pytorch/free_benchmark/common/counter.py +71 -71
  161. msprobe/pytorch/free_benchmark/common/enums.py +37 -37
  162. msprobe/pytorch/free_benchmark/common/params.py +129 -129
  163. msprobe/pytorch/free_benchmark/common/utils.py +102 -102
  164. msprobe/pytorch/free_benchmark/compare/grad_saver.py +179 -179
  165. msprobe/pytorch/free_benchmark/compare/single_benchmark.py +104 -104
  166. msprobe/pytorch/free_benchmark/main.py +105 -105
  167. msprobe/pytorch/free_benchmark/perturbed_layers/base_layer.py +13 -13
  168. msprobe/pytorch/free_benchmark/perturbed_layers/layer_factory.py +41 -41
  169. msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +90 -90
  170. msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +104 -104
  171. msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +63 -63
  172. msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +68 -68
  173. msprobe/pytorch/free_benchmark/perturbed_layers/npu/no_change.py +28 -28
  174. msprobe/pytorch/free_benchmark/perturbed_layers/npu/npu_base_layser.py +45 -45
  175. msprobe/pytorch/free_benchmark/perturbed_layers/run_cpu.py +19 -19
  176. msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +217 -217
  177. msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +39 -39
  178. msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +23 -23
  179. msprobe/pytorch/free_benchmark/result_handlers/handler_factory.py +30 -30
  180. msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +170 -170
  181. msprobe/pytorch/function_factory.py +76 -75
  182. msprobe/pytorch/functional/dump_module.py +39 -39
  183. msprobe/pytorch/grad_probe/grad_monitor.py +91 -90
  184. msprobe/pytorch/grad_probe/grad_stat_csv.py +128 -128
  185. msprobe/pytorch/hook_module/api_registry.py +161 -161
  186. msprobe/pytorch/hook_module/hook_module.py +120 -120
  187. msprobe/pytorch/hook_module/support_wrap_ops.yaml +1879 -1877
  188. msprobe/pytorch/hook_module/utils.py +30 -29
  189. msprobe/pytorch/hook_module/wrap_aten.py +110 -110
  190. msprobe/pytorch/hook_module/wrap_distributed.py +78 -78
  191. msprobe/pytorch/hook_module/wrap_functional.py +105 -105
  192. msprobe/pytorch/hook_module/wrap_npu_custom.py +93 -84
  193. msprobe/pytorch/hook_module/wrap_tensor.py +71 -71
  194. msprobe/pytorch/hook_module/wrap_torch.py +86 -86
  195. msprobe/pytorch/hook_module/wrap_vf.py +62 -62
  196. msprobe/pytorch/module_processer.py +138 -138
  197. msprobe/pytorch/online_dispatch/__init__.py +20 -20
  198. msprobe/pytorch/online_dispatch/compare.py +236 -236
  199. msprobe/pytorch/online_dispatch/dispatch.py +271 -271
  200. msprobe/pytorch/online_dispatch/dump_compare.py +155 -156
  201. msprobe/pytorch/online_dispatch/single_compare.py +391 -391
  202. msprobe/pytorch/online_dispatch/torch_ops_config.yaml +49 -49
  203. msprobe/pytorch/online_dispatch/utils.py +130 -146
  204. msprobe/pytorch/parse.py +4 -4
  205. msprobe/pytorch/parse_tool/cli.py +32 -32
  206. msprobe/pytorch/parse_tool/lib/compare.py +260 -271
  207. msprobe/pytorch/parse_tool/lib/config.py +52 -52
  208. msprobe/pytorch/parse_tool/lib/file_desc.py +31 -31
  209. msprobe/pytorch/parse_tool/lib/interactive_cli.py +102 -102
  210. msprobe/pytorch/parse_tool/lib/parse_exception.py +54 -54
  211. msprobe/pytorch/parse_tool/lib/parse_tool.py +158 -158
  212. msprobe/pytorch/parse_tool/lib/utils.py +316 -321
  213. msprobe/pytorch/parse_tool/lib/visualization.py +85 -91
  214. msprobe/pytorch/pt_config.py +188 -187
  215. msprobe/pytorch/service.py +246 -252
  216. mindstudio_probe-1.0.3.dist-info/RECORD +0 -272
  217. msprobe/config/README.md +0 -539
  218. msprobe/mindspore/doc/compare.md +0 -58
  219. msprobe/mindspore/doc/dump.md +0 -217
  220. msprobe/mindspore/dump/hook_cell/wrap_functional.py +0 -91
  221. msprobe/mindspore/dump/hook_cell/wrap_tensor.py +0 -63
  222. msprobe/pytorch/doc/FAQ.md +0 -193
  223. msprobe/pytorch/doc/api_accuracy_checker.md +0 -313
  224. msprobe/pytorch/doc/api_accuracy_checker_online.md +0 -187
  225. msprobe/pytorch/doc/dump.md +0 -260
  226. 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
  227. msprobe/pytorch/doc/ptdbg_ascend_compare.md +0 -240
  228. msprobe/pytorch/doc/ptdbg_ascend_overview.md +0 -68
  229. msprobe/pytorch/doc/ptdbg_ascend_quickstart.md +0 -381
  230. msprobe/pytorch/doc/run_overflow_check.md +0 -25
  231. 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 +0 -90
  232. 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
  233. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/top_level.txt +0 -0
  234. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_1.png +0 -0
  235. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_2.png +0 -0
  236. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_3.png +0 -0
  237. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_4.png +0 -0
  238. /msprobe/{pytorch/doc → docs}/img/GPT-3_1.png +0 -0
  239. /msprobe/{pytorch/doc → docs}/img/GPT-3_2.png +0 -0
  240. /msprobe/{pytorch/doc → docs}/img/GPT-3_3.png +0 -0
  241. /msprobe/{pytorch/doc → docs}/img/GPT-3_4.png +0 -0
  242. /msprobe/{pytorch/doc → docs}/img/GPT-3_5.png +0 -0
  243. /msprobe/{pytorch/doc → docs}/img/GPT-3_6.png +0 -0
  244. /msprobe/{pytorch/doc → docs}/img/GPT-3_7.png +0 -0
  245. /msprobe/{pytorch/doc → docs}/img/GPT-3_8.png +0 -0
  246. /msprobe/{pytorch/doc → docs}/img/YOLOV5S_1.png +0 -0
  247. /msprobe/{pytorch/doc → docs}/img/YOLOV5S_2.png +0 -0
  248. /msprobe/{pytorch/doc → docs}/img/accuracy_checking_details.png +0 -0
  249. /msprobe/{pytorch/doc → docs}/img/accuracy_checking_result.png +0 -0
  250. /msprobe/{pytorch/doc → docs}/img/api_precision_compare_details.png +0 -0
  251. /msprobe/{pytorch/doc → docs}/img/api_precision_compare_result.png +0 -0
  252. /msprobe/{pytorch/doc → docs}/img/auto_analyze_log.png +0 -0
  253. /msprobe/{pytorch/doc → docs}/img/compare_result_pkl.png +0 -0
  254. /msprobe/{pytorch/doc → docs}/img/compare_result_pkl_md5.png.png +0 -0
  255. /msprobe/{pytorch/doc → docs}/img/cpu_info.png +0 -0
  256. /msprobe/{config → docs}/img/free_benchmark.png +0 -0
  257. /msprobe/{doc/grad_probe/img/image-1.png → docs/img/grad_probe_image-1.png} +0 -0
  258. /msprobe/{doc/grad_probe/img/image-2.png → docs/img/grad_probe_image-2.png} +0 -0
  259. /msprobe/{doc/grad_probe/img/image-3.png → docs/img/grad_probe_image-3.png} +0 -0
  260. /msprobe/{doc/grad_probe/img/image-4.png → docs/img/grad_probe_image-4.png} +0 -0
  261. /msprobe/{doc/grad_probe/img/image.png → docs/img/grad_probe_image.png} +0 -0
  262. /msprobe/{pytorch/doc → docs}/img/module_compare.png +0 -0
@@ -0,0 +1,245 @@
1
+ # PyTorch 场景的精度比对
2
+
3
+ ## 1 简介
4
+
5
+ - 本节主要介绍通过命令行和比对函数的方式进行 CPU 或 GPU 与 NPU 的精度数据比对,执行精度比对操作前需要先完成 CPU 或 GPU 与 NPU 的精度数据 dump,参见 [PyTorch 场景下的数据采集](./05.data_dump_PyTorch.md)章节。
6
+
7
+ - msprobe 使用子命令 compare 进行比对,可支持单卡和多卡场景的精度数据比对。
8
+
9
+ - 比对函数均通过单独创建精度比对脚本执行,可支持单卡和多卡场景的精度数据比对。
10
+
11
+ - 工具性能:比对数据量较小时(单份文件小于 10 GB),比对速度 0.1 GB/s;比对数据量较大时,比对速度 0.3 GB/s。 推荐环境配置:独占环境,CPU 核心数 192,固态硬盘(IO 速度参考:固态硬盘 > 500 MB/s,机械硬盘 60 ~ 170 MB/s)。用户环境性能弱于标准约束或非独占使用的比对速度酌情向下浮动。比对速度的计算方式:两份比对文件大小/比对耗时。
12
+
13
+ **使用场景**:
14
+
15
+ - 同一模型,从 CPU 或 GPU 移植到 NPU 中存在精度下降问题,对比 NPU 芯片中的 API 计算数值与 CPU 或 GPU 芯片中的 API 计算数值,进行问题定位。
16
+ - 同一模型,进行迭代(模型、框架版本升级或设备硬件升级)时存在的精度下降问题,对比相同模型在迭代前后版本的 API 计算数值,进行问题定位。
17
+
18
+ **注意事项**:
19
+
20
+ - NPU 自研 API,在 CPU 或 GPU 侧若没有对应的 API,该 API 的 dump 数据不比对。
21
+ - NPU 与 CPU 或 GPU 的计算结果误差可能会随着模型的执行不断累积,最终会出现同一个 API 因为输入的数据差异较大而无法比对的情况。
22
+ - CPU 或 GPU 与 NPU 中两个相同的 API 会因为调用次数不同导致无法比对或比对到错误的 API,不影响整体运行,该 API 忽略。
23
+
24
+ **API匹配条件**:
25
+
26
+ 进行精度比对时,需要判断CPU或GPU的API与NPU的API是否相同可比对,须满足以下匹配条件:
27
+
28
+ - 两个API的名称相同,API命名规则:`{api_type}.{api_name}.{api调用次数}.{正反向}.{输入输出}.index`,如:Functional.conv2d.1.backward.input.0。
29
+ - 两个API的输入输出Tensor数量和各个Tensor的Shape相同。
30
+
31
+ 通常满足以上两个条件,工具就认为是同一个API,成功进行API的匹配,后续进行相应的计算精度比对。
32
+
33
+ ## 2 精度比对操作指导
34
+
35
+ ### 2.1 命令行方式
36
+
37
+ 将 CPU 或 GPU 与 NPU 的 dump 文件进行比对,支持单卡和多卡,可同时比对多卡的 dump 数据。多机场景需要每个设备单独执行比对操作。
38
+
39
+ 请先参见 [PyTorch 场景下的数据采集](./05.data_dump_PyTorch.md)章节完成 CPU 或 GPU 与 NPU 的精度数据 dump。
40
+
41
+ **操作步骤**:
42
+
43
+ 1. 创建[比对文件](#211-比对文件)。
44
+
45
+ 2. 运行命令:
46
+
47
+ ```shell
48
+ msprobe -f pytorch compare -i ./compare.json -o ./output -s
49
+ ```
50
+
51
+ **参数说明**:
52
+
53
+ | 参数名 | 说明 | 是否必选 |
54
+ |-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
55
+ | -i 或 --input_path | 指定[比对文件](#211-比对文件)。 | 是 |
56
+ | -o 或 --output_path | 配置比对结果文件存盘目录。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。 | 是 |
57
+ | -s 或 --stack_mode | 配置 stack_mode 的开关。仅当[比对文件](#211-比对文件)配置 stack_path 需要开启。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
58
+ | -c 或 --compare_only | 仅比对开关。未配置默认关闭仅比对,使用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。该参数默认未配置,使用自动精度分析,通过配置该参数开启仅比对,关闭自动精度分析,仅输出比对结果表格。 | 否 |
59
+ | -f 或 --fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的 API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
60
+
61
+ 3. 查看比对结果,请参见 [3 精度比对结果分析](#3-精度比对结果分析)。
62
+
63
+ #### 2.1.1 比对文件
64
+
65
+ 以在当前目录创建 ./compare.json 为例。
66
+
67
+ - 单卡场景示例:
68
+
69
+ ```json
70
+ {
71
+ "npu_path": "./npu_dump/dump.json",
72
+ "bench_path": "./bench_dump/dump.json",
73
+ "stack_path": "./npu_dump/stack.json",
74
+ "is_print_compare_log": true
75
+ }
76
+ ```
77
+
78
+ - 多卡场景示例:
79
+
80
+ ```json
81
+ {
82
+ "npu_path": "./npu_dump/step0",
83
+ "bench_path": "./bench_dump/step0",
84
+ "is_print_compare_log": true
85
+ }
86
+ ```
87
+
88
+ **参数说明**:
89
+
90
+ | 参数名 | 说明 | 是否必选 |
91
+ | -------------------- | ------------------------------------------------------------ | ------------------ |
92
+ | npu_path | 配置 NPU 环境下的 dump.json 文件(单卡场景)或真实数据目录(多卡场景)。数据类型:str。 | 是 |
93
+ | bench_path | 配置 CPU、GPU 或 NPU 环境下的 dump.json 文件(单卡场景)或真实数据目录(多卡场景)。数据类型:str。 | 是 |
94
+ | stack_path | 配置 NPU dump 目录下的 stack.json 文件。数据类型:str。 | 单卡必选,多卡不选 |
95
+ | is_print_compare_log | 配置是否开启日志打屏。可取值 True 或 False。数据类型:bool | 否 |
96
+
97
+ ### 2.2 比对函数方式
98
+
99
+ #### 2.2.1 compare_distributed 函数
100
+
101
+ 此函数将 CPU 或 GPU 与 NPU 的 dump 文件进行比对,支持单卡和多卡,可同时比对多卡的 dump 数据。多机场景需要每个设备单独执行比对操作。可自动检索和匹配对应卡和进程所 dump 的数据文件,再调用 compare 进行比对。单机单卡时与 compare 函数二选一。
102
+
103
+ **函数原型**:
104
+
105
+ ```Python
106
+ compare_distributed(npu_dump_dir, bench_dump_dir, output_path, **kwargs)
107
+ ```
108
+
109
+ **参数说明**:
110
+
111
+ | 参数名 | 说明 | 是否必选 |
112
+ | -------------- | ------------------------------------------------------------ | -------- |
113
+ | npu_dump_dir | 配置 NPU 环境下的 dump 目录。str 类型。dump 数据目录须指定到 step 级。<br/>**配置示例**:'./npu_dump/step0'。 | 是 |
114
+ | bench_dump_dir | 配置 CPU、GPU 或 NPU 环境下的 dump 目录。str 类型。<br/>**配置示例**:'./gpu_dump/step0'。 | 是 |
115
+ | output_path | 配置比对结果文件存盘目录。需要预先创建 output_path 目录。str 类型。<br/>**配置示例**:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_rank{npu_ID}-rank{cpu/gpu/npu_ID}_{timestamp}.xlsx`。 | 是 |
116
+ | **kwargs | 支持 compare 的所有可选参数。 | 否 |
117
+
118
+ **函数示例**:
119
+
120
+ ```Python
121
+ from msprobe.pytorch import *
122
+ compare_distributed('./npu_dump/step0', './gpu_dump/step0', './output')
123
+ ```
124
+
125
+ #### 2.2.2 compare 函数
126
+
127
+ 此函数将 CPU 或 GPU 与 NPU 的 dump 文件进行比对,仅支持单机单卡。
128
+
129
+ **函数原型**:
130
+
131
+ ```Python
132
+ compare(input_param, output_path, stack_mode=False, auto_analyze=True, fuzzy_match=False)
133
+ ```
134
+
135
+ **参数说明**:
136
+
137
+ | 参数名 | 说明 | 是否必选 |
138
+ | ------------ | ------------------------------------------------------------ | -------- |
139
+ | input_param | 配置 dump 数据文件及目录,dict 类型。配置参数包括:<br> "npu_json_path":指定 NPU dump 目录下的 dump.json 文件。<br/>**配置示例**:"npu_json_path": "./npu_dump/dump.json"。<br/> "bench_json_path":指定 CPU、GPU 或 NPU dump 目录下的 dump.json 文件。<br/>**配置示例**:"bench_json_path": "./bench_dump/dump.json"。<br/> "stack_json_path":指定 NPU dump 目录下的 stack.json 文件。<br/>**配置示例**:"stack_json_path": "./npu_dump/stack.json"。<br/> "is_print_compare_log":配置是否开启日志打屏。<br/>**配置示例**:True 或 False。 | 是 |
140
+ | output_path | 配置比对结果文件存盘目录,str 类型。<br/>**配置示例**:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。 | 是 |
141
+ | stack_mode | 配置 stack_mode 的开关,bool 类型。仅当配置 stack_json_path 时需要开启。<br/>**配置示例**:stack_mode=True,默认为 False。 | 否 |
142
+ | auto_analyze | 自动精度分析,bool 类型。开启后工具自动针对比对结果进行分析,识别到第一个精度不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 advisor_{timestamp}.txt 文件)。<br/>**配置示例**:auto_analyze=False,默认为 True。 | 否 |
143
+ | fuzzy_match | 模糊匹配,bool 类型。开启后,对于网络中同一层级且命名仅调用次数不同的 API,可匹配并进行比对。<br/>**配置示例**:fuzzy_match=True,默认为 False。 | 否 |
144
+
145
+ **函数示例**:
146
+
147
+ 单机单卡场景下创建比对脚本,例如 compare.py,拷贝如下代码,具体参数请根据实际环境修改。
148
+
149
+ ```Python
150
+ from msprobe.pytorch import compare
151
+ input_param={
152
+ "npu_json_path": "./npu_dump/dump.json",
153
+ "bench_json_path": "./bench_dump/dump.json",
154
+ "stack_json_path": "./npu_dump/stack.json",
155
+ "is_print_compare_log": True
156
+ }
157
+ compare(input_param, output_path="./output", stack_mode=True)
158
+ ```
159
+
160
+ #### 2.2.3 统计量比对
161
+
162
+ 在使用 **compare** 或 **compare_distributed** 函数创建的比对脚本且在 [config.json](../config.json) 文件中配置 `"task": "statistics"` 时,可以进行统计量比对,此时比对 dump.json 文件中的统计信息,开启后的比对结果生成 Max diff、Min diff、Mean diff 和 L2norm diff,表示 NPU dump 数据中 API 的输入或输出与标杆数据输入或输出的最大值、最小值、平均值以及 L2 范数的差。可以通过该值判断 API 是否存在精度问题:当某个 API 的输入和输出的 Max diff、Min diff、Mean diff 和 L2norm diff 均为 0 或无限趋于 0,那么可以判断该 API 无精度问题,反之则可能存在精度问题。
163
+
164
+ **比对脚本示例**:
165
+
166
+ 以 compare.py 为例:
167
+
168
+ ```Python
169
+ from msprobe.pytorch import compare
170
+ input_param={
171
+ "npu_json_path": "./npu_dump/dump.json",
172
+ "bench_json_path": "./bench_dump/dump.json",
173
+ "stack_json_path": "./npu_dump/stack.json",
174
+ "is_print_compare_log": True
175
+ }
176
+ compare(input_param, output_path="./output", stack_mode=True)
177
+ ```
178
+
179
+ **统计量比对结果说明**:
180
+
181
+ 数据量比对同样生成 `compare_result_{timestamp}.xlsx` 和 `advisor_{timestamp}.txt` 文件。其中 `advisor_{timestamp}.txt` 主要对 `compare_result_{timestamp}.xlsx` 中可能存在精度问题(Result 为 Waring)的 API 提出定位建议;`compare_result_{timestamp}.xlsx` 主要有如下两种情况:
182
+
183
+ - "summary_mode": "statistics" 时比对 dump.json 文件:
184
+
185
+ ![compare_result_pkl](img/compare_result_pkl.png)
186
+
187
+ 上图是对 dump.json 文件中 NPU 及标杆 API 的统计信息进行比对,判断可能存在精度问题的 API,文件中记录 NPU 及标杆 API 的基本信息和统计信息,其中需要关注 Result 列,包含结果:Waring(NPU 与标杆统计信息的比对中存在相对误差大于 0.5,则需要重点检查该 API);为空(相对误差小于等于 0.5,可以不需要重点关注,但不代表不存在精度问题);Nan(表示统计信息数据没有匹配上)。
188
+
189
+ - "summary_mode": "md5" 时比对 dump.json 文件:
190
+
191
+ ![compare_result_pkl_md5.png](img/compare_result_pkl_md5.png.png)
192
+
193
+ 上图是对 dump.json 文件中 NPU 及标杆 API 的 MD5 信息进行比对,判断 API 数据的完整性,文件中记录 NPU 及标杆 API 的基本信息和 MD5 信息,其中需要关注 Result 列,包含结果:Pass(表示 NPU 与标杆的 MD5 值一致,即 API 数据完整);Different(表示 NPU 与标杆的 MD5 值不一致,即 API 数据不完全一致,可以通过 NPU_Stack_Info 列 API 调用栈查询该 API 的详细信息);Nan(表示 MD5 信息数据没有匹配上)。
194
+
195
+ ## 3 精度比对结果分析
196
+
197
+ PyTorch 精度比对是以 CPU 或 GPU 的计算结果为标杆,通过计算精度评价指标判断 API 在运行时是否存在精度问题。
198
+
199
+ - `advisor_{timestamp}.txt` 文件中给出了可能存在精度问题的 API 的专家建议,可直接打开查看。
200
+
201
+ - `compare_result_{timestamp}.xlsx` 文件列出了所有执行精度比对的 API 详细信息和比对结果,示例如下:
202
+
203
+ ![compare_result](https://gitee.com/cai-weiwei1989/att_ptdbg/raw/master/debug/accuracy_tools/ptdbg_ascend/doc/img/compare_result.png)
204
+
205
+ 可以从该结果文件中进行[判断计算精度达标情况](#31-判断计算精度达标情况)、[计算精度评价指标分析](#32-计算精度评价指标分析)以及[异常信息识别](#33-异常信息识别)等分析动作。
206
+
207
+ ### 3.1 判断计算精度达标情况
208
+
209
+ 精度比对结果 `compare_result_{timestamp}.xlsx` 文件中只需要通过 Accuracy Reached or Not 来判断计算精度是否达标,判断标准如下:
210
+
211
+ 1. Cosine < 0.99 且 MaxAbsError > 0.001 时,精度不达标,标记为 No。
212
+ 2. Cosine < 0.9,精度不达标,标记为 No。
213
+ 3. MaxAbsError > 1,精度不达标,标记为 No。
214
+ 4. 其余情况下记为精度达标,标记为 Yes。
215
+
216
+ ### 3.2 计算精度评价指标分析
217
+
218
+ 1. Cosine:通过计算两个向量的余弦值来判断其相似度,数值越接近于 1 说明计算出的两个张量越相似,实际可接受阈值为大于 0.99。在计算中可能会存在 nan,主要由于可能会出现其中一个向量为 0。
219
+
220
+ 2. MaxAbsErr:当最大绝对误差越接近 0 表示其计算的误差越小,实际可接受阈值为小于 0.001。
221
+
222
+ 3. MaxRelativeErr:当最大相对误差越接近 0 表示其计算的误差越小。
223
+
224
+ 当 dump 数据中存在 0 或 Nan 时,比对结果中最大相对误差则出现 inf 或 Nan 的情况,属于正常现象。
225
+
226
+ 4. One Thousandth Err Ratio(双千分之一)、Five Thousandths Err Ratio(双千分之五)精度指标:是指 NPU 的 Tensor 中的元素逐个与对应的标杆数据对比,相对误差大于千分之一、千分之五的比例占总元素个数的比例小于千分之一、千分之五。该数据仅作为精度下降趋势的参考,并不参与计算精度是否通过的判定。
227
+
228
+ ### 3.3 异常信息识别
229
+
230
+ 精度比对结果 `compare_result_{timestamp}.xlsx` 文件中对于存在异常信息的API会进行高亮处理:
231
+
232
+ - 红色可能出现的情况有:
233
+ - NPU max 或 NPU min 信息中存在 nan/inf;
234
+ - Max diff存在大于1e+10的值;
235
+ - 统计数据中output的Max diff除以max(0.01, Bench max) > 0.5;
236
+ - 真实数据中One Thousandth Err Ratio的input > 0.9同时output < 0.6。
237
+ - 黄色可能出现的情况有:
238
+ - Max diff的input与output都大于1,同时output比input大一个数量级以上;
239
+ - 统计数据Max diff除以max(0.01, Bench max)的output > 0.1同时input < 0.01;
240
+ - 真实数据One Thousandth Err Ratio的input - output > 0.1;
241
+ - 真实数据Cosine的input - output > 0.1。
242
+
243
+ Shape为 [ ] 时,统计量列说明:
244
+
245
+ 当 NPU Tensor Shape 列为 [ ] 时,表示标量或 0 维张量,统计量列(NPU max、NPU min、NPU mean、NPU l2norm)展示相同的唯一元素。Bench 同理。
@@ -0,0 +1,202 @@
1
+ # MindSpore 场景的精度比对
2
+
3
+ ## 1 简介
4
+
5
+ msprobe精度比对工具主要用于如下场景:
6
+
7
+ - 通过对同一个网络模型,在两个不同版本的MindSpore静态图环境下,输入相同的训练数据,在分别得到API dump数据后,对这两个API dump数据进行全量自动比对,从而快速定位不同版本之间的精度问题。
8
+ - 通过对同一个网络模型,在两个不同版本的MindSpore静态图环境下,输入相同的训练数据,在分别得到kernel dump数据后,对这两个kernel dump数据进行全量自动比对,从而快速定位不同版本之间的精度问题。
9
+ - 通过对同一个网络模型,在两个不同版本的MindSpore动态图环境下,输入相同的训练数据,在分别得到cell dump数据后,对这两个cell模块进行全量自动比对,从而快速定位不同版本之间的精度问题。
10
+ - 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得API dump数据,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
11
+ - 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得cell dump数据,由用户指定可以比对的cell list,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
12
+
13
+ 执行精度比对操作需要安装msprobe工具。详见《[MindStudio精度调试工具](../../README.md)》的“工具安装”章节。
14
+
15
+ ## 2 命令行方式
16
+
17
+ 精度比对工具目前使用方式为命令行形式。
18
+
19
+ ### 2.1 命令格式说明
20
+
21
+ ```shell
22
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s
23
+ ```
24
+
25
+ **完整参数说明**
26
+
27
+ | 参数名 | 说明 | 是否必选 |
28
+ | ------------------- | ------------------------------------------------------------ | -------- |
29
+ | -i或--input_path | 指定比对文件。比对文件内容及示例请参见[比对文件](#31-比对文件)或[比对文件(kernel)](#32-比对文件(kernel))(比对文件(kernel)仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | 是 |
30
+ | -o或--output_path | 配置比对结果文件存盘目录。文件名称基于时间戳自动生成,格式为:<br> `compare_result_{timestamp}.xlsx`<br/> `compare_result_{rank_id}_{step_id}_{timestamp}.xlsx`(仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | 是 |
31
+ | -s或--stack_mode | 配置stack_mode的开关。仅当[比对文件](#31-比对文件)配置"stack_path"需要开启。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
32
+ | -c或--compare_only | 仅比对开关。该参数默认未配置,表示关闭仅比对,使用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度不达标节点(在比对结果文件中的“Accuracy Reached or Not”列显示为No),并给出问题可能产生的原因(打屏展示并生成advisor_{timestamp}.txt文件)。配置该参数开启仅比对,关闭自动精度分析,仅输出比对结果表格。 | 否 |
33
+ | -f或--fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
34
+ | -am或--api_mapping | 跨框架比对。配置该参数时表示开启跨框架API比对功能。仅[跨框架的API比对](#25-跨框架的API比对)场景支持。 | 否 |
35
+ | -cm或--cell_mapping | 跨框架比对。配置该参数时表示开启跨框架cell模块比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件](#33-自定义映射文件)。仅[跨框架的cell模块比对](#26-跨框架的cell模块比对)场景支持。 | 否 |
36
+
37
+ ### 2.2 不同版本下的全量API比对
38
+
39
+ 1. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》完成不同环境下MindSpore静态图精度数据的采集,得到不同框架版本的API dump数据。
40
+
41
+ 2. 创建比对文件,文件内容及示例请参见[比对文件](#31-比对文件)。
42
+
43
+ 3. 执行如下示例命令进行比对:
44
+
45
+ ```shell
46
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s
47
+ ```
48
+
49
+ 4. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)]》章节。
50
+
51
+ ### 2.3 不同版本下的全量kernel比对
52
+
53
+ 1. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》完成不同环境下MindSpore静态图精度数据的采集,得到不同框架版本的kernel dump数据。
54
+
55
+ 2. 创建比对文件,文件内容及示例请参见[比对文件(kernel)](#32-比对文件(kernel))。
56
+
57
+ 3. 执行如下示例命令进行比对:
58
+
59
+ ```shell
60
+ msprobe -f mindspore compare -i ./compare.json -o ./output
61
+ ```
62
+
63
+ 4. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)]》章节。
64
+
65
+ ### 2.4 不同版本下的cell模块比对
66
+
67
+ 1. 配置[config.json](../config.json)文件level配置为L0、task配置为tensor或statistics并指定需要dump的cell模块名。
68
+
69
+ 2. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》完成不同环境下MindSpore动态图精度数据的采集,得到不同框架版本的cell模块dump数据。
70
+
71
+ 3. 创建比对文件,文件内容及示例请参见[比对文件](#31-比对文件)。
72
+
73
+ 4. 执行如下示例命令进行比对:
74
+
75
+ ```shell
76
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s
77
+ ```
78
+
79
+ 5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)]》章节。
80
+
81
+ ### 2.5 跨框架的API比对
82
+
83
+ 1. 配置[config.json](../config.json)文件level配置为L1、task配置为tensor或statistics。
84
+
85
+ 2. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》和《[PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)》完成不同环境下API精度数据的采集,得到两个框架的API dump数据。
86
+
87
+ 3. 创建比对文件,文件内容及示例请参见[比对文件](#31-比对文件)。
88
+
89
+ 4. 执行如下示例命令进行比对:
90
+
91
+ ```shell
92
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s -am
93
+ ```
94
+
95
+ 5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)]》章节。
96
+
97
+ ### 2.6 跨框架的cell模块比对
98
+
99
+ 1. 配置[config.json](../config.json)文件level配置为L0、task配置为tensor或statistics并指定需要dump的cell模块名。
100
+
101
+ 2. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》和《[PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)》完成不同环境下cell模块精度数据的采集,得到两个框架的cell模块dump数据。
102
+
103
+ 3. 创建比对文件,文件内容及示例请参见[比对文件](#31-比对文件)。
104
+
105
+ 4. 执行如下示例命令进行比对:
106
+
107
+ ```shell
108
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s -cm
109
+ ```
110
+
111
+
112
+
113
+ ```shell
114
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s -cm cell_mapping.yaml
115
+ ```
116
+
117
+ 5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)]》章节。
118
+
119
+ ## 3 附录
120
+
121
+ ### 3.1 比对文件
122
+
123
+ 以在当前目录创建./compare.json为例,单卡场景示例如下:
124
+
125
+
126
+ ```json
127
+ {
128
+ "npu_path": "./npu_dump/dump.json",
129
+ "bench_path": "./bench_dump/dump.json",
130
+ "stack_path": "./npu_dump/stack.json",
131
+ "is_print_compare_log": true
132
+ }
133
+ ```
134
+
135
+
136
+ **参数说明**
137
+
138
+ | 参数名 | 说明 | 是否必选 |
139
+ | -------------------- | ------------------------------------------------------------ | -------- |
140
+ | npu_path | 配置NPU环境下的dump.json文件(单卡场景)。跨框架场景指定为MindSpore的json文件。数据类型:str。 | 是 |
141
+ | bench_path | 配置CPU、GPU或NPU环境下的dump.json文件(单卡场景)。 跨框架场景指定为PyTorch的json文件。数据类型:str。 | 是 |
142
+ | stack_path | 配置NPU dump目录下的stack.json文件。数据类型:str。 | 是 |
143
+ | is_print_compare_log | 配置是否开启日志打屏。可取值true或false,默认为true。数据类型:bool | 否 |
144
+
145
+ ### 3.2 比对文件(kernel)
146
+
147
+ 仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持。
148
+
149
+ 以在当前目录创建./compare.json为例,示例如下:
150
+
151
+ - 单卡场景:
152
+
153
+ ```json
154
+ {
155
+ "npu_path": "./npu_dump",
156
+ "bench_path": "./bench_dump",
157
+ "rank_id": [1],
158
+ "step_id": []
159
+ }
160
+ ```
161
+
162
+ - 多卡场景:
163
+
164
+ ```json
165
+ {
166
+ "npu_path": "./npu_dump",
167
+ "bench_path": "./bench_dump",
168
+ "rank_id": [],
169
+ "step_id": []
170
+ }
171
+ ```
172
+
173
+
174
+ **参数说明**
175
+
176
+ | 参数名 | 说明 | 是否必选 |
177
+ | ---------- | ------------------------------------------------------------ | -------- |
178
+ | npu_path | 配置NPU环境下的dump.json文件目录(单卡场景)或真实数据目录(多卡场景)。数据类型:str。 | 是 |
179
+ | bench_path | 配置CPU、GPU或NPU环境下的dump.json文件目录(单卡场景)或真实数据目录(多卡场景)。数据类型:str。 | 是 |
180
+ | rank_id | 配置比对的Rank ID。npu_path和bench_path目录下的dump文件需要存在对应Rank的数据。默认为空,表示比对所有Rank。可配置一个或多个Rank,多个Rank ID用逗号隔开,例如:"rank_id": [1,2,3]。数据类型:list[int]。 | 否 |
181
+ | step_id | 配置比对的Step ID。npu_path和bench_path目录下的dump文件需要存在对应Step的数据。默认为空,表示比对所有Sank。可配置一个或多个Sank,多个Sank ID用逗号隔开,例如:"step_id": [1,2,3]。数据类型:list[int]。 | 否 |
182
+
183
+ ### 3.3 自定义映射文件
184
+
185
+ 文件名格式:\*.yaml,*为文件名,可自定义。
186
+
187
+ 文件内容格式:
188
+
189
+ ```yaml
190
+ {cell_name}.{class_name}: {cell_name}.{class_name}
191
+ ```
192
+
193
+ 左侧为MindSpore框架cell模块的{cell_name}.{class_name},右侧为PyTorch框架cell模块的{cell_name}.{class_name}。
194
+
195
+ {cell_name}.{class_name}从dump cell模块级.npy文件名获取,命名格式为:`{Cell}_{cell_name}_{class_name}_{前向反向}.{index}.{input/output}.{参数序号}`
196
+
197
+ 文件内容示例:
198
+
199
+ ```yaml
200
+ fc2.Dense: fc2.Linear
201
+ conv1.Conv2d: conv3.Conv2d
202
+ ```
@@ -0,0 +1,79 @@
1
+ # **PyTorch场景下的溢出检测**
2
+
3
+ msprobe 工具在 PyTorch 场景下提供溢出数据采集功能和溢出数据解析功能,详细介绍见下方章节。
4
+
5
+ ## 1、溢出数据采集
6
+
7
+ 溢出数据采集能 dump 所有溢出的 API 或者 Module 的信息,包括前反向输入输出的统计值和实际运行数据信息。
8
+
9
+ ### 1.1 工具安装
10
+
11
+ 工具安装详见《[msprobe 使用手册](../README.md)》的“安装”章节
12
+
13
+ ### 1.2 接口介绍
14
+
15
+ 溢出检测功能提供的接口与数据采集任务一致,详见[ PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)中的"**1 接口介绍**"章节。
16
+ 其中 PrecisionDebugger 中的 task 或是 config.json 中的 task 需要指定为 **overflow_check**,详见[配置文件介绍](./02.config_introduction.md)中的
17
+ "**1.1 通用配置介绍**"和"**1.5 task 配置为 overflow_check**"章节。
18
+
19
+ ### 1.3 示例代码
20
+
21
+ 溢出检测功能使用方式与数据采集任务一致,详见[ PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)中的"**2 示例代码**"章节。
22
+
23
+ ### 1.4 结果文件介绍
24
+
25
+ 溢出检测结果文件目录结构与含义与数据采集任务一致,详见[ PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)中的"**3 dump 结果文件介绍**"章节。
26
+
27
+ ### 1.5 其他说明
28
+
29
+ 溢出数据采集功能在昇腾 NPU 上支持饱和模式和 INF/NAN 模式。INF/NAN 模式遵循 IEEE 754 标准,根据定义输出 INF/NAN 的计算结果。与之对应的饱和模式在计算出现溢出时,饱和为浮点数极值(+-MAX)。对于 CANN 侧配置,Atlas 训练系列产品(如 910A),默认为饱和模式,且不建议使用 INF/NAN 模式;Atlas A2 训练系列产品(如 910B),默认为 INF/NAN 模式,且不建议使用饱和模式。
30
+
31
+ INF/NAN 模式的使能方式如下:
32
+
33
+ ```Shell
34
+ # 使能 CANN 侧 INF/NAN 模式
35
+ export INF_NAN_MODE_ENABLE=1
36
+ ```
37
+
38
+ ## 2、溢出数据解析
39
+
40
+ 注:溢出数据解析目前只支持分析前向 API 输入未溢出,但输出溢出的场景。
41
+
42
+ 在第一步中采集到溢出数据后,可以使用溢出解析功能快速判断输入未溢出而输出溢出的 API 是正常溢出还是非正常溢出,从而帮您快速分析是否由 API 执行异常导致的溢出问题。
43
+ 同一个 API 用相同的输入数据在 CPU 设备和昇腾 NPU 设备上执行,若 CPU 和 NPU 均出现溢出,则认为该溢出是**正常溢出**;若 NPU 有溢出, 而 CPU 没有溢出则认为该溢出是**非正常溢出**。
44
+
45
+ 工具支持的 PyTorch 版本:1.11/2.0/2.1/2.2。
46
+
47
+ 操作步骤如下:
48
+
49
+ 1. 安装工具。
50
+
51
+ 详见《[msprobe 使用手册](../README.md)》的“安装”章节。
52
+
53
+ 2. 执行溢出 API 解析操作。
54
+
55
+ ```bash
56
+ msprobe -f pytorch run_overflow_check -api_info ./dump.json
57
+ ```
58
+
59
+ | 参数名称 | 说明 | 是否必选 |
60
+ | -------------------------- |------------------------------------| -------- |
61
+ | -api_info或--api_info_file | 指定采集下来的 API 信息文件 dump.json。 | 是 |
62
+ | -j或--jit_compile | 开启 jit 编译。 | 否 |
63
+ | -d或--device | 指定 Device ID,选择 UT 代码运行所在的卡,默认值为0。 | 否 |
64
+
65
+ 3. 结果说明。
66
+
67
+ 如果 API 是**正常溢出**,会打印以下信息:
68
+
69
+ ```bash
70
+ The {api_name} overflow is a normal overflow.
71
+ ```
72
+
73
+ **非正常溢出**则会打印以下信息:
74
+
75
+ ```bash
76
+ The {api_name} overflow is an abnormal overflow.
77
+ ```
78
+
79
+ 其中 {api_name} 是对应溢出的 API 名称。
@@ -0,0 +1,31 @@
1
+ # MindSpore 场景的溢出检测
2
+
3
+ msprobe 工具提供静态图O2编译等级下的过程溢出检测与动态图场景下的结果溢出检测。其中前者检测对象为 kernel 级别,对应 config.json 配置中的 "L2" level,后者检测对象为 API 级别,对应 config.json 配置中的 "L1" level。
4
+
5
+ 需要注意,动态图场景下的溢出检测功能仅支持 INF/NAN 模式<sup>a</sup>。INF/NAN 模式的使能方式如下:
6
+
7
+ ```Shell
8
+ # 使能 CANN 侧 INF/NAN 模式
9
+ export INF_NAN_MODE_ENABLE=1
10
+ # 使能 MindSpore 框架侧 INF/NAN 模式
11
+ export MS_ASCEND_CHECK_OVERFLOW_MODE="INFNAN_MODE"
12
+ ```
13
+
14
+ **a**:INF/NAN 模式遵循 IEEE 754 标准,根据定义输出 INF/NAN 的计算结果。与之对应的饱和模式在计算出现溢出时,饱和为浮点数极值(+-MAX)。对于 CANN 侧配置,Atlas 训练系列产品(如 910A),默认为饱和模式,且不建议使用 INF/NAN 模式;Atlas A2训练系列产品(如 910B),默认为 INF/NAN 模式,且不建议使用饱和模式。对于 MindSpore 框架侧配置,仅支持对 Atlas A2 训练系列产品进行设置,默认为 INF/NAN 模式。CANN 侧 与 MindSpore 框架侧配置须一致。
15
+
16
+ 溢出检测任务的配置示例见[MindSpore 静态图场景下 task 配置为 overflow_check](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#23-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-overflow_check)、[MindSpore 动态图场景下 task 配置为 overflow_check](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#33-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-overflow_check)。
17
+
18
+
19
+ ## 1 接口介绍
20
+
21
+ 溢出检测功能提供的接口与数据采集任务一致,详见[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)中的"**1 接口介绍**"章节。
22
+
23
+ 需要注意,目前暂不支持动态图 "L1" level 下 primitive op 的溢出检测。
24
+
25
+ ## 2 示例代码
26
+
27
+ 溢出检测功能使用方式与数据采集任务一致,详见[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)中的"**2 示例代码**"章节。
28
+
29
+ ## 3 溢出检测结果文件介绍
30
+
31
+ 溢出检测结果文件目录结构与含义与数据采集任务一致,详见[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)中的"**3 dump 结果文件介绍**"章节。