mindstudio-probe 1.0.3__py3-none-any.whl → 1.0.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/LICENSE +201 -201
  2. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/METADATA +36 -34
  3. mindstudio_probe-1.0.4.dist-info/RECORD +276 -0
  4. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/WHEEL +1 -1
  5. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/entry_points.txt +1 -0
  6. msprobe/README.md +101 -237
  7. msprobe/{config/config.json → config.json} +49 -49
  8. msprobe/core/advisor/advisor.py +124 -124
  9. msprobe/core/advisor/advisor_const.py +59 -59
  10. msprobe/core/advisor/advisor_result.py +58 -58
  11. msprobe/core/common/const.py +341 -318
  12. msprobe/core/common/exceptions.py +99 -99
  13. msprobe/core/common/{file_check.py → file_utils.py} +478 -283
  14. msprobe/core/common/log.py +76 -69
  15. msprobe/core/common/utils.py +385 -616
  16. msprobe/core/common_config.py +85 -71
  17. msprobe/core/compare/acc_compare.py +299 -298
  18. msprobe/core/compare/check.py +95 -95
  19. msprobe/core/compare/compare_cli.py +49 -49
  20. msprobe/core/compare/highlight.py +223 -222
  21. msprobe/core/compare/multiprocessing_compute.py +149 -149
  22. msprobe/core/compare/npy_compare.py +295 -295
  23. msprobe/core/compare/utils.py +430 -429
  24. msprobe/core/data_dump/data_collector.py +154 -144
  25. msprobe/core/data_dump/data_processor/base.py +314 -293
  26. msprobe/core/data_dump/data_processor/factory.py +59 -59
  27. msprobe/core/data_dump/data_processor/mindspore_processor.py +186 -198
  28. msprobe/core/data_dump/data_processor/pytorch_processor.py +366 -389
  29. msprobe/core/data_dump/json_writer.py +96 -116
  30. msprobe/core/data_dump/scope.py +178 -178
  31. msprobe/core/grad_probe/constant.py +70 -70
  32. msprobe/core/grad_probe/grad_compare.py +171 -175
  33. msprobe/core/grad_probe/utils.py +64 -52
  34. msprobe/docs/01.installation.md +89 -0
  35. msprobe/docs/02.config_introduction.md +165 -0
  36. msprobe/docs/03.config_examples.md +247 -0
  37. msprobe/docs/04.acl_config_examples.md +76 -0
  38. msprobe/docs/05.data_dump_PyTorch.md +198 -0
  39. msprobe/docs/06.data_dump_MindSpore.md +243 -0
  40. msprobe/docs/07.accuracy_checker_PyTorch.md +274 -0
  41. msprobe/docs/08.accuracy_checker_online_PyTorch.md +198 -0
  42. msprobe/docs/09.accuracy_checker_MindSpore.md +68 -0
  43. msprobe/docs/10.accuracy_compare_PyTorch.md +245 -0
  44. msprobe/docs/11.accuracy_compare_MindSpore.md +202 -0
  45. msprobe/docs/12.overflow_check_PyTorch.md +79 -0
  46. msprobe/docs/13.overflow_check_MindSpore.md +31 -0
  47. msprobe/{pytorch/doc/parse_tool.md → docs/14.data_parse_PyTorch.md} +283 -286
  48. msprobe/docs/15.free_benchmarking_PyTorch.md +164 -0
  49. msprobe/{doc/grad_probe/grad_probe.md → docs/17.grad_probe.md} +207 -207
  50. msprobe/docs/FAQ_PyTorch.md +177 -0
  51. msprobe/docs/S02.report_free_benchmarking_validation_performance_baseline.md +146 -0
  52. msprobe/docs/img/free_benchmark_framework.png +0 -0
  53. msprobe/mindspore/__init__.py +1 -1
  54. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +254 -245
  55. msprobe/mindspore/api_accuracy_checker/api_info.py +69 -69
  56. msprobe/mindspore/api_accuracy_checker/api_runner.py +155 -151
  57. msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +196 -196
  58. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +6 -0
  59. msprobe/mindspore/api_accuracy_checker/compute_element.py +238 -223
  60. msprobe/mindspore/api_accuracy_checker/main.py +8 -15
  61. msprobe/mindspore/api_accuracy_checker/type_mapping.py +113 -113
  62. msprobe/mindspore/api_accuracy_checker/utils.py +79 -62
  63. msprobe/mindspore/cell_processor.py +34 -34
  64. msprobe/mindspore/common/const.py +106 -87
  65. msprobe/mindspore/common/log.py +37 -37
  66. msprobe/mindspore/common/utils.py +81 -57
  67. msprobe/mindspore/compare/distributed_compare.py +75 -75
  68. msprobe/mindspore/compare/ms_compare.py +219 -117
  69. msprobe/mindspore/compare/ms_graph_compare.py +348 -317
  70. msprobe/mindspore/compare/ms_to_pt_api.yaml +399 -399
  71. msprobe/mindspore/debugger/debugger_config.py +66 -74
  72. msprobe/mindspore/debugger/precision_debugger.py +126 -107
  73. msprobe/mindspore/dump/dump_tool_factory.py +35 -35
  74. msprobe/mindspore/dump/hook_cell/api_registry.py +118 -104
  75. msprobe/mindspore/dump/hook_cell/hook_cell.py +55 -53
  76. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +922 -925
  77. msprobe/mindspore/dump/hook_cell/wrap_api.py +113 -0
  78. msprobe/mindspore/dump/jit_dump.py +72 -56
  79. msprobe/mindspore/dump/kernel_graph_dump.py +59 -60
  80. msprobe/mindspore/dump/kernel_kbyk_dump.py +64 -65
  81. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +116 -116
  82. msprobe/mindspore/free_benchmark/common/config.py +12 -12
  83. msprobe/mindspore/free_benchmark/common/handler_params.py +17 -17
  84. msprobe/mindspore/free_benchmark/common/utils.py +71 -71
  85. msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +842 -842
  86. msprobe/mindspore/free_benchmark/decorator/dec_forward.py +43 -42
  87. msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +107 -107
  88. msprobe/mindspore/free_benchmark/handler/base_handler.py +90 -90
  89. msprobe/mindspore/free_benchmark/handler/check_handler.py +41 -41
  90. msprobe/mindspore/free_benchmark/handler/fix_handler.py +36 -36
  91. msprobe/mindspore/free_benchmark/handler/handler_factory.py +21 -21
  92. msprobe/mindspore/free_benchmark/perturbation/add_noise.py +67 -67
  93. msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +21 -21
  94. msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +63 -63
  95. msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +51 -0
  96. msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +35 -34
  97. msprobe/mindspore/free_benchmark/perturbation/no_change.py +12 -12
  98. msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +29 -27
  99. msprobe/mindspore/free_benchmark/self_check_tool_factory.py +33 -33
  100. msprobe/mindspore/grad_probe/global_context.py +90 -91
  101. msprobe/mindspore/grad_probe/grad_analyzer.py +231 -231
  102. msprobe/mindspore/grad_probe/grad_monitor.py +27 -27
  103. msprobe/mindspore/grad_probe/grad_stat_csv.py +131 -131
  104. msprobe/mindspore/grad_probe/hook.py +94 -92
  105. msprobe/mindspore/grad_probe/utils.py +29 -28
  106. msprobe/mindspore/ms_config.py +128 -126
  107. msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +44 -45
  108. msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +34 -34
  109. msprobe/mindspore/runtime.py +4 -4
  110. msprobe/mindspore/service.py +378 -354
  111. msprobe/mindspore/task_handler_factory.py +24 -24
  112. msprobe/msprobe.py +105 -107
  113. msprobe/pytorch/__init__.py +3 -3
  114. msprobe/pytorch/api_accuracy_checker/common/config.py +53 -55
  115. msprobe/pytorch/api_accuracy_checker/common/utils.py +214 -165
  116. msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +213 -213
  117. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +606 -581
  118. msprobe/pytorch/api_accuracy_checker/compare/api_precision_standard.yaml +132 -132
  119. msprobe/pytorch/api_accuracy_checker/compare/api_precision_threshold.yaml +390 -390
  120. msprobe/pytorch/api_accuracy_checker/compare/compare.py +386 -381
  121. msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +73 -73
  122. msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +245 -244
  123. msprobe/pytorch/api_accuracy_checker/config.yaml +10 -10
  124. msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +335 -332
  125. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +200 -199
  126. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +133 -134
  127. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +592 -581
  128. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +70 -74
  129. msprobe/pytorch/api_accuracy_checker/run_ut/torch_ut_setting.json +7 -4
  130. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +197 -202
  131. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +325 -324
  132. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +204 -204
  133. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +219 -218
  134. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/ssl_config.py +10 -10
  135. msprobe/pytorch/bench_functions/__init__.py +15 -15
  136. msprobe/pytorch/bench_functions/apply_adam_w.py +28 -28
  137. msprobe/pytorch/bench_functions/confusion_transpose.py +19 -19
  138. msprobe/pytorch/bench_functions/fast_gelu.py +55 -55
  139. msprobe/pytorch/bench_functions/layer_norm_eval.py +6 -6
  140. msprobe/pytorch/bench_functions/linear.py +12 -12
  141. msprobe/pytorch/bench_functions/matmul_backward.py +48 -48
  142. msprobe/pytorch/bench_functions/npu_fusion_attention.py +509 -421
  143. msprobe/pytorch/bench_functions/rms_norm.py +15 -15
  144. msprobe/pytorch/bench_functions/rotary_mul.py +52 -52
  145. msprobe/pytorch/bench_functions/scaled_mask_softmax.py +26 -26
  146. msprobe/pytorch/bench_functions/swiglu.py +55 -55
  147. msprobe/pytorch/common/__init__.py +2 -2
  148. msprobe/pytorch/common/compare_script.template +14 -14
  149. msprobe/pytorch/common/log.py +20 -31
  150. msprobe/pytorch/common/parse_json.py +39 -39
  151. msprobe/pytorch/common/utils.py +305 -300
  152. msprobe/pytorch/compare/distributed_compare.py +66 -66
  153. msprobe/pytorch/compare/mapping.yaml +607 -607
  154. msprobe/pytorch/compare/match.py +34 -33
  155. msprobe/pytorch/compare/pt_compare.py +50 -40
  156. msprobe/pytorch/debugger/debugger_config.py +95 -95
  157. msprobe/pytorch/debugger/precision_debugger.py +125 -125
  158. msprobe/pytorch/free_benchmark/__init__.py +8 -8
  159. msprobe/pytorch/free_benchmark/common/constant.py +70 -70
  160. msprobe/pytorch/free_benchmark/common/counter.py +71 -71
  161. msprobe/pytorch/free_benchmark/common/enums.py +37 -37
  162. msprobe/pytorch/free_benchmark/common/params.py +129 -129
  163. msprobe/pytorch/free_benchmark/common/utils.py +102 -102
  164. msprobe/pytorch/free_benchmark/compare/grad_saver.py +179 -179
  165. msprobe/pytorch/free_benchmark/compare/single_benchmark.py +104 -104
  166. msprobe/pytorch/free_benchmark/main.py +105 -105
  167. msprobe/pytorch/free_benchmark/perturbed_layers/base_layer.py +13 -13
  168. msprobe/pytorch/free_benchmark/perturbed_layers/layer_factory.py +41 -41
  169. msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +90 -90
  170. msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +104 -104
  171. msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +63 -63
  172. msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +68 -68
  173. msprobe/pytorch/free_benchmark/perturbed_layers/npu/no_change.py +28 -28
  174. msprobe/pytorch/free_benchmark/perturbed_layers/npu/npu_base_layser.py +45 -45
  175. msprobe/pytorch/free_benchmark/perturbed_layers/run_cpu.py +19 -19
  176. msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +217 -217
  177. msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +39 -39
  178. msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +23 -23
  179. msprobe/pytorch/free_benchmark/result_handlers/handler_factory.py +30 -30
  180. msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +170 -170
  181. msprobe/pytorch/function_factory.py +76 -75
  182. msprobe/pytorch/functional/dump_module.py +39 -39
  183. msprobe/pytorch/grad_probe/grad_monitor.py +91 -90
  184. msprobe/pytorch/grad_probe/grad_stat_csv.py +128 -128
  185. msprobe/pytorch/hook_module/api_registry.py +161 -161
  186. msprobe/pytorch/hook_module/hook_module.py +120 -120
  187. msprobe/pytorch/hook_module/support_wrap_ops.yaml +1879 -1877
  188. msprobe/pytorch/hook_module/utils.py +30 -29
  189. msprobe/pytorch/hook_module/wrap_aten.py +110 -110
  190. msprobe/pytorch/hook_module/wrap_distributed.py +78 -78
  191. msprobe/pytorch/hook_module/wrap_functional.py +105 -105
  192. msprobe/pytorch/hook_module/wrap_npu_custom.py +93 -84
  193. msprobe/pytorch/hook_module/wrap_tensor.py +71 -71
  194. msprobe/pytorch/hook_module/wrap_torch.py +86 -86
  195. msprobe/pytorch/hook_module/wrap_vf.py +62 -62
  196. msprobe/pytorch/module_processer.py +138 -138
  197. msprobe/pytorch/online_dispatch/__init__.py +20 -20
  198. msprobe/pytorch/online_dispatch/compare.py +236 -236
  199. msprobe/pytorch/online_dispatch/dispatch.py +271 -271
  200. msprobe/pytorch/online_dispatch/dump_compare.py +155 -156
  201. msprobe/pytorch/online_dispatch/single_compare.py +391 -391
  202. msprobe/pytorch/online_dispatch/torch_ops_config.yaml +49 -49
  203. msprobe/pytorch/online_dispatch/utils.py +130 -146
  204. msprobe/pytorch/parse.py +4 -4
  205. msprobe/pytorch/parse_tool/cli.py +32 -32
  206. msprobe/pytorch/parse_tool/lib/compare.py +260 -271
  207. msprobe/pytorch/parse_tool/lib/config.py +52 -52
  208. msprobe/pytorch/parse_tool/lib/file_desc.py +31 -31
  209. msprobe/pytorch/parse_tool/lib/interactive_cli.py +102 -102
  210. msprobe/pytorch/parse_tool/lib/parse_exception.py +54 -54
  211. msprobe/pytorch/parse_tool/lib/parse_tool.py +158 -158
  212. msprobe/pytorch/parse_tool/lib/utils.py +316 -321
  213. msprobe/pytorch/parse_tool/lib/visualization.py +85 -91
  214. msprobe/pytorch/pt_config.py +188 -187
  215. msprobe/pytorch/service.py +246 -252
  216. mindstudio_probe-1.0.3.dist-info/RECORD +0 -272
  217. msprobe/config/README.md +0 -539
  218. msprobe/mindspore/doc/compare.md +0 -58
  219. msprobe/mindspore/doc/dump.md +0 -217
  220. msprobe/mindspore/dump/hook_cell/wrap_functional.py +0 -91
  221. msprobe/mindspore/dump/hook_cell/wrap_tensor.py +0 -63
  222. msprobe/pytorch/doc/FAQ.md +0 -193
  223. msprobe/pytorch/doc/api_accuracy_checker.md +0 -313
  224. msprobe/pytorch/doc/api_accuracy_checker_online.md +0 -187
  225. msprobe/pytorch/doc/dump.md +0 -260
  226. msprobe/pytorch/doc/msprobe/321/207/342/226/223/342/225/233/321/205/342/225/221/320/266/321/205/342/225/226/320/265/321/205/320/225/342/225/226/321/206/320/245/342/226/221/321/206/320/235/320/276dump/321/206/320/260/320/227/321/205/320/227/320/226/321/206/320/220/320/267/321/210/320/223/342/225/234/321/205/320/257/342/225/221/321/207/342/225/221/342/224/220/321/206/320/232/320/265/321/205/320/241/320/232.md +0 -182
  227. msprobe/pytorch/doc/ptdbg_ascend_compare.md +0 -240
  228. msprobe/pytorch/doc/ptdbg_ascend_overview.md +0 -68
  229. msprobe/pytorch/doc/ptdbg_ascend_quickstart.md +0 -381
  230. msprobe/pytorch/doc/run_overflow_check.md +0 -25
  231. msprobe/pytorch/doc//321/205/320/254/320/270/321/207/342/225/221/342/224/220/321/207/342/226/223/342/225/233/321/205/342/225/221/320/266/321/206/320/277/320/244/321/205/320/277/342/225/243.md +0 -90
  232. msprobe/pytorch/doc//321/206/320/247/320/260/321/206/320/260/320/227/321/206/320/255/320/226/321/205/342/225/226/320/265/321/205/320/225/342/225/226/321/205/320/254/342/225/221/321/206/320/251/320/277/321/211/320/272/320/234/321/210/320/277/320/221/321/205/320/242/320/234/321/206/320/220/320/267/321/210/320/223/342/225/234/321/205/320/257/342/225/221/321/207/342/225/221/342/224/220/321/206/320/232/320/265/321/205/320/241/320/232.md +0 -151
  233. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/top_level.txt +0 -0
  234. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_1.png +0 -0
  235. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_2.png +0 -0
  236. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_3.png +0 -0
  237. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_4.png +0 -0
  238. /msprobe/{pytorch/doc → docs}/img/GPT-3_1.png +0 -0
  239. /msprobe/{pytorch/doc → docs}/img/GPT-3_2.png +0 -0
  240. /msprobe/{pytorch/doc → docs}/img/GPT-3_3.png +0 -0
  241. /msprobe/{pytorch/doc → docs}/img/GPT-3_4.png +0 -0
  242. /msprobe/{pytorch/doc → docs}/img/GPT-3_5.png +0 -0
  243. /msprobe/{pytorch/doc → docs}/img/GPT-3_6.png +0 -0
  244. /msprobe/{pytorch/doc → docs}/img/GPT-3_7.png +0 -0
  245. /msprobe/{pytorch/doc → docs}/img/GPT-3_8.png +0 -0
  246. /msprobe/{pytorch/doc → docs}/img/YOLOV5S_1.png +0 -0
  247. /msprobe/{pytorch/doc → docs}/img/YOLOV5S_2.png +0 -0
  248. /msprobe/{pytorch/doc → docs}/img/accuracy_checking_details.png +0 -0
  249. /msprobe/{pytorch/doc → docs}/img/accuracy_checking_result.png +0 -0
  250. /msprobe/{pytorch/doc → docs}/img/api_precision_compare_details.png +0 -0
  251. /msprobe/{pytorch/doc → docs}/img/api_precision_compare_result.png +0 -0
  252. /msprobe/{pytorch/doc → docs}/img/auto_analyze_log.png +0 -0
  253. /msprobe/{pytorch/doc → docs}/img/compare_result_pkl.png +0 -0
  254. /msprobe/{pytorch/doc → docs}/img/compare_result_pkl_md5.png.png +0 -0
  255. /msprobe/{pytorch/doc → docs}/img/cpu_info.png +0 -0
  256. /msprobe/{config → docs}/img/free_benchmark.png +0 -0
  257. /msprobe/{doc/grad_probe/img/image-1.png → docs/img/grad_probe_image-1.png} +0 -0
  258. /msprobe/{doc/grad_probe/img/image-2.png → docs/img/grad_probe_image-2.png} +0 -0
  259. /msprobe/{doc/grad_probe/img/image-3.png → docs/img/grad_probe_image-3.png} +0 -0
  260. /msprobe/{doc/grad_probe/img/image-4.png → docs/img/grad_probe_image-4.png} +0 -0
  261. /msprobe/{doc/grad_probe/img/image.png → docs/img/grad_probe_image.png} +0 -0
  262. /msprobe/{pytorch/doc → docs}/img/module_compare.png +0 -0
