mindstudio-probe 1.0.4__py3-none-any.whl → 1.1.1__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.4.dist-info → mindstudio_probe-1.1.1.dist-info}/METADATA +5 -5
  2. mindstudio_probe-1.1.1.dist-info/RECORD +341 -0
  3. {mindstudio_probe-1.0.4.dist-info → mindstudio_probe-1.1.1.dist-info}/WHEEL +1 -1
  4. {mindstudio_probe-1.0.4.dist-info → mindstudio_probe-1.1.1.dist-info}/entry_points.txt +0 -1
  5. msprobe/README.md +84 -18
  6. msprobe/__init__.py +16 -1
  7. msprobe/config.json +1 -5
  8. msprobe/core/advisor/advisor.py +16 -11
  9. msprobe/core/advisor/advisor_const.py +6 -7
  10. msprobe/core/advisor/advisor_result.py +12 -12
  11. msprobe/core/common/const.py +164 -3
  12. msprobe/core/common/exceptions.py +26 -4
  13. msprobe/core/common/file_utils.py +196 -27
  14. msprobe/core/common/inplace_op_checker.py +53 -0
  15. msprobe/core/common/inplace_ops.yaml +251 -0
  16. msprobe/core/common/log.py +46 -18
  17. msprobe/core/common/utils.py +308 -209
  18. msprobe/core/common_config.py +60 -38
  19. msprobe/core/compare/acc_compare.py +332 -94
  20. msprobe/core/compare/check.py +104 -22
  21. msprobe/core/compare/compare_cli.py +42 -5
  22. msprobe/core/compare/highlight.py +162 -57
  23. msprobe/core/compare/layer_mapping/__init__.py +19 -0
  24. msprobe/core/compare/layer_mapping/data_scope_parser.py +235 -0
  25. msprobe/core/compare/layer_mapping/layer_mapping.py +242 -0
  26. msprobe/core/compare/layer_mapping/postprocess_pass.py +94 -0
  27. msprobe/core/compare/multiprocessing_compute.py +33 -8
  28. msprobe/core/compare/npy_compare.py +73 -29
  29. msprobe/core/compare/utils.py +306 -247
  30. msprobe/core/data_dump/data_collector.py +44 -43
  31. msprobe/core/data_dump/data_processor/base.py +88 -35
  32. msprobe/core/data_dump/data_processor/factory.py +20 -3
  33. msprobe/core/data_dump/data_processor/mindspore_processor.py +14 -8
  34. msprobe/core/data_dump/data_processor/pytorch_processor.py +180 -66
  35. msprobe/core/data_dump/json_writer.py +63 -42
  36. msprobe/core/data_dump/scope.py +143 -48
  37. msprobe/core/grad_probe/constant.py +31 -13
  38. msprobe/core/grad_probe/grad_compare.py +20 -4
  39. msprobe/core/grad_probe/utils.py +44 -3
  40. msprobe/core/overflow_check/abnormal_scene.py +185 -0
  41. msprobe/core/overflow_check/api_info.py +55 -0
  42. msprobe/core/overflow_check/checker.py +138 -0
  43. msprobe/core/overflow_check/filter.py +157 -0
  44. msprobe/core/overflow_check/ignore_rules.yaml +55 -0
  45. msprobe/core/overflow_check/level.py +22 -0
  46. msprobe/core/overflow_check/utils.py +28 -0
  47. msprobe/docs/01.installation.md +29 -9
  48. msprobe/docs/02.config_introduction.md +83 -84
  49. msprobe/docs/03.config_examples.md +3 -20
  50. msprobe/docs/04.kernel_dump_PyTorch.md +73 -0
  51. msprobe/docs/05.data_dump_PyTorch.md +143 -13
  52. msprobe/docs/06.data_dump_MindSpore.md +197 -88
  53. msprobe/docs/07.accuracy_checker_PyTorch.md +69 -46
  54. msprobe/docs/08.accuracy_checker_online_PyTorch.md +52 -17
  55. msprobe/docs/09.accuracy_checker_MindSpore.md +51 -15
  56. msprobe/docs/10.accuracy_compare_PyTorch.md +187 -99
  57. msprobe/docs/11.accuracy_compare_MindSpore.md +253 -31
  58. msprobe/docs/12.overflow_check_PyTorch.md +1 -1
  59. msprobe/docs/13.overflow_check_MindSpore.md +6 -6
  60. msprobe/docs/15.free_benchmarking_PyTorch.md +60 -55
  61. msprobe/docs/16.free_benchmarking_MindSpore.md +159 -0
  62. msprobe/docs/17.grad_probe.md +19 -22
  63. msprobe/docs/18.online_dispatch.md +89 -0
  64. msprobe/docs/19.monitor.md +468 -0
  65. msprobe/docs/20.monitor_performance_baseline.md +52 -0
  66. msprobe/docs/21.visualization_PyTorch.md +386 -0
  67. msprobe/docs/22.visualization_MindSpore.md +384 -0
  68. msprobe/docs/23.tool_function_introduction.md +28 -0
  69. msprobe/docs/{FAQ_PyTorch.md → FAQ.md} +25 -10
  70. msprobe/docs/data_dump_Mindspore/dynamic_graph_quick_start_example.md +211 -0
  71. msprobe/docs/img/compare_result.png +0 -0
  72. msprobe/docs/img/monitor/cpu_info.png +0 -0
  73. msprobe/docs/img/ms_dump.png +0 -0
  74. msprobe/docs/img/ms_layer.png +0 -0
  75. msprobe/docs/img/pt_dump.png +0 -0
  76. msprobe/mindspore/__init__.py +16 -0
  77. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +130 -138
  78. msprobe/mindspore/api_accuracy_checker/api_info.py +27 -5
  79. msprobe/mindspore/api_accuracy_checker/api_runner.py +43 -18
  80. msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +21 -7
  81. msprobe/mindspore/api_accuracy_checker/checker_support_api.yaml +77 -0
  82. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +63 -1
  83. msprobe/mindspore/api_accuracy_checker/compute_element.py +59 -24
  84. msprobe/mindspore/api_accuracy_checker/data_manager.py +264 -0
  85. msprobe/mindspore/api_accuracy_checker/main.py +27 -3
  86. msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +206 -0
  87. msprobe/mindspore/api_accuracy_checker/multi_data_manager.py +58 -0
  88. msprobe/mindspore/api_accuracy_checker/type_mapping.py +22 -5
  89. msprobe/mindspore/api_accuracy_checker/utils.py +34 -17
  90. msprobe/mindspore/cell_processor.py +58 -13
  91. msprobe/mindspore/common/const.py +35 -13
  92. msprobe/mindspore/common/log.py +5 -9
  93. msprobe/mindspore/common/utils.py +60 -5
  94. msprobe/mindspore/compare/distributed_compare.py +15 -28
  95. msprobe/mindspore/compare/ms_compare.py +319 -158
  96. msprobe/mindspore/compare/ms_graph_compare.py +99 -49
  97. msprobe/mindspore/debugger/debugger_config.py +20 -14
  98. msprobe/mindspore/debugger/precision_debugger.py +43 -13
  99. msprobe/mindspore/dump/dump_tool_factory.py +18 -1
  100. msprobe/mindspore/dump/hook_cell/api_registry.py +23 -3
  101. msprobe/mindspore/dump/hook_cell/primitive_hooks.py +203 -0
  102. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +107 -10
  103. msprobe/mindspore/dump/hook_cell/wrap_api.py +21 -13
  104. msprobe/mindspore/dump/jit_dump.py +56 -20
  105. msprobe/mindspore/dump/kernel_graph_dump.py +19 -5
  106. msprobe/mindspore/dump/kernel_kbyk_dump.py +19 -6
  107. msprobe/mindspore/dym_loader/hook_dynamic_loader.cc +140 -0
  108. msprobe/mindspore/dym_loader/hook_dynamic_loader.h +53 -0
  109. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +162 -41
  110. msprobe/mindspore/free_benchmark/common/config.py +15 -0
  111. msprobe/mindspore/free_benchmark/common/handler_params.py +15 -1
  112. msprobe/mindspore/free_benchmark/common/utils.py +37 -8
  113. msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +0 -204
  114. msprobe/mindspore/free_benchmark/handler/base_handler.py +20 -5
  115. msprobe/mindspore/free_benchmark/handler/check_handler.py +21 -7
  116. msprobe/mindspore/free_benchmark/handler/fix_handler.py +18 -3
  117. msprobe/mindspore/free_benchmark/handler/handler_factory.py +21 -6
  118. msprobe/mindspore/free_benchmark/perturbation/add_noise.py +23 -8
  119. msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +29 -5
  120. msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +25 -10
  121. msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +45 -19
  122. msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +29 -8
  123. msprobe/mindspore/free_benchmark/perturbation/no_change.py +16 -1
  124. msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +22 -7
  125. msprobe/mindspore/free_benchmark/self_check_tool_factory.py +17 -2
  126. msprobe/mindspore/grad_probe/global_context.py +44 -14
  127. msprobe/mindspore/grad_probe/grad_analyzer.py +27 -13
  128. msprobe/mindspore/grad_probe/grad_monitor.py +16 -1
  129. msprobe/mindspore/grad_probe/grad_stat_csv.py +33 -5
  130. msprobe/mindspore/grad_probe/hook.py +24 -10
  131. msprobe/mindspore/grad_probe/utils.py +18 -5
  132. msprobe/mindspore/ms_config.py +22 -15
  133. msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +20 -6
  134. msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +15 -0
  135. msprobe/mindspore/runtime.py +15 -0
  136. msprobe/mindspore/service.py +75 -150
  137. msprobe/mindspore/task_handler_factory.py +15 -0
  138. msprobe/msprobe.py +24 -7
  139. msprobe/pytorch/__init__.py +23 -3
  140. msprobe/pytorch/api_accuracy_checker/common/config.py +81 -2
  141. msprobe/pytorch/api_accuracy_checker/common/utils.py +53 -21
  142. msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +19 -2
  143. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +50 -25
  144. msprobe/pytorch/api_accuracy_checker/compare/compare.py +51 -21
  145. msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +23 -6
  146. msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +28 -8
  147. msprobe/pytorch/api_accuracy_checker/config.yaml +1 -1
  148. msprobe/pytorch/api_accuracy_checker/generate_op_script/config_op.json +9 -0
  149. msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +454 -0
  150. msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +365 -0
  151. msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +73 -33
  152. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +44 -18
  153. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +32 -11
  154. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +122 -172
  155. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +158 -4
  156. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +30 -24
  157. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +68 -31
  158. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +27 -4
  159. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/dump_dispatch.py +115 -0
  160. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +26 -9
  161. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/torch_ops_config.yaml +63 -0
  162. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +44 -0
  163. msprobe/pytorch/bench_functions/__init__.py +18 -3
  164. msprobe/pytorch/bench_functions/apply_adam_w.py +15 -0
  165. msprobe/pytorch/bench_functions/confusion_transpose.py +20 -1
  166. msprobe/pytorch/bench_functions/fast_gelu.py +15 -0
  167. msprobe/pytorch/bench_functions/layer_norm_eval.py +15 -0
  168. msprobe/pytorch/bench_functions/linear.py +15 -0
  169. msprobe/pytorch/bench_functions/matmul_backward.py +33 -6
  170. msprobe/pytorch/bench_functions/npu_fusion_attention.py +280 -157
  171. msprobe/pytorch/bench_functions/rms_norm.py +15 -0
  172. msprobe/pytorch/bench_functions/rotary_mul.py +32 -9
  173. msprobe/pytorch/bench_functions/scaled_mask_softmax.py +15 -0
  174. msprobe/pytorch/bench_functions/swiglu.py +29 -6
  175. msprobe/pytorch/common/__init__.py +15 -0
  176. msprobe/pytorch/common/log.py +18 -6
  177. msprobe/pytorch/common/parse_json.py +31 -16
  178. msprobe/pytorch/common/utils.py +96 -40
  179. msprobe/pytorch/compare/distributed_compare.py +13 -14
  180. msprobe/pytorch/compare/match.py +15 -0
  181. msprobe/pytorch/compare/pt_compare.py +44 -10
  182. msprobe/pytorch/debugger/debugger_config.py +69 -52
  183. msprobe/pytorch/debugger/precision_debugger.py +72 -24
  184. msprobe/pytorch/dump/kernel_dump/kernel_config.py +33 -0
  185. msprobe/pytorch/free_benchmark/__init__.py +20 -5
  186. msprobe/pytorch/free_benchmark/common/constant.py +15 -0
  187. msprobe/pytorch/free_benchmark/common/counter.py +15 -0
  188. msprobe/pytorch/free_benchmark/common/enums.py +43 -0
  189. msprobe/pytorch/free_benchmark/common/params.py +23 -1
  190. msprobe/pytorch/free_benchmark/common/utils.py +43 -5
  191. msprobe/pytorch/free_benchmark/compare/grad_saver.py +47 -9
  192. msprobe/pytorch/free_benchmark/compare/single_benchmark.py +17 -0
  193. msprobe/pytorch/free_benchmark/main.py +19 -4
  194. msprobe/pytorch/free_benchmark/perturbed_layers/base_layer.py +15 -0
  195. msprobe/pytorch/free_benchmark/perturbed_layers/layer_factory.py +19 -4
  196. msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +18 -1
  197. msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +21 -4
  198. msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +28 -2
  199. msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +19 -0
  200. msprobe/pytorch/free_benchmark/perturbed_layers/npu/no_change.py +15 -0
  201. msprobe/pytorch/free_benchmark/perturbed_layers/npu/npu_base_layser.py +15 -0
  202. msprobe/pytorch/free_benchmark/perturbed_layers/run_cpu.py +15 -0
  203. msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +65 -16
  204. msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +15 -0
  205. msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +21 -5
  206. msprobe/pytorch/free_benchmark/result_handlers/handler_factory.py +15 -0
  207. msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +19 -4
  208. msprobe/pytorch/function_factory.py +17 -2
  209. msprobe/pytorch/functional/module_dump.py +84 -0
  210. msprobe/pytorch/grad_probe/grad_monitor.py +23 -6
  211. msprobe/pytorch/grad_probe/grad_stat_csv.py +40 -10
  212. msprobe/pytorch/hook_module/__init__.py +16 -1
  213. msprobe/pytorch/hook_module/api_registry.py +13 -8
  214. msprobe/pytorch/hook_module/hook_module.py +17 -19
  215. msprobe/pytorch/hook_module/support_wrap_ops.yaml +1 -0
  216. msprobe/pytorch/hook_module/utils.py +4 -6
  217. msprobe/pytorch/hook_module/wrap_aten.py +12 -11
  218. msprobe/pytorch/hook_module/wrap_distributed.py +6 -7
  219. msprobe/pytorch/hook_module/wrap_functional.py +21 -20
  220. msprobe/pytorch/hook_module/wrap_npu_custom.py +9 -17
  221. msprobe/pytorch/hook_module/wrap_tensor.py +4 -6
  222. msprobe/pytorch/hook_module/wrap_torch.py +4 -6
  223. msprobe/pytorch/hook_module/wrap_vf.py +4 -6
  224. msprobe/pytorch/module_processer.py +18 -6
  225. msprobe/pytorch/monitor/anomaly_analyse.py +201 -0
  226. msprobe/pytorch/monitor/anomaly_detect.py +340 -0
  227. msprobe/pytorch/monitor/distributed/distributed_ops.yaml +19 -0
  228. msprobe/pytorch/monitor/distributed/stack_blacklist.yaml +5 -0
  229. msprobe/pytorch/monitor/distributed/wrap_distributed.py +272 -0
  230. msprobe/pytorch/monitor/features.py +108 -0
  231. msprobe/pytorch/monitor/module_hook.py +870 -0
  232. msprobe/pytorch/monitor/module_metric.py +193 -0
  233. msprobe/pytorch/monitor/module_spec_verifier.py +93 -0
  234. msprobe/pytorch/monitor/optimizer_collect.py +295 -0
  235. msprobe/pytorch/monitor/unittest/__init__.py +0 -0
  236. msprobe/pytorch/monitor/unittest/test_monitor.py +145 -0
  237. msprobe/pytorch/monitor/utils.py +250 -0
  238. msprobe/pytorch/monitor/visualizer.py +59 -0
  239. msprobe/pytorch/online_dispatch/__init__.py +2 -3
  240. msprobe/pytorch/online_dispatch/compare.py +38 -48
  241. msprobe/pytorch/online_dispatch/dispatch.py +50 -25
  242. msprobe/pytorch/online_dispatch/dump_compare.py +21 -9
  243. msprobe/pytorch/online_dispatch/single_compare.py +60 -39
  244. msprobe/pytorch/online_dispatch/torch_ops_config.yaml +9 -1
  245. msprobe/pytorch/online_dispatch/utils.py +48 -23
  246. msprobe/pytorch/parse.py +15 -0
  247. msprobe/pytorch/parse_tool/cli.py +5 -6
  248. msprobe/pytorch/parse_tool/lib/compare.py +19 -26
  249. msprobe/pytorch/parse_tool/lib/config.py +1 -1
  250. msprobe/pytorch/parse_tool/lib/parse_tool.py +4 -2
  251. msprobe/pytorch/parse_tool/lib/utils.py +40 -55
  252. msprobe/pytorch/parse_tool/lib/visualization.py +3 -1
  253. msprobe/pytorch/pt_config.py +192 -40
  254. msprobe/pytorch/service.py +110 -35
  255. msprobe/visualization/__init__.py +14 -0
  256. msprobe/visualization/builder/__init__.py +14 -0
  257. msprobe/visualization/builder/graph_builder.py +165 -0
  258. msprobe/visualization/builder/msprobe_adapter.py +205 -0
  259. msprobe/visualization/compare/__init__.py +14 -0
  260. msprobe/visualization/compare/graph_comparator.py +130 -0
  261. msprobe/visualization/compare/mode_adapter.py +211 -0
  262. msprobe/visualization/graph/__init__.py +14 -0
  263. msprobe/visualization/graph/base_node.py +124 -0
  264. msprobe/visualization/graph/graph.py +200 -0
  265. msprobe/visualization/graph/node_colors.py +95 -0
  266. msprobe/visualization/graph/node_op.py +39 -0
  267. msprobe/visualization/graph_service.py +214 -0
  268. msprobe/visualization/utils.py +232 -0
  269. mindstudio_probe-1.0.4.dist-info/RECORD +0 -276
  270. msprobe/docs/04.acl_config_examples.md +0 -76
  271. msprobe/mindspore/free_benchmark/decorator/dec_forward.py +0 -43
  272. msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +0 -107
  273. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/ssl_config.py +0 -10
  274. msprobe/pytorch/functional/dump_module.py +0 -39
  275. {mindstudio_probe-1.0.4.dist-info → mindstudio_probe-1.1.1.dist-info}/LICENSE +0 -0
  276. {mindstudio_probe-1.0.4.dist-info → mindstudio_probe-1.1.1.dist-info}/top_level.txt +0 -0
  277. /msprobe/{mindspore/free_benchmark/decorator → pytorch/monitor}/__init__.py +0 -0
  278. /msprobe/pytorch/{functional/data_processor.py → monitor/distributed/__init__.py} +0 -0
