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
@@ -0,0 +1,170 @@
1
+ # PyTorch 场景的无标杆比对
2
+
3
+ ## 1 简介
4
+ * 本工具的目标是在不依赖标杆数据的情况下,检测模型训练中可能存在的精度问题API级别算子,并提供升精度和tocpu接口快速验证。
5
+ * 工具基于**数值病态分析理论**:对算子的输入增加很小的扰动,从而放大输出值异常现象;检测算子原始输出和扰动后输出间误差是否符合精度标准。
6
+
7
+ * 该工具的**特点**有:
8
+ * 不依赖标杆模型,不需要离线对比;
9
+ * 提供接口,对可疑算子升精度,tocpu进行快速验证。
10
+ * 推荐使用场景(针对**算子精度问题**):
11
+ * **暂无标杆数据**,模型Loss异常,要做精度问题算子排查;
12
+ * **验证可疑算子**,要做进一步确认,验证是否对模型Loss有影响;
13
+ * 低精度模型效果不如高精度,要做精度问题算子排查。
14
+ * 该工具的约束
15
+ * 仅支持Pytorch2.x场景;
16
+ * 推荐限定算子范围使用(白名单,或脚本中工具启用范围),算子范围越大,性能和显存损耗越大;详情见[无标杆比对功能在 PyTorch 场景的性能基线报告](./S02.report_free_benchmarking_validation_performance_baseline.md)
17
+
18
+ ## 2 工具实现原理
19
+ 1. **扰动算子白名单**:根据算子名识别需要插桩算子范围。
20
+ 2. **扰动因子**:基于torch.nn.Module的hook机制,在注册的hook函数中对算子输入进行特定类型扰动。
21
+ 3. **误差分析**:
22
+ * **check**: 在hook函数中二次执行算子得到扰动后的算子输出,计算扰动后输出与原始输出的相对误差,查看是否符合精度标准;
23
+ * **fix**: 需要做验证时,可以选择将特定扰动类型(升精度,to cpu)的输出替换原始输出,观察对模型Loss是否有影响。
24
+ 4. **精度风险算子**:不达标精度标准的,最终会在输出件中展示
25
+
26
+ ![alt text](./img/free_benchmark_framework.png)
27
+
28
+
29
+ ## 3 操作指导
30
+
31
+ ```mermaid
32
+ flowchart LR
33
+ A0[安装msprobe工具]
34
+ subgraph config.json配置
35
+ A1[确定插桩范围]
36
+ A2[选择扰动因子]
37
+ A3[选择处理方式]
38
+ A1-->A2
39
+ A2-->A3
40
+ end
41
+ B(在模型脚本中开启工具)
42
+ C(启动模型训练)
43
+ D(查看精度风险算子\n观察模型loss曲线)
44
+
45
+ A0-->
46
+ config.json配置-->B
47
+ B-->C
48
+ C-->D
49
+ D-->config.json配置
50
+ ```
51
+ 工具的推荐使用思路是:
52
+
53
+ 1. 配置config.json开启精度风险算子的排查;
54
+ 2. 根据精度风险算子输出件,修改config.json开启验证功能,观察模型loss曲线是否改善。
55
+
56
+ ### 3.1 安装msprobe工具
57
+ 参照[msprobe安装](./01.installation.md)
58
+ ### 3.2 config.json配置
59
+ 修改[config.json](../config.json) 的task类型为"**free_benchmark**"开启无标杆功能。支持的配置项详见[配置文件介绍](./02.config_introduction.md),默认配置如下:
60
+ ```json
61
+ {
62
+ "task": "free_benchmark",
63
+ "dump_path": "./dump_path",
64
+ "rank": [],
65
+ "step": [],
66
+ "level": "L1",
67
+ "seed": 1234,
68
+ "is_deterministic": false,
69
+
70
+ "free_benchmark": {
71
+ "scope": [],
72
+ "list": [],
73
+ "fuzz_device": "npu",
74
+ "pert_mode": "improve_precision",
75
+ "handler_type": "check",
76
+ "fuzz_level": "L1",
77
+ "fuzz_stage": "forward",
78
+ "if_preheat": false,
79
+ "preheat_step": 15,
80
+ "max_sample": 20
81
+ }
82
+ }
83
+ ```
84
+ 用户需根据自己的使用场景,对[工具实现原理](#2-工具实现原理)中几个关键步骤进行配置。
85
+ #### 3.2.1 扰动算子白名单(确定插桩范围)
86
+
87
+ <table>
88
+ <tr><th>参数</th><th>是否必选</th><th>可配置项</th><th>适用场景</th></tr>
89
+ <tr><td>scope</td><td>否</td><td>自定义</td><td>需要通过指定算子名来限制算子插桩范围 如:["Torch.matmul.0.forward", "Tensor.pow.4.forward"]。</td></tr>
90
+ <tr><td>list</td><td>否</td><td>自定义</td><td>需要通过指定算子类型来限制算子插桩范围 如:["relu"] 会匹配所有算子名中包含relu的算子。</td></tr>
91
+ <tr><td rowspan="2">fuzz_stage</td><td rowspan="2">否</td><td>"forward"(默认)</td><td>需要进行算子<b>前向</b>计算的精度问题排查或<b>验证可疑算子。</b></td></tr>
92
+ <tr><td>"backward"</td><td>需要进行算子<b>反向</b>计算的精度问题排查,不支持仅反向验证,前向验证包括反向。</td><td></td></tr>
93
+ </table>
94
+
95
+ #### 3.2.2 选择扰动因子
96
+
97
+ <table>
98
+ <tr><th>参数</th><th>是否必选</th><th>可配置项</th><th>适用场景</th></tr>
99
+ <tr><td rowspan="6">pert_mode</td><td rowspan="6">否</td><td>"improve_precision" (默认)</td><td>(常用)(可做验证) 插桩算子可能在<b>低精度</b>下有精度问题,扰动因子会将输入的低精度向量升精度。</td></tr>
100
+ <tr><td>"bit_noise"</td><td>(常用)插桩算子可能在<b>轻微扰动</b>下暴露精度问题,扰动因子会将输入向量最后一个比特位翻转。</td></tr>
101
+ <tr><td>"add_noise"</td><td>插桩算子可能在<b>轻微扰动</b>下暴露精度问题,扰动因子会为输入向量增加一个极小。</td></tr>
102
+ <tr><td>"change_value"</td><td>插桩算子可能存在<b>大数吃小数</b>问题,扰动因子会交换输入向量的首尾。</td></tr>
103
+ <tr><td>"no_change"</td><td>插桩算子可能存在<b>数值稳定性</b>精度问题,扰动因子会复制原始输。</td></tr>
104
+ <tr><td>"to_cpu"</td><td>(可做验证) 插桩算子可能在<b>同 CPU </b>精度表现不一致,扰动因子会将输入转至 CPU,需要配合 fuzz_device="cpu"使用。</td></tr>
105
+ <tr><td rowspan="2">fuzz_device</td><td rowspan="2">否</td><td>"npu" (默认)</td><td>pert_mode 不需要to cpu操作。</td></tr>
106
+ <tr><td>"cpu"</td><td>pert_mode 须配置为"to_cpu",目前仅支持"to cpu"扰动因子。</td></tr>
107
+ </table>
108
+
109
+ #### 3.2.3 选择处理方式
110
+
111
+ <table>
112
+ <tr><th>参数</th><th>是否必选</th><th>可配置项</th><th>适用场景</th></tr>
113
+ <tr><td rowspan="2">handler_type</td><td rowspan="2">否</td><td>"check"(默认)</td><td>要做精度问题算子排查,输出扰动前后不符合精度标准的算子,支持所有扰动因子。</td></tr>
114
+ <tr><td>"fix"</td><td>要做可疑算子验证,用扰动后输出替换原始输出,支持"improve_precision","to_cpu"两种扰动因子。</td></tr>
115
+ </table>
116
+
117
+ ### 3.3 在模型脚本中开启工具
118
+
119
+ 通过PrecisionDebugger统一入口开启工具,示例如下:
120
+
121
+ ```python
122
+ from msprobe.pytorch import PrecisionDebugger
123
+
124
+ debugger = PrecisionDebugger(config_path='./config.json')
125
+ ...
126
+ debugger.start() # 一般在训练循环开头启动工具
127
+ ... # 循环体
128
+ debugger.stop() # 一般在训练循环末尾结束工具
129
+ debugger.step() # 在训练循环的最后需要重置工具,非循环场景不需要
130
+ ```
131
+
132
+ ### 3.4 启动模型训练
133
+ 训练过程中出现以下日志,可以检查工具是否正常使用。
134
+
135
+ <table>
136
+ <tr><th>日志级别</th><th>日志内容</th><th>检查说明</th></tr>
137
+ <tr><td rowspan="3">INFO</td><td>[msprobe] Free Benchmark: Perturbation is {扰动因子} of {算子名}.</td><td>扰动因子与配置相符,算子名在插桩范围内。</td></tr>
138
+ <tr><td>[msprobe] Free Benchmark: For {算子名},{原因}. Cancel perturbation.</td><td>算子名在插桩范围内,但当前算子由于{原因}不支持添加扰动。</td></tr>
139
+ <tr><td>[msprobe] Free benchmark: preheat sample in step {step} api_name {算子名} curr_called_seq: {当前采样数}/{总采样数}"</td><td>仅开启预热,算子名在插桩范围内,在当前step的采样情况。</td></tr>
140
+ <tr><td>WARNING</td><td>[msprobe] Free benchmark: 无标杆工具不支持当前算子的输入类型 {算子名}.</td><td>算子名在插桩范围内,但当前算子没有可操作的输入(不存在Tensor,list类型等)。</td></tr>
141
+ </table>
142
+
143
+ 其余日志均说明当前算子未能正常添加扰动,请检查日志信息判断是否更换扰动因子或不考虑当前算子结果。
144
+
145
+
146
+ ### 3.5 查看精度风险算子
147
+
148
+ check模式下,无标杆比对在dump_path目录下将扰动前后不符合精度标准的结果输出在文件 free_benchmark.csv,如下示例:
149
+
150
+ ![free_benchmark](./img/free_benchmark.png)
151
+
152
+ | 字段 | 说明 |
153
+ | ------------ | ---------------------------------------------------------------------------------------- |
154
+ | rank | Rank ID,int 类型。 |
155
+ | pert_mode | 扰动因子的类型,string 类型。 |
156
+ | stage | 前向或反向,string 类型。 |
157
+ | step | 迭代数,int 类型。 |
158
+ | api_name | API 名称,string 类型。 |
159
+ | max_rel | 输出对比最大相对误差,float 类型。 |
160
+ | dtype | 输入的 dtype,string 类型。 |
161
+ | shape | 输入的 shape,tuple 类型。 |
162
+ | output_index | 如果输出为列表或元组,其中一个元素检测不一致,则会有该元素的 index,否则为空,int 类型。 |
163
+
164
+ 无标杆根据参照的精度标准如下:
165
+ | 输出dtype | 相对误差阈值 |
166
+ | -------------- | ------------ |
167
+ | torch.float16 | 0.002 |
168
+ | torch.bfloat16 | 0.004 |
169
+ | torch.float32 | 0.0002 |
170
+ | 其他 | 0.0002 |
@@ -0,0 +1,140 @@
1
+ # MindSpore 场景的无标杆比对
2
+
3
+ ## 1 简介
4
+ * 本工具的目标是在没有标杆数据的情况下,检测模型训练中可能存在精度问题的 API 级别算子,并提供升精度接口进行快速验证。
5
+ * 工具基于**数值病态分析理论**:对算子的输入增加很小的扰动、从而放大输出值异常现象;检测算子原始输出和扰动后输出间误差是否符合精度标准。
6
+
7
+ * 该工具的**特点**有:
8
+ * 不依赖标杆模型,在线对比。
9
+ * 提供升精度接口,对可疑算子进行快速验证。
10
+ * 推荐使用场景(针对**API 精度问题**):
11
+ * **暂无标杆数据**,模型 Loss 异常,要做精度问题 API 排查。
12
+ * 低精度模型效果不如高精度,要做精度问题 API 排查。
13
+ * **验证低精度可疑 API**,确认升精度后是否对模型 Loss 有影响。
14
+ * 该工具的约束
15
+ * 仅支持 MindSpore 动态图场景。支持的 API 类型为 ops、Tensor、mint 和 mint.nn.functional 类的非 inplace 计算 API,不支持 Primitive 和 Jit 类 API。
16
+ * 建议配置白名单(设置 list),控制对少量 API 进行无标杆比对。比对 API 越多,性能和显存损耗越大。
17
+
18
+ ## 2 工具实现原理
19
+ 1. **扰动算子白名单**:根据 API 名,控制需要进行无标杆比对的 API。
20
+
21
+ 2. **扰动因子**:基于 mindspore.nn.Cell 的 hook 机制,在注册的 hook 函数中对算子输入进行特定类型扰动。
22
+
23
+ 3. **误差分析**:
24
+ * **check**: 在 hook 函数中二次执行算子得到扰动后的算子输出、计算扰动后输出与原始输出的相对误差,查看是否符合精度标准。
25
+ * **fix**: 需要做验证时,可以将升精度的输出替换原始输出,观察对模型 Loss 是否有影响。
26
+
27
+ 4. **精度风险算子**:不达标精度标准的,最终会在输出件中展示。
28
+
29
+ ## 3 操作指导
30
+
31
+ ```mermaid
32
+ flowchart LR
33
+ A0[安装msprobe工具]
34
+ subgraph config.json配置
35
+ A1[确定比对范围]
36
+ A2[选择扰动因子]
37
+ A3[选择处理方式]
38
+ A1-->A2
39
+ A2-->A3
40
+ end
41
+ B(在模型脚本中开启工具)
42
+ C(启动模型训练)
43
+ D(查看精度风险API\n观察模型Loss曲线)
44
+
45
+ A0-->
46
+ config.json配置-->B
47
+ B-->C
48
+ C-->D
49
+ D-->config.json配置
50
+ ```
51
+ 工具的推荐使用思路是:
52
+
53
+ 1. 配置 config.json,选择无标杆比对任务,进行精度风险 API 的排查。
54
+
55
+ 2. 根据精度风险 API 输出件,修改 config.json 开启验证功能,观察模型loss曲线是否改善。
56
+
57
+ ### 3.1 安装msprobe工具
58
+ 参照 [msprobe安装](./01.installation.md)
59
+ ### 3.2 config.json配置
60
+ 修改 [config.json](../config.json) 的 task 类型为"**free_benchmark**"开启无标杆功能。支持的配置项详见[配置文件介绍](./02.config_introduction.md),默认配置如下:
61
+ ```json
62
+ {
63
+ "task": "free_benchmark",
64
+ "dump_path": "./dump_path",
65
+ "rank": [],
66
+ "step": [],
67
+ "level": "L1",
68
+
69
+ "free_benchmark": {
70
+ "list": [],
71
+ "fuzz_device": "npu",
72
+ "pert_mode": "improve_precision",
73
+ "handler_type": "check",
74
+ "fuzz_level": "L1",
75
+ "fuzz_stage": "forward"
76
+ }
77
+ }
78
+ ```
79
+ 用户需根据自己的使用场景,对照[工具实现原理](#2-工具实现原理)中几个关键步骤进行配置
80
+ #### 3.2.1 确定比对范围
81
+
82
+ | 相关参数名 | 是否必选 | 可配置项 | 适用场景 |
83
+ | ---------- | -------- | ----------------- | ------------------------------------------------------------------------------------------- |
84
+ | list | 可选 | | 需要通过指定 API 名来限制比对API个数 如:\["mindspore.ops.bmm"\] 会只对mindspore.ops.bmm API进行比对|
85
+ | fuzz_stage | 可选 | "forward"(默认) | 需要进行 API **前向**计算的精度问题排查或验证|
86
+
87
+ #### 3.2.2. 选择扰动因子
88
+
89
+ | 相关参数 | 是否必选 | 可配置项 | 适用场景 |
90
+ | ----------- | -------- | ---------------------------- | -------------------------------------------------------------------------------------------------------- |
91
+ | pert_mode | 可选 | "improve_precision" (默认) | (常用)(可做验证) API 可能在**低精度**下有精度问题,扰动因子会将输入的低精度向量升精度 |
92
+ | | | "add_noise" | API 可能在**轻微扰动**下暴露精度问题,扰动因子会为输入向量增加一个极小值 |
93
+ | | | "bit_noise" | API 可能在**轻微扰动**下暴露精度问题,扰动因子会翻转输入向量的最后一个比特位。不支持BF16类型向量 |
94
+ | | | "no_change" | API 可能存在**数值稳定性**精度问题,扰动因子会复制原始输入|
95
+ | | | "change_value" | API 可能存在**大数吃小数**问题,扰动因子会交换输入向量的首尾值 |
96
+
97
+ #### 3.2.3. 选择处理方式
98
+ | 相关参数名 | 是否必选 | 可配置项 | 适用场景 |
99
+ | ------------ | -------- | ----------------- | ----------------------------------------------------------------------------------------- |
100
+ | handler_type | 可选 | "check" (默认) | 要做精度问题 API 排查,输出扰动前后不符合精度标准的 API,支持所有扰动因子 |
101
+ | | | "fix" | 要做可疑 API 验证,用扰动后输出替换原始输出,仅支持 "improve_precision" 扰动因子 |
102
+
103
+ ### 3.3 在模型脚本中开启工具
104
+
105
+ 通过 PrecisionDebugger 统一接口开启工具,示例如下:
106
+
107
+ ```python
108
+ from msprobe.mindspore import PrecisionDebugger
109
+
110
+ debugger = PrecisionDebugger(config_path='./config.json')
111
+ ...
112
+ debugger.start() # 一般在训练循环开头启动工具
113
+ ... # 循环体
114
+ debugger.stop() # 一般在训练循环末尾结束工具
115
+ debugger.step() # 在训练循环的最后需要重置工具,非循环场景不需要
116
+ ```
117
+
118
+ ### 3.4 查看精度风险算子
119
+
120
+ check 模式下,若存在不符合精度标准的 API,则工具会在 dump_path 目录下将相应 API 信息输出在文件 free_benchmark.csv 中。csv 文件字段含义如下所示:
121
+
122
+ | 字段 | 说明 |
123
+ | ------------ | ---------------------------------------------------------------------------------------- |
124
+ | rank | Rank ID,int 类型 |
125
+ | pert_mode | 扰动因子的类型,string 类型 |
126
+ | stage | 前/反向,string 类型 |
127
+ | step | 迭代数,int 类型 |
128
+ | api_name | API 名称,string 类型 |
129
+ | max_rel | 输出对比最大相对误差,float 类型 |
130
+ | dtype | 输入的 dtype,string 类型 |
131
+ | shape | 输入的 shape,tuple 类型 |
132
+ | output_index | 如果输出为列表或元组,其中一个元素检测不一致,则会有该元素的 index,否则为空,int 类型 |
133
+
134
+ 无标杆比对使用的精度标准如下:
135
+
136
+ | 输出dtype | 相对误差阈值 |
137
+ | ----------------- | ------------ |
138
+ | mindspore.float16 | 0.002 |
139
+ | mindspore.float32 | 0.0002 |
140
+ | 其他 | 0.0002 |