mindstudio-probe 1.0.1__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 (323) hide show
  1. {mindstudio_probe-1.0.1.dist-info → mindstudio_probe-1.0.4.dist-info}/LICENSE +201 -201
  2. {mindstudio_probe-1.0.1.dist-info → mindstudio_probe-1.0.4.dist-info}/METADATA +36 -30
  3. mindstudio_probe-1.0.4.dist-info/RECORD +276 -0
  4. {mindstudio_probe-1.0.1.dist-info → mindstudio_probe-1.0.4.dist-info}/WHEEL +1 -1
  5. {mindstudio_probe-1.0.1.dist-info → mindstudio_probe-1.0.4.dist-info}/entry_points.txt +1 -0
  6. msprobe/README.md +101 -182
  7. msprobe/__init__.py +1 -0
  8. msprobe/{config/config.json → config.json} +49 -27
  9. msprobe/core/__init__.py +0 -0
  10. msprobe/{pytorch → core}/advisor/advisor.py +124 -124
  11. msprobe/{pytorch → core}/advisor/advisor_const.py +59 -59
  12. msprobe/{pytorch → core}/advisor/advisor_result.py +58 -58
  13. msprobe/core/common/const.py +341 -241
  14. msprobe/core/common/exceptions.py +100 -88
  15. msprobe/core/common/{file_check.py → file_utils.py} +478 -265
  16. msprobe/core/common/log.py +76 -55
  17. msprobe/core/common/utils.py +385 -516
  18. msprobe/core/common_config.py +85 -58
  19. msprobe/core/compare/acc_compare.py +300 -0
  20. msprobe/core/compare/check.py +95 -0
  21. msprobe/core/compare/compare_cli.py +49 -0
  22. msprobe/core/compare/highlight.py +223 -0
  23. msprobe/core/compare/multiprocessing_compute.py +149 -0
  24. msprobe/{pytorch → core}/compare/npy_compare.py +295 -244
  25. msprobe/core/compare/utils.py +430 -0
  26. msprobe/core/data_dump/data_collector.py +154 -140
  27. msprobe/core/data_dump/data_processor/base.py +314 -245
  28. msprobe/core/data_dump/data_processor/factory.py +59 -61
  29. msprobe/core/data_dump/data_processor/mindspore_processor.py +186 -0
  30. msprobe/core/data_dump/data_processor/pytorch_processor.py +366 -346
  31. msprobe/core/data_dump/json_writer.py +96 -116
  32. msprobe/core/data_dump/scope.py +178 -178
  33. msprobe/core/grad_probe/__init__.py +0 -0
  34. msprobe/core/grad_probe/constant.py +71 -0
  35. msprobe/core/grad_probe/grad_compare.py +171 -0
  36. msprobe/core/grad_probe/utils.py +64 -0
  37. msprobe/docs/01.installation.md +89 -0
  38. msprobe/docs/02.config_introduction.md +165 -0
  39. msprobe/docs/03.config_examples.md +247 -0
  40. msprobe/docs/04.acl_config_examples.md +76 -0
  41. msprobe/docs/05.data_dump_PyTorch.md +198 -0
  42. msprobe/docs/06.data_dump_MindSpore.md +243 -0
  43. msprobe/docs/07.accuracy_checker_PyTorch.md +274 -0
  44. msprobe/docs/08.accuracy_checker_online_PyTorch.md +198 -0
  45. msprobe/docs/09.accuracy_checker_MindSpore.md +68 -0
  46. msprobe/docs/10.accuracy_compare_PyTorch.md +245 -0
  47. msprobe/docs/11.accuracy_compare_MindSpore.md +202 -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 +164 -0
  52. msprobe/docs/17.grad_probe.md +207 -0
  53. msprobe/docs/FAQ_PyTorch.md +177 -0
  54. msprobe/docs/S02.report_free_benchmarking_validation_performance_baseline.md +146 -0
  55. msprobe/docs/img/free_benchmark_framework.png +0 -0
  56. msprobe/docs/img/grad_probe_image-1.png +0 -0
  57. msprobe/docs/img/grad_probe_image-2.png +0 -0
  58. msprobe/docs/img/grad_probe_image-3.png +0 -0
  59. msprobe/docs/img/grad_probe_image-4.png +0 -0
  60. msprobe/docs/img/grad_probe_image.png +0 -0
  61. msprobe/mindspore/__init__.py +1 -1
  62. msprobe/mindspore/api_accuracy_checker/__init__.py +0 -0
  63. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +255 -0
  64. msprobe/mindspore/api_accuracy_checker/api_info.py +69 -0
  65. msprobe/mindspore/api_accuracy_checker/api_runner.py +156 -0
  66. msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +197 -0
  67. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +6 -0
  68. msprobe/mindspore/api_accuracy_checker/compute_element.py +239 -0
  69. msprobe/mindspore/api_accuracy_checker/main.py +9 -0
  70. msprobe/mindspore/api_accuracy_checker/type_mapping.py +114 -0
  71. msprobe/mindspore/api_accuracy_checker/utils.py +80 -0
  72. msprobe/mindspore/cell_processor.py +34 -0
  73. msprobe/mindspore/common/const.py +106 -0
  74. msprobe/mindspore/common/log.py +38 -0
  75. msprobe/mindspore/common/utils.py +81 -0
  76. msprobe/mindspore/compare/distributed_compare.py +75 -0
  77. msprobe/mindspore/compare/ms_compare.py +219 -0
  78. msprobe/mindspore/compare/ms_graph_compare.py +348 -0
  79. msprobe/mindspore/compare/ms_to_pt_api.yaml +399 -0
  80. msprobe/mindspore/debugger/debugger_config.py +66 -51
  81. msprobe/mindspore/debugger/precision_debugger.py +126 -32
  82. msprobe/mindspore/dump/dump_tool_factory.py +35 -38
  83. msprobe/mindspore/dump/hook_cell/api_registry.py +118 -0
  84. msprobe/mindspore/dump/hook_cell/hook_cell.py +55 -0
  85. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +922 -0
  86. msprobe/mindspore/dump/hook_cell/wrap_api.py +113 -0
  87. msprobe/mindspore/dump/jit_dump.py +72 -0
  88. msprobe/mindspore/dump/kernel_graph_dump.py +59 -60
  89. msprobe/mindspore/dump/kernel_kbyk_dump.py +64 -0
  90. msprobe/mindspore/free_benchmark/__init__.py +0 -0
  91. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +116 -0
  92. msprobe/mindspore/free_benchmark/common/__init__.py +0 -0
  93. msprobe/mindspore/free_benchmark/common/config.py +12 -0
  94. msprobe/mindspore/free_benchmark/common/handler_params.py +17 -0
  95. msprobe/mindspore/free_benchmark/common/utils.py +71 -0
  96. msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +842 -0
  97. msprobe/mindspore/free_benchmark/decorator/__init__.py +0 -0
  98. msprobe/mindspore/free_benchmark/decorator/dec_forward.py +43 -0
  99. msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +107 -0
  100. msprobe/mindspore/free_benchmark/handler/__init__.py +0 -0
  101. msprobe/mindspore/free_benchmark/handler/base_handler.py +90 -0
  102. msprobe/mindspore/free_benchmark/handler/check_handler.py +41 -0
  103. msprobe/mindspore/free_benchmark/handler/fix_handler.py +36 -0
  104. msprobe/mindspore/free_benchmark/handler/handler_factory.py +21 -0
  105. msprobe/mindspore/free_benchmark/perturbation/add_noise.py +67 -0
  106. msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +21 -0
  107. msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +63 -0
  108. msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +51 -0
  109. msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +35 -0
  110. msprobe/mindspore/free_benchmark/perturbation/no_change.py +12 -0
  111. msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +29 -0
  112. msprobe/mindspore/free_benchmark/self_check_tool_factory.py +33 -0
  113. msprobe/mindspore/grad_probe/__init__.py +0 -0
  114. msprobe/mindspore/grad_probe/global_context.py +90 -0
  115. msprobe/mindspore/grad_probe/grad_analyzer.py +231 -0
  116. msprobe/mindspore/grad_probe/grad_monitor.py +27 -0
  117. msprobe/mindspore/grad_probe/grad_stat_csv.py +132 -0
  118. msprobe/mindspore/grad_probe/hook.py +94 -0
  119. msprobe/mindspore/grad_probe/utils.py +30 -0
  120. msprobe/mindspore/ms_config.py +128 -78
  121. msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +44 -45
  122. msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +34 -32
  123. msprobe/mindspore/runtime.py +4 -0
  124. msprobe/mindspore/service.py +378 -0
  125. msprobe/mindspore/task_handler_factory.py +24 -21
  126. msprobe/msprobe.py +105 -67
  127. msprobe/pytorch/__init__.py +4 -4
  128. msprobe/pytorch/api_accuracy_checker/common/config.py +53 -50
  129. msprobe/pytorch/api_accuracy_checker/common/utils.py +214 -224
  130. msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +213 -216
  131. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +606 -545
  132. msprobe/pytorch/api_accuracy_checker/compare/api_precision_standard.yaml +132 -132
  133. msprobe/pytorch/api_accuracy_checker/compare/api_precision_threshold.yaml +390 -390
  134. msprobe/pytorch/api_accuracy_checker/compare/compare.py +386 -345
  135. msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +73 -73
  136. msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +245 -248
  137. msprobe/pytorch/api_accuracy_checker/config.yaml +10 -4
  138. msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +335 -328
  139. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +200 -203
  140. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +133 -127
  141. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +592 -493
  142. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +70 -7
  143. msprobe/pytorch/api_accuracy_checker/run_ut/torch_ut_setting.json +7 -4
  144. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/__init__.py +0 -0
  145. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +197 -0
  146. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +325 -0
  147. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +204 -0
  148. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +219 -0
  149. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/ssl_config.py +10 -0
  150. msprobe/pytorch/bench_functions/__init__.py +15 -0
  151. msprobe/pytorch/bench_functions/apply_adam_w.py +28 -0
  152. msprobe/pytorch/bench_functions/confusion_transpose.py +19 -0
  153. msprobe/pytorch/bench_functions/fast_gelu.py +55 -0
  154. msprobe/pytorch/bench_functions/layer_norm_eval.py +6 -0
  155. msprobe/pytorch/bench_functions/linear.py +12 -0
  156. msprobe/pytorch/bench_functions/matmul_backward.py +48 -0
  157. msprobe/pytorch/bench_functions/npu_fusion_attention.py +509 -0
  158. msprobe/pytorch/bench_functions/rms_norm.py +15 -0
  159. msprobe/pytorch/bench_functions/rotary_mul.py +52 -0
  160. msprobe/pytorch/bench_functions/scaled_mask_softmax.py +26 -0
  161. msprobe/pytorch/bench_functions/swiglu.py +55 -0
  162. msprobe/pytorch/common/__init__.py +2 -2
  163. msprobe/pytorch/common/compare_script.template +14 -14
  164. msprobe/pytorch/common/log.py +20 -31
  165. msprobe/pytorch/common/parse_json.py +39 -37
  166. msprobe/pytorch/common/utils.py +305 -224
  167. msprobe/pytorch/compare/distributed_compare.py +66 -111
  168. msprobe/pytorch/compare/mapping.yaml +607 -607
  169. msprobe/pytorch/compare/match.py +34 -36
  170. msprobe/pytorch/compare/pt_compare.py +50 -0
  171. msprobe/pytorch/debugger/debugger_config.py +95 -86
  172. msprobe/pytorch/debugger/precision_debugger.py +125 -95
  173. msprobe/pytorch/free_benchmark/__init__.py +8 -8
  174. msprobe/pytorch/free_benchmark/common/constant.py +70 -67
  175. msprobe/pytorch/free_benchmark/common/counter.py +71 -71
  176. msprobe/pytorch/free_benchmark/common/enums.py +37 -37
  177. msprobe/pytorch/free_benchmark/common/params.py +129 -129
  178. msprobe/pytorch/free_benchmark/common/utils.py +102 -98
  179. msprobe/pytorch/free_benchmark/compare/grad_saver.py +179 -183
  180. msprobe/pytorch/free_benchmark/compare/single_benchmark.py +104 -104
  181. msprobe/pytorch/free_benchmark/main.py +105 -102
  182. msprobe/pytorch/free_benchmark/perturbed_layers/base_layer.py +13 -13
  183. msprobe/pytorch/free_benchmark/perturbed_layers/layer_factory.py +41 -41
  184. msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +90 -90
  185. msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +104 -104
  186. msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +63 -63
  187. msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +68 -68
  188. msprobe/pytorch/free_benchmark/perturbed_layers/npu/no_change.py +28 -28
  189. msprobe/pytorch/free_benchmark/perturbed_layers/npu/npu_base_layser.py +45 -45
  190. msprobe/pytorch/free_benchmark/perturbed_layers/run_cpu.py +19 -19
  191. msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +217 -203
  192. msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +39 -39
  193. msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +23 -23
  194. msprobe/pytorch/free_benchmark/result_handlers/handler_factory.py +30 -31
  195. msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +170 -170
  196. msprobe/pytorch/function_factory.py +76 -0
  197. msprobe/pytorch/functional/dump_module.py +39 -39
  198. msprobe/pytorch/grad_probe/__init__.py +0 -0
  199. msprobe/pytorch/grad_probe/grad_monitor.py +91 -0
  200. msprobe/pytorch/grad_probe/grad_stat_csv.py +129 -0
  201. msprobe/pytorch/hook_module/api_registry.py +161 -161
  202. msprobe/pytorch/hook_module/hook_module.py +120 -109
  203. msprobe/pytorch/hook_module/support_wrap_ops.yaml +1879 -1876
  204. msprobe/pytorch/hook_module/utils.py +30 -29
  205. msprobe/pytorch/hook_module/wrap_aten.py +110 -100
  206. msprobe/pytorch/hook_module/wrap_distributed.py +78 -75
  207. msprobe/pytorch/hook_module/wrap_functional.py +105 -108
  208. msprobe/pytorch/hook_module/wrap_npu_custom.py +93 -73
  209. msprobe/pytorch/hook_module/wrap_tensor.py +71 -72
  210. msprobe/pytorch/hook_module/wrap_torch.py +86 -88
  211. msprobe/pytorch/hook_module/wrap_vf.py +62 -64
  212. msprobe/pytorch/module_processer.py +138 -98
  213. msprobe/pytorch/online_dispatch/__init__.py +20 -20
  214. msprobe/pytorch/online_dispatch/compare.py +236 -236
  215. msprobe/pytorch/online_dispatch/dispatch.py +271 -273
  216. msprobe/pytorch/online_dispatch/dump_compare.py +155 -186
  217. msprobe/pytorch/online_dispatch/single_compare.py +391 -391
  218. msprobe/pytorch/online_dispatch/torch_ops_config.yaml +49 -49
  219. msprobe/pytorch/online_dispatch/utils.py +130 -187
  220. msprobe/pytorch/parse.py +4 -4
  221. msprobe/pytorch/parse_tool/cli.py +32 -32
  222. msprobe/pytorch/parse_tool/lib/compare.py +260 -259
  223. msprobe/pytorch/parse_tool/lib/config.py +52 -51
  224. msprobe/pytorch/parse_tool/lib/file_desc.py +31 -31
  225. msprobe/pytorch/parse_tool/lib/interactive_cli.py +102 -102
  226. msprobe/pytorch/parse_tool/lib/parse_exception.py +54 -54
  227. msprobe/pytorch/parse_tool/lib/parse_tool.py +158 -158
  228. msprobe/pytorch/parse_tool/lib/utils.py +316 -367
  229. msprobe/pytorch/parse_tool/lib/visualization.py +85 -90
  230. msprobe/pytorch/pt_config.py +188 -93
  231. msprobe/pytorch/service.py +246 -167
  232. mindstudio_probe-1.0.1.dist-info/RECORD +0 -228
  233. msprobe/config/README.md +0 -397
  234. msprobe/mindspore/doc/dump.md +0 -65
  235. msprobe/mindspore/dump/api_kbk_dump.py +0 -55
  236. msprobe/pytorch/compare/acc_compare.py +0 -1024
  237. msprobe/pytorch/compare/highlight.py +0 -100
  238. msprobe/pytorch/doc/FAQ.md +0 -193
  239. msprobe/pytorch/doc/api_accuracy_checker.md +0 -269
  240. msprobe/pytorch/doc/atat/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
  241. msprobe/pytorch/doc/dump.md +0 -207
  242. msprobe/pytorch/doc/ptdbg_ascend_compare.md +0 -176
  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/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
  247. msprobe/test/core_ut/common/test_utils.py +0 -345
  248. msprobe/test/core_ut/data_dump/test_data_collector.py +0 -47
  249. msprobe/test/core_ut/data_dump/test_json_writer.py +0 -183
  250. msprobe/test/core_ut/data_dump/test_scope.py +0 -151
  251. msprobe/test/core_ut/test_common_config.py +0 -152
  252. msprobe/test/core_ut/test_file_check.py +0 -218
  253. msprobe/test/core_ut/test_log.py +0 -109
  254. msprobe/test/mindspore_ut/test_api_kbk_dump.py +0 -51
  255. msprobe/test/mindspore_ut/test_debugger_config.py +0 -42
  256. msprobe/test/mindspore_ut/test_dump_tool_factory.py +0 -51
  257. msprobe/test/mindspore_ut/test_kernel_graph_dump.py +0 -66
  258. msprobe/test/mindspore_ut/test_kernel_graph_overflow_check.py +0 -63
  259. msprobe/test/mindspore_ut/test_ms_config.py +0 -69
  260. msprobe/test/mindspore_ut/test_overflow_check_tool_factory.py +0 -51
  261. msprobe/test/mindspore_ut/test_precision_debugger.py +0 -56
  262. msprobe/test/mindspore_ut/test_task_handler_factory.py +0 -58
  263. msprobe/test/pytorch_ut/advisor/test_advisor.py +0 -83
  264. msprobe/test/pytorch_ut/api_accuracy_checker/common/test_common_utils.py +0 -108
  265. msprobe/test/pytorch_ut/api_accuracy_checker/common/test_config.py +0 -39
  266. msprobe/test/pytorch_ut/api_accuracy_checker/compare/test_algorithm.py +0 -112
  267. msprobe/test/pytorch_ut/api_accuracy_checker/compare/test_api_precision_compare.py +0 -77
  268. msprobe/test/pytorch_ut/api_accuracy_checker/compare/test_compare.py +0 -125
  269. msprobe/test/pytorch_ut/api_accuracy_checker/compare/test_compare_column.py +0 -10
  270. msprobe/test/pytorch_ut/api_accuracy_checker/compare/test_compare_utils.py +0 -43
  271. msprobe/test/pytorch_ut/api_accuracy_checker/run_ut/dump.json +0 -179
  272. msprobe/test/pytorch_ut/api_accuracy_checker/run_ut/forward.json +0 -63
  273. msprobe/test/pytorch_ut/api_accuracy_checker/run_ut/test_data_generate.py +0 -99
  274. msprobe/test/pytorch_ut/api_accuracy_checker/run_ut/test_multi_run_ut.py +0 -115
  275. msprobe/test/pytorch_ut/api_accuracy_checker/run_ut/test_run_ut.py +0 -72
  276. msprobe/test/pytorch_ut/compare/test_acc_compare.py +0 -17
  277. msprobe/test/pytorch_ut/free_benchmark/perturbed_layers/test_perturbed_layser.py +0 -105
  278. msprobe/test/pytorch_ut/free_benchmark/result_handlers/test_result_handler.py +0 -121
  279. msprobe/test/pytorch_ut/free_benchmark/test_main.py +0 -101
  280. msprobe/test/pytorch_ut/functional/test_dump_module.py +0 -15
  281. msprobe/test/pytorch_ut/hook_module/test_api_registry.py +0 -130
  282. msprobe/test/pytorch_ut/hook_module/test_hook_module.py +0 -42
  283. msprobe/test/pytorch_ut/hook_module/test_wrap_aten.py +0 -65
  284. msprobe/test/pytorch_ut/hook_module/test_wrap_distributed.py +0 -35
  285. msprobe/test/pytorch_ut/hook_module/test_wrap_functional.py +0 -20
  286. msprobe/test/pytorch_ut/hook_module/test_wrap_tensor.py +0 -35
  287. msprobe/test/pytorch_ut/hook_module/test_wrap_torch.py +0 -43
  288. msprobe/test/pytorch_ut/hook_module/test_wrap_vf.py +0 -11
  289. msprobe/test/pytorch_ut/test_pt_config.py +0 -69
  290. msprobe/test/pytorch_ut/test_service.py +0 -59
  291. msprobe/test/resources/advisor.txt +0 -3
  292. msprobe/test/resources/compare_result_20230703104808.csv +0 -9
  293. msprobe/test/resources/compare_result_without_accuracy.csv +0 -9
  294. msprobe/test/resources/config.yaml +0 -3
  295. msprobe/test/resources/npu_test.pkl +0 -8
  296. msprobe/test/run_test.sh +0 -30
  297. msprobe/test/run_ut.py +0 -58
  298. msprobe/test/test_module_processer.py +0 -64
  299. {mindstudio_probe-1.0.1.dist-info → mindstudio_probe-1.0.4.dist-info}/top_level.txt +0 -0
  300. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_1.png +0 -0
  301. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_2.png +0 -0
  302. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_3.png +0 -0
  303. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_4.png +0 -0
  304. /msprobe/{pytorch/doc → docs}/img/GPT-3_1.png +0 -0
  305. /msprobe/{pytorch/doc → docs}/img/GPT-3_2.png +0 -0
  306. /msprobe/{pytorch/doc → docs}/img/GPT-3_3.png +0 -0
  307. /msprobe/{pytorch/doc → docs}/img/GPT-3_4.png +0 -0
  308. /msprobe/{pytorch/doc → docs}/img/GPT-3_5.png +0 -0
  309. /msprobe/{pytorch/doc → docs}/img/GPT-3_6.png +0 -0
  310. /msprobe/{pytorch/doc → docs}/img/GPT-3_7.png +0 -0
  311. /msprobe/{pytorch/doc → docs}/img/GPT-3_8.png +0 -0
  312. /msprobe/{pytorch/doc → docs}/img/YOLOV5S_1.png +0 -0
  313. /msprobe/{pytorch/doc → docs}/img/YOLOV5S_2.png +0 -0
  314. /msprobe/{pytorch/doc → docs}/img/accuracy_checking_details.png +0 -0
  315. /msprobe/{pytorch/doc → docs}/img/accuracy_checking_result.png +0 -0
  316. /msprobe/{pytorch/doc → docs}/img/api_precision_compare_details.png +0 -0
  317. /msprobe/{pytorch/doc → docs}/img/api_precision_compare_result.png +0 -0
  318. /msprobe/{pytorch/doc → docs}/img/auto_analyze_log.png +0 -0
  319. /msprobe/{pytorch/doc → docs}/img/compare_result_pkl.png +0 -0
  320. /msprobe/{pytorch/doc → docs}/img/compare_result_pkl_md5.png.png +0 -0
  321. /msprobe/{pytorch/doc → docs}/img/cpu_info.png +0 -0
  322. /msprobe/{config → docs}/img/free_benchmark.png +0 -0
  323. /msprobe/{pytorch/doc → docs}/img/module_compare.png +0 -0