@@ -4,19 +4,25 @@
4
4
 
5
5
  msprobe精度比对工具主要用于如下场景:
6
6
 
7
- - 通过对同一个网络模型,在两个不同版本的MindSpore静态图环境下,输入相同的训练数据,在分别得到API dump数据后,对这两个API dump数据进行全量自动比对,从而快速定位不同版本之间的精度问题。
8
- - 通过对同一个网络模型,在两个不同版本的MindSpore静态图环境下,输入相同的训练数据,在分别得到kernel dump数据后,对这两个kernel dump数据进行全量自动比对,从而快速定位不同版本之间的精度问题。
9
- - 通过对同一个网络模型,在两个不同版本的MindSpore动态图环境下,输入相同的训练数据,在分别得到cell dump数据后,对这两个cell模块进行全量自动比对,从而快速定位不同版本之间的精度问题。
10
- - 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得API dump数据,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
11
- - 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得cell dump数据,由用户指定可以比对的cell list,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
7
+ - MindSpore框架内比对
8
+ - 通过对同一个网络模型,在两个不同版本的MindSpore静态图环境下,输入相同的训练数据,在分别得到API dump数据后,对这两个API dump数据进行全量自动比对,从而快速定位不同版本之间的精度问题。
9
+ - 通过对同一个网络模型,在两个不同版本的MindSpore静态图环境下,输入相同的训练数据,在分别得到kernel dump数据后,对这两个kernel dump数据进行全量自动比对,从而快速定位不同版本之间的精度问题。
10
+ - 通过对同一个网络模型,在两个不同版本的MindSpore动态图环境下,输入相同的训练数据,在分别得到cell dump数据后,对这两个cell模块进行全量自动比对,从而快速定位不同版本之间的精度问题。
11
+ - MindSporePyTorch跨框架比对
12
+ - 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得API dump数据,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
13
+ - 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得cell dump数据,由用户指定可以比对的cell list,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
14
+ - 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得API或模块dump数据,由用户指定可以比对的API或模块,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
15
+ - 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得API或模块dump数据,由用户指定可以比对的模型代码中的Layer层,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
12
16
 
