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,260 +0,0 @@
1
- # **精度数据采集**
2
-
3
- msprobe工具主要通过在训练脚本内添加dump接口并启动训练的方式来采集精度数据。
4
-
5
- 执行dump操作需要安装msprobe工具。详见《[MindStudio精度调试工具](../../README.md)》的“工具安装”章节。
6
-
7
- ## dump接口介绍
8
-
9
- ### PrecisionDebugger
10
-
11
- **功能说明**
12
-
13
- 通过加载dump配置文件的方式来确定dump操作的详细配置。
14
-
15
- PrecisionDebugger接口可以在from msprobe.pytorch import PrecisionDebugger之后的位置添加。详细使用可参考“**示例代码**”或“**model配置代码示例**”。
16
-
17
- **原型**
18
-
19
- ```Python
20
- PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None, model=None, step=None)
21
- ```
22
-
23
- 说明:上述参数除config_path和model外,其他参数均在[config.json](../../config)文件中可配,此处的参数优先级高于[config.json](../../config)文件中的配置,而config.json文件可以配置更多参数,若需要进行更多场景的精度数据dump,建议配置[config.json](../../config)文件。config.json文件的配置可参考《[配置文件说明](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/config/README.md)》。
24
-
25
- **参数说明**
26
-
27
- | 参数名 | 说明 | 是否必选 |
28
- | ----------- | ------------------------------------------------------------ | -------- |
29
- | config_path | 指定dump配置文件路径,String类型。参数示例:"./config.json"。未配置该路径时,默认使用[config.json](../../config)文件的默认配置。 | 否 |
30
- | task | dump的任务类型,String类型。可取值"statistics"(仅dump API统计信息)、"tensor"(dump API统计信息和完全复刻整网的API运行情况的真实数据)、"overflow_check"(溢出检测),默认未配置,取"statistics",参数示例:task="tensor"。 | 否 |
31
- | dump_path | 设置dump数据目录路径,String类型。参数示例:dump_path="./dump_path"。 | 否 |
32
- | level | dump级别,根据不同级别dump不同数据,String类型。可取值:<br> "L0":dump module模块级精度数据,仅PyTorch场景支持”。<br/> "L1":dump API级精度数据,默认值。<br/> "L2":dump kernel级精度数据。<br/> "mix":dump module模块级和API级精度数据。<br/>配置示例:level="L1"。 | 否 |
33
- | model | 指定具体的torch.nn.Module,默认未配置,level配置为"L0"或"mix"时必须配置该参数。配置示例参见“**model配置代码示例**”。 | 否 |
34
- | step | 指定dump某个step的数据,list[int]类型。默认未配置,表示dump所有step数据。dump特定step时,须指定为训练脚本中存在的step。step为list格式,可配置逐个step,例如:step=[0,1,2]。 | 否 |
35
-
36
- #### model配置代码示例
37
-
38
- 示例中定义了一个nn.Module类型的简单网络,在进行数据dump时使用原型函数PrecisionDebugger并传入config_path参数和model参数,其中model参数传入数据的类型为torch.nn.Module类型或torch.nn.Module子类型。
39
-
40
- ```python
41
- #根据需要import包
42
- import os
43
- import torch
44
- import torch.nn as nn
45
- import torch_npu
46
- import torch.nn.functional as F
47
- from msprobe.pytorch import PrecisionDebugger
48
-
49
- torch.npu.set_device("npu:0")
50
- #定义一个简单的网络
51
- class ModuleOP(nn.Module):
52
- def __init__(self) -> None:
53
- super().__init__()
54
- self.linear_1 = nn.Linear(in_features=8,out_features=4)
55
- self.linear_2 = nn.Linear(in_features=4,out_features=2)
56
-
57
- def forward(self,x):
58
- x1 = self.linear_1(x)
59
- x2 = self.linear_2(x1)
60
- r1 = F.relu(x2)
61
- return r1
62
-
63
- if __name__ == "__main__"
64
- module = ModuleOP()
65
-
66
- #注册工具
67
- debugger = PrecisionDebugger('./config.json',model=module)
68
- debugger.start()
69
- x = torch.randn(10,8)
70
- out = module(x)
71
- loss = out.sum()
72
- loss.backward()
73
- debugger.stop()
74
- ```
75
-
76
- ### start函数
77
-
78
- **功能说明**
79
-
80
- dump启动函数。
81
-
82
- 在模型初始化之后的位置添加。需要与stop函数一起添加在for循环内。
83
-
84
- **原型**
85
-
86
- ```Python
87
- debugger.start()
88
- ```
89
-
90
- 该函数为类函数,可以使用debugger.start()也可以使用PrecisionDebugger.start()。
91
-
92
- ### stop函数
93
-
94
- **功能说明**
95
-
96
- dump停止函数。
97
-
98
- 在**start**函数之后的任意位置添加。若需要dump反向数据,则需要添加在反向计算代码(如loss.backward)之后。
99
-
100
- **原型**
101
-
102
- ```Python
103
- debugger.stop()
104
- ```
105
-
106
- 该函数为类函数,可以使用debugger.stop()也可以使用PrecisionDebugger.stop()。
107
-
108
- ### forward_backward_dump_end函数
109
-
110
- **功能说明**
111
-
112
- dump停止函数。用于dump指定代码的前反向数据。
113
-
114
- 在**start**函数之后,反向计算代码(如loss.backward)之前的任意位置添加,可以dump **start**函数和该函数之间的前反向数据,可以通过调整**start**函数与该函数的位置,来指定需要dump的代码块。
115
-
116
- 要求**stop**函数添加在反向计算代码(如loss.backward)之后,此时该函数与**stop**函数之间的代码不会被dump。
117
-
118
- 使用示例参见“**示例代码 > 扩展示例**”。
119
-
120
- **原型**
121
-
122
- ```Python
123
- forward_backward_dump_end()
124
- ```
125
-
126
- 该函数为类函数,可以使用debugger.forward_backward_dump_end()也可以使用PrecisionDebugger.forward_backward_dump_end()。
127
-
128
- ### step函数
129
-
130
- **功能说明**
131
-
132
- 结束标识。
133
-
134
- 在最后一个**stop**函数后或一个step结束的位置添加。需要与start函数一起添加在for循环内。
135
-
136
- **原型**
137
-
138
- ```Python
139
- debugger.step()
140
- ```
141
-
142
- 该函数为类函数,可以使用debugger.step()也可以使用PrecisionDebugger.step()。
143
-
144
- ## 示例代码
145
-
146
- ### 基础操作
147
-
148
- 如下示例可dump完整代码的前反向数据。
149
-
150
- ```Python
151
- from msprobe.pytorch import PrecisionDebugger
152
-
153
- # 请勿将PrecisionDebugger的初始化流程插入到循环代码中
154
- debugger = PrecisionDebugger(config_path="./config.json", dump_path="./dump_path")
155
-
156
- # 模型、损失函数的定义及初始化等操作
157
- # ...
158
-
159
- # 数据集迭代的位置一般为模型训练开始的位置
160
- for data, label in data_loader:
161
- debugger.start() # 开启数据dump
162
-
163
- # 如下是模型每个step执行的逻辑
164
- output = model(data)
165
- #...
166
- loss.backward()
167
-
168
- debugger.stop() # 关闭数据dump
169
- debugger.step() # 结束一个step的dump
170
- ```
171
-
172
- ### 扩展示例
173
-
174
- 如下示例dump指定代码块前反向数据。
175
-
176
- ```Python
177
- from msprobe.pytorch import PrecisionDebugger
178
-
179
- # 请勿将PrecisionDebugger的初始化流程插入到循环代码中
180
- debugger = PrecisionDebugger(config_path="./config.json", dump_path="./dump_path")
181
-
182
- # 模型、损失函数的定义及初始化等操作
183
- # ...
184
-
185
- # 数据集迭代的位置一般为模型训练开始的位置
186
- for data, label in data_loader:
187
- debugger.start() # 开启数据dump
188
-
189
- # 如下是模型每个step执行的逻辑
190
- output = model(data)
191
- debugger.forward_backward_dump_end() # 插入该函数到start函数之后,只dump start函数到该函数之间代码的前反向数据,本函数到stop函数之间的数据则不dump
192
- #...
193
- loss.backward()
194
-
195
- debugger.stop() # 关闭数据dump
196
- debugger.step() # 结束一个step的dump
197
- ```
198
-
199
- ## dump结果文件介绍
200
-
201
- 训练结束后,工具将dump的数据保存在dump_path参数指定的目录下。
202
-
203
- dump结果目录结构示例如下:
204
-
205
- ```Python
206
- ├── dump_path
207
- │ ├── step0
208
- │ | ├── rank0
209
- │ | │ ├── dump_tensor_data
210
- | | | | ├── Tensor.permute.1.forward.pt
211
- | | | | ├── MyModule.0.forward.input.pt # 开启模块级精度数据dump时存在模块级的dump数据文件
212
- | | | | ...
213
- | | | | └── Fcuntion.linear.5.backward.output.pt
214
- │ | | ├── 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范数(平方根)
215
- │ | | ├── stack.json # 算子调用栈信息
216
- │ | | └── construct.json # 分层分级结构
217
- │ | ├── rank1
218
- | | | ├── dump_tensor_data
219
- | | | | └── ...
220
- │ | | ├── dump.json
221
- │ | | ├── stack.json
222
- | | | └── construct.json
223
- │ | ├── ...
224
- │ | |
225
- | | └── rank7
226
- │ ├── step1
227
- │ | ├── ...
228
- │ ├── step2
229
- ```
230
-
231
- dump过程中,pt文件在对应算子或者模块被执行后就会落盘,而json文件则需要在正常执行PrecisionDebugger.stop()后才会写入完整数据,异常的程序终止会保存终止前被执行算子的相关npy文件,可能会导致json文件中数据丢失。
232
-
233
- 其中rank为设备上各卡的ID,每张卡上dump的数据会生成对应dump目录。非分布式场景下没有rank ID,目录名称为rank。
234
-
235
- pt文件保存的前缀和PyTorch对应关系如下:
236
-
237
- | 前缀 | Torch模块 |
238
- | ----------- | ------------------- |
239
- | Tensor | torch.Tensor |
240
- | Torch | torch |
241
- | Functional | torch.nn.functional |
242
- | NPU | NPU亲和算子 |
243
- | VF | torch._VF |
244
- | Aten | torch.ops.aten |
245
- | Distributed | torch.distributed |
246
-
247
- ## 工具支持的API列表
248
-
249
- msprobe工具维护固定的API支持列表,若需要删除或增加dump的API,可以在msprobe/pytorch/hook_module/support_wrap_ops.yaml文件内手动修改,如下示例:
250
-
251
- ```Python
252
- functional: # functional为算子类别,找到对应的类别,在该类别下按照下列格式删除或添加API
253
- - conv1d
254
- - conv2d
255
- - conv3d
256
- ```
257
-
258
- # FAQ
259
-
260
- [FAQ](./FAQ.md)
@@ -1,182 +0,0 @@
1
- # msprobe精度工具标准性能基线报告
2
-
3
- ## 环境信息
4
-
5
- NPU:Atlas A2 训练系列产品
6
-
7
- CPU:
8
-
9
- ![输入图片说明](img/cpu_info.png)
10
-
11
- Torch:2.1.0
12
-
13
- CANN:8.0.T2
14
-
15
- 除上述环境信息影响性能外,API的数量、种类以及Shape都会对性能产生影响,因此本次选取指定网络进行测试,为了避免算子编译耗时的影响,所有模型运行时都开启二进制,模型中添加torch.npu.set_compile_mode(jit_compile=False),所有模型都dump第二个step的数据。
16
-
17
- ## 模型信息和性能基线
18
-
19
- 大模型在使用msprobe工具dump数据时,建议先简化模型层数,减少dump数据量。
20
-
21
- 以下场景的性能基线测试数据均为多次测试后取平均值,因此实际运行时性能数据可能会根据环境状态稍有浮动。
22
-
23
- ### 工具配置信息
24
-
25
- dump全部API级别输入输出数据以及相应堆栈信息,配置如下:
26
-
27
- ```python
28
- debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="dump")
29
- debugger.configure_hook(mode="api_stack")
30
- ```
31
-
32
- 多卡指定rank0 dump,配置如下:
33
-
34
- ```python
35
- debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="dump",rank=0)
36
- debugger.configure_hook(mode="api_stack")
37
- ```
38
-
39
- dump保存API统计信息的pkl文件,配置如下:
40
-
41
- ```python
42
- debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="dump")
43
- debugger.configure_hook(mode="api_stack", summary_only=True)
44
- ```
45
-
46
- ### YOLOV5s
47
-
48
- 单卡
49
-
50
- 主要数据类型:FLOAT32
51
-
52
- 启动命令参数:python3 train_ptdbg.py --data ./data/coco.yaml --cfg yolov5s.yaml --weights '' --epochs 1 --batch-size 8 --device 1
53
-
54
- dump保存API统计信息的pkl文件耗时:**7s**
55
-
56
- 进行单卡dump全部API级别输入输出数据以及相应堆栈信息耗时:**11s**
57
-
58
- - dump存盘的API numpy文件大小:13G
59
-
60
- ![输入图片说明](img/YOLOV5S_1.png)
61
-
62
- - api numpy文件数量:3009个
63
-
64
- ![输入图片说明](img/YOLOV5S_2.png)
65
-
66
-
67
-
68
-
69
- ### GPT-3
70
-
71
- #### NUM_LAYER:1
72
-
73
- 8卡
74
-
75
- 主要数据类型:FLOAT16
76
-
77
- 启动命令参数:
78
-
79
- ```
80
- python3 -m torch.distributed.launch $DISTRIBUTED_ARGS ../../pretrain_gpt_ptdbg.py --num-layers 1 --hidden-size 12288 --num-attention-heads 24 --micro-batch-size 2 --global-batch-size 2 --seq-length 1024 --max-position-embeddings 1024 --train-iters 10 --lr-decay-iters 320000 --save $CHECKPOINT_PATH --load $CHECKPOINT_PATH --data-path $DATA_PATH --tensor-model-parallel-size 8 --use-distributed-optimizer --pipeline-model-parallel-size 8 --vocab-file gpt2-vocab.json --merge-file gpt2-merges.txt --data-impl mmap --split 949,50,1 --distributed-backend nccl --lr 0.375e-5 --lr-decay-style cosine --min-lr 0.375e-6 --weight-decay 0.1 --clip-grad 1.0 --lr-warmup-fraction .01 --adam-beta1 0.9 --adam-beta2 0.95 --init-method-std 0.006
81
- --recompute-granularity full --recompute-method uniform --no-gradient-accumulation-fusion --log-interval 1 --save-interval 10000 --eval-interval 1000 --eval-iters 10 --fp16
82
- ```
83
-
84
- dump保存API统计信息的pkl文件耗时:**3.3s**
85
-
86
- 进行8卡dump全部API级别输入输出数据以及相应堆栈信息耗时:**53s**
87
-
88
- - dump存盘的api numpy文件大小:145G
89
-
90
- ![输入图片说明](img/GPT-3_1.png)
91
-
92
- - API numpy文件数量:5130个
93
-
94
- ![输入图片说明](img/GPT-3_2.png)
95
-
96
-
97
- **经测试8卡同时写入磁盘已达到磁盘I/O上限,工具的dump速度取决于磁盘性能,本机环境多进程写入磁盘上限为3GB/秒左右,理论上保存145GB的数据需要50秒左右,如果dump的数据中包含许多的小文件,那么耗时将会更久。**
98
-
99
- 指定rank0 dump耗时:**9s**
100
-
101
- - dump存盘的api numpy文件大小:19G
102
-
103
- ![输入图片说明](img/GPT-3_3.png)
104
-
105
- - api numpy文件数量:643个
106
-
107
- ![输入图片说明](img/GPT-3_4.png)
108
-
109
-
110
- #### NUM_LAYER:8
111
-
112
- 8卡
113
-
114
- 主要数据类型:FLOAT16
115
-
116
- 启动命令参数:
117
-
118
- ```
119
- python3 -m torch.distributed.launch $DISTRIBUTED_ARGS ../../pretrain_gpt_ptdbg.py --num-layers 8 --hidden-size 12288 --num-attention-heads 24 --micro-batch-size 2 --global-batch-size 2 --seq-length 1024 --max-position-embeddings 1024 --train-iters 10 --lr-decay-iters 320000 --save $CHECKPOINT_PATH --load $CHECKPOINT_PATH --data-path $DATA_PATH --tensor-model-parallel-size 8 --use-distributed-optimizer --pipeline-model-parallel-size 8 --vocab-file gpt2-vocab.json --merge-file gpt2-merges.txt --data-impl mmap --split 949,50,1 --distributed-backend nccl --lr 0.375e-5 --lr-decay-style cosine --min-lr 0.375e-6 --weight-decay 0.1 --clip-grad 1.0 --lr-warmup-fraction .01 --adam-beta1 0.9 --adam-beta2 0.95 --init-method-std 0.006 --recompute-granularity full --recompute-method uniform --no-gradient-accumulation-fusion --log-interval 1 --save-interval 10000 --eval-interval 1000 --eval-iters 10 --fp16
120
- ```
121
-
122
- dump保存API统计信息的pkl文件耗时:**6.7s**
123
-
124
- 进行8卡dump全部API级别输入输出数据以及相应堆栈信息耗时:**323s**
125
-
126
- - dump存盘的API numpy文件大小:878G
127
-
128
- ![输入图片说明](img/GPT-3_5.png)
129
-
130
- - API numpy文件数量:24002个
131
-
132
- ![输入图片说明](img/GPT-3_6.png)
133
-
134
-
135
- 指定rank0 dump耗时:**47s**
136
-
137
- - dump存盘的API numpy文件大小:110G
138
-
139
- ![输入图片说明](img/GPT-3_7.png)
140
-
141
- - API numpy文件数量:3002个
142
-
143
- ![输入图片说明](img/GPT-3_8.png)
144
-
145
-
146
- ### BLOOM-7B
147
-
148
- 8卡
149
-
150
- NUM_LAYER:1
151
-
152
- 主要数据类型:BFLOAT16
153
-
154
- 启动命令参数:
155
-
156
- ```
157
- python -m torch.distributed.launch $DISTRIBUTED_ARGS pretrain_llama.py --DDP-impl local --tensor-model-parallel-size 8 --pipeline-model-parallel-size 1 --sequence-parallel --num-layers 1 --hidden-size 12288 --position-embedding-type rope --normalization RMSNorm --ffn-hidden-size 11008 --num-attention-heads 24 --attention-dropout 0.0 --hidden-dropout 0.0 --init-method-std 0.01 --micro-batch-size 2 --global-batch-size 2 --seq-length 1024 --max-position-embeddings 1024 --data-path $DATA_PATH --tokenizer-name-or-path $TOKENIZER_PATH --tokenizer-not-use-fast --split 100,0,0 --distributed-backend nccl --lr 1.25e-5 --min-lr 1.25e-6 --lr-decay-style cosine --weight-decay 1e-1 --clip-grad 1.0 --initial-loss-scale 65536.0 --adam-beta1 0.9 --adam-beta2 0.95 --log-interval 1 --load ${LOAD_CHECKPOINT_PATH} --save ${SAVE_CHECKPOINT_PATH} --save-interval 10000 --eval-interval 10000 --eval-iters 0 --use-fused-rotary-pos-emb --no-masked-softmax-fusion --no-load-optim --no-load-rng --train-iters 20 --lr-warmup-fraction 0.01 --mlp-layer-fusion --use-flash-attn --use-fused-rmsnorm --bf16
158
- ```
159
-
160
- dump保存API统计信息的pkl文件耗时:**3s**
161
-
162
- 进行8卡dump全部API级别输入输出数据以及相应堆栈信息耗时:**61s**
163
-
164
- - dump存盘的API numpy文件大小:160G
165
-
166
- ![输入图片说明](img/BLOOM-7B_1.png)
167
-
168
- - API numpy文件数量:4924个
169
-
170
- ![输入图片说明](img/BLOOM-7B_2.png)
171
-
172
-
173
- 指定rank0 dump耗时:**17s**
174
-
175
- - dump存盘的API numpy文件大小:20G
176
-
177
- ![输入图片说明](img/BLOOM-7B_3.png)
178
-
179
- - API numpy文件数量:633个
180
-
181
- ![输入图片说明](img/BLOOM-7B_4.png)
182
-
@@ -1,240 +0,0 @@
1
- # **精度比对工具**
2
-
3
- ## 总体说明
4
-
5
- - 本节主要介绍通过命令行方式和比对函数方式进行CPU或GPU与NPU的精度数据比对,执行精度比对操作前需要先完成CPU或GPU与NPU的精度数据dump,参见《[精度数据采集](./dump.md)》。
6
-
7
- - 训练精度一体化工具msprobe,使用子命令compare进行比对,可支持单卡和多卡场景的精度数据比对。
8
-
9
- - 比对函数均通过单独创建精度比对脚本执行,可支持单卡和多卡场景的精度数据比对。
10
-
11
- - 工具性能:比对数据量较小时(参考值单份文件小于10GB),参考比对速度0.1GB/s;比对数据量较大时,参考比对速度0.3GB/s。 推荐环境配置:独占环境,CPU核心数192,固态硬盘(IO速度参考:固态硬盘 > 500MB/s,机械硬盘60 ~ 170MB/s)。
12
-
13
- 用户环境性能弱于标准约束或非独占使用的比对速度酌情向下浮动。比对速度的计算方式:两份比对文件大小/比对耗时。
14
-
15
- ## 约束
16
-
17
- - NPU自研API,在CPU或GPU若没有对应的API,该API的dump数据不比对。
18
- - NPU与CPU或GPU的计算结果误差可能会随着模型的执行不断累积,最终会出现同一个API因为输入的数据差异较大而无法比对的情况。
19
- - CPU或GPU与NPU中两个相同的API会因为调用次数不同导致无法比对或比对到错误的API,不影响整体运行,该API忽略。
20
-
21
- ## 命令行方式比对
22
-
23
- 将CPU或GPU与NPU的dump文件进行比对,支持单卡和多卡,可同时比对多卡的dump数据。多机场景需要每个设备单独执行比对操作。
24
-
25
- 请先参见《[精度数据采集](./dump.md)》完成CPU或GPU与NPU的精度数据dump。
26
-
27
- ### 操作步骤
28
-
29
- 1. 创建比对文件,文件内容及示例请参见“**比对文件**”。
30
-
31
- 2. 执行如下示例命令进行比对:
32
-
33
- ```shell
34
- msprobe -f pytorch compare -i ./compare.json -o ./output -s
35
- ```
36
-
37
- **完整参数说明**
38
-
39
- | 参数名 | 说明 | 是否必选 |
40
- |-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
41
- | -i或--input_path | 指定比对文件路径。比对文件内容及示例请参见“**比对文件**”。 | 是 |
42
- | -o或--output_path | 配置比对结果文件存盘目录。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。 | 是 |
43
- | -s或--stack_mode | 配置stack_mode的开关。仅当**比对文件**配置"stack_path"需要开启。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
44
- | -c或--compare_only | 仅比对开关。未配置默认关闭仅比对,使用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度不达标节点(在比对结果文件中的“Accuracy Reached or Not”列显示为No),并给出问题可能产生的原因(打屏展示并生成advisor_{timestamp}.txt文件)。该参数默认未配置,使用自动精度分析,通过配置该参数开启仅比对,关闭自动精度分析,仅输出比对结果表格。 | 否 |
45
- | -f或--fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
46
-
47
- 3. 查看比对结果,请参见“**比对结果分析**”。
48
-
49
- ### 比对文件
50
-
51
- 以在当前目录创建./compare.json为例。
52
-
53
- - 单卡场景示例
54
-
55
- ```json
56
- {
57
- "npu_path": "./npu_dump/dump.json",
58
- "bench_path": "./bench_dump/dump.json",
59
- "stack_path": "./npu_dump/stack.json",
60
- "is_print_compare_log": true
61
- }
62
- ```
63
-
64
- - 多卡场景示例
65
-
66
- ```json
67
- {
68
- "npu_path": "./npu_dump/step0",
69
- "bench_path": "./bench_dump/step0",
70
- "is_print_compare_log": true
71
- }
72
- ```
73
-
74
- **参数说明**
75
-
76
- | 参数名 | 说明 | 是否必选 |
77
- | -------------------- | ------------------------------------------------------------ | ------------------ |
78
- | npu_path | 配置NPU环境下的dump.json文件(单卡场景)或真实数据目录(多卡场景)。数据类型:str。 | 是 |
79
- | bench_path | 配置CPU、GPU或NPU环境下的dump.json文件(单卡场景)或真实数据目录(多卡场景)。数据类型:str。 | 是 |
80
- | stack_path | 配置NPU dump目录下的stack.json文件。数据类型:str。 | 单卡必选,多卡不选 |
81
- | is_print_compare_log | 配置是否开启日志打屏。可取值True或False。数据类型:bool | 否 |
82
-
83
- ## 比对函数方式比对
84
-
85
- ### compare_distributed
86
-
87
- **功能说明**
88
-
89
- 将CPU或GPU与NPU的dump文件进行比对,支持单卡和多卡,可同时比对多卡的dump数据。多机场景需要每个设备单独执行比对操作。可自动检索和匹配对应卡和进程所dump的数据文件,再调用compare进行比对。单机单卡时与compare函数二选一。
90
-
91
- **函数原型**
92
-
93
- ```Python
94
- compare_distributed(npu_dump_dir, bench_dump_dir, output_path, **kwargs)
95
- ```
96
-
97
- **参数说明**
98
-
99
- | 参数名 | 说明 | 是否必选 |
100
- | -------------- | ------------------------------------------------------------ | -------- |
101
- | npu_dump_dir | 配置NPU环境下的dump目录。dump数据目录须指定到step级。参数示例:'./npu_dump/step0'。数据类型:str。 | 是 |
102
- | bench_dump_dir | 配置CPU、GPU或NPU环境下的dump目录。参数示例:'./gpu_dump/step0'。数据类型:str。 | 是 |
103
- | output_path | 配置比对结果文件存盘目录。需要预先创建output_path目录。参数示例:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_rank{npu_ID}-rank{cpu/gpu/npu_ID}_{timestamp}.xlsx`。数据类型:str。 | 是 |
104
- | **kwargs | 支持compare的所有可选参数。 | 否 |
105
-
106
- **函数示例**
107
-
108
- 创建比对脚本,例如compare_distributed.py,拷贝如下代码,具体参数请根据实际环境修改。
109
-
110
- ```Python
111
- from msprobe.pytorch import *
112
- compare_distributed('./npu_dump/step0', './gpu_dump/step0', './output')
113
- ```
114
-
115
- dump数据目录须指定到step级。
116
-
117
- ### compare
118
-
119
- **功能说明**
120
-
121
- 将CPU或GPU与NPU的dump文件进行比对,仅支持单机单卡。
122
-
123
- **函数原型**
124
-
125
- ```Python
126
- compare(input_param, output_path, stack_mode=False, auto_analyze=True, fuzzy_match=False)
127
- ```
128
-
129
- **参数说明**
130
-
131
- | 参数名 | 说明 | 是否必选 |
132
- | ------------ | ------------------------------------------------------------ | -------- |
133
- | input_param | 配置dump数据文件及目录。数据类型:dict。配置参数包括:<br> "npu_json_path":指定NPU dump目录下的dump.json文件。参数示例:"npu_json_path": "./npu_dump/dump.json"。必选。<br/> "bench_json_path":指定CPU、GPU或NPU dump目录下的dump.json文件。参数示例:"bench_json_path": "./bench_dump/dump.json"。必选。<br/> "stack_json_path":指定NPU dump目录下的stack.json文件。参数示例:"stack_json_path": "./npu_dump/stack.json"。可选。<br/> "is_print_compare_log":配置是否开启日志打屏。可取值True或False。可选。 | 是 |
134
- | output_path | 配置比对结果文件存盘目录。参数示例:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。数据类型:str。 | 是 |
135
- | stack_mode | 配置stack_mode的开关。仅当配置"stack_json_path"需要开启。可取值True或False,参数示例:stack_mode=True,默认为False。数据类型:bool。 | 否 |
136
- | auto_analyze | 自动精度分析,开启后工具自动针对比对结果进行分析,识别到第一个精度不达标节点(在比对结果文件中的“Accuracy Reached or Not”列显示为No),并给出问题可能产生的原因(打屏展示并生成advisor_{timestamp}.txt文件)。可取值True或False,参数示例:auto_analyze=False,默认为True。数据类型:bool。 | 否 |
137
- | fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。可取值True或False,参数示例:fuzzy_match=True,默认为False。数据类型:bool。 | 否 |
138
-
139
- **函数示例**
140
-
141
- 单机单卡场景下创建比对脚本,例如compare.py,拷贝如下代码,具体参数请根据实际环境修改。
142
-
143
- ```Python
144
- from msprobe.pytorch import compare
145
- input_param={
146
- "npu_json_path": "./npu_dump/dump.json",
147
- "bench_json_path": "./bench_dump/dump.json",
148
- "stack_json_path": "./npu_dump/stack.json",
149
- "is_print_compare_log": True
150
- }
151
- compare(input_param, output_path="./output", stack_mode=True)
152
- ```
153
-
154
- ### 统计量比对
155
-
156
- 若使用**compare**或**compare_distributed**函数创建的比对脚本中,在[config.json](../../config/config.json)文件中配置"task": "statistics"方式dump时,可以进行统计量比对,此时比对dump.json文件中的统计信息,开启后的比对结果文件生成Max diff、Min diff、Mean diff和L2norm diff,表示NPU dump数据中API的输入或输出与标杆数据输入或输出的最大值、最小值、平均值以及L2范数的差。可以通过该值判断API是否存在精度问题:当某个API的输入和输出的Max diff、Min diff、Mean diff和L2norm diff均为0或无限趋于0,那么可以判断该API无精度问题,反之则可能存在精度问题。
157
-
158
- **比对脚本示例**
159
-
160
- 以compare.py为例。
161
-
162
- ```Python
163
- from msprobe.pytorch import compare
164
- input_param={
165
- "npu_json_path": "./npu_dump/dump.json",
166
- "bench_json_path": "./bench_dump/dump.json",
167
- "stack_json_path": "./npu_dump/stack.json",
168
- "is_print_compare_log": True
169
- }
170
- compare(input_param, output_path="./output", stack_mode=True)
171
- ```
172
-
173
- **比对结果**
174
-
175
- 数据量比对同样生成`compare_result_{timestamp}.xlsx`和`advisor_{timestamp}.txt`文件。其中`advisor_{timestamp}.txt`主要对`compare_result_{timestamp}.xlsx`中可能存在精度问题(Result为Waring)的API提出定位建议;`compare_result_{timestamp}.xlsx`主要有如下两种情况:
176
-
177
- - "summary_mode": "statistics"时比对dump.json文件:
178
-
179
- ![compare_result_pkl](img/compare_result_pkl.png)
180
-
181
- 上图是对dump.json文件中NPU及标杆API的统计信息进行比对,判断可能存在精度问题的API,文件中记录NPU及标杆API的基本信息和统计信息,其中需要关注Result列,包含结果:Waring(NPU与标杆统计信息的比对中存在相对误差大于0.5,则需要重点检查该API);为空(相对误差小于等于0.5,可以不需要重点关注,但不代表不存在精度问题);Nan(表示统计信息数据没有匹配上)。
182
-
183
- - "summary_mode": "md5"时比对dump.json文件:
184
-
185
- ![compare_result_pkl_md5.png](img/compare_result_pkl_md5.png.png)
186
-
187
- 上图是对dump.json文件中NPU及标杆API的MD5信息进行比对,判断API数据的完整性,文件中记录NPU及标杆API的基本信息和MD5信息,其中需要关注Result列,包含结果:Pass(表示NPU与标杆的MD5值一致,即API数据完整);Different(表示NPU与标杆的MD5值不一致,即API数据不完全一致,可以通过NPU_Stack_Info列API调用栈查询该API的详细信息);Nan(表示MD5信息数据没有匹配上)。
188
-
189
- ## 比对结果分析
190
-
191
- PyTorch精度比对是以CPU或GPU的计算结果为标杆,通过计算精度评价指标判断API在运行时是否存在精度问题。
192
-
193
- - `advisor_{timestamp}.txt`文件中给出了可能存在精度问题的API的专家建议,可直接打开查看。
194
-
195
- - `compare_result_{timestamp}.xlsx`文件列出了所有执行精度比对的API详细信息和比对结果,如下示例:
196
-
197
- ![compare_result](https://gitee.com/cai-weiwei1989/att_ptdbg/raw/master/debug/accuracy_tools/ptdbg_ascend/doc/img/compare_result.png)
198
-
199
- 可以从该结果文件中进行“**判断计算精度达标情况**”、“**计算精度评价指标分析**”以及“**异常信息识别**”等分析动作。
200
-
201
- ### **判断计算精度达标情况**
202
-
203
- 精度比对结果`compare_result_{timestamp}.xlsx`文件中只需要通过Accuracy Reached or Not来判断计算精度是否达标,判断标准如下:
204
-
205
- 1. Cosine < 0.99 且 MaxAbsError > 0.001时,精度不达标,标记为“No”。
206
- 2. Cosine < 0.9,精度不达标,标记为“No”。
207
- 3. MaxAbsError > 1,精度不达标,标记为“No”。
208
- 4. 其余情况下记为精度达标,标记为“Yes”。
209
-
210
- ### **计算精度评价指标分析**
211
-
212
- 1. Cosine:通过计算两个向量的余弦值来判断其相似度,数值越接近于1说明计算出的两个张量越相似,实际可接受阈值为大于0.99。在计算中可能会存在nan,主要由于可能会出现其中一个向量为0。
213
-
214
- 2. MaxAbsErr:当最大绝对误差越接近0表示其计算的误差越小,实际可接受阈值为小于0.001。
215
-
216
- 3. MaxRelativeErr:当最大相对误差越接近0表示其计算的误差越小。
217
-
218
- 当dump数据中存在0或Nan时,比对结果中最大相对误差则出现inf或Nan的情况,属于正常现象。
219
-
220
- 4. One Thousandth Err Ratio(双千分之一)、Five Thousandths Err Ratio(双千分之五)精度指标:是指NPU的Tensor中的元素逐个与对应的标杆数据对比,相对误差大于千分之一、千分之五的比例占总元素个数的比例小于千分之一、千分之五。该数据仅作为精度下降趋势的参考,并不参与计算精度是否通过的判定。
221
-
222
- ### **异常信息识别**
223
-
224
- 精度比对结果`compare_result_{timestamp}.xlsx`文件中对于存在异常信息的API会进行高亮处理:
225
-
226
- - 红色可能出现的情况有:
227
- - NPU max或NPU min信息中存在nan/inf
228
- - Max diff存在大于1e+10的值
229
- - 统计数据中output的Max diff除以max(0.01, Bench max) > 0.5
230
- - 真实数据中One Thousandth Err Ratio的input > 0.9同时output < 0.6
231
- - 黄色可能出现的情况有:
232
- - Max diff的input与output都大于1,同时output比input大一个数量级以上
233
- - 统计数据Max diff除以max(0.01, Bench max)的output > 0.1同时input < 0.01
234
- - 真实数据One Thousandth Err Ratio的input - output > 0.1
235
- - 真实数据Cosine的input - output > 0.1
236
-
237
- # FAQ
238
-
239
- [FAQ](./FAQ.md)
240
-