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
msprobe/config/README.md DELETED
@@ -1,539 +0,0 @@
1
- # 配置文件说明
2
-
3
- 当前配置文件主要为PrecisionDebugger接口执行dump或无标杆比对操作时调用的配置,当PrecisionDebugger接口未指定该配置文件时,使用该文件的默认配置。配置文件详见[config.json](./config.json)。
4
-
5
- 当在环境上安装msprobe工具后,config.json文件位置可通过如下方式查找:
6
-
7
- 查找msprobe工具安装路径。
8
-
9
- ```
10
- pip show mindstudio-probe
11
- ```
12
-
13
- 输出结果如下示例:
14
-
15
- ```
16
- Name: mindstudio-probe
17
- Version: 1.0
18
- Summary: This is a pytorch precision comparison tools
19
- Home-page:
20
- Author:
21
- Author-email:
22
- License:
23
- Location: /home/xx/anaconda3/envs/pt21py38/lib/python3.8/site-packages
24
- Requires: numpy, openpyxl, pandas, pyyaml, rich, tqdm, wheel
25
- Required-by:
26
- ```
27
-
28
- Location字段为msprobe工具的安装路径,那么config.json文件位置为/home/xx/anaconda3/envs/pt21py38/lib/python3.8/site-packages/msprobe/config
29
-
30
- ## 参数说明
31
-
32
- ### **通用配置参数**
33
-
34
- | 参数名 | 说明 | 是否必选 |
35
- | ----------------- | ------------------------------------------------------------ | -------- |
36
- | task | dump的任务类型,str类型。可取值:<br/> "free_benchmark"(无标杆比对)。<br/> "statistics"(仅dump张量的统计信息,默认值)。<br/> "tensor"(dump张量的统计信息和完整张量数据,MindSpore静态图场景仅dump完整张量数据)。<br/> "overflow_check"(溢出检测)。<br/> "run_ut"(精度预检配置)。<br/>配置示例:"task": "tensor"。<br/>根据task参数取值的不同,可以配置不同场景参数,详见:“**task配置为free_benchmark**”,“**task配置为statistics**”,“**task配置为tensor**”,“**task配置为overflow_check**”,“**task配置为run_ut**”。 | 否 |
37
- | dump_path | 设置dump数据目录路径,str类型。配置示例:"dump_path": "./dump_path"。MindSpore静态图场景仅支持绝对路径。 | 是 |
38
- | rank | 指定对某张卡上的数据进行dump,list[int]类型,默认未配置(表示dump所有卡的数据),应配置为大于等于0的整数,且须配置实际可用的Rank ID。配置示例:"rank": [1]。<br> 对于PyTorch场景,Rank ID从0开始计数,最大取值为所有节点可用卡总数-1,若所配置的值大于实际训练所运行的卡的Rank ID,则dump数据为空,比如当前环境Rank ID为0到7,实际训练运行0到3卡,此时若配置Rank ID为4或不存在的10等其他值,此时dump数据为空。<br/> 对于MindSpore场景,所有节点的Rank ID均从0开始计数,最大取值为每个节点可用卡总数-1,config.json配置一次rank参数对所有节点同时生效。 | 否 |
39
- | step | 指定dump某个step的数据,list[int]类型。默认未配置,表示dump所有step数据。dump特定step时,须指定为训练脚本中存在的step。step为list格式,可配置逐个step,例如:"step": [0,1,2]。 | 否 |
40
- | level | dump级别,str类型,根据不同级别dump不同数据。可取值:<br> "L0"(dump module模块级精度数据,仅PyTorch场景支持,使用背景详见“**模块级精度数据dump说明**”)。<br/> "L1"(dump API级精度数据,默认值,仅MindSpore动态图和PyTorch场景支持)。<br/> "L2"(dump kernel级精度数据,仅MindSpore静态图和PyTorch场景支持,且PyTorch场景须配置acl_config参数)。<br/> "mix"(dump module模块级和API级精度数据,即"L0"+"L1",仅PyTorch场景支持)。<br/>配置示例:"level": "L1"。MindSpore动态图场景仅支持"L1"。 | 否 |
41
- | acl_config | kernel dump的配置文件,str类型。level取"L2"时,该参数必选;level为其他值时,该参数不选。参数示例:acl_config='./acl_config.json'。acl_config.json配置文件详细介绍请参见“**acl_config.json配置文件说明**”。 | 否 |
42
- | seed | 随机种子数,int类型,默认值为:1234,仅PyTorch场景支持。通过固定随机数保证模型的输入或输出一致,可固定的随机数详见“**固定随机数范围**”。配置示例:"seed": 1234。 | 否 |
43
- | is_deterministic | 确定性计算模式,bool类型,仅PyTorch场景支持。可取值true(开启)或false(关闭),默认关闭。配置示例:"is_deterministic": true。<br/>即使在相同的硬件和输入下,API多次执行的结果也可能不同,开启确定性计算是为了保证在相同的硬件和输入下,API多次执行的结果相同。<br/>确定性计算会导致API执行性能降低,建议在发现模型多次执行结果不同的情况下开启。<br/>rnn类算子、ReduceSum、ReduceMean等算子可能与确定性计算存在冲突,若开启确定性计算后多次执行的结果不相同,则考虑存在这些算子。 | 否 |
44
- | enable_dataloader | 自动控制开关,bool类型,仅PyTorch场景支持。可取值true(开启)或false(关闭),默认为false。配置为True后自动识别step参数指定的迭代,并在该迭代执行完成后退出训练,此时start、stop和step函数可不配置,开启该开关要求训练脚本是通过torch.utils.data.dataloader方式加载数据。仅支持PyTorch单卡训练使用,分布式训练场景下存在数据dump不全问题,**下个版本即将废弃该功能**。 | 否 |
45
-
46
- ### task配置为free_benchmark
47
-
48
- 仅PyTorch场景与MindSpore动态图场景支持,且"level"需为"L1"。
49
-
50
- task配置为free_benchmark时,开启**无标杆比对**,在NPU环境下通过对当前模型API的输入添加扰动因子,二次执行,将得到的输出与未添加扰动因子前的输出进行比对,从而**得出该模型中可能因迁移等变化导致精度降低的API**。
51
-
52
- 无标杆比对优势在于省去了从CPU/GPU环境获取标杆数据的步骤,也省去了在NPU环境执行dump的操作,降低了精度比对的操作难度。
53
-
54
- 建议配置白名单(配置scope或list)控制少量API进行无标杆比对,一次对过多API执行无标杆比对可能导致显存溢出或性能膨胀。
55
-
56
- | 参数名 | 说明 | 是否必选 |
57
- | ------------ | ------------------------------------------------------------ | -------- |
58
- | scope | 自定义检测API列表(仅PyTorch场景支持),list[str]类型,默认值为空列表,当list也为空列表时,表示检测所有API。需要在[]内配置具体API名(在工具dump结果中查看)。配置示例:"scope": ["Torch.matmul.0", "Tensor.pow.4"]。与list参数不能同时配置。 | 否 |
59
- | list | 自定义检测API类型或API名称,list[str]类型,默认值为空列表,表示检测所有API(PyTorch场景下还需scope也为空列表)。包含如下配置方法:<br> PyTorch场景下,指定某一类API,对某一类的API进行无标杆比对。配置示例:"list": ["relu"]。<br/> MindSpore场景下,指定API名称,对列表中的API进行检测。配置示例:"list": ["mindspore.mint.div", "mindspore.ops.bmm", "mindspore.Tensor.\_\_add\_\_"]。<br/>与scope参数不能同时配置。 | 否 |
60
- | fuzz_device | 标杆设备,str类型。可取值:<br/> "npu":无标杆,通过添加扰动因子进行比对,默认值。<br/> "cpu":以CPU为标杆,pert_mode须配置为"to_cpu"(仅PyTorch场景支持)。<br/>配置示例:"fuzz_device": "npu"。 | 否 |
61
- | pert_mode | 无标杆扰动因子,str类型。可取值:<br/> "improve_precision":对输入做升精度,默认值。<br/> "add_noise":对输入增加噪声。<br/> "no_change":不加扰动直接二次执行。<br/> "bit_noise":输入的末位比特翻转。<br/> "change_value":输入的张量首尾值调换(仅PyTorch场景支持)。<br/> "to_cpu":在CPU等价执行(仅PyTorch场景支持)。<br/>配置示例:"pert_mode": "improve_precision"。 | 否 |
62
- | handler_type | 处理类型,可取值:"check"(进行无标杆比对检查,默认值)、"fix"(将扰动后的API输出结果覆盖原始API输出结果,尝试将Loss曲线恢复正常,该模式下不支持预热if_preheat与反向过程)。配置示例:"handler_type": "fix"。 | 否 |
63
- | fuzz_level | 无标杆数据dump级别,即选择比对结果文件应输出的表头属性,当前仅支持取值为:"L1"(默认值)。输出结果详见“**无标杆比对数据存盘格式**”。 | 否 |
64
- | fuzz_stage | 前反向,选择对API前向或反向进行无标杆比对,可取值:"forward"(前向,默认值)、"backward"(反向,仅PyTorch场景支持)。配置示例:"fuzz_stage": "forward"。 | 否 |
65
- | if_preheat | 预热功能(仅PyTorch场景支持),开启功能后工具可以根据每次迭代的输出调整精度算法的阈值,从而更准确找出存在精度问题的API,bool类型。可取值true(开启)或false(关闭),默认关闭。配置示例:"if_preheat": "true"。"handler_type": "fix"不支持预热。 | 否 |
66
- | preheat_step | 开启预热的迭代数量(仅PyTorch场景支持),int类型,默认值为15。须配置"if_preheat": "true"。 | 否 |
67
- | max_sample | 每个算子预热的采样次数的最大阈值(仅PyTorch场景支持),int类型,默认值为20。须配置"if_preheat": "true"。 | 否 |
68
-
69
- #### 无标杆比对数据存盘格式
70
-
71
- 无标杆比对在dump_path目录下输出结果文件free_benchmark.csv,如下示例:
72
-
73
- ![free_benchmark](./img/free_benchmark.png)
74
-
75
- | 字段 | 说明 |
76
- | ------------ | ------------------------------------------------------------ |
77
- | rank | Rank ID,int类型。 |
78
- | pert_mode | 扰动因子的类型,string类型。 |
79
- | stage | 前向或反向,string类型。 |
80
- | step | 迭代数,int类型。 |
81
- | api_name | API名称,string类型。 |
82
- | max_rel | 输出对比最大相对误差,float类型。 |
83
- | dtype | 输入的dtype,string类型。 |
84
- | shape | 输入的shape,tuple类型。 |
85
- | output_index | 如果输出为列表或元组,其中一个元素检测不一致,则会有该元素的index,否则为空,int类型。 |
86
-
87
- ### task配置为statistics
88
-
89
- | 参数名 | 说明 | 是否必选 |
90
- | ------------ | ------------------------------------------------------------ | -------- |
91
- | scope | PyTorch和MindSpore动态图场景dump范围,list[str]类型,默认未配置(list也未配置时表示dump所有API的数据)。需要在[]内配置两个模块名或API名,用于锁定区间,dump该范围内的数据。配置示例:"scope": ["MyModuleOP1", "MyModuleOP2"]。与level参数取值相关,level为L0和mix级别时,可配置模块名;level为L1级别时,可配置API名。MindSpore动态图场景当前仅支持配置为API名。 | 否 |
92
- | list | 自定义dump范围,list[str]类型,默认未配置(scope也未配置时表示dump所有API的数据)。包含如下配置方法:<br> PyTorch和MindSpore动态图场景配置具体的API全称,dump该API数据。配置示例:"list": ["Tensor.permute.1.forward", "Tensor.transpose.2.forward", "Torch.relu.3.backward"]。<br/> PyTorch和MindSpore动态图场景指定某一类API,dump某一类的API级别输入输出数据。配置示例:"list": ["relu"]。<br/> MindSpore静态图场景配置kernel_name,可以是算子的名称列表,也可以指定算子类型("level": "L2"时不支持),还可以配置算子名称的正则表达式(当字符串符合”name-regex(xxx)”格式时,后台则会将其作为正则表达式。例如,”name-regex(Default/.+)”可匹配算子名称以”Default/”开头的所有算子)。 | 否 |
93
- | data_mode | dump数据过滤,str类型。可取值"all"、"forward"、"backward"、"input"和"output",表示仅保存dump的数据中文件名包含"forward"、"backward"、"input"和"output"的前向、反向、输入或输出的dump文件。配置示例"data_mode": ["backward"]或"data_mode": ["forward", "backward"]。默认为["all"],即保存所有dump的数据。除了all参数只能单独配置外,其他参数可以自由组合。<br/>MindSpore静态图场景仅支持"all"、"input"和"output"参数,且各参数只能单独配置,不支持自由组合。 | 否 |
94
- | summary_mode | 控制dump文件输出的模式,str类型,仅PyTorch和MindSpore动态图场景支持,可取值md5(dump输出包含md5值以及API统计信息的dump.json文件,用于验证数据的完整性)、statistics(dump仅输出包含API统计信息的dump.json文件,默认值)。配置示例:"summary_mode": "md5"。 | 否 |
95
-
96
- ### task配置为tensor
97
-
98
- MindSpore静态图场景仅dump完整张量数据。
99
-
100
- | 参数名 | 说明 | 是否必选 |
101
- | -------------- | ------------------------------------------------------------ | -------- |
102
- | scope | PyTorch和MindSpore动态图场景dump范围,list[str]类型,默认未配置(list也未配置时表示dump所有API的数据)。需要在[]内配置两个模块名或API名,用于锁定区间,dump该范围内的数据。配置示例:"scope": ["MyModuleOP1", "MyModuleOP2"]。与level参数取值相关,level为L0和mix级别时,可配置模块名;level为L1级别时,可配置API名。 | 否 |
103
- | list | 自定义dump范围,list[str]类型,默认未配置(scope也未配置时表示dump所有API的数据)。包含如下配置方法:<br> PyTorch和MindSpore动态图场景配置具体的API全称,dump该API数据。配置示例:"list": ["Tensor.permute.1.forward", "Tensor.transpose.2.forward", "Torch.relu.3.backward"]。<br/> PyTorch和MindSpore动态图场景指定某一类API,dump某一类的API级别输入输出数据。配置示例:"list": ["relu"]。<br/> PyTorch和MindSpore动态图场景配置kernel_api,dump前向和反向API的kernel_api级别数据,其中dump反向API时需要配置**backward_input**参数。前向API配置示例:"list": ["Tensor.permute.1.forward"];反API配置示例:"list": ["Tensor.permute.1.forward"], "backward.input": "./npu_dump/step0/rank0/Functional.conv2d.1.backward.input.0.pt"]。<br/> MindSpore静态图场景配置kernel_name,可以是算子的名称列表,也可以指定算子类型("level": "L2"时不支持),还可以配置算子名称的正则表达式(当字符串符合”name-regex(xxx)”格式时,后台则会将其作为正则表达式。例如,”name-regex(Default/.+)”可匹配算子名称以”Default/”开头的所有算子)。 | 否 |
104
- | backward_input | 该输入文件为首次运行训练dump得到反向API输入的dump文件,str类型,仅PyTorch场景支持,默认未配置。例如若需要dump Functional.conv2d.1 API的反向过程的输入输出,则需要在dump目录下查找命名包含Functional.conv2d.1、backward和input字段的dump文件。配置示例:"backward_input": "./npu_dump/step0/rank0/Functional.conv2d.1.backward.input.0.pt"] | 否 |
105
- | data_mode | dump数据过滤,str类型。可取值"all"、"forward"、"backward"、"input"和"output",表示仅保存dump的数据中文件名包含"forward"、"backward"、"input"和"output"的前向、反向、输入或输出的dump文件。配置示例"data_mode": ["backward"]或"data_mode": ["forward", "backward"]。默认为["all"],即保存所有dump的数据。除了all参数只能单独配置外,其他参数可以自由组合。<br/>MindSpore静态图场景仅支持"all"、"input"和"output"参数,且各参数只能单独配置,不支持自由组合。 | 否 |
106
- | file_format | MindSpore静态图场景真实tensor数据的保存格式,str类型,可取值"bin"(dump的tensor文件为二进制格式,"level": "L1"时不支持)、"npy"(dump的tensor文件后缀为.npy,默认值)。 | 否 |
107
- | online_run_ut | 在线预检模式开关,bool类型,可取值true(开启)、false(关闭),默认未配置,表示关闭。配置为true表示开启在线预检。 | 否 |
108
- | nfs_path | 在线预检模式共享存储目录路径,str类型,用于GPU设备和NPU设备间进行通信。仅在online_run_ut字段配置为true时生效,未配置该参数后host和port不生效。 | 否 |
109
- | host | 在线预检模式局域网场景信息接收端IP,str类型,用于GPU设备和NPU设备间进行通信,NPU侧须配置为GPU侧的局域网IP地址。仅在online_run_ut字段配置为true时生效,局域网场景时,不能配置nfs_path参数,否则局域网场景不生效。 | 否 |
110
- | port | 在线预检模式局域网场景信息接收端端口号,int类型,用于GPU设备和NPU设备间进行通信,NPU侧须配置为GPU侧的端口号。仅在online_run_ut字段配置为true时生效,局域网场景时,不能配置nfs_path参数,否则局域网场景不生效。 | 否 |
111
-
112
- 说明: online_run_ut、nfs_path、host、port参数仅在线预检场景NPU环境生效,详细说明请参见[《在线精度预检》](../pytorch/doc/api_accuracy_checker_online.md)。
113
-
114
- ### task配置为overflow_check
115
-
116
- MindSpore静态图场景的jit_level为O0/O1时,不支持该功能,须配置jit_level为O2。请参见[mindspore.set_context](https://www.mindspore.cn/docs/zh-CN/r2.3.0/api_python/mindspore/mindspore.JitConfig.html#mindspore-jitconfig)配置jit_config。
117
-
118
- | 参数名 | 说明 | 是否必选 |
119
- | ------------- | ------------------------------------------------------------ | -------- |
120
- | overflow_nums | 控制溢出次数,int类型,仅MindSpore动态图和PyTorch场景支持,表示第N次溢出时,停止训练,过程中检测到溢出API对应kernel数据均dump。配置示例:"overflow_nums": 3。默认为1,即检测到1次溢出,训练停止,配置为-1时,表示持续检测溢出直到训练结束。 | 否 |
121
- | check_mode | MindSpore静态图场景kernel级别的溢出检测,str类型,可取值"aicore"(开启AI Core的溢出检测)、"atomic"(开启Atomic的溢出检测)、"all"(开启AI Core和Atomic的溢出检测,默认值)。配置示例"check_mode": "aicore"。 | 否 |
122
-
123
- ### task配置为run_ut
124
-
125
- 仅PyTorch场景支持。
126
-
127
- | 参数名称 | 说明 | 是否必选 |
128
- |-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------|------|
129
- | white_list | API dump白名单,仅对指定的API进行dump。配置示例:"white_list": ["conv1d", "conv2d"]。默认未配置白名单,即dump全量API数据。 | 否 |
130
- | black_list | API dump黑名单,被指定的API不进行dump。配置示例:"black_list": ["conv1d", "conv2d"]。默认未配置黑名单,即dump全量API数据。 | 否 |
131
- | error_data_path | 配置保存精度未达标的API输入输出数据路径,默认为当前路径。配置示例"error_data_path": "./"。 | 否 |
132
- | is_online | 在线预检模式开关,bool类型,可取值true(开启)、false(关闭),默认关闭。 | 否 |
133
- | nfs_path | 在线预检模式共享存储目录路径,str类型,用于GPU设备和NPU设备间进行通信。配置该参数后host和port不生效,仅在is_online字段配置为true时生效。 | 否 |
134
- | host | 在线预检模式局域网场景信息接收端IP,str类型,用于GPU设备和NPU设备间进行通信,GPU侧配置为本机地址127.0.0.1或本机局域网IP。局域网场景时,不能配置nfs_path参数,否则局域网场景不生效。仅在is_online字段配置为true时生效。 | 否 |
135
- | port | 在线预检模式局域网场景信息接收端端口号,int类型,用于GPU设备和NPU设备间进行通信,GPU侧配置为本机可用端口。局域网场景时,不能配置nfs_path参数,否则局域网场景不生效。仅在is_online字段配置为true时生效。 | 否 |
136
- | rank_list | 指定在线预检的Rank ID,默认值为[0],list[int]类型,应配置为大于等于0的整数,且须根据实际卡的Rank ID配置,若所配置的值大于实际训练所运行的卡的Rank ID,则在线预检输出数据为空。GPU和NPU须配置一致。仅在is_online字段配置为true时生效。 | 否 |
137
-
138
- 说明:
139
- <br>(1)white_list和black_list同时配置时,二者配置的API名单若无交集,则白名单生效,若API名单存在交集,则白名单排除的部分以及交集的API不进行dump。
140
- <br>(2)is_online、nfs_path、host、port、rank_list等字段仅在线预检场景GPU机器生效,详细说明见[《在线精度预检》](../pytorch/doc/api_accuracy_checker_online.md)
141
-
142
- ## 配置示例
143
-
144
- 以下示例包含当前支持的所有场景可配置的完整参数。
145
-
146
- ### PyTorch场景task配置为free_benchmark
147
-
148
- ```json
149
- {
150
- "task": "free_benchmark",
151
- "dump_path": "/home/data_dump",
152
- "rank": [],
153
- "step": [],
154
- "level": "L1",
155
- "seed": 1234,
156
- "is_deterministic": false,
157
- "enable_dataloader": false,
158
-
159
- "free_benchmark": {
160
- "scope": [],
161
- "list": ["conv2d"],
162
- "fuzz_device": "npu",
163
- "pert_mode": "improve_precision",
164
- "handler_type": "check",
165
- "fuzz_level": "L1",
166
- "fuzz_stage": "forward",
167
- "if_preheat": false,
168
- "preheat_step": 15,
169
- "max_sample": 20
170
- }
171
- }
172
- ```
173
-
174
- ### PyTorch场景task配置为statistics
175
-
176
- ```json
177
- {
178
- "task": "statistics",
179
- "dump_path": "/home/data_dump",
180
- "rank": [],
181
- "step": [],
182
- "level": "L1",
183
- "seed": 1234,
184
- "is_deterministic": false,
185
- "enable_dataloader": false,
186
-
187
- "statistics": {
188
- "scope": [],
189
- "list": [],
190
- "data_mode": ["all"],
191
- "summary_mode": "statistics"
192
- }
193
- }
194
- ```
195
-
196
- ### PyTorch场景task配置为tensor
197
-
198
- ```json
199
- {
200
- "task": "tensor",
201
- "dump_path": "/home/data_dump",
202
- "rank": [],
203
- "step": [],
204
- "level": "L1",
205
- "seed": 1234,
206
- "is_deterministic": false,
207
- "enable_dataloader": false,
208
-
209
- "tensor": {
210
- "scope": [],
211
- "list":[],
212
- "data_mode": ["all"],
213
- "backward_input": ""
214
- }
215
- }
216
- ```
217
-
218
- ### PyTorch场景task配置为overflow_check
219
-
220
- ```json
221
- {
222
- "task": "overflow_check",
223
- "dump_path": "/home/data_dump",
224
- "rank": [],
225
- "step": [],
226
- "level": "L1",
227
- "seed": 1234,
228
- "is_deterministic": false,
229
- "enable_dataloader": false,
230
-
231
- "overflow_check": {
232
- "overflow_nums": 1
233
- }
234
- }
235
- ```
236
-
237
- ### PyTorch场景task配置为run_ut
238
-
239
- ```json
240
- {
241
- "task": "run_ut",
242
- "dump_path": "/home/data_dump",
243
- "rank": [],
244
- "step": [],
245
- "level": "L1",
246
- "seed": 1234,
247
- "is_deterministic": false,
248
- "enable_dataloader": false,
249
-
250
- "run_ut": {
251
- "white_list": [],
252
- "black_list": [],
253
- "error_data_path": "./"
254
- }
255
- }
256
- ```
257
-
258
- ### MindSpore静态图场景task配置为statistics
259
-
260
- ```json
261
- {
262
- "task": "statistics",
263
- "dump_path": "/home/data_dump",
264
- "rank": [],
265
- "step": [],
266
- "level": "L2",
267
-
268
- "statistics": {
269
- "list": [],
270
- "data_mode": ["all"],
271
- "summary_mode": "statistics"
272
- }
273
- }
274
- ```
275
-
276
- ### MindSpore静态图场景task配置为tensor
277
-
278
- ```json
279
- {
280
- "task": "tensor",
281
- "dump_path": "/home/data_dump",
282
- "rank": [],
283
- "step": [],
284
- "level": "L2",
285
-
286
- "tensor": {
287
- "list":[],
288
- "data_mode": ["all"],
289
- "backward_input": ""
290
- }
291
- }
292
- ```
293
-
294
- ### MindSpore静态图场景task配置为overflow_check
295
-
296
- ```json
297
- {
298
- "task": "overflow_check",
299
- "dump_path": "/home/data_dump",
300
- "rank": [],
301
- "step": [],
302
- "level": "L2",
303
-
304
- "overflow_check": {
305
- "check_mode": "all"
306
- }
307
- }
308
- ```
309
-
310
- ### MindSpore动态图场景task配置为free_benchmark
311
-
312
- ```json
313
- {
314
- "task": "free_benchmark",
315
- "dump_path": "/home/data_dump",
316
- "rank": [],
317
- "step": [],
318
- "level": "L1",
319
-
320
- "free_benchmark": {
321
- "list": ["mindspore.ops.add"],
322
- "fuzz_device": "npu",
323
- "pert_mode": "improve_precision",
324
- "handler_type": "check",
325
- "fuzz_level": "L1",
326
- "fuzz_stage": "forward"
327
- }
328
- }
329
- ```
330
-
331
- ### MindSpore动态图场景task配置为statistics
332
-
333
- ```json
334
- {
335
- "task": "statistics",
336
- "dump_path": "/home/data_dump",
337
- "rank": [],
338
- "step": [],
339
- "level": "L1",
340
-
341
- "statistics": {
342
- "scope": [],
343
- "list": [],
344
- "data_mode": ["all"],
345
- "summary_mode": "statistics"
346
- }
347
- }
348
- ```
349
-
350
- ### MindSpore动态图场景task配置为tensor
351
-
352
- ```json
353
- {
354
- "task": "tensor",
355
- "dump_path": "/home/data_dump",
356
- "rank": [],
357
- "step": [],
358
- "level": "L1",
359
-
360
- "tensor": {
361
- "scope": [],
362
- "list":[],
363
- "data_mode": ["all"],
364
- }
365
- }
366
- ```
367
-
368
- ### MindSpore动态图场景task配置为overflow_check
369
-
370
- ```json
371
- {
372
- "task": "overflow_check",
373
- "dump_path": "/home/data_dump",
374
- "rank": [],
375
- "step": [],
376
- "level": "L1",
377
-
378
- "overflow_check": {
379
- "overflow_nums": 1
380
- }
381
- }
382
- ```
383
-
384
- ## 附录
385
-
386
- ### 模块级精度数据dump说明
387
-
388
- 仅PyTorch场景支持。
389
-
390
- 大模型场景下,通常不是简单的利用自动迁移能力实现GPU到NPU的训练脚本迁移,而是会对NPU网络进行一系列针对性的适配,因此,常常会造成迁移后的NPU模型存在部分子结构不能与GPU原始模型完全对应。模型结构不一致导致API调用类型及数量不一致,若直接按照API粒度进行精度数据dump和比对,则无法完全比对所有的API。
391
-
392
- 本节介绍的功能是对模型中的大粒度模块进行数据dump,使其比对时,对于无法以API粒度比对的模块可以直接以模块粒度进行比对。
393
-
394
- 模块指的是继承自nn.Module类模块,通常情况下这类模块就是一个小模型,可以被视为一个整体,dump数据时以模块为粒度进行dump。
395
-
396
- ### acl_config.json配置文件说明
397
-
398
- #### [config.json](./config.json)配置示例
399
-
400
- 当PyTorch场景level取"L2"时,须配置acl_config参数,并指定acl_config.json文件(用于指定L2 kernel级dump的配置),此时config.json文件配置示例如下:
401
-
402
- - 前向kernel dump配置示例:
403
-
404
- "scope"配置为前向API名称,仅支持配置一个API。
405
-
406
- ```json
407
- {
408
- "task": "tensor",
409
- "dump_path": "/home/data_dump",
410
- "level": "L2",
411
- "rank": [0],
412
- "step": [0],
413
- "is_deterministic": false,
414
- "tensor": {
415
- "scope": ["Tensor.__mul__.10.forward"],
416
- "list":[],
417
- "data_mode": ["all"],
418
- "backward_input": [""],
419
- "file_format": "npy"
420
- },
421
- "acl_config": "acl_config.json"
422
- }
423
- ```
424
-
425
- - 反向kernel dump配置示例:
426
-
427
- 执行反向kernel dump前需要先使用工具dump该API的反向输入,保存pt文件,在"backward_input"参数中传入该pt文件路径。
428
-
429
- "scope"配置为反向API名称,仅支持配置一个API。
430
-
431
- ```json
432
- {
433
- "task": "tensor",
434
- "dump_path": "/home/data_dump",
435
- "level": "L2",
436
- "rank": [0],
437
- "step": [0],
438
- "is_deterministic": false,
439
- "tensor": {
440
- "scope": ["Tensor.__mul__.10.backward"],
441
- "list":[],
442
- "data_mode": ["all"],
443
- "backward_input": ["Tensor.__mul__.10.backward.input.0.pt"],
444
- "file_format": "npy"
445
- },
446
- "acl_config": "acl_config.json"
447
- }
448
- ```
449
-
450
- #### acl_config.json配置示例
451
-
452
- acl_config.json文件须自行创建,配置示例如下:
453
-
454
- ```
455
- {
456
- "dump":
457
- {
458
- "dump_list":[],
459
- "dump_path":"./dump/output",
460
- "dump_mode":"all",
461
- "dump_op_switch":"on"
462
- }
463
- }
464
- ```
465
-
466
- **acl_config.json参数说明**
467
-
468
- | 字段名 | 说明 |
469
- | -------------- | ------------------------------------------------------------ |
470
- | dump_list | 待dump数据的API模型。为空,无需配置。 |
471
- | dump_path | dump数据文件存储到运行环境的目录,主要配置的是kernel级数据的存放路径。支持配置绝对路径或相对路径。dump_path须为已存在目录。 |
472
- | dump_mode | dump数据模式,配置如下: output:dump API的输出数据。默认值。 input:dump API的输入数据。 all:dump API的输入、输出数据。 |
473
- | dump_op_switch | 单API模型dump数据开关,配置如下:<br> off:关闭单API模型dump,默认值。<br> on:开启单API模型dump。 |
474
-
475
- **dump目录说明**
476
-
477
- 配置acl_config.json后,采集的kernel级数据会在{dump_path}/{time}/{deviceid}/{model_id}目录下生成,例如“/home/HwHiAiUser/output/20200808163566/0/0”
478
-
479
- ```
480
- ├── 20230131172437
481
- │ └── 1
482
- │ ├── 0
483
- │ │ ├── Add.Add.45.0.1675157077183551
484
- │ │ ├── Cast.trans_Cast_0.31.0.1675157077159449
485
- │ │ ├── Cast.trans_Cast_5.43.0.1675157077180129
486
- │ │ ├── MatMul.MatMul.39.0.1675157077172961
487
- │ │ ├── Mul.Mul.29.0.1675157077155731
488
- │ │ ├── NPUAllocFloatStatus.NPUAllocFloatStatus.24.0.1675157077145262
489
- │ │ ├── TransData.trans_TransData_1.33.0.1675157077162791
490
- │ │ └── TransData.trans_TransData_4.41.0.1675157077176648
491
- │ ├── 1701737061
492
- │ │ └── Cast.trans_Cast_2.35.0.1675157077166214
493
- │ ├── 25
494
- │ │ └── NPUClearFloatStatus.NPUClearFloatStatus.26.0.1675157077150342
495
- │ └── 68
496
- │ └── TransData.trans_TransData_3.37.0.1675157077169473
497
- ```
498
-
499
- ### 固定随机数范围
500
-
501
- 仅PyTorch场景支持。
502
-
503
- seed_all函数可固定随机数的范围如下表。
504
-
505
- | API | 固定随机数 |
506
- | ---------------------------------------- | --------------------------- |
507
- | os.environ['PYTHONHASHSEED'] = str(seed) | 禁止Python中的hash随机化 |
508
- | random.seed(seed) | 设置random随机生成器的种子 |
509
- | np.random.seed(seed) | 设置numpy中随机生成器的种子 |
510
- | torch.manual_seed(seed) | 设置当前CPU的随机种子 |
511
- | torch.cuda.manual_seed(seed) | 设置当前GPU的随机种子 |
512
- | torch.cuda.manual_seed_all(seed) | 设置所有GPU的随机种子 |
513
- | torch_npu.npu.manual_seed(seed) | 设置当前NPU的随机种子 |
514
- | torch_npu.npu.manual_seed_all(seed) | 设置所有NPU的随机种子 |
515
- | torch.backends.cudnn.enable=False | 关闭cuDNN |
516
- | torch.backends.cudnn.benchmark=False | cuDNN确定性地选择算法 |
517
- | torch.backends.cudnn.deterministic=True | cuDNN仅使用确定性的卷积算法 |
518
-
519
- 需要保证CPU或GPU以及NPU的模型输入完全一致,dump数据的比对才有意义,seed_all并不能保证模型输入完全一致,如下表所示场景需要保证输入的一致性。
520
-
521
- | 场景 | 固定方法 |
522
- | --------------- | ------------- |
523
- | 数据集的shuffle | 关闭shuffle。 |
524
- | dropout | 关闭dropout。 |
525
-
526
- 关闭shuffle示例:
527
-
528
- ```Python
529
- train_loader = torch.utils.data.DataLoader(
530
- train_dataset,
531
- batch_size = batch_size,
532
- shuffle = False,
533
- num_workers = num_workers
534
- )
535
- ```
536
-
537
- 关闭dropout:
538
-
539
- 在使用from msprobe.pytorch import PrecisionDebugger后,工具会自动将torch.nn.functional.dropout、torch.nn.functional.dropout2d、torch.nn.functional.dropout3d、torch.nn.Dropout、torch.nn.Dropout2d、torch.nn.Dropout3d的接口参数p置为0。
@@ -1,58 +0,0 @@
1
- # 精度比对工具
2
- msprobe精度比对工具主要通过对同一个模型,在两个不同的MindSpore环境下,输入相同的训练数据,在分别得到dump数据后,对这两个dump数据进行全量自动对比,从而快速定位不同版本之间的精度问题。
3
-
4
- 执行精度比对操作需要安装msprobe工具。详见《[MindStudio精度调试工具](../../README.md)》的“工具安装”章节。
5
-
6
- ## 命令行方式比对
7
-
8
- 精度比对工具目前使用方式为命令行形式,对MindSpore的dump数据仅支持单卡。
9
-
10
- 请先参见《[精度数据采集](./dump.md)》完成不同环境下MindSpore精度数据的采集。
11
-
12
- ### 操作步骤
13
-
14
- 1. 使用MindSpore进行dump,得到不同框架版本的dump数据。
15
-
16
- 2. 创建比对文件,文件内容及示例请参见“**比对文件**”。
17
-
18
- 3. 执行如下示例命令进行比对:
19
-
20
- ```shell
21
- msprobe -f mindspore compare -i ./compare.json -o ./output -s
22
- ```
23
-
24
- **完整参数说明**
25
-
26
- | 参数名 | 说明 | 是否必选 |
27
- |-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
28
- | -i或--input_path | 指定比对文件路径。比对文件内容及示例请参见“**比对文件**”。 | 是 |
29
- | -o或--output_path | 配置比对结果文件存盘目录。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。 | 是 |
30
- | -s或--stack_mode | 配置stack_mode的开关。仅当**比对文件**配置"stack_path"需要开启。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
31
- | -c或--compare_only | 仅比对开关。未配置默认关闭仅比对,使用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度不达标节点(在比对结果文件中的“Accuracy Reached or Not”列显示为No),并给出问题可能产生的原因(打屏展示并生成advisor_{timestamp}.txt文件)。该参数默认未配置,使用自动精度分析,通过配置该参数开启仅比对,关闭自动精度分析,仅输出比对结果表格。 | 否 |
32
- | -f或--fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
33
-
34
- 4. 查看比对结果,请详见PyTorch目录下的《[精度比对工具](../../pytorch/doc/ptdbg_ascend_compare.md)》的“比对结果分析”章节。
35
-
36
- ### 比对文件
37
-
38
- 以在当前目录创建./compare.json为例,单卡场景示例如下:
39
-
40
-
41
- ```json
42
- {
43
- "npu_path": "./npu_dump/dump.json",
44
- "bench_path": "./bench_dump/dump.json",
45
- "stack_path": "./npu_dump/stack.json",
46
- "is_print_compare_log": true
47
- }
48
- ```
49
-
50
-
51
- **参数说明**
52
-
53
- | 参数名 | 说明 | 是否必选 |
54
- | -------------------- | ------------------------------------------------------------ | ------------------ |
55
- | npu_path | 配置NPU环境下的dump.json文件(单卡场景)。数据类型:str。 | 是 |
56
- | bench_path | 配置CPU、GPU或NPU环境下的dump.json文件(单卡场景)。数据类型:str。 | 是 |
57
- | stack_path | 配置NPU dump目录下的stack.json文件。数据类型:str。 | 是|
58
- | is_print_compare_log | 配置是否开启日志打屏。可取值True或False,默认为True。数据类型:bool | 否 |