@@ -0,0 +1,243 @@
1
+ # MindSpore 场景的精度数据采集
2
+
3
+ msprobe 工具主要通过在训练脚本内添加 dump 接口、启动训练的方式采集精度数据。目前,静态图场景仅支持 kernel 级数据采集,对应 config.json 配置中的 "L2" level;动态图场景支持cell、API、kernel级数据采集,对应 config.json 配置中的 "L0"、"L1" 、"L2" level。
4
+
5
+ 精度数据采集功能的配置示例见[MindSpore 静态图场景下 task 配置为 statistics](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#21-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-statistics)、[MindSpore 静态图场景下 task 配置为 tensor](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#22-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-tensor)、[MindSpore 动态图场景下 task 配置为 statistics](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#31-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-statistics)、[MindSpore 动态图场景下 task 配置为 tensor](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#32-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-tensor)。
6
+
7
+ 动态图 API 级 dump 时,本工具提供固定的 API 支持列表,仅支持对列表中的 API 进行精度数据采集。一般情况下,无需修改该列表,而是通过config.json中的scope/list字段进行 dump API 指定。若需要改变 API 支持列表,可以在 `msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml` 文件内手动修改,如下示例:
8
+
9
+ ```yaml
10
+ ops: # ops为算子类别,找到对应的类别,在该类别下按照下列格式删除或添加API
11
+ - adaptive_avg_pool1d
12
+ - adaptive_avg_pool2d
13
+ - adaptive_avg_pool3d
14
+ ```
15
+
16
+ ## 1 接口介绍
17
+
18
+ ### 1.1 msprobe.mindspore.PrecisionDebugger
19
+
20
+ **功能说明**:通过加载 dump 配置文件的方式来确定 dump 操作的详细配置。
21
+
22
+ **原型**:
23
+
24
+ ```Python
25
+ PrecisionDebugger(config_path=None)
26
+ ```
27
+
28
+ 1. config_path:指定 dump 配置文件路径,string 类型。参数示例:"./config.json"。未配置该路径时,默认使用 [config.json](../config.json) 文件的默认配置,配置选项含义可见 [config.json 介绍](./02.config_introduction.md)。
29
+
30
+ #### 1.1.1 start
31
+
32
+ **功能说明**:启动精度数据采集。需在模型执行模式(静态图/动态图、O0/O1/O2编译等级)设置后调用。
33
+ 静态图场景下,必须在模型初始化及 mindspore.communication.init 调用前添加;动态图场景下,如果进行kernel级别("L2" level)dump或没有使用 [Model](https://www.mindspore.cn/tutorials/zh-CN/r2.3.1/advanced/model.html) 高阶 API 进行训练,则需要与 stop 函数一起添加在 for 循环内,否则只有需要传入model参数时,才使用该接口。
34
+
35
+ **原型**:
36
+
37
+ ```Python
38
+ start(model=None)
39
+ ```
40
+
41
+ 1. model:指具体的 mindspore.nn.Cell,默认不配置。Cell级别("L0" level)dump 时,传入 model 可以采集 model 内的所有Cell 对象数据。API级别("L1" level)dump 时,传入 model 可以采集 model 内包含 primitive op 对象在内的所有 API 数据,若不传入 model 参数,则只采集非 primitive op 的 API 数据。
42
+
43
+ #### 1.1.2 stop
44
+
45
+ **功能说明**:停止数据采集。在 **start** 函数之后的任意位置添加。需要与 start 函数一起添加在 for 循环内。若需要 dump 反向数据,则需要添加在反向计算代码之后。**仅未使用 Model 高阶 API 的动态图场景支持。**
46
+
47
+ **原型**:
48
+
49
+ ```Python
50
+ stop()
51
+ ```
52
+
53
+ #### 1.1.3 step
54
+
55
+ **功能说明**:在最后一个 **stop** 函数后或一个 step 训练结束的位置添加。**仅未使用 Model 高阶 API 的动态图场景支持。**
56
+
57
+ **原型**:
58
+
59
+ ```Python
60
+ step()
61
+ ```
62
+
63
+ ### 1.2 msprobe.mindspore.common.utils.MsprobeStep
64
+
65
+ **功能说明**:MindSpore Callback类,自动在每个step开始时调用start()接口,在每个step结束时调用stop()、step()接口。实现使用 Model 高阶 API 的动态图场景下 L0、L1 级别的精度数据采集控制,控制粒度为单个 **Step** ,而 PrecisionDebugger.start, PrecisionDebugger.stop 接口的控制粒度任意训练代码段。
66
+
67
+ **原型**:
68
+
69
+ ```Python
70
+ MsprobeStep(debugger)
71
+ ```
72
+
73
+ 1. debugger:PrecisionDebugger对象。
74
+
75
+ ## 2 示例代码
76
+
77
+ ### 2.1 MindSpore 静态图场景
78
+
79
+ ```Python
80
+ import mindspore as ms
81
+ ms.set_context(mode=ms.GRAPH_MODE, device_target="Ascend")
82
+
83
+ from msprobe.mindspore import PrecisionDebugger
84
+ debugger = PrecisionDebugger(config_path="./config.json")
85
+ debugger.start()
86
+ # 请勿将以上初始化流程置于模型实例化或mindspore.communication.init调用后
87
+ # ...
88
+ ```
89
+
90
+ ### 2.2 MindSpore 动态图场景
91
+
92
+ #### 2.2.1 未使用 Model 高阶 API(非 L2 级别)
93
+
94
+ ```Python
95
+ import mindspore as ms
96
+ ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
97
+
98
+ from msprobe.mindspore import PrecisionDebugger
99
+ debugger = PrecisionDebugger(config_path="./config.json")
100
+
101
+ # 模型、损失函数的定义以及初始化等操作
102
+ # ...
103
+ model = Network()
104
+ # 数据集迭代的地方往往是模型开始训练的地方
105
+ for data, label in data_loader:
106
+ debugger.start() # 进行L1级别下非primitive op采集时调用
107
+ # debugger.start(model) # 进行L0级别或L1级别下primitive op的数据采集时调用
108
+ # 如下是模型每个step执行的逻辑
109
+ grad_net = ms.grad(model)(data)
110
+ # ...
111
+ debugger.stop() # 关闭数据dump
112
+ debugger.step() # 结束一个step的dump
113
+ ```
114
+
115
+ #### 2.2.2 未使用 Model 高阶 API(L2 级别)
116
+
117
+ ```Python
118
+ import mindspore as ms
119
+ ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
120
+
121
+ from msprobe.mindspore import PrecisionDebugger
122
+ debugger = PrecisionDebugger(config_path="./config.json")
123
+ debugger.start()
124
+ # 请勿将以上初始化流程置于模型实例化或mindspore.communication.init调用后
125
+
126
+ # 模型、损失函数的定义以及初始化等操作
127
+ # ...
128
+ model = Network()
129
+ # 数据集迭代的地方往往是模型开始训练的地方
130
+ for data, label in data_loader:
131
+ # 如下是模型每个step执行的逻辑
132
+ grad_net = ms.grad(model)(data)
133
+ # ...
134
+ ```
135
+
136
+ #### 2.2.3 使用 Model 高阶 API(非 L2 级别)
137
+
138
+ ```Python
139
+ import mindspore as ms
140
+ from mindspore.train import Model
141
+ ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
142
+
143
+ from msprobe.mindspore import PrecisionDebugger
144
+ from msprobe.mindspore.common.utils import MsprobeStep
145
+ debugger = PrecisionDebugger(config_path="./config.json")
146
+
147
+ # 模型、损失函数的定义以及初始化等操作
148
+ # ...
149
+
150
+ model = Network()
151
+ # 只有进行L0级别下Cell对象或L1级别下primitive op的数据采集时才需要调用
152
+ # debugger.start(model)
153
+ trainer = Model(model, loss_fn=loss_fn, optimizer=optimizer, metrics={'accuracy'})
154
+ trainer.train(1, train_dataset, callbacks=[MsprobeStep(debugger)])
155
+ ```
156
+
157
+ #### 2.2.4 使用 Model 高阶 API(L2 级别)
158
+
159
+ ```Python
160
+ import mindspore as ms
161
+ from mindspore.train import Model
162
+ ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
163
+
164
+ from msprobe.mindspore import PrecisionDebugger
165
+ debugger = PrecisionDebugger(config_path="./config.json")
166
+ debugger.start()
167
+ # 请勿将以上初始化流程置于模型实例化或mindspore.communication.init调用后
168
+
169
+ # 模型、损失函数的定义以及初始化等操作
170
+ # ...
171
+
172
+ model = Network()
173
+ trainer = Model(model, loss_fn=loss_fn, optimizer=optimizer, metrics={'accuracy'})
174
+ trainer.train(1, train_dataset)
175
+ ```
176
+
177
+ ## 3 dump 结果文件介绍
178
+
179
+ ### 3.1 MindSpore 静态图场景
180
+
181
+ 训练结束后,工具将 dump 的数据保存在 dump_path 参数指定的目录下。
182
+
183
+ - jit_level 为O0/O1时:
184
+
185
+ dump 结果目录请参见 MindSpore 官网中的[同步 Dump 数据对象目录](https://www.mindspore.cn/tutorials/experts/zh-CN/r2.3.1/debug/dump.html#%E6%95%B0%E6%8D%AE%E5%AF%B9%E8%B1%A1%E7%9B%AE%E5%BD%95%E5%92%8C%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D)。
186
+
187
+ - jit_level 为O2时:
188
+
189
+ dump 结果目录请参见 MindSpore 官网中的[异步 Dump 数据对象目录](https://www.mindspore.cn/tutorials/experts/zh-CN/r2.3.1/debug/dump.html#%E6%95%B0%E6%8D%AE%E5%AF%B9%E8%B1%A1%E7%9B%AE%E5%BD%95%E5%92%8C%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D-1)。
190
+
191
+ jit_level 请参见 [mindspore.set_context](https://www.mindspore.cn/docs/zh-CN/r2.3.1/api_python/mindspore/mindspore.set_context.html) 中的 jit_config 参数。
192
+
193
+ ### 3.2 MindSpore 动态图场景
194
+
195
+ 训练结束后,工具将 dump 的数据保存在dump_path参数指定的目录下。
196
+
197
+ dump结果目录结构示例如下:
198
+
199
+ ```bash
200
+ ├── dump_path
201
+ │ ├── step0
202
+ │ | ├── rank0
203
+ │ | │ ├── dump_tensor_data
204
+ | | | | ├── MintFunctional.relu.0.backward.input.0.npy
205
+ | | | | ├── Mint.abs.0.forward.input.0.npy
206
+ | | | | ├── Functional.split.0.forward.input.0.npy
207
+ | | | | ...
208
+ | | | | └── Jit.AlexNet.0.forward.input.0.npy
209
+ | | | | └── Cell.relu.ReLU.forward.0.input.0.npy # config.json文件配置level为L0时dump的cell模块级数据,命名格式为{Cell}_{cell_name}_{class_name}_{前向反向}.{index}.{input/output}.{参数序号}
210
+ │ | | ├── dump.json # 保存前反向算子、算子的统计量信息或溢出算子信息。包含dump数据的API名称(命名格式为:{api_type}_{api_name}_{API调用次数}_{前向反向}_{input/output}.{参数序号})、dtype、 shape、各数据的max、min、mean、L2norm统计信息以及当配置summary_mode="md5"时的md5数据。其中,“参数序号”表示该API下的第n个参数,例如1,则为第一个参数,若该参数为list格式,则根据list继续排序,例如1.1,表示该API的第1个参数的第1个子参数;L2norm表示L2范数(平方根)
211
+ │ | | ├── stack.json # 算子调用栈信息
212
+ │ | | └── construct.json # 分层分级结构,level为L1时,construct.json内容为空
213
+ │ | ├── rank1
214
+ | | | ├── dump_tensor_data
215
+ | | | | └── ...
216
+ │ | | ├── dump.json
217
+ │ | | ├── stack.json
218
+ | | | └── construct.json
219
+ │ | ├── ...
220
+ │ | |
221
+ | | └── rank7
222
+ │ ├── step1
223
+ │ | ├── ...
224
+ │ ├── step2
225
+ ```
226
+
227
+ dump 过程中,npy 文件在对应算子或者模块被执行后就会落盘,而 json 文件则需要在正常执行 PrecisionDebugger.stop() 后才会写入完整数据,异常的程序终止会保存终止前被执行算子的相关 npy 文件,可能会导致 json 文件中数据丢失。
228
+
229
+ 其中 rank 为设备上各卡的 ID,每张卡上 dump 的数据会生成对应 dump 目录。非分布式场景下没有 rank ID,目录名称为 rank。
230
+
231
+ 动态图场景下使能 PSJit 或 PIJit,装饰特定 Cell 或 function,被装饰的部分会全部/部分使能**静态图**流程。PSJit 场景下 config.json 文件配置 level 为 L1 时,被 PSJit 装饰的部分也作为 API 被 dump 到对应目录;配置 level 为 L2 时,则只会 dump 用户网络中静态图流程下的相关 kernel, 其结果目录同jit_level 为 O0/O1 时的静态图 dump 相同。PIJit 场景开启 dump 工具后,会被还原为动态图,按 API 粒度进行 dump。
232
+
233
+ npy 文件保存的前缀和 MindSpore 对应关系如下:
234
+
235
+ | 前缀 | MindSpore 模块 |
236
+ | -------------- | ---------------------------- |
237
+ | Tensor | mindspore.Tensor |
238
+ | Functional | mindspore.ops |
239
+ | Primitive | mindspore.ops.Primitive |
240
+ | Mint | mindspore.mint |
241
+ | MintFunctional | mindspore.mint.nn.functional |
242
+ | Jit | mindspore.jit |
243
+ | Cell | mindspore.nn.Cell |
@@ -0,0 +1,274 @@
1
+ # PyTorch 场景的离线精度预检
2
+
3
+ ## 1 简介
4
+
5
+ **PyTorch 离线精度预检**<sup>a</sup>通过扫描昇腾 NPU 上用户训练模型中的所有 API,输出模型精度的诊断和分析结果。具体而言,该工具通过采集模型中所有 API 的前反向信息,构造相应的单元测试,将 NPU 输出与标杆(CPU 高精度)比对,从而计算对应的精度指标,该过程已封装为 run_ut.py 函数;将 NPU 环境下采集的预检数据拷贝至 GPU 环境,同样执行 run_ut.py;最后通过**新精度标准比对法**<sup>b</sup>将 NPU 和 GPU 的预检结果进行比对,从而找出 NPU 中存在精度问题的 API。同时,本工具支持随机生成模式和真实数据模式<sup>c</sup>。
6
+
7
+ a. 支持 PyTorch 版本:1.11/2.0/2.1/2.2;
8
+ b. 依据新精度标准,对不同的API采取不同的比对算法(包括绝对阈值法,标杆比对法、二进制一致法、ULP误差比对法和双千指标法),最终给定预检判定结果;
9
+ c. 在预检 dump 时可以选择由工具构造随机数获得 dump 数据或选择真实输入的数据进行预检 dump 操作。随机生成模式执行效率高,可以快速获得结果,但数据精度低,只能大致判断精度问题;真实数据模式执行效率略低于随机生成模式,但是数据精度高,可以准确判断精度问题。
10
+
11
+ ## 2 离线预检流程
12
+
13
+ 1. 在 NPU 和 GPU 环境下分别安装 msprobe。详见[ msprobe 安装](./01.installation.md)章节。
14
+ 2. 在 NPU 训练脚本内添加 msprobe 工具 dump 接口 PrecisionDebugger,采集待预检数据。注意需要配置 level="L1"。
15
+ 3. 将 NPU 环境下 dump 的预检数据拷贝至 GPU 环境。
16
+ 4. 在 NPU 和 GPU 环境下分别执行 run_ut.py,生成的结果最终用于 api_precision_compare.py 函数的输入。详见 [3 离线预检操作指导](#3-离线预检操作指导)。
17
+ 5. 将 NPU 和 GPU 执行 run_ut.py 生成的 `accuracy_checking_details_{timestamp}.csv` 结果文件拷贝至同一环境下。
18
+ 6. 运行 api_precision_compare.py,输出结果为预检操作的最终结果。详见 [5 预检结果比对](#5-预检结果比对)章节。
19
+
20
+ ## 3 离线预检操作指导
21
+
22
+ 完成预检数据采集后,仅仅获取了 API 的输入数据,为了得到 NPU vs. CPU 高精度(标杆)的预检比对结果和 GPU vs. CPU 高精度(标杆)的预检比对结果,还需要进行 run_ut 操作。
23
+
24
+ run_ut 预检操作包括以下两种方式:
25
+
26
+ - 使用 run_ut.py 执行预检:适用于数据量较小的单卡场景。
27
+ - 使用 multi_run_ut.py 执行多线程预检:适用于数据量较大的大模型场景。
28
+
29
+ ### 3.1 使用 run_ut.py 执行预检
30
+
31
+ 将 API 信息输入到 run_ut 模块进行精度检测并比对,运行如下命令:
32
+
33
+ ```bash
34
+ msprobe -f pytorch run_ut -api_info ./dump.json
35
+ ```
36
+
37
+ | 参数名称 | 解释 | 是否必选 |
38
+ | ---------------------------- | ------------------------------------------------------------ | ---------------------------------- |
39
+ | -api_info 或 --api_info_file | 指定 API 信息文件 dump.json。 | 是 |
40
+ | -save_error_data | 保存精度未达标的 API 输入输出数据。 | 否 |
41
+ | -o 或 --out_path | 指定 run_ut 执行结果存盘路径,默认“./”(相对于 run_ut 的路径)。 | 否 |
42
+ | | | |
43
+ | -j 或 --jit_compile | 开启 jit 编译。 | 否 |
44
+ | -d 或 --device | 指定 Device ID,选择 UT 代码运行所在的卡,默认值为 0。 | 否 |
45
+ | -csv_path 或 --result_csv_path | 指定本次运行中断时生成的 `accuracy_checking_result_{timestamp}.csv` 文件路径,执行 run_ut 中断时,若想从中断处继续执行,配置此参数即可。需要指定为上次中断的 `accuracy_checking_result_{timestamp}.csv` 文件。详见 [3.3 断点续检](#33-断点续检)。 | run_ut 操作中断后继续执行场景下必须配置 |
46
+ | -f 或 --filter_api | 过滤模型中除最大值和最小值以外其他参数和结构相同的 API。适用于模型较大且重复 API 较多的场景。 | 否 |
47
+ | -config 或 --config_path | 指定离线预检操作过程中额外配置(包括黑名单、白名单等)的 [config.json](../config.json) 文件,默认未配置。config.json 文件的配置可参考[配置文件介绍](./02.config_introduction.md)。 | 否 |
48
+
49
+ run_ut 执行结果包括 `accuracy_checking_result_{timestamp}.csv` 和 `accuracy_checking_details_{timestamp}.csv` 两个文件。`accuracy_checking_result_{timestamp}.csv` 属于 API 级,标明每个 API 是否通过测试。建议用户先查看 `accuracy_checking_result_{timestamp}.csv` 文件,对于其中没有通过测试的或者特定感兴趣的 API,根据其 API name 字段在 `accuracy_checking_details_{timestamp}.csv` 中查询其各个输出的达标情况以及比较指标。详细介绍请参见[ 4 预检结果](#4-预检结果)。
50
+
51
+ 如果需要保存比对不达标的输入和输出数据,可以在 run_ut 执行命令结尾添加 `-save_error_data`,例如:
52
+
53
+ ```bash
54
+ msprobe -f pytorch run_ut -api_info ./dump.json -save_error_data
55
+ ```
56
+
57
+ 数据默认会存盘到 './ut_error_data{timestamp}' 路径下(相对于启动 run_ut 的路径),如有需要,用户可以通过 error_data_path 参数来配置保存路径,error_data_path 参数在 [config.json](../config.json) 文件或 [config.yaml](../pytorch/api_accuracy_checker/config.yaml) 文件配置,config.json 文件需要在 run_ut 操作时通过 -config 参数指定,config.yaml 。
58
+
59
+ #### 3.1.1 config.yaml 文件说明
60
+
61
+ config.yaml 文件可以通过配置参数来控制 dump 和 run_ut 操作的白名单、黑名单等功能。操作步骤如下:
62
+
63
+ - config.yaml 文件通常位于类似 /home/xxx/miniconda3/envs/xxx/lib/python3.8/site-packages/msprobe/pytorch/api_accuracy_checker/config.yaml 的路径中。
64
+
65
+ - 进入 config.yaml 文件
66
+
67
+ ```bash
68
+ vim /home/xxx/miniconda3/envs/xxx/lib/python3.8/site-packages/msprobe/pytorch/api_accuracy_checker/config.yaml
69
+ ```
70
+
71
+ - 修改 config.yaml 文件参数。
72
+
73
+ ```yaml
74
+ white_list: []
75
+ black_list: []
76
+ error_data_path: './'
77
+ precision: 14
78
+ ```
79
+
80
+ | 参数名称 | 解释 | 是否必选 |
81
+ | ----------- | -----------| -------- |
82
+ | white_list | API dump 白名单,仅对指定的 API 进行 dump。</br>**配置示例**:white_list=["conv1d", "conv2d"]。默认未配置白名单,即 dump 全量 API 数据。 | 否 |
83
+ | black_list | API dump 黑名单,被指定的 API 不进行 dump。</br>**配置示例**:black_list=["conv1d", "conv2d"]。默认未配置黑名单,即 dump 全量 API 数据。 | 否 |
84
+ | error_data_path | 配置保存精度未达标的 API 输入输出数据路径。</br>**配置示例**:"error_data_path": "./"。默认为当前路径。 | 否 |
85
+ | precision | 浮点数表示位数,默认取小数点后14位。 | 否 |
86
+
87
+ 说明:white_list 和 black_list 同时配置时,二者配置的 API 名单若无交集,则白名单生效,若 API 名单存在交集,则白名单排除的部分以及交集的 API 不进行 dump。
88
+
89
+ #### 3.1.2 API 预检黑名单和白名单
90
+
91
+ run_ut 过程支持 API 预检黑名单和白名单,通过如下文件配置 black_list(黑名单)或white_list(白名单)参数来指定不需要或需要预检的API名称:
92
+
93
+ - 配置 [config.json](../config.json) 文件,该文件需要在 run_ut 操作时通过 -config 参数指定。
94
+
95
+ - config.json 文件的优先级高于 config.yaml 文件,即执行 config.json 文件时,config.yaml 文件的配置不生效。
96
+
97
+ ### 3.2 使用 multi_run_ut.py 执行多线程预检
98
+
99
+ multi_run_ut.py 脚本,可以并行执行多个 run_ut 操作,从而减少预检耗时。示例如下:
100
+
101
+ ```bash
102
+ msprobe -f pytorch multi_run_ut -api_info ./dump.json -n 32 -d 0 1 2 3
103
+ ```
104
+
105
+ | 参数名称 | 解释 | 是否必选 |
106
+ | ---------------------------- | ------------------------------------------------------------ | ---------------------------------- |
107
+ | -api_info 或 --api_info_file | 指定 API 信息文件 dump.json。 | 是 |
108
+ | -save_error_data | 保存精度未达标的 API 输入输出数据。 | 否 |
109
+ | -o 或 --out_path | 指定 run_ut 执行结果存盘路径,默认“./”(相对于 run_ut 的路径)。 | 否 |
110
+ | -j 或 --jit_compile | 开启 jit 编译。 | 否 |
111
+ | -n | 同时执行 run_ut 线程的数量,默认为 8,最大支持 64,但每个 Device 最大支持 8 个线程。当指定多个线程和多个 Device 时,线程数在每张卡上均分。 | 否 |
112
+ | -d 或 --device | 指定 Device ID,选择 UT 代码运行所在的卡,默认值为 0,支持同时指定 0~7,共 8 个 Device。 | 否 |
113
+ | -csv_path 或 --result_csv_path | 指定本次运行中断时生成的 `accuracy_checking_result_{timestamp}.csv` 文件路径,执行 run_ut 中断时,若想从中断处继续执行,配置此参数即可。需要指定为上次中断的 `accuracy_checking_result_{timestamp}.csv` 文件。详见 [3.3 断点续检](#33-断点续检)。 | run_ut 操作中断后继续执行场景下必须配置 |
114
+ | -f 或 --filter_api | 过滤模型中除最大值和最小值以外其他参数和结构相同的 API。适用于模型较大且重复 API 较多的场景。 | 否 |
115
+
116
+ ### 3.3 断点续检
117
+
118
+ 断点续检操作通过如下命令执行:
119
+
120
+ ```bash
121
+ msprobe -f pytorch run_ut -api_info ./dump.json -csv_path /home/xxx/ut/accuracy_checking_result_{timestamp}.csv
122
+ ```
123
+
124
+ 精度预检 run_ut 过程中,若因环境、数据量过大等原因导致预检进程中断,那么当用户解决这些问题后,重新执行 run_ut 操作,可以通过断点续检操作继续前面未完成的预检,会在 -csv_path 指定的 `accuracy_checking_result_{timestamp}.csv` 文件以及对应的 `accuracy_checking_details_{timestamp}.csv` 文件中继续写入后续的结果,不会重新创建结果文件。
125
+
126
+ 须指定为上次预检中断的 `accuracy_checking_result_{timestamp}.csv` 文件。请勿修改 `accuracy_checking_result_{timestamp}.csv` 和 `accuracy_checking_details_{timestamp}.csv` 文件名,包括时间戳,否则断点续检会因无法识别到文件名而失败。
127
+
128
+ ## 4 预检结果
129
+
130
+ 精度预检生成的 `accuracy_checking_result_{timestamp}.csv` 和 `accuracy_checking_details_{timestamp}.csv` 文件示例如下:
131
+
132
+ 可以通过先查看 `accuracy_checking_result_{timestamp}.csv` 文件的 Forward Test Success 和 Backward Test Success,判断是否存在未通过测试的 API,再查看 `accuracy_checking_details_{timestamp}.csv` 文件的 API 详细达标情况,详细介绍请参见 [4.1 API 预检指标](#41-api-预检指标)。
133
+
134
+ `accuracy_checking_result_{timestamp}.csv`
135
+
136
+ ![accuracy_checking_result](img/accuracy_checking_result.png)
137
+
138
+ | 字段 | 含义 |
139
+ | --------------------- | ------------------------- |
140
+ | API name | API 名称。 |
141
+ | Forward Test Success | 前向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误。SKIP 表示跳过该 API 的计算,跳过原因在 Message 中说明。 |
142
+ | Backward Test Success | 反向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误。如果是空白的话代表该 API 没有反向输出,SKIP 表示该 API 的某个参数的反向不计算梯度。 |
143
+ | Message | 提示信息。 |
144
+
145
+ 该结果为中间结果,仅作为参考,建议完成 [5 预检结果比对](#5-预检结果比对)后查看比对结果。该结果后续将会删除。
146
+
147
+ Forward Test Success 和 Backward Test Success 是否通过测试是由 `accuracy_checking_details_{timestamp}.csv` 中的余弦相似度、最大绝对误差、双百双千双万指标判定结果决定的。
148
+
149
+ 需要注意的是 `accuracy_checking_details_{timestamp}.csv` 中可能存在一个 API 的前向(反向)有多个输出,那么每个输出记录一行,而在 `accuracy_checking_result_{timestamp}.csv` 中的结果需要该 API 的所有结果均为 pass 才能标记为 pass,只要存在一个 error 则标记 error,仅存在 waring 和 pass 且不存在 error 则标记 waring。
150
+
151
+ `accuracy_checking_details_{timestamp}.csv`
152
+
153
+ ![accuracy_checking_details](img/accuracy_checking_details.png)
154
+
155
+ | 字段 | 含义 |
156
+ | ------------------- | ------------------------------------------------------------ |
157
+ | API name | NPU 或 GPU下的 API 名称。 |
158
+ | Bench Dtype | 标杆数据的 API 数据类型。 |
159
+ | DEVICE Dtype | NPU 或 GPU 数据的 API 数据类型。 |
160
+ | Shape | API 的 Shape信息。 |
161
+ | 余弦相似度 | NPU 或 GPU 数据与标杆数据的余弦相似度。 |
162
+ | 最大绝对误差 | NPU 或 GPU 数据与标杆数据的最大绝对误差。 |
163
+ | 双百指标 | 双百精度指标。是指 NPU 或 GPU 的 Tensor 中的元素逐个与对应的标杆数据对比,相对误差小于百分之一的个数占总元素个数的比例。测试通过标准为相对误差大于百分之一的个数占总元素个数的比例小于百分之一。 |
164
+ | 双千指标 | 双千精度指标。是指 NPU 或 GPU 的 Tensor 中的元素逐个与对应的标杆数据对比,相对误差小于千分之一的个数占总元素个数的比例。测试通过标准为相对误差大于千分之一的个数占总元素个数的比例小于千分之一。 |
165
+ | 双万指标 | 双万精度指标。是指 NPU 或 GPU 的 Tensor 中的元素逐个与对应的标杆数据对比,相对误差小于万分之一的个数占总元素个数的比例。测试通过标准为相对误差大于万分之一的个数占总元素个数的比例小于万分之一。 |
166
+ | 二进制一致错误率 | NPU 或 GPU 数据中每个 Tensor 精度不一致的数值的数量与 Tensor 中数值数量的比值。只有数据是 builtin 类型(bool、int、float、str)、torch.bool 和 torch 的 int 类型或者在新精度标准中使用二进制一致算法进行比对的 API 才会展示。 |
167
+ | 误差均衡性 | NPU 或 GPU 数据与标杆数据精度差的上下浮动情况。 |
168
+ | 均方根误差 | NPU 或 GPU 数据与标杆数据的均方根误差。 |
169
+ | 小值域错误占比 | NPU 或 GPU Tensor 中与标杆的绝对误差大于错误阈值的小值在小值域(小值的总数量)中的占比。判断为小值以及绝对误差的错误阈值参见 [4.2 小值域阈值](#42-小值域阈值)。 |
170
+ | 相对误差最大值 | NPU 或 GPU 数据与标杆数据相对误差的最大值。 |
171
+ | 相对误差平均值 | NPU 或 GPU 数据与标杆数据相对误差的平均值。 |
172
+ | inf/nan 错误率 | NPU 与标杆 inf/nan 计算不一致的元素个数占总元素的个数比例。 |
173
+ | 相对误差错误率 | NPU 与标杆的正常值计算相对误差,其大于错误阈值的元素个数占正常值元素个数的比例。 |
174
+ | 绝对误差错误率 | NPU 与标杆的小值计算绝对误差,其大于错误阈值的元素个数占小值元素个数的比例。 |
175
+ | ULP 误差最大值 | NPU 或 GPU 数据与标杆数据 ULP 误差的最大值(取绝对值后)。 |
176
+ | ULP 误差平均值 | NPU 或 GPU 数据与标杆数据ULP误差的平均值(取绝对值后)。 |
177
+ | ULP 误差大于阈值占比 | NPU 或 GPU 数据与标杆数据的 ULP 误差(取绝对值后)大于阈值(当 NPU 或 GPU 数据类型为 float16 或 bfloat16 时,阈值为 1;当 NPU 或 GPU 数据类型为 float32 时,阈值为 32)的元素个数占总元素的个数比例。 |
178
+ | Status | API 预检通过状态,pass 表示通过测试,error 表示未通过,warning 表示测试未通过双千或双万精度指标,SKIP 表示该 API 的某个参数的反向不要计算梯度,所以没有任何计算过程,其他信息均为空。 |
179
+ | message | 提示信息。 |
180
+
181
+ **\***:
182
+
183
+ ### 4.1 API 预检指标
184
+
185
+ API 预检指标是通过对 `accuracy_checking_details_{timestamp}.csv` 中的余弦相似度、最大绝对误差双百、双千、双万精度指标的数值进行判断,得出该 API 是否符合精度标准的参考指标。
186
+
187
+ API预检通过测试,则在`accuracy_checking_details_{timestamp}.csv`文件中的 Status 列标记 pass,否则标记 error 或 warning,详细规则如下:
188
+
189
+ - 余弦相似度 > 0.99:≤ 0.99 为不达标,标记 error,> 0.99 达标,进行下一步;
190
+ - 最大绝对误差 < 0.001:< 0.001 达标,标记 pass,≥ 0.001 为不达标,进行下一步;
191
+ - 双百、双千、双万精度指标:
192
+ + 对于 float16 和 bfloat16 数据:双百指标不通过,标记 error;双百指标通过,双千指标不通过,标记 warning;双百、双千指标均通过,标记 pass。
193
+ + 对于 float32 和 float64 数据:双千指标不通过,标记 error;双千指标通过,双万指标不通过,标记 warning;双千、双万指标均通过,标记 pass。
194
+ - 在 `accuracy_checking_result_{timestamp}.csv` 中以 Forward Test Success 和 Backward Test Success 字段统计该算子前向反向输出的测试结果,对于标记 pass 的算子,则在 `accuracy_checking_result_{timestamp}.csv` 中标记 TRUE 表示测试通过,对于标记 error 或 warning 的算子,则在 `accuracy_checking_result_{timestamp}.csv` 中标记 FALSE 表示测试不通过。由于一个算子可能有多个前向或反向的输入或输出,那么该类算子的输入或输出中必须全为 pass,才能在 `accuracy_checking_result_{timestamp}.csv` 中标记 TRUE,只要有一个输入或输出标记 error 或 warning,那么在`accuracy_checking_result_{timestamp}.csv`中标记 FALSE。
195
+
196
+ ### 4.2 小值域阈值
197
+
198
+ 判定为小值的阈值:
199
+
200
+ - torch.float32:e-6
201
+ - torch.float16:e-3
202
+ - torch.bfloat16:e-3
203
+
204
+ 小值域的绝对误差阈值:
205
+
206
+ - torch.float32:e-9
207
+ - torch.float16:e-5
208
+ - torch.bfloat16:e-5
209
+
210
+ ## 5 预检结果比对
211
+
212
+ 需要同时获取 NPU 和 GPU 环境下 run_ut 操作的预检结果 `accuracy_checking_details_{timestamp}.csv` 文件。执行如下命令进行 NPU 和 GPU 预检结果的比对:
213
+
214
+ ```bash
215
+ msprobe -f pytorch api_precision_compare -npu /home/xxx/npu/accuracy_checking_details_{timestamp}.csv -gpu /home/xxx/gpu/accuracy_checking_details_{timestamp}.csv -o /home/xxx/
216
+ ```
217
+
218
+ | 参数名称 | 说明 | 是否必选 |
219
+ | -------------------- | ------------- | -------- |
220
+ | -npu 或 --npu_csv_path | NPU 预检结果 `accuracy_checking_details_{timestamp}.csv` 文件路径。默认从当前目录下识别该文件。 | 否 |
221
+ | -gpu 或 --gpu_csv_path | GPU 预检结果 `accuracy_checking_details_{timestamp}.csv` 文件路径。默认从当前目录下识别该文件。 | 否 |
222
+ | -o 或 --out_path | 指定 api_precision_compare.py 执行结果存盘路径,默认为当前目录。 | 否 |
223
+
224
+ 执行完成后输出 `api_precision_compare_result_{timestamp}.csv` 和 `api_precision_compare_details_{timestamp}.csv` 文件。文件示例如下:
225
+
226
+ 可以通过先查看 `api_precision_compare_result_{timestamp}.csv` 文件的 Forward Test Success 和 Backward Test Success,判断是否存在未通过测试的 API,再查看 `api_precision_compare_details_{timestamp}.csv` 文件的 API 详细达标情况。
227
+
228
+ `api_precision_compare_result_{timestamp}.csv`
229
+
230
+ ![api_precision_compare_result](img/api_precision_compare_result.png)
231
+
232
+ | 字段 | 含义 |
233
+ | --------------------- | ------------------------------------------------------------ |
234
+ | API name | API 名称。 |
235
+ | Forward Test Success | 前向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误,SKIP 表示该 API 的数据类型不支持使用新精度标准进行比对,如 float64。 |
236
+ | Backward Test Success | 反向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误,如果是空白的话代表该 API 没有反向输出,SKIP 表示该 API 的数据类型不支持使用新精度标准进行比对,如 float64。 |
237
+ | Message | 提示信息。 |
238
+
239
+ Forward Test Success 和 Backward Test Success 是否通过测试是由 `api_precision_compare_details_{timestamp}.csv` 中的各个指标判定结果决定的。需要注意的是 `api_precision_compare_details_{timestamp}.csv` 中可能存在一个 API 的前向(反向)有多个输出,那么每个输出记录一行,而在 `api_precision_compare_result_{timestamp}.csv` 中的结果需要该 API 的所有结果均为 pass 才能标记为 pass,只要存在一个 error 则标记 error,仅存在 warning 和 pass 且不存在 error 标记 warning。
240
+
241
+ `api_precision_compare_details_{timestamp}.csv`
242
+
243
+ ![api_precision_compare_details](img/api_precision_compare_details.png)
244
+
245
+ | 字段 | 含义 |
246
+ | ------------------------ | ------------------------------------------------------------ |
247
+ | API name | NPU 或 GPU 下的 API 名称。 |
248
+ | 小值域错误比值 | NPU 与 CPU 的小值域的错误比率 / GPU 与 CPU 的小值域的错误比率。标杆比对法指标。 |
249
+ | 小值域错误判定结果 | 小值域错误比值小于等于 1 标记为 pass,1 ~ 2 之间标记为 waring,大于 2 标记为 error。 |
250
+ | 均方根误差比值 | NPU 与 CPU 的均方根误差 / GPU 与 CPU 的均方根误差。标杆比对法指标。 |
251
+ | 均方根误差判定结果 | 均方根误差比值小于等于 1 标记为 pass,1~2 之间标记为 waring,大于 2 标记为 error。 |
252
+ | 相对误差最大值比值 | NPU 与 CPU 的相对误差最大值 / GPU 与 CPU 的相对误差最大值。标杆比对法指标。 |
253
+ | 相对误差最大值判定结果 | 相对误差最大值比值小于等于 1 标记为 pass,1 ~ 10 之间标记为 waring,大于 10 标记为 error。 |
254
+ | 相对误差平均值比值 | NPU 与 CPU 的相对误差的平均值 / GPU 与 CPU 的相对误差的平均值。标杆比对法指标。 |
255
+ | 相对误差平均值判定结果 | 相对误差平均值比值小于等于 1 标记为 pass,1 ~ 2 之间标记为 waring,大于 2 标记为 error。 |
256
+ | 误差均衡性比值 | NPU 与 CPU 的误差均衡性 / GPU 与 CPU 的误差均衡性。标杆比对法指标。 |
257
+ | 误差均衡性判定结果 | 误差均衡性比值小于等于 1 标记为 pass,1 ~ 2 之间标记为 waring,大于 2 标记为 error。该字段暂不参与 api_precision_compare_result 的结果判定。 |
258
+ | inf / nan 错误率 | NPU 与标杆 inf / nan 计算不一致的元素个数占总元素的个数比例。绝对阈值法指标。 |
259
+ | inf / nan 判定结果 | inf / nan 错误率判定结果,等于 0 标记为 pass,其余情况标记为 error。 |
260
+ | 相对误差错误率 | NPU 与标杆的正常值计算相对误差,其大于错误阈值的元素个数占正常值元素个数的比例。绝对阈值法指标。 |
261
+ | 相对误差判定结果 | 相对误差错误率判定结果,等于 0 标记为 pass,其余情况标记为 error。 |
262
+ | 绝对误差错误率 | NPU 与标杆的小值计算绝对误差,其大于错误阈值的元素个数占小值元素个数的比例。绝对阈值法指标。 |
263
+ | 绝对误差判定结果 | 绝对误差错误率判定结果,等于 0 标记为 pass,其余情况标记为 error。 |
264
+ | 二进制一致错误率 | NPU 或 GPU 数据中每个 Tensor 精度不一致的数值的数量与 Tensor 中数值数量的比值。只有数据是 builtin 类型(bool、int、float、str)、torch.bool 和 torch 的 int 类型或者在新精度标准中使用二进制一致算法进行比对的 API 才会展示。二进制一致法指标。 |
265
+ | 二进制一致错误率判定结果 | 二进制一致错误率判定结果,等于 0 标记为 pass,其余情况标记为 error。 |
266
+ | ULP 误差平均值 | NPU 数据与标杆数据 ULP 误差的平均值(取绝对值后)。ULP 误差比对法指标。 |
267
+ | ULP 误差大于阈值占比 | NPU 数据与标杆数据的 ULP 误差(取绝对值后)大于阈值(当 NPU 数据类型为 float16 或 bfloat16 时,阈值为 1;当 NPU 数据类型为 float32 时,阈值为 32)的元素个数占总元素的个数比例。ULP 误差比对法指标。 |
268
+ | ULP 误差大于阈值占比比值 | NPU 与 CPU 的 ULP 误差大于阈值占比 / GPU 与 CPU 的 ULP 误差大于阈值占比。ULP 误差比对法指标。 |
269
+ | ULP 误差判定结果 | ULP 误差判定结果。<br/> 当 NPU 或 GPU 数据类型是 float16 或 bfloat16 时,以下两条标准满足其一标记为 pass,否则标记为 error:<br> NPU ULP 误差大于阈值占比小于 0.001;<br/> NPU ULP 误差大于阈值占比小于 GPU ULP 误差大于阈值占比。<br/> 当 NPU 或 GPU 数据类型是 float32 时,以下三条标准满足其一标记为 pass,否则标记为 error:<br/> NPU ULP 误差平均值小于 64;<br/> NPU ULP 误差大于阈值占比小于 0.05;<br/> NPU ULP 误差大于阈值占比小于 GPU ULP 误差大于阈值占比。 |
270
+ | 双千指标 | 双千精度指标。是指 NPU 的 Tensor 中的元素逐个与对应的标杆数据对比,相对误差小于千分之一的个数占总元素个数的比例。测试通过标准为相对误差大于千分之一的个数占总元素个数的比例小于千分之一。仅 conv1d 和 conv2d 使用该指标。双千指标法指标。 |
271
+ | 双千指标判定结果 | 双千指标判定结果。双千指标大于 0.999 标记为 pass,否则标记为 error。 |
272
+ | 比对结果 | 综合所有指标的最终结果。如果比对指标中有 error,则标记为 error;有 warning,则标记为 warning;否则标记为 pass;SKIP 表示该 API 的数据类型不支持使用新精度标准进行比对,如 float64。 |
273
+ | 比对算法 | API 使用的比对算法,为标杆比对法、二进制一致法、绝对阈值法和 ULP 误差比对法中的一种。 |
274
+ | Message | 提示信息。当前提示该 API 比对结果为 error 或 warning 时对应不符合标准的指标。 |