13
- 执行精度比对操作需要安装msprobe工具。详见《[MindStudio精度调试工具](../../README.md)》的“工具安装”章节。
17
+ 执行精度比对操作需要安装msprobe工具。详见《[MindStudio精度调试工具](../README.md)》的“工具安装”章节。
14
18
 
15
- ## 2 命令行方式
19
+ ## 2 命令行比对
16
20
 
17
21
  精度比对工具目前使用方式为命令行形式。
18
22
 
19
- ### 2.1 命令格式说明
23
+ ### 2.1 比对命令说明
24
+
25
+ 命令示例如下:
20
26
 
21
27
  ```shell
22
28
  msprobe -f mindspore compare -i ./compare.json -o ./output -s
@@ -24,15 +30,19 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
24
30
 
25
31
  **完整参数说明**
26
32
 
27
- | 参数名 | 说明 | 是否必选 |
28
- | ------------------- | ------------------------------------------------------------ | -------- |
29
- | -i或--input_path | 指定比对文件。比对文件内容及示例请参见[比对文件](#31-比对文件)或[比对文件(kernel)](#32-比对文件(kernel)(比对文件(kernel)仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | 是 |
30
- | -o或--output_path | 配置比对结果文件存盘目录。文件名称基于时间戳自动生成,格式为:<br> `compare_result_{timestamp}.xlsx`<br/> `compare_result_{rank_id}_{step_id}_{timestamp}.xlsx`(仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | |
31
- | -s或--stack_mode | 配置stack_mode的开关。仅当[比对文件](#31-比对文件)配置"stack_path"需要开启。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
32
- | -c或--compare_only | 仅比对开关。该参数默认未配置,表示关闭仅比对,使用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度不达标节点(在比对结果文件中的“Accuracy Reached or Not”列显示为No),并给出问题可能产生的原因(打屏展示并生成advisor_{timestamp}.txt文件)。配置该参数开启仅比对,关闭自动精度分析,仅输出比对结果表格。 | 否 |
33
- | -f或--fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
34
- | -am或--api_mapping | 跨框架比对。配置该参数时表示开启跨框架API比对功能。仅[跨框架的API比对](#25-跨框架的API比对)场景支持。 | 否 |
35
- | -cm或--cell_mapping | 跨框架比对。配置该参数时表示开启跨框架cell模块比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件](#33-自定义映射文件)。仅[跨框架的cell模块比对](#26-跨框架的cell模块比对)场景支持。 | 否 |
33
+ | 参数名 | 说明 | 是否必选 |
34
+ | -------------------- | ------------------------------------------------------------ | -------- |
35
+ | -i或--input_path | 指定比对文件。比对文件内容及示例请参见[比对文件](#31-比对文件)或[比对文件(kernel)](#32-比对文件kernel)(比对文件(kernel)仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | 是 |
36
+ | -o或--output_path | 配置比对结果文件存盘目录,默认会在当前目录创建output目录。文件名称基于时间戳自动生成,格式为:<br> `compare_result_{timestamp}.xlsx`<br/> `compare_result_{rank_id}_{step_id}_{timestamp}.xlsx`(仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | |
37
+ | -s或--stack_mode | 比对结果展示调用栈信息(NPU_Stack_Info)的开关,bool 类型。单卡场景开启时,需要使用[比对文件](#31-比对文件)的单卡场景配置stack_path指定stack.json文件,才能生成详细调用栈信息,否则在比对时会报错;暂不支持多卡场景。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
38
+ | -c或--compare_only | 仅比对开关,bool 类型。该参数默认未配置,会启用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。通过配置该参数取消自动精度分析,仅输出比对结果表格。 | 否 |
39
+ | -f或--fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
40
+ | -am或--api_mapping | 跨框架比对。配置该参数时表示开启跨框架API比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(API)](#33-自定义映射文件api)。仅[跨框架的API比对](#25-跨框架的api比对)场景需要配置。 | 否 |
41
+ | -cm或--cell_mapping | 跨框架比对。配置该参数时表示开启跨框架cell模块比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(cell)](#34-自定义映射文件cell)。仅[跨框架的cell模块比对](#26-跨框架的cell模块比对)场景需要配置。 | 否 |
42
+ | -dm或--data_mapping | 跨框架比对。配置该参数时表示开启跨框架API或模块的比对功能,需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(API和模块)](#35-自定义映射文件api和模块)。仅[跨框架的API或模块比对](#27-跨框架的api或模块比对)场景需要配置。 | 否 |
43
+ | -lm或--layer_mapping | 跨框架比对。配置该参数时表示开启跨框架Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#36-自定义映射文件layer)。仅[跨框架的Layer层比对](#28-跨框架的layer层比对)场景需要配置。 | 否 |
44
+
45
+ 动态图模式没有填写任何mapping时,按照同框架比对的方式进行比对,比对数据和标杆数据的Cell或Api名称需要完全相同才能匹配得上。
36
46
 
37
47
  ### 2.2 不同版本下的全量API比对
38
48
 
@@ -46,13 +56,13 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
46
56
  msprobe -f mindspore compare -i ./compare.json -o ./output -s
47
57
  ```