@@ -1,313 +0,0 @@
1
- # **精度预检工具**
2
-
3
- ## 简介
4
-
5
- 精度预检工具通过扫描昇腾NPU上用户训练模型中所有API,输出精度情况的诊断和分析。工具通过dump模型中所有的API前反向信息;构造相应的API单元测试,将NPU输出与标杆(CPU高精度)比对,从而计算对应的精度指标,该过程称为run_ut;将NPU环境下dump的预检数据拷贝至GPU环境,同样执行run_ut;最后通过**新精度标准比对法**将NPU和GPU的预检结果进行比对,从而找出NPU中存在精度问题的API。
6
-
7
- **新精度标准比对法**:依据新精度标准,对不同的API采取不同的比对算法进行比对(包括绝对阈值法,标杆比对法、二进制一致法、ULP误差比对法和双千指标法),最终给定预检判定结果。
8
-
9
- **真实数据模式**:精度预检工具支持随机生成模式和真实数据模式,即在预检dump时可以选择由工具构造随机数进行输入获得dump数据或选择获取真实输入数据进行预检dump操作;随机生成模式执行效率高,可以快速获得结果,但数据精度低,只能大致判断精度问题;真实数据模式执行效率略低于随机生成模式,但是数据精度高,可以准确判断精度问题。
10
-
11
- **工具支持PyTorch版本**:1.11/2.0/2.1/2.2。
12
-
13
- **工具特性**
14
-
15
- - 落盘数据小。
16
- - 支持随机生成模式和真实数据模式。
17
- - 单API测试,排除整网中的累计误差问题。
18
-
19
- ## 预检流程
20
-
21
- 精度预检操作流程如下:
22
-
23
- 1. 在NPU和GPU环境下分别安装msprobe工具。详见《[MindStudio精度调试工具](../../README.md)》的“工具安装”章节。
24
- 2. 在NPU训练脚本内添加msprobe工具dump接口PrecisionDebugger,采集待预检数据。详见《[精度数据采集](./dump.md)》,注意需要配置level="L1"。
25
- 3. 将NPU环境下dump的预检数据拷贝至GPU环境。
26
- 4. 在NPU和GPU环境下分别执行run_ut,生成结果用于最终api_precision_compare操作的输入。详见“**run_ut预检操作**”。
27
- 5. 将NPU和GPU执行run_ut生成的`accuracy_checking_details_{timestamp}.csv`结果文件拷贝至同一环境下。
28
- 6. 运行api_precision_compare.py,输出结果为预检操作的最终结果。详见“**预检结果比对**”。
29
-
30
- ## 预检操作
31
-
32
- ### run_ut预检操作
33
-
34
- 完成待预检数据采集后,仅仅获取了API的输入数据,为了得到NPU vs CPU高精度(标杆)的预检比对结果和GPU vs CPU高精度(标杆)的预检比对结果,还需要进行run_ut操作。
35
-
36
- run_ut预检操作包括如下场景:
37
-
38
- - 使用run_ut.py执行预检:run_ut.py适用于数据量较小的单卡场景。
39
- - 使用multi_run_ut.py执行多线程预检:multi_run_ut.py适用于数据量较大的大模型场景。
40
-
41
- #### 使用run_ut.py执行预检
42
-
43
- 1. 将API信息输入给run_ut模块运行精度检测并比对,运行如下命令:
44
-
45
- ```bash
46
- msprobe -f pytorch run_ut -api_info ./dump.json
47
- ```
48
-
49
- | 参数名称 | 说明 | 是否必选 |
50
- | ---------------------------- | ------------------------------------------------------------ | ---------------------------------- |
51
- | -api_info或--api_info_file | 指定API信息文件dump.json。 | 是 |
52
- | -save_error_data | 保存精度未达标的API输入输出数据。 | 否 |
53
- | -o或--out_path | 指定run_ut执行结果存盘路径,默认“./”(相对于run_ut的路径)。 | 否 |
54
- | | | |
55
- | -j或--jit_compile | 开启jit编译。 | 否 |
56
- | -d或--device | 指定Device ID,选择UT代码运行所在的卡,默认值为0。 | 否 |
57
- | -csv_path或--result_csv_path | 指定本次运行中断时生成的`accuracy_checking_result_{timestamp}.csv`文件路径,执行run_ut中断时,若想从中断处继续执行,配置此参数即可。需要指定为上次中断的`accuracy_checking_result_{timestamp}.csv`文件。详见“**断点续检**”。 | run_ut操作中断后继续执行场景下必选 |
58
- | -f或--filter_api | 过滤模型中除最大值和最小值以外其他参数和结构相同的API。适用于模型较大且重复API较多的场景。 | 否 |
59
- | -config或--config_path | 指定预检操作过程中的额外配置(包括黑名单、白名单等)的[config.json](https://gitee.com/ascend/mstt/tree/master/debug/accuracy_tools/msprobe/config)文件,默认未配置。config.json文件的配置可参考《[配置文件说明](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/config/README.md#pytorch场景task配置为run_ut)》。 | 否 |
60
-
61
- 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`中查询其各个输出的达标情况以及比较指标。详细介绍请参见“**预检结果**”。
62
-
63
- 2. (可选)如果需要保存比对不达标的输入和输出数据,可以在run_ut执行命令结尾添加-save_error_data,例如:
64
-
65
- ```bash
66
- msprobe -f pytorch run_ut -api_info ./dump.json -save_error_data
67
- ```
68
-
69
- 数据默认会存盘到'./ut_error_data{timestamp}'路径下(相对于启动run_ut的路径),有需要的话,用户可以通过error_data_path参数来配置保存路径,error_data_path参数在[config.json](https://gitee.com/ascend/mstt/tree/master/debug/accuracy_tools/msprobe/config)文件或config.yaml文件配置,config.json文件需要在run_ut操作时通过-config参数指定,config.yaml文件详见“**config.yaml文件说明**”。
70
-
71
- #### 使用multi_run_ut.py执行多线程预检
72
-
73
- multi_run_ut.py脚本,可以并行执行多个run_ut操作,从而降低预检耗时。
74
-
75
- 命令示例如下:
76
-
77
- ```bash
78
- msprobe -f pytorch multi_run_ut -api_info ./dump.json -n 32 -d 0 1 2 3
79
- ```
80
-
81
- | 参数名称 | 说明 | 是否必选 |
82
- | ---------------------------- | ------------------------------------------------------------ | ---------------------------------- |
83
- | -api_info或--api_info_file | 指定API信息文件dump.json。 | 是 |
84
- | -save_error_data | 保存精度未达标的API输入输出数据。 | 否 |
85
- | -o或--out_path | 指定run_ut执行结果存盘路径,默认“./”(相对于run_ut的路径)。 | 否 |
86
- | -j或--jit_compile | 开启jit编译。 | 否 |
87
- | -n | 同时执行run_ut线程的数量,默认为8,最大支持64,但每个Device最大支持8个线程,当指定多个线程和多个Device时,则线程数在每张卡上均分。 | 否 |
88
- | -d或--device | 指定Device ID,选择UT代码运行所在的卡,默认值为0,支持同时指定0~7,共8个Device。 | 否 |
89
- | -csv_path或--result_csv_path | 指定本次运行中断时生成的`accuracy_checking_result_{timestamp}.csv`文件路径,执行run_ut中断时,若想从中断处继续执行,配置此参数即可。需要指定为上次中断的`accuracy_checking_result_{timestamp}.csv`文件。详见“**断点续检**”。 | run_ut操作中断后继续执行场景下必选 |
90
- | -f或--filter_api | 过滤模型中除最大值和最小值以外其他参数和结构相同的API。适用于模型较大且重复API较多的场景。 | 否 |
91
-
92
- #### 断点续检
93
-
94
- 精度预检run_ut过程中,若因环境、数据量过大等原因导致预检进程中断,那么当用户解决这些问题后,重新执行run_ut操作,可以通过断点续检操作继续前面未完成的预检,会在-csv_path指定的`accuracy_checking_result_{timestamp}.csv`文件以及对应的`accuracy_checking_details_{timestamp}.csv`文件中继续写入后续的结果,不会重新创建结果文件。
95
-
96
- 须指定为上次预检中断的`accuracy_checking_result_{timestamp}.csv`文件。请勿修改`accuracy_checking_result_{timestamp}.csv`和`accuracy_checking_details_{timestamp}.csv`文件名,包括时间戳,否则断点续检会因无法识别到文件名而失败。
97
-
98
- 断点续检操作通过如下命令执行:
99
-
100
- ```bash
101
- msprobe -f pytorch run_ut -api_info ./dump.json -csv_path /home/xxx/ut/accuracy_checking_result_{timestamp}.csv
102
- ```
103
-
104
- #### API预检黑名单和白名单
105
-
106
- run_ut过程支持API预检黑名单和白名单,通过如下文件配置black_list(黑名单)或white_list(白名单)参数来指定不需要或需要预检的API名称:
107
-
108
- - 配置[config.json](https://gitee.com/ascend/mstt/tree/master/debug/accuracy_tools/msprobe/config)文件,config.json文件需要在run_ut操作时通过-config参数指定。
109
- - 配置config.yaml文件,详见“**config.yaml文件说明**”。
110
-
111
- config.json文件的优先级高于config.yaml文件,即执行config.json文件时,config.yaml文件的配置不生效。
112
-
113
- ### config.yaml文件说明
114
-
115
- config.yaml文件可以通过配置参数来控制dump和run_ut操作的白名单、黑名单等功能。操作步骤如下:
116
-
117
- 1. 查找msprobe工具安装路径。
118
-
119
- ```bash
120
- pip show mindstudio-probe
121
- ```
122
-
123
- 输出结果如下示例:
124
-
125
- ```bash
126
- Name: mindstudio-probe
127
- Version: 1.0
128
- Summary: This is a pytorch precision comparison tools
129
- Home-page:
130
- Author:
131
- Author-email:
132
- License:
133
- Location: /home/xx/anaconda3/envs/pt21py38/lib/python3.8/site-packages
134
- Requires: numpy, openpyxl, pandas, pyyaml, rich, tqdm, wheel
135
- Required-by:
136
- ```
137
-
138
- Location字段为msprobe工具的安装路径,那么config.yaml文件位置为/home/xx/anaconda3/envs/pt21py38/lib/python3.8/site-packages/msprobe/pytorch/api_accuracy_checker/config.yaml
139
-
140
- 2. 进入config.yaml文件
141
-
142
- ```bash
143
- vi /home/xx/anaconda3/envs/pt21py38/lib/python3.8/site-packages/msprobe/pytorch/api_accuracy_checker/config.yaml
144
- ```
145
-
146
- 3. 修改config.yaml文件参数。
147
-
148
- ```yaml
149
- white_list: []
150
- black_list: []
151
- error_data_path: './'
152
- precision: 14
153
- ```
154
-
155
- | 参数名称 | 说明 | 是否必选 |
156
- | --------------- | ------------------------------------------------------------ | -------- |
157
- | white_list | API dump白名单,仅对指定的API进行dump。参数示例:white_list=["conv1d", "conv2d"]。默认未配置白名单,即dump全量API数据。 | 否 |
158
- | black_list | API dump黑名单,被指定的API不进行dump。参数示例:black_list=["conv1d", "conv2d"]。默认未配置黑名单,即dump全量API数据。 | 否 |
159
- | error_data_path | 配置保存精度未达标的API输入输出数据路径。参数示例"error_data_path": "./"。默认为当前路径。 | 否 |
160
- | precision | 浮点数表示位数,默认取小数点后14位。 | 否 |
161
-
162
- 说明:white_list和black_list同时配置时,二者配置的API名单若无交集,则白名单生效,若API名单存在交集,则白名单排除的部分以及交集的API不进行dump。
163
-
164
- ## 预检结果
165
-
166
- 精度预检生成的`accuracy_checking_result_{timestamp}.csv`和`accuracy_checking_details_{timestamp}.csv`文件示例如下:
167
-
168
- 可以通过先查看`accuracy_checking_result_{timestamp}.csv`文件的Forward Test Success和Backward Test Success,判断是否存在未通过测试的API,再查看`accuracy_checking_details_{timestamp}.csv`文件的API详细达标情况,API达标情况介绍请参见“**API预检指标**”。
169
-
170
- `accuracy_checking_result_{timestamp}.csv`
171
-
172
- ![accuracy_checking_result](img/accuracy_checking_result.png)
173
-
174
- | 字段 | 含义 |
175
- | --------------------- | ------------------------------------------------------------ |
176
- | API name | API名称。 |
177
- | Forward Test Success | 前向API是否通过测试,pass为通过,warning为待观察,error为错误。 |
178
- | Backward Test Success | 反向API是否通过测试,pass为通过,warning为待观察,error为错误,如果是空白的话代表该API没有反向输出。 |
179
- | Message | 提示信息。 |
180
-
181
- 该结果为中间结果,仅作为参考,建议完成“**预检结果比对**”后查看比对结果。该结果后续将会删除。
182
-
183
- Forward Test Success和Backward Test Success是否通过测试是由`accuracy_checking_details_{timestamp}.csv`中的余弦相似度、最大绝对误差、双百双千双万指标判定结果决定的。
184
-
185
- 需要注意的是`accuracy_checking_details_{timestamp}.csv`中可能存在一个API的前向(反向)有多个输出,那么每个输出记录一行,而在`accuracy_checking_result_{timestamp}.csv`中的结果需要该API的所有结果均为pass才能标记为pass,只要存在一个error则标记error,仅存在waring和pass且不存在error标记waring。
186
-
187
- `accuracy_checking_details_{timestamp}.csv`
188
-
189
- ![accuracy_checking_details](img/accuracy_checking_details.png)
190
-
191
- | 字段 | 含义 |
192
- | ------------------- | ------------------------------------------------------------ |
193
- | API name | NPU或GPU下的API名称。 |
194
- | Bench Dtype | 标杆数据的API数据类型。 |
195
- | DEVICE Dtype | NPU或GPU数据的API数据类型。 |
196
- | Shape | API的Shape信息。 |
197
- | 余弦相似度 | NPU或GPU数据与标杆数据的余弦相似度。 |
198
- | 最大绝对误差 | NPU或GPU数据与标杆数据的最大绝对误差。 |
199
- | 双百指标 | 双百精度指标。是指NPU或GPU的Tensor中的元素逐个与对应的标杆数据对比,相对误差小于百分之一的个数占总元素个数的比例。测试通过标准为相对误差大于百分之一的个数占总元素个数的比例小于百分之一。 |
200
- | 双千指标 | 双千精度指标。是指NPU或GPU的Tensor中的元素逐个与对应的标杆数据对比,相对误差小于千分之一的个数占总元素个数的比例。测试通过标准为相对误差大于千分之一的个数占总元素个数的比例小于千分之一。 |
201
- | 双万指标 | 双万精度指标。是指NPU或GPU的Tensor中的元素逐个与对应的标杆数据对比,相对误差小于万分之一的个数占总元素个数的比例。测试通过标准为相对误差大于万分之一的个数占总元素个数的比例小于万分之一。 |
202
- | 二进制一致错误率 | NPU或GPU数据中每个Tensor精度不一致的数值的数量与Tensor中数值数量的比值。只有数据是builtin类型(bool、int、float、str)、torch.bool和torch的int类型或者在新精度标准中使用二进制一致算法进行比对的API才会展示。 |
203
- | 误差均衡性 | NPU或GPU数据与标杆数据精度差的上下浮动情况。 |
204
- | 均方根误差 | NPU或GPU数据与标杆数据的均方根误差。 |
205
- | 小值域错误占比 | NPU或GPU Tensor中与标杆的绝对误差大于错误阈值的小值在小值域(小值的总数量)中的占比。判断为小值以及绝对误差的错误阈值见“**小值域阈值**”。 |
206
- | 相对误差最大值 | NPU或GPU数据与标杆数据相对误差的最大值。 |
207
- | 相对误差平均值 | NPU或GPU数据与标杆数据相对误差的平均值。 |
208
- | inf/nan错误率 | NPU与标杆inf/nan计算不一致的元素个数占总元素的个数比例。 |
209
- | 相对误差错误率 | NPU与标杆的正常值计算相对误差,其大于错误阈值的元素个数占正常值元素个数的比例。 |
210
- | 绝对误差错误率 | NPU与标杆的小值计算绝对误差,其大于错误阈值的元素个数占小值元素个数的比例。 |
211
- | ULP误差最大值 | NPU或GPU数据与标杆数据ULP误差的最大值(取绝对值后)。 |
212
- | ULP误差平均值 | NPU或GPU数据与标杆数据ULP误差的平均值(取绝对值后)。 |
213
- | ULP误差大于阈值占比 | NPU或GPU数据与标杆数据的ULP误差(取绝对值后)大于阈值(当NPU或GPU数据类型为float16或bfloat16时,阈值为1;当NPU或GPU数据类型为float32时,阈值为32)的元素个数占总元素的个数比例。 |
214
- | Status | API预检通过状态,pass表示通过测试,error表示未通过,warning表示测试未通过双千或双万精度指标,SKIP表示该API的某个参数的反向不要计算梯度,所以没有任何计算过程,其他信息均为空。 |
215
- | message | 提示信息。 |
216
-
217
- ### 小值域阈值
218
-
219
- 判定为小值的阈值为:
220
-
221
- - torch.float32:e-6
222
- - torch.float16:e-3
223
- - torch.bfloat16:e-3
224
-
225
- 小值域的绝对误差阈值为:
226
-
227
- - torch.float32:e-9
228
- - torch.float16:e-5
229
- - torch.bfloat16:e-5
230
-
231
- ### API预检指标
232
-
233
- API预检指标是通过对`accuracy_checking_details_{timestamp}.csv`中的余弦相似度、最大绝对误差双百、双千、双万精度指标的数值进行判断,得出该API是否符合精度标准的参考指标。
234
-
235
- API预检通过测试,则在`accuracy_checking_details_{timestamp}.csv`文件中的“Status”列标记“pass”,否则标记“error”或“warning”,详细规则如下:
236
-
237
- 1. 余弦相似度 > 0.99:≤ 0.99为不达标,标记“error”,> 0.99达标,进行下一步;
238
- 2. 最大绝对误差 < 0.001:< 0.001达标,标记“pass”,≥ 0.001为不达标,进行下一步;
239
- 3. 双百、双千、双万精度指标:
240
- - 对于float16和bfloat16数据:双百指标不通过,标记“error”;双百指标通过,双千指标不通过,标记“warning”;双百、双千指标均通过,标记“pass”。
241
- - 对于float32和float64数据:双千指标不通过,标记“error”;双千指标通过,双万指标不通过,标记“warning”;双千、双万指标均通过,标记“pass”。
242
-
243
- 4. 在`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”。
244
-
245
- ## 预检结果比对
246
-
247
- 需要同时获取NPU和GPU环境下run_ut操作的预检结果`accuracy_checking_details_{timestamp}.csv`文件。执行如下命令进行NPU和GPU预检结果的比对:
248
-
249
- ```bash
250
- 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/
251
- ```
252
-
253
- | 参数名称 | 说明 | 是否必选 |
254
- | -------------------- | ------------------------------------------------------------ | -------- |
255
- | -npu或--npu_csv_path | NPU预检结果`accuracy_checking_details_{timestamp}.csv`文件路径。默认从当前目录下识别该文件。 | 否 |
256
- | -gpu或--gpu_csv_path | GPU预检结果`accuracy_checking_details_{timestamp}.csv`文件路径。默认从当前目录下识别该文件。 | 否 |
257
- | -o或--out_path | 指定api_precision_compare.py执行结果存盘路径,默认为当前目录。 | 否 |
258
-
259
- 执行完成后输出`api_precision_compare_result_{timestamp}.csv`和`api_precision_compare_details_{timestamp}.csv`文件。文件示例如下:
260
-
261
- 可以通过先查看`api_precision_compare_result_{timestamp}.csv`文件的Forward Test Success和Backward Test Success,判断是否存在未通过测试的API,再查看`api_precision_compare_details_{timestamp}.csv`文件的API详细达标情况。
262
-
263
- `api_precision_compare_result_{timestamp}.csv`
264
-
265
- ![api_precision_compare_result](img/api_precision_compare_result.png)
266
-
267
- | 字段 | 含义 |
268
- | --------------------- | ------------------------------------------------------------ |
269
- | API name | API名称。 |
270
- | Forward Test Success | 前向API是否通过测试,pass为通过,warning为待观察,error为错误,skip表示该API的数据类型不支持使用新精度标准进行比对,如float64。 |
271
- | Backward Test Success | 反向API是否通过测试,pass为通过,warning为待观察,error为错误,如果是空白的话代表该API没有反向输出,skip表示该API的数据类型不支持使用新精度标准进行比对,如float64。 |
272
- | Message | 提示信息。 |
273
-
274
- 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。
275
-
276
- `api_precision_compare_details_{timestamp}.csv`
277
-
278
- ![api_precision_compare_details](img/api_precision_compare_details.png)
279
-
280
- | 字段 | 含义 |
281
- | ------------------------ | ------------------------------------------------------------ |
282
- | API name | NPU或GPU下的API名称。 |
283
- | 小值域错误比值 | NPU与CPU的小值域的错误比率/GPU与CPU的小值域的错误比率。标杆比对法指标。 |
284
- | 小值域错误判定结果 | 小值域错误比值小于等于1标记为pass,1~2之间标记为waring,大于2标记为error。 |
285
- | 均方根误差比值 | NPU与CPU的均方根误差/GPU与CPU的均方根误差。标杆比对法指标。 |
286
- | 均方根误差判定结果 | 均方根误差比值小于等于1标记为pass,1~2之间标记为waring,大于2标记为error。 |
287
- | 相对误差最大值比值 | NPU与CPU的相对误差最大值/GPU与CPU的相对误差最大值。标杆比对法指标。 |
288
- | 相对误差最大值判定结果 | 相对误差最大值比值小于等于1标记为pass,1~10之间标记为waring,大于10标记为error。 |
289
- | 相对误差平均值比值 | NPU与CPU的相对误差的平均值/GPU与CPU的相对误差的平均值。标杆比对法指标。 |
290
- | 相对误差平均值判定结果 | 相对误差平均值比值小于等于1标记为pass,1~2之间标记为waring,大于2标记为error。 |
291
- | 误差均衡性比值 | NPU与CPU的误差均衡性/GPU与CPU的误差均衡性。标杆比对法指标。 |
292
- | 误差均衡性判定结果 | 误差均衡性比值小于等于1标记为pass,1~2之间标记为waring,大于2标记为error。该字段暂不参与api_precision_compare_result的结果判定。 |
293
- | inf/nan错误率 | NPU与标杆inf/nan计算不一致的元素个数占总元素的个数比例。绝对阈值法指标。 |
294
- | inf/nan判定结果 | inf/nan错误率判定结果,等于0标记为pass,其余情况标记为error。 |
295
- | 相对误差错误率 | NPU与标杆的正常值计算相对误差,其大于错误阈值的元素个数占正常值元素个数的比例。绝对阈值法指标。 |
296
- | 相对误差判定结果 | 相对误差错误率判定结果,等于0标记为pass,其余情况标记为error。 |
297
- | 绝对误差错误率 | NPU与标杆的小值计算绝对误差,其大于错误阈值的元素个数占小值元素个数的比例。绝对阈值法指标。 |
298
- | 绝对误差判定结果 | 绝对误差错误率判定结果,等于0标记为pass,其余情况标记为error。 |
299
- | 二进制一致错误率 | NPU或GPU数据中每个Tensor精度不一致的数值的数量与Tensor中数值数量的比值。只有数据是builtin类型(bool、int、float、str)、torch.bool和torch的int类型或者在新精度标准中使用二进制一致算法进行比对的API才会展示。二进制一致法指标。 |
300
- | 二进制一致错误率判定结果 | 二进制一致错误率判定结果,等于0标记为pass,其余情况标记为error。 |
301
- | ULP误差平均值 | NPU数据与标杆数据ULP误差的平均值(取绝对值后)。ULP误差比对法指标。 |
302
- | ULP误差大于阈值占比 | NPU数据与标杆数据的ULP误差(取绝对值后)大于阈值(当NPU数据类型为float16或bfloat16时,阈值为1;当NPU数据类型为float32时,阈值为32)的元素个数占总元素的个数比例。ULP误差比对法指标。 |
303
- | ULP误差大于阈值占比比值 | NPU与CPU的ULP误差大于阈值占比/GPU与CPU的ULP误差大于阈值占比。ULP误差比对法指标。 |
304
- | 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误差大于阈值占比。 |
305
- | 双千指标 | 双千精度指标。是指NPU的Tensor中的元素逐个与对应的标杆数据对比,相对误差小于千分之一的个数占总元素个数的比例。测试通过标准为相对误差大于千分之一的个数占总元素个数的比例小于千分之一。仅conv1d和conv2d使用该指标。双千指标法指标。 |
306
- | 双千指标判定结果 | 双千指标判定结果。双千指标大于0.999标记为pass,否则标记为error。 |
307
- | 比对结果 | 综合所有指标的最终结果。如果比对指标中有error,则标记为error;有warning,则标记为warning;否则标记为pass。 |
308
- | 比对算法 | API使用的比对算法,为标杆比对法、二进制一致法、绝对阈值法和ULP误差比对法中的一种。 |
309
- | Message | 提示信息。当前提示该API比对结果为error或warning时对应不符合标准的指标。 |
310
-
311
- # FAQ
312
-
313
- [FAQ](./FAQ.md)
@@ -1,187 +0,0 @@
1
- # 在线精度预检
2
-
3
- 为了应对大模型场景下,通过离线预检方式dump API输入输出数据导致的存储资源紧张问题,提供在线精度预检功能。本功能实现在执行NPU训练操作的过程中,通过TCP/IP协议在NPU
4
- Host与GPU Host设备间建立连接,将NPU上对应API的输入数据在GPU设备上运行,将两份输出数据进行比对,得到预检比对结果,从而减少数据dump的步骤,降低存储资源的占用。
5
-
6
- ## 在线精度预检流程
7
-
8
- 在线精度预检当前支持**局域网场景**和**共享存储场景**,请根据不同的场景选择对应的配置。
9
-
10
- 在线精度预检操作流程如下:
11
-
12
- 1. 准备GPU和NPU可正常运行的训练环境,PyTorch版本大于等于2.0,并保证两台Host在同一局域网内可正常通信或能通过共享存储进行通信。
13
- 2. GPU和NPU Host设备上同时安装msprobe工具,详见《[MindStudio精度调试工具](./../../README.md)
14
- 》,其中在线预检要多安装twisted、pyOpenSSL依赖,该依赖为Python模块。
15
- 3. 分别配置GPU侧、NPU侧的config.json文件。
16
- 4. 在GPU侧运行msprobe -f pytorch run_ut -config ./config.json。
17
- 5. 在NPU侧配置训练脚本。
18
- 6. 在NPU侧执行训练。
19
-
20
- ## 在线精度预检操作指导
21
-
22
- ### 配置config.json文件
23
-
24
- 安装完成预检工具后,需要分别在GPU和NPU环境下分别配置config.json。其中需要重点关注文件中的is_online、is_benchmark_device、host和port参数的配置,保障在线预检时GPU和NPU两台设备间的通信正常。
25
-
26
- #### GPU侧在线预检配置说明
27
-
28
- | 参数名称 | 说明 | 是否必选 |
29
- |-----------------|-----------------------------------------------------------------------------------------------------------------------|------|
30
- | task | 任务名称,str类型,配置为run_ut表示预检任务。通过其他字段is_online判断离线预检、在线预检任务。 | 是 |
31
- | white_list | 预检的API白名单,list[str]类型。参数示例:white_list=["conv1d", "conv2d"]。默认未配置白名单,即预检全量API数据。 | 否 |
32
- | black_list | 预检的API黑名单,list[str]类型。参数示例:white_list=["conv1d", "conv2d"]。默认未配置黑名单,即预检全量API数据。 | 否 |
33
- | error_data_path | 配置保存精度未达标的API输入输出数据路径,str类型。在线预检模式下该参数不生效。 | 否 |
34
- | is_online | 在线预检模式开关,bool类型,可取值True(开启)、False(关闭),默认关闭。 | 是 |
35
- | nfs_path | 在线预检模式共享存储目录路径,str类型,用于GPU设备和NPU设备间进行通信。配置该参数后host和port不生效。 | 否 |
36
- | host | 在线预检模式局域网场景信息接收端IP,str类型,用于GPU设备和NPU设备间进行通信,GPU侧配置为本机地址127.0.0.1或本机局域网IP。局域网场景时,不能配置nfs_path参数,否则局域网场景不生效。 | 否 |
37
- | port | 在线预检模式局域网场景信息接收端端口号,int类型,用于GPU设备和NPU设备间进行通信,GPU侧配置为本机可用端口。局域网场景时,不能配置nfs_path参数,否则局域网场景不生效。 | 否 |
38
- | rank_list | 指定在线预检的Rank ID,默认值为[0],list[int]类型,应配置为大于等于0的整数,且须根据实际卡的Rank ID配置,若所配置的值大于实际训练所运行的卡的Rank ID,则在线预检输出数据为空。GPU和NPU须配置一致。 | 是 |
39
-
40
- #### NPU侧在线预检配置说明
41
-
42
- | 参数名称 | 说明 | 是否必选 |
43
- |------------------|--------------------------------------------------------------------------------------------------------|------|
44
- | task | 任务名称,str类型,配置为tensor表示dump API统计信息和完全复刻整网的API运行情况的真实数据。通过字段onlin_run_ut判断是否使用在线预检功能。 | 是 |
45
- | dump_path | dump路径,str类型,配置为合法路径即可,兼容tensor任务静态检查 | 是 |
46
- | level | dump级别,str类型,在线预检时配置为L1,表示dump API级精度数据。在线预检可不配置,默认取值L1。 | 是 |
47
- | rank | 指定对某张卡上的数据进行dump,list[int]类型,默认未配置(表示dump所有卡的数据),需要与GPU侧配置项rank_list保持一致。 | 否 |
48
- | step | 指定dump某个step的数据,list[int]类型,默认未配置,表示dump所有step的数据。dump特定step时,须指定为训练脚本中存在的step。 | 否 |
49
- | seed | 随机种子数,int类型,默认值为1234。通过固定随机数保证模型的输入或输出一致。 | 否 |
50
- | is_deterministic | 确定性计算模式,bool类型,可取值true(开启)或false(关闭),默认关闭。 | 否 |
51
- | scope | dump范围,list[str]类型,默认未配置(list也未配置时师表dump所有api的额数据),配置方式参考[《config配置文件说明》](./../../config/README.md) | 否 |
52
- | list | 自定义dump范围,list[str]类型,默认未配置(scope也未配置时表示dump所有api的数据),配置方式参考[《config配置文件说明》](./../../config/README.md) | 否 |
53
- | online_run_ut | 在线预检模式开关,bool类型,可取值True(开启)、False(关闭),默认关闭。 | 是 |
54
- | nfs_path | 在线预检模式共享存储目录路径,str类型,用于GPU设备和NPU设备间进行通信。配置该参数后host和port不生效。 | 否 |
55
- | host | 在线预检模式局域网场景信息接收端IP,str类型,用于GPU设备和NPU设备间进行通信,NPU侧须配置为GPU侧的局域网IP地址。局域网场景时,不能配置nfs_path参数,否则局域网场景不生效。 | 否 |
56
- | port | 在线预检模式局域网场景信息接收端端口号,int类型,用于GPU设备和NPU设备间进行通信,NPU侧须配置为GPU侧的端口号。局域网场景时,不能配置nfs_path参数,否则局域网场景不生效。 | 否 |
57
-
58
- #### 局域网场景配置示例
59
-
60
- 若复制下列示例,请删除注释后使用。
61
-
62
- GPU侧:
63
-
64
- ```json
65
- {
66
- "task": "run_ut",
67
- "run_ut": {
68
- "white_list": [],
69
- "black_list": [],
70
- "error_data_path": "./",
71
- "is_online": true,
72
- "nfs_path": "",
73
- "host": "127.0.0.1",
74
- "port": 59208,
75
- "rank_list": [0]
76
- }
77
- }
78
- ```
79
-
80
- NPU侧:
81
-
82
- ```json
83
- {
84
- "task": "tensor",
85
- "dump_path": "./dump_path",
86
- "rank": [0],
87
- "step": [0],
88
- "level": "L1",
89
- "seed": 1234,
90
- "is_deterministic": true,
91
- "tensor": {
92
- "scope": [],
93
- "list": [],
94
- "online_run_ut": true,
95
- "nfs_path": "",
96
- "host": "xx.xx.xx.x",
97
- "port": 59208
98
- }
99
- }
100
- ```
101
-
102
- #### 共享存储场景配置示例
103
-
104
- 若复制下列示例,请删除注释后使用。
105
-
106
- GPU侧:
107
-
108
- ```json
109
- {
110
- "task": "run_ut",
111
- "run_ut": {
112
- "white_list": [],
113
- "black_list": [],
114
- "error_data_path": "./",
115
- "is_online": true,
116
- "nfs_path": "/nfs/xxx/data",
117
- "host": "",
118
- "port": -1,
119
- "rank_list": [0]
120
- }
121
- }
122
- ```
123
-
124
- NPU侧:
125
-
126
- ```json
127
- {
128
- "task": "tensor",
129
- "dump_path": "./dump_path",
130
- "rank": [0],
131
- "step": [0],
132
- "level": "L1",
133
- "seed": 1234,
134
- "is_deterministic": true,
135
- "tensor": {
136
- "scope": [],
137
- "list": [],
138
- "online_run_ut": true,
139
- "nfs_path": "/nfs/xxx/data",
140
- "host": "",
141
- "port": -1
142
- }
143
- }
144
- ```
145
-
146
- ### 在GPU侧运行run_ut
147
-
148
- 由于GPU侧为通信接收端,需先于NPU侧执行run_ut操作,命令如下:
149
-
150
- ```bash
151
- msprobe -f pytorch run_ut -config ./config.json
152
- ```
153
-
154
- GPU侧配置好config.json文件后执行run_ut命令,此时GPU处于预检等待状态:
155
-
156
- - 局域网场景:当NPU侧启动训练后将预检的API输入和输出数据发送到GPU侧时,GPU启动预检操作。
157
- - 共享存储场景:当NPU侧启动训练后将预检的API输入和输出数据发送到共享存储时,GPU启动预检操作。
158
-
159
- ### 在NPU侧配置训练脚本
160
-
161
- 在NPU训练脚本中添加如下代码以获取run_ut操作的预检API输入和输出数据:
162
-
163
- ```python
164
- from msprobe.pytorch import PrecisionDebugger
165
-
166
- debugger = PrecisionDebugger("config.json")
167
- ...
168
-
169
- debugger.start()
170
-
171
- ...
172
-
173
- debugger.stop()
174
- debugger.step()
175
- ```
176
-
177
- ### 在NPU侧执行训练脚本
178
-
179
- 配置完NPU侧训练脚本后即可执行训练脚本,命令示例如下:
180
-
181
- ```bash
182
- bash train.sh
183
- ```
184
-
185
- 训练脚本执行完毕后,在GPU侧dump_path目录下生成比对结果文件,详细介绍请参见《[精度预检工具](./api_accuracy_checker.md)》中的”
186
- **预检结果**“。
187
-