48
58
 
49
- 4. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)]》章节。
59
+ 4. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
50
60
 
51
61
  ### 2.3 不同版本下的全量kernel比对
52
62
 
53
63
  1. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》完成不同环境下MindSpore静态图精度数据的采集,得到不同框架版本的kernel dump数据。
54
64
 
55
- 2. 创建比对文件,文件内容及示例请参见[比对文件(kernel)](#32-比对文件(kernel)。
65
+ 2. 创建比对文件,文件内容及示例请参见[比对文件(kernel)](#32-比对文件kernel)。
56
66
 
57
67
  3. 执行如下示例命令进行比对:
58
68
 
@@ -60,7 +70,9 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
60
70
  msprobe -f mindspore compare -i ./compare.json -o ./output
61
71
  ```
62
72
 
63
- 4. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)]》章节。
73
+ 该场景仅支持compare的-i和-o参数。
74
+
75
+ 4. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
64
76
 
65
77
  ### 2.4 不同版本下的cell模块比对
66
78
 
@@ -76,7 +88,7 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
76
88
  msprobe -f mindspore compare -i ./compare.json -o ./output -s
77
89
  ```
78
90
 
79
- 5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)]》章节。
91
+ 5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
80
92
 
81
93
  ### 2.5 跨框架的API比对
82
94
 
@@ -92,7 +104,16 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
92
104
  msprobe -f mindspore compare -i ./compare.json -o ./output -s -am
93
105
  ```
94
106
 
95
- 5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)]》章节。
107
+
108
+
109
+ ```shell
110
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s -am api_mapping.yaml
111
+ ```
112
+
113
+ api_mapping.yaml文件配置请参见[自定义映射文件(API)](#33-自定义映射文件api)。
114
+ 不传入api_mapping.yaml的情况下将按照内置的api映射进行匹配;传入api_mapping.yaml的情况下优先按照api_mapping.yaml的内容进行匹配,api_mapping.yaml中没有涉及的按照内置的api映射进行匹配。
115
+
116
+ 5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
96
117
 
97
118
  ### 2.6 跨框架的cell模块比对
98
119
 
@@ -114,7 +135,50 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
114
135
  msprobe -f mindspore compare -i ./compare.json -o ./output -s -cm cell_mapping.yaml
115
136
  ```
116
137
 
117
- 5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)]》章节。
138
+ cell_mapping.yaml文件配置请参见[自定义映射文件(cell)](#34-自定义映射文件cell)
139
+ 不传入cell_mapping.yaml的情况下仅将Cell改成Module后进行匹配;传入cell_mapping.yaml的情况下将按照cell_mapping.yaml的内容进行匹配。
140
+
141
+ 5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
142
+
143
+ ### 2.7 跨框架的API或模块比对
144
+
145
+ 该场景可用于在“**跨框架的API比对**”和“**跨框架的cell模块比对**”场景均无法完全覆盖模型中的API和模块时,通过手动指定映射关系来补全未被比对的API或模块。
146
+
147
+ 1. 配置[config.json](../config.json)文件level配置为L0或L1、task配置为tensor或statistics并指定需要dump的API或模块名。
148
+
149
+ 2. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》和《[PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)》完成不同环境下API或模块精度数据的采集,得到两个框架的API或模块dump数据。
150
+
151
+ 3. 创建比对文件,文件内容及示例请参见[比对文件](#31-比对文件)。
152
+
153
+ 4. 执行如下示例命令进行比对:
154
+
155
+ ```shell
156
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s -dm data_mapping.yaml
157
+ ```
158
+
159
+ data_mapping.yaml文件配置请参见[自定义映射文件(all)](#35-自定义映射文件api和模块)。
160
+
161
+ 5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
162
+
163
+ ### 2.8 跨框架的Layer层比对
164
+
165
+ 该场景可简化API或模块场景的配置,从Layer层识别整网的API和模块。
166
+
167
+ 1. 配置[config.json](../config.json)文件level配置为L0或mix、task配置为tensor或statistics并指定需要dump的API或模块名。
168
+
169
+ 2. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》和《[PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)》完成不同环境下API或模块精度数据的采集,得到两个框架的API或模块dump数据。
170
+
171
+ 3. 创建比对文件,文件内容及示例请参见[比对文件](#31-比对文件)。
172
+
173
+ 4. 执行如下示例命令进行比对:
174
+
175
+ ```shell
176
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s -lm layer_mapping.yaml
177
+ ```
178
+
179
+ layer_mapping.yaml文件配置请参见[自定义映射文件(Layer)](#36-自定义映射文件layer)。
180
+
181
+ 5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
118
182
 
119
183
  ## 3 附录
120
184
 
@@ -132,6 +196,14 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
132
196
  }
133
197
  ```
134
198
 
199
+ 多卡场景示例如下:
200
+ ```json
201
+ {
202
+ "npu_path": "./npu_dump/step0", # 需填写到step层级(rank的上一层级)
203
+ "bench_path": "./bench_dump/step0", # 需填写到step层级(rank的上一层级)
204
+ "is_print_compare_log": true
205
+ }
206
+ ```
135
207
 
136
208
  **参数说明**
137
209
 
@@ -140,7 +212,7 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
140
212
  | npu_path | 配置NPU环境下的dump.json文件(单卡场景)。跨框架场景指定为MindSpore的json文件。数据类型:str。 | 是 |
141
213
  | bench_path | 配置CPU、GPU或NPU环境下的dump.json文件(单卡场景)。 跨框架场景指定为PyTorch的json文件。数据类型:str。 | 是 |
142
214
  | stack_path | 配置NPU dump目录下的stack.json文件。数据类型:str。 | 是 |
143
- | is_print_compare_log | 配置是否开启日志打屏。可取值true或false,默认为true。数据类型:bool | 否 |
215
+ | is_print_compare_log | 配置是否开启单个算子的日志打屏。可取值true或false,默认为true。关闭后则只输出常规日志。数据类型:bool | 否 |
144
216
 
145
217
  ### 3.2 比对文件(kernel)
146
218
 
@@ -175,24 +247,95 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
175
247
 
176
248
  | 参数名 | 说明 | 是否必选 |
177
249
  | ---------- | ------------------------------------------------------------ | -------- |
178
- | npu_path | 配置NPU环境下的dump.json文件目录(单卡场景)或真实数据目录(多卡场景)。数据类型:str。 | 是 |
179
- | bench_path | 配置CPU、GPU或NPU环境下的dump.json文件目录(单卡场景)或真实数据目录(多卡场景)。数据类型:str。 | 是 |
250
+ | npu_path | 配置NPU环境下的真实数据目录。数据类型:str。 | 是 |
251
+ | bench_path | 配置NPU环境下的真实数据目录。数据类型:str。 | 是 |
180
252
  | rank_id | 配置比对的Rank ID。npu_path和bench_path目录下的dump文件需要存在对应Rank的数据。默认为空,表示比对所有Rank。可配置一个或多个Rank,多个Rank ID用逗号隔开,例如:"rank_id": [1,2,3]。数据类型:list[int]。 | 否 |
181
- | step_id | 配置比对的Step ID。npu_path和bench_path目录下的dump文件需要存在对应Step的数据。默认为空,表示比对所有Sank。可配置一个或多个Sank,多个Sank ID用逗号隔开,例如:"step_id": [1,2,3]。数据类型:list[int]。 | 否 |
253
+ | step_id | 配置比对的Step ID。npu_path和bench_path目录下的dump文件需要存在对应Step的数据。默认为空,表示比对所有Step。可配置一个或多个Step,多个Step ID用逗号隔开,例如:"step_id": [1,2,3]。数据类型:list[int]。 | 否 |
182
254
 
183
- ### 3.3 自定义映射文件
255
+ ### 3.3 自定义映射文件(API)
184
256
 
185
257
  文件名格式:\*.yaml,*为文件名,可自定义。
186
258
 
187
259
  文件内容格式:
188
260
 
189
261
  ```yaml
190
- {cell_name}.{class_name}: {cell_name}.{class_name}
262
+ ms_api: {ms_api_name}
263
+ pt_api: {pt_api_name}
264
+ ms_args:
265
+ - {index1}
266
+ - {index2}
267
+ ...
268
+ - {indexN}
269
+ pt_args:
270
+ - {index1}
271
+ - {index2}
272
+ ...
273
+ - {indexN}
274
+ ms_outputs:
275
+ - {index1}
276
+ - {index2}
277
+ ...
278
+ - {indexN}
279
+ pt_outputs:
280
+ - {index1}
281
+ - {index2}
282
+ ...
283
+ - {indexN}
191
284
  ```
192
285
 
193
- 左侧为MindSpore框架cell模块的{cell_name}.{class_name},右侧为PyTorch框架cell模块的{cell_name}.{class_name}。
286
+ - ms_api/pt_api:分别为MindSpore和PyTorch框架的API名称,配置格式为{api_type}.{api_name}。API名称请分别从《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》和《[PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)》中的dump.json文件获取。
287
+ - ms_args/pt_args:分别为ms_api/pt_api对应的MindSpore和PyTorch框架API的入参的序号。
288
+ - ms_outputs/pt_outputs:分别为ms_api/pt_api对应的MindSpore和PyTorch框架API的输出的序号。
289
+
290
+ **说明**:
291
+
292
+ - MindSpore和PyTorch框架的API映射关系可以从《[PyTorch与MindSpore API映射表](https://www.mindspore.cn/docs/zh-CN/r2.3.0rc2/note/api_mapping/pytorch_api_mapping.html)》获取,其中PyTorch与MindSpore API名称前缀的映射关系如下:
293
+
294
+ | PyTorch | PyTorch在dump文件中的名称 | MindSpore | MindSpore在dump文件中的名称 |
295
+ | ------------------- | ------------------------- | ---------------- | --------------------------- |
296
+ | torch.nn.functional | Functional | mindspore.ops | Functional |
297
+ | torch.Tensor | Tensor | mindspore.Tensor | Tensor |
298
+ | torch | Torch | mindspore.ops | Functional |
194
299
 
195
- {cell_name}.{class_name}从dump cell模块级.npy文件名获取,命名格式为:`{Cell}_{cell_name}_{class_name}_{前向反向}.{index}.{input/output}.{参数序号}`
300
+ 实际配置自定义映射文件(API)时需要使用dump文件中的名称。
301
+
302
+ - 自定义映射文件(API)需要满足ms_args/pt_args列表中的元素个数一致,ms_outputs/pt_outputs相同。
303
+
304
+ - 须确保列表自定义映射文件(API)配置元素的合法性,比如ms_args/pt_args的API用到的参数只有3个参数,那么用户实际指定的参数序号只能包含0、1、2;另外参数序号列表中的值不能重复。
305
+
306
+ 文件内容示例:
307
+
308
+ ```yaml
309
+ ms_api: Functional.abs
310
+ pt_api: Torch.abs
311
+ ms_args:
312
+ - 0
313
+ - 1
314
+ pt_args:
315
+ - 0
316
+ - 1
317
+ ms_outputs:
318
+ - 0
319
+ - 1
320
+ pt_outputs:
321
+ - 0
322
+ - 1
323
+ # ms_args/pt_args和ms_outputs/pt_outputs参数的配置需要根据ms_api/pt_api的API入参和输出的顺序,例如Functional.abs API的入参为(a b c),那对应的ms_args为0 1 2,可根据实际需要选择,而Torch.abs的入参如果是(a b c),那么ms_args和pt_args配置一致即可,但如果Torch.abs的入参如果是(a c)或其他与Functional.abs不完全映射的值,那么ms_args和pt_args配置的序号需要与入参对应,Torch.abs(a c)的序号为0 1,Functional.abs(a b c)为0 1 2,只有a和c参数可以映射,那么ms_args配置为0 2,pt_args配置为0 1。ms_outputs/pt_outputs同理。
324
+ ```
325
+
326
+ ### 3.4 自定义映射文件(cell)
327
+
328
+ 文件名格式:\*.yaml,*为文件名,可自定义。
329
+
330
+ 文件内容格式:
331
+
332
+ ```yaml
333
+ {cell_name}.{class_name}: {module_name}.{class_name}
334
+ ```
335
+
336
+ 冒号左侧为MindSpore框架cell模块的{cell_name}.{class_name},冒号右侧为PyTorch框架module模块的{module_name}.{class_name}。
337
+
338
+ {cell_name}.{class_name}从dump cell模块级.npy文件名获取,命名格式为:`{Cell}.{cell_name}.{class_name}.{前向反向}.{index}.{input/output}.{参数序号}`
196
339
 
197
340
  文件内容示例:
198
341
 
@@ -200,3 +343,82 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
200
343
  fc2.Dense: fc2.Linear
201
344
  conv1.Conv2d: conv3.Conv2d
202
345
  ```
346
+
347
+ ### 3.5 自定义映射文件(API和模块)
348
+
349
+ 文件名格式:\*.yaml,*为文件名,可自定义。
350
+
351
+ 文件内容格式:
352
+
353
+ ```yaml
354
+ # API
355
+ {api_type}.{api_name}.{API调用次数}.{前向反向}.{input/output}.{参数序号}: {api_type}.{api_name}.{API调用次数}.{前向反向}.{input/output}.{参数序号}
356
+ # 模块
357
+ {Cell}.{cell_name}.{class_name}.{前向反向}.{index}.{input/output}.{参数序号}: {Module}.{module_name}.{前向反向}.{index}.{input/output}.{参数序号}
358
+ ```
359
+
360
+ 冒号左侧为MindSpore框架API的名称和Cell模块的名称,冒号右侧为PyTorch框架API的名称和module模块名称。
361
+
362
+ API和模块名称请分别从《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》和《[PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)》中的dump.json文件获取。
363
+
364
+ 文件内容示例:
365
+
366
+ ```yaml
367
+ # API
368
+ Functional.flash_attention_score.4.forward.input.0: NPU.npu_fusion_attention.4.forward.input.0
369
+ # 模块
370
+ Cell.relu.ReLU.forward.0.input.0: Module.module.language_model.embedding.word_embedding.VocabParallelEmbedding.forward.0.input.0
371
+ ```
372
+
373
+ API和模块名称在dump.json文件中的“data_name”字段展示,如下图红框处所示:
374
+
375
+ - MindSpore dump
376
+
377
+ ![ms_dump](./img/ms_dump.png)
378
+
379
+ - PyTorch dump
380
+
381
+ ![pt_dump](./img/pt_dump.png)
382
+
383
+ ### 3.6 自定义映射文件(Layer)
384
+
385
+ 文件名格式:\*.yaml,*为文件名,可自定义。
386
+
387
+ 文件内容示例:
388
+
389
+ ```yaml
390
+ ParallelAttention: # Layer层名称
391
+ qkv_proj: query_key_value # 冒号左侧为MindSpore框架模型代码中嵌套的Layer层名称,冒号右侧为PyTorch框架模型代码中嵌套的Layer层名称
392
+ out_proj: dense
393
+
394
+ ParallelTransformerLayer:
395
+ attention: self_attention
396
+
397
+ Embedding:
398
+ dropout: embedding_dropout
399
+
400
+ ParallelMLP:
401
+ mapping: dense_h_to_4h
402
+ projection: dense_4h_to_h
403
+
404
+ PipelineCell:
405
+ model: module
406
+
407
+ Cell:
408
+ network_with_loss: module
409
+
410
+ layers: # 手动映射MindSpore与PyTorch模型代码中的Layer层序号
411
+ '5': '0'
412
+ '6': '1'
413
+ '7': '2'
414
+ '8': '3'
415
+ '9': '4'
416
+ ```
417
+
418
+ Layer层名称需要从模型代码中获取。
419
+
420
+ yaml文件中只需配置MindSpore与PyTorch模型代码中功能一致但名称不同的Layer层,名称相同的Layer层会被自动识别并映射。
421
+
422
+ 模型代码示例:
423
+
424
+ ![ms_dump](./img/ms_layer.png)
@@ -26,7 +26,7 @@ msprobe 工具在 PyTorch 场景下提供溢出数据采集功能和溢出数据
26
26
 
27
27
  ### 1.5 其他说明
28
28
 
29
- 溢出数据采集功能在昇腾 NPU 上支持饱和模式和 INF/NAN 模式。INF/NAN 模式遵循 IEEE 754 标准,根据定义输出 INF/NAN 的计算结果。与之对应的饱和模式在计算出现溢出时,饱和为浮点数极值(+-MAX)。对于 CANN 侧配置,Atlas 训练系列产品(如 910A),默认为饱和模式,且不建议使用 INF/NAN 模式;Atlas A2 训练系列产品(如 910B),默认为 INF/NAN 模式,且不建议使用饱和模式。
29
+ 溢出数据采集功能在昇腾 NPU 上支持饱和模式和 INF/NAN 模式。INF/NAN 模式遵循 IEEE 754 标准,根据定义输出 INF/NAN 的计算结果。与之对应的饱和模式在计算出现溢出时,饱和为浮点数极值(+-MAX)。对于 CANN 侧配置,Atlas 训练系列产品,默认为饱和模式,且不建议使用 INF/NAN 模式;Atlas A2 训练系列产品,默认为 INF/NAN 模式,且不建议使用饱和模式。
30
30
 
31
31
  INF/NAN 模式的使能方式如下:
32
32
 
@@ -1,8 +1,8 @@
1
1
  # MindSpore 场景的溢出检测
2
2
 
3
- msprobe 工具提供静态图O2编译等级下的过程溢出检测与动态图场景下的结果溢出检测。其中前者检测对象为 kernel 级别,对应 config.json 配置中的 "L2" level,后者检测对象为 API 级别,对应 config.json 配置中的 "L1" level。
3
+ msprobe 工具提供静态图O2编译等级下与动态图场景下的溢出检测功能。其中前者检测对象为 **kernel** 级别,对应 config.json 配置中的 **"L2"** level,后者检测对象为 **API** 级别(支持的API类型为ops、Tensor、mint和mint.nn.functional,不支持Primitive和Jit类API)或 **cell** 级别,分别对应 config.json 配置中的 **"L1"** 、**"L0"** level。
4
4
 
5
- 需要注意,动态图场景下的溢出检测功能仅支持 INF/NAN 模式<sup>a</sup>。INF/NAN 模式的使能方式如下:
5
+ 需要注意,本工具仅支持在 INF/NAN 模式<sup>a</sup>下进行溢出检测。INF/NAN 模式的使能方式如下:
6
6
 
7
7
  ```Shell
8
8
  # 使能 CANN 侧 INF/NAN 模式
@@ -11,21 +11,21 @@ export INF_NAN_MODE_ENABLE=1
11
11
  export MS_ASCEND_CHECK_OVERFLOW_MODE="INFNAN_MODE"
12
12
  ```
13
13
 
14
- **a**:INF/NAN 模式遵循 IEEE 754 标准,根据定义输出 INF/NAN 的计算结果。与之对应的饱和模式在计算出现溢出时,饱和为浮点数极值(+-MAX)。对于 CANN 侧配置,Atlas 训练系列产品(如 910A),默认为饱和模式,且不建议使用 INF/NAN 模式;Atlas A2训练系列产品(如 910B),默认为 INF/NAN 模式,且不建议使用饱和模式。对于 MindSpore 框架侧配置,仅支持对 Atlas A2 训练系列产品进行设置,默认为 INF/NAN 模式。CANN 侧 与 MindSpore 框架侧配置须一致。
14
+ **a**:在处理浮点数计算溢出问题时,NPU 当前支持两种溢出模式:INF/NAN 模式与饱和模式。INF/NAN 模式遵循 IEEE 754 标准,根据定义输出 INF/NAN 的计算结果。与之对应的饱和模式在计算出现溢出时,饱和为浮点数极值(+-MAX)。对于 CANN 侧配置,Atlas 训练系列产品,默认为饱和模式,且不建议使用 INF/NAN 模式;Atlas A2训练系列产品,默认为 INF/NAN 模式,且不建议使用饱和模式。对于 MindSpore 框架侧配置,仅支持对 Atlas A2 训练系列产品进行设置,默认为 INF/NAN 模式。CANN 侧 与 MindSpore 框架侧配置须一致。
15
15
 
16
16
  溢出检测任务的配置示例见[MindSpore 静态图场景下 task 配置为 overflow_check](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#23-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-overflow_check)、[MindSpore 动态图场景下 task 配置为 overflow_check](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/03.config_examples.md#33-task-%E9%85%8D%E7%BD%AE%E4%B8%BA-overflow_check)。
17
17
 
18
18
 
19
19
  ## 1 接口介绍
20
20
 
21
- 溢出检测功能提供的接口与数据采集任务一致,详见[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)中的"**1 接口介绍**"章节。
21
+ 溢出检测功能提供的接口与数据采集任务一致,详见MindSpore 场景的精度数据采集中的["**1 接口介绍**"](./06.data_dump_MindSpore.md#1-接口介绍)章节。
22
22
 
23
23
  需要注意,目前暂不支持动态图 "L1" level 下 primitive op 的溢出检测。
24
24
 
25
25
  ## 2 示例代码
26
26
 
27
- 溢出检测功能使用方式与数据采集任务一致,详见[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)中的"**2 示例代码**"章节。
27
+ 溢出检测功能使用方式与数据采集任务一致,详见MindSpore 场景的精度数据采集中的["**2 示例代码**"](./06.data_dump_MindSpore.md#2-示例代码)节。
28
28
 
29
29
  ## 3 溢出检测结果文件介绍
30
30
 
31
- 溢出检测结果文件目录结构与含义与数据采集任务一致,详见[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)中的"**3 dump 结果文件介绍**"章节。
31
+ 溢出检测结果文件目录结构与含义与数据采集任务一致,但仅保存溢出 API 或 kernel 的真实数据或统计信息。详见MindSpore 场景的精度数据采集中的["**3 dump 结果文件介绍**"](./06.data_dump_MindSpore.md#3-dump-结果文件介绍)章节。
@@ -1,26 +1,26 @@
1
1
  # PyTorch 场景的无标杆比对
2
2
 
3
3
  ## 1 简介
4
- * 本工具的目标是在不依赖标杆数据的情况下、检测模型训练中可能存在的精度问题API级别算子,并提供升精度和tocpu接口快速验证;
5
- * 工具基于**数值病态分析理论**:对算子的输入增加很小的扰动、从而放大输出值异常现象;检测算子原始输出和扰动后输出间误差是否符合精度标准;
4
+ * 本工具的目标是在不依赖标杆数据的情况下,检测模型训练中可能存在的精度问题API级别算子,并提供升精度和tocpu接口快速验证。
5
+ * 工具基于**数值病态分析理论**:对算子的输入增加很小的扰动,从而放大输出值异常现象;检测算子原始输出和扰动后输出间误差是否符合精度标准。
6
6
 
7
7
  * 该工具的**特点**有:
8
- * 不依赖标杆模型、不需要离线对比
9
- * 提供接口,对可疑算子升精度、tocpu进行快速验证
8
+ * 不依赖标杆模型,不需要离线对比;
9
+ * 提供接口,对可疑算子升精度,tocpu进行快速验证。
10
10
  * 推荐使用场景(针对**算子精度问题**):
11
- * **暂无标杆数据**,模型Loss异常,要做精度问题算子排查
12
- * **验证可疑算子**,要做进一步确认、验证是否对模型Loss有影响
13
- * 低精度模型效果不如高精度,要做精度问题算子排查
11
+ * **暂无标杆数据**,模型Loss异常,要做精度问题算子排查;
12
+ * **验证可疑算子**,要做进一步确认,验证是否对模型Loss有影响;
13
+ * 低精度模型效果不如高精度,要做精度问题算子排查。
14
14
  * 该工具的约束
15
- * 仅支持Pytorch2.x场景
16
- * 推荐限定算子范围使用(白名单、或脚本中工具启用范围)、算子范围越大、性能和显存损耗越大;详情见[无标杆工具场景验证和性能基线报告(待补充)](./S02.report_free_benchmarking_validation_performance_baseline.md)
15
+ * 仅支持Pytorch2.x场景;
16
+ * 推荐限定算子范围使用(白名单,或脚本中工具启用范围),算子范围越大,性能和显存损耗越大;详情见[无标杆比对功能在 PyTorch 场景的性能基线报告](./S02.report_free_benchmarking_validation_performance_baseline.md)
17
17
 
18
18
  ## 2 工具实现原理
19
- 1. **扰动算子白名单**:根据算子名识别需要插桩算子范围
20
- 2. **扰动因子**:基于torch.nn.Module的hook机制、在注册的hook函数中对算子输入进行特定类型扰动
19
+ 1. **扰动算子白名单**:根据算子名识别需要插桩算子范围。
20
+ 2. **扰动因子**:基于torch.nn.Module的hook机制,在注册的hook函数中对算子输入进行特定类型扰动。
21
21
  3. **误差分析**:
22
- * **check**: 在hook函数中二次执行算子得到扰动后的算子输出、计算扰动后输出与原始输出的相对误差,查看是否符合精度标准
23
- * **fix**: 需要做验证时、可以选择将特定扰动类型(升精度、to cpu)的输出替换原始输出、观察对模型Loss是否有影响
22
+ * **check**: 在hook函数中二次执行算子得到扰动后的算子输出,计算扰动后输出与原始输出的相对误差,查看是否符合精度标准;
23
+ * **fix**: 需要做验证时,可以选择将特定扰动类型(升精度,to cpu)的输出替换原始输出,观察对模型Loss是否有影响。
24
24
  4. **精度风险算子**:不达标精度标准的,最终会在输出件中展示
25
25
 
26
26
  ![alt text](./img/free_benchmark_framework.png)
@@ -50,11 +50,11 @@ D-->config.json配置
50
50
  ```
51
51
  工具的推荐使用思路是:
52
52
 
53
- 1. 配置config.json开启精度风险算子的排查
54
- 2. 根据精度风险算子输出件、修改config.json开启验证功能、观察模型loss曲线是否改善
53
+ 1. 配置config.json开启精度风险算子的排查;
54
+ 2. 根据精度风险算子输出件,修改config.json开启验证功能,观察模型loss曲线是否改善。
55
55
 
56
56
  ### 3.1 安装msprobe工具
57
- 参照[msprobe安装](./docs/01.installation.md)
57
+ 参照[msprobe安装](./01.installation.md)
58
58
  ### 3.2 config.json配置
59
59
  修改[config.json](../config.json) 的task类型为"**free_benchmark**"开启无标杆功能。支持的配置项详见[配置文件介绍](./02.config_introduction.md),默认配置如下:
60
60
  ```json
@@ -64,8 +64,6 @@ D-->config.json配置
64
64
  "rank": [],
65
65
  "step": [],
66
66
  "level": "L1",
67
- "seed": 1234,
68
- "is_deterministic": false,
69
67
 
70
68
  "free_benchmark": {
71
69
  "scope": [],
@@ -81,34 +79,39 @@ D-->config.json配置
81
79
  }
82
80
  }
83
81
  ```
84
- 用户需根据自己的使用场景、对<a herf="2 工具实现原理">工具实现原理</a>中几个关键步骤进行配置
85
- #### 3.2.1 扰动算子白名单(确定插桩范围):
86
-
87
- | 相关参数名 | 是否必选 | 可配置项 | 适用场景 |
88
- | ---------- | -------- | ----------------- | ------------------------------------------------------------------------------------------- |
89
- | scope | 可选 | | 需要通过指定算子名来限制算子插桩范围 如:["Torch.matmul.0.forward", "Tensor.pow.4.forward"] |
90
- | list | 可选 | | 需要通过指定算子类型来限制算子插桩范围 如:\["relu"\] 会匹配所有算子名中包含relu的算子 |
91
- | fuzz_stage | 可选 | "forward"(默认) | 需要进行算子**前向**计算的精度问题排查或**验证可疑算子** |
92
- | | | "backward" | 需要进行算子**反向**计算的精度问题排查,不支持仅反向验证,前向验证包括反向 |
93
-
94
- #### 3.2.2. 选择扰动因子:
95
-
96
- | 相关参数 | 是否必选 | 可配置项 | 适用场景 |
97
- | ----------- | -------- | ---------------------------- | -------------------------------------------------------------------------------------------------------- |
98
- | pert_mode | 可选 | "improve_precision" (默认) | (常用)(可做验证) 插桩算子可能在**低精度**下有精度问题,扰动因子会将输入的低精度向量升精度 |
99
- | | | "bit_noise" | (常用)插桩算子可能在**轻微扰动**下暴露精度问题,扰动因子会将输入向量最后一个比特位翻转 |
100
- | | | "add_noise" | 插桩算子可能在**轻微扰动**下暴露精度问题,扰动因子会为输入向量增加一个极小值 |
101
- | | | "change_value" | 插桩算子可能存在**大数吃小数**问题,扰动因子会交换输入向量的首尾值 |
102
- | | | "no_change" | 插桩算子可能存在**数值稳定性**精度问题,扰动因子会复制原始输入 |
103
- | | | "to_cpu" | (可做验证) 插桩算子可能在**同cpu**精度表现不一致,扰动因子会将输入转至cpu,需要配合fuzz_device="cpu"使用 |
104
- | fuzz_device | 可选 | "npu" (默认) | 扰动因子不需要to cpu操作 |
105
- | | | "cpu" | 扰动因子需要to cpu操作,目前仅"to cpu"扰动因子 |
106
-
107
- #### 3.2.3. 选择处理方式:
108
- | 相关参数名 | 是否必选 | 可配置项 | 适用场景 |
109
- | ------------ | -------- | ----------------- | ----------------------------------------------------------------------------------------- |
110
- | handler_type | 可选 | "check" (默认) | 要做精度问题算子排查,输出扰动前后不符合精度标准的算子,支持所有扰动因子 |
111
- | | | "fix" | 要做可疑算子验证,用扰动后输出替换原始输出,支持"improve_precision"、"to_cpu"两种扰动因子 |
82
+ 用户需根据自己的使用场景,对[工具实现原理](#2-工具实现原理)中几个关键步骤进行配置。
83
+ #### 3.2.1 扰动算子白名单(确定插桩范围)
84
+
85
+ <table>
86
+ <tr><th>参数</th><th>是否必选</th><th>可配置项</th><th>适用场景</th></tr>
87
+ <tr><td>scope</td><td>否</td><td>自定义</td><td>需要通过指定算子名来限制算子插桩范围 如:["Torch.matmul.0.forward", "Tensor.pow.4.forward"]。</td></tr>
88
+ <tr><td>list</td><td>否</td><td>自定义</td><td>需要通过指定算子类型来限制算子插桩范围 如:["relu"] 会匹配所有算子名中包含relu的算子。</td></tr>
89
+ <tr><td rowspan="2">fuzz_stage</td><td rowspan="2">否</td><td>"forward"(默认)</td><td>需要进行算子<b>前向</b>计算的精度问题排查或<b>验证可疑算子。</b></td></tr>
90
+ <tr><td>"backward"</td><td>需要进行算子<b>反向</b>计算的精度问题排查,不支持仅反向验证,前向验证包括反向。</td><td></td></tr>
91
+ </table>
92
+
93
+ #### 3.2.2 选择扰动因子
94
+
95
+ <table>
96
+ <tr><th>参数</th><th>是否必选</th><th>可配置项</th><th>适用场景</th></tr>
97
+ <tr><td rowspan="6">pert_mode</td><td rowspan="6">否</td><td>"improve_precision" (默认)</td><td>(常用)(可做验证) 插桩算子可能在<b>低精度</b>下有精度问题,扰动因子会将输入的低精度向量升精度。</td></tr>
98
+ <tr><td>"bit_noise"</td><td>(常用)插桩算子可能在<b>轻微扰动</b>下暴露精度问题,扰动因子会将输入向量最后一个比特位翻转。</td></tr>
99
+ <tr><td>"add_noise"</td><td>插桩算子可能在<b>轻微扰动</b>下暴露精度问题,扰动因子会为输入向量增加一个极小值。</td></tr>
100
+ <tr><td>"change_value"</td><td>插桩算子可能存在<b>大数吃小数</b>问题,扰动因子会交换输入向量的首尾值。</td></tr>
101
+ <tr><td>"no_change"</td><td>插桩算子可能存在<b>数值稳定性</b>精度问题,扰动因子会复制原始输入。</td></tr>
102
+ <tr><td>"to_cpu"</td><td>(可做验证) 插桩算子可能在<b>同 CPU </b>精度表现不一致,扰动因子会将输入转至 CPU,需要配合 fuzz_device="cpu"使用。</td></tr>
103
+ <tr><td rowspan="2">fuzz_device</td><td rowspan="2">否</td><td>"npu" (默认)</td><td>pert_mode 不需要to cpu操作。</td></tr>
104
+ <tr><td>"cpu"</td><td>pert_mode 须配置为"to_cpu",目前仅支持"to cpu"扰动因子。</td></tr>
105
+ </table>
106
+
107
+
108
+ #### 3.2.3 选择处理方式
109
+
110
+ <table>
111
+ <tr><th>参数</th><th>是否必选</th><th>可配置项</th><th>适用场景</th></tr>
112
+ <tr><td rowspan="2">handler_type</td><td rowspan="2">否</td><td>"check"(默认)</td><td>要做精度问题算子排查,输出扰动前后不符合精度标准的算子,支持所有扰动因子。</td></tr>
113
+ <tr><td>"fix"</td><td>要做可疑算子验证,用扰动后输出替换原始输出,支持"improve_precision","to_cpu"两种扰动因子。</td></tr>
114
+ </table>
112
115
 
113
116
  ### 3.3 在模型脚本中开启工具
114
117
 
@@ -126,15 +129,17 @@ debugger.step() # 在训练循环的最后需要重置工具,非循环场景
126
129
  ```
127
130
 
128
131
  ### 3.4 启动模型训练
129
- 训练过程中出现可以通过一下日志检查工具是否正常使用
130
- | 日志级别 | 日志内容 | 检查说明 |
131
- | -------- | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
132
- | INFO | \[msprobe\] Free Benchmark: Perturbation is {扰动因子} of {算子名}. | 扰动因子与配置相符、算子名在插桩范围内 |
133
- | INFO | \[msprobe\] Free Benchmark: For {算子名},{原因}. Cancel perturbation. | 算子名在插桩范围内,但当前算子由于{原因}不支持添加扰动 |
134
- | INFO | \[msprobe\] Free benchmark: preheat sample in step {step} api_name {算子名} curr_called_seq: {当前采样数}/{总采样数}" | 仅开启预热、算子名在插桩范围内,在当前step的采样情况 |
135
- | WARNING | \[msprobe\] Free benchmark: 无标杆工具不支持当前算子的输入类型 {算子名}. | 算子名在插桩范围内,但当前算子没有可操作的输入(不存在Tensor、list类型等) |
136
-
137
- 其余日志均说明当前算子未能正常添加扰动、请检查日志信息判断是否更换扰动因子或不考虑当前算子结果。
132
+ 训练过程中出现以下日志,可以检查工具是否正常使用。
133
+
134
+ <table>
135
+ <tr><th>日志级别</th><th>日志内容</th><th>检查说明</th></tr>
136
+ <tr><td rowspan="3">INFO</td><td>[msprobe] Free Benchmark: Perturbation is {扰动因子} of {算子名}.</td><td>扰动因子与配置相符,算子名在插桩范围内。</td></tr>
137
+ <tr><td>[msprobe] Free Benchmark: For {算子名},{原因}. Cancel perturbation.</td><td>算子名在插桩范围内,但当前算子由于{原因}不支持添加扰动。</td></tr>
138
+ <tr><td>[msprobe] Free benchmark: preheat sample in step {step} api_name {算子名} curr_called_seq: {当前采样数}/{总采样数}"</td><td>仅开启预热,算子名在插桩范围内,在当前step的采样情况。</td></tr>
139
+ <tr><td>WARNING</td><td>[msprobe] Free benchmark: 无标杆工具不支持当前算子的输入类型 {算子名}.</td><td>算子名在插桩范围内,但当前算子没有可操作的输入(不存在Tensor,list类型等)。</td></tr>
140
+ </table>
141
+
142
+ 其余日志均说明当前算子未能正常添加扰动,请检查日志信息判断是否更换扰动因子或不考虑当前算子结果。
138
143
 
139
144
 
140
145
  ### 3.5 查看精度风险算子