mindstudio-probe 1.1.0__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 (220) hide show
  1. {mindstudio_probe-1.1.0.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.1.0.dist-info → mindstudio_probe-1.1.1.dist-info}/WHEEL +1 -1
  4. {mindstudio_probe-1.1.0.dist-info → mindstudio_probe-1.1.1.dist-info}/entry_points.txt +0 -1
  5. msprobe/README.md +39 -3
  6. msprobe/config.json +1 -3
  7. msprobe/core/advisor/advisor.py +8 -3
  8. msprobe/core/common/const.py +113 -13
  9. msprobe/core/common/exceptions.py +25 -3
  10. msprobe/core/common/file_utils.py +150 -26
  11. msprobe/core/common/inplace_op_checker.py +15 -0
  12. msprobe/core/common/log.py +27 -9
  13. msprobe/core/common/utils.py +182 -69
  14. msprobe/core/common_config.py +44 -15
  15. msprobe/core/compare/acc_compare.py +207 -142
  16. msprobe/core/compare/check.py +2 -5
  17. msprobe/core/compare/compare_cli.py +21 -4
  18. msprobe/core/compare/highlight.py +124 -55
  19. msprobe/core/compare/layer_mapping/__init__.py +19 -0
  20. msprobe/core/compare/layer_mapping/data_scope_parser.py +235 -0
  21. msprobe/core/compare/layer_mapping/layer_mapping.py +242 -0
  22. msprobe/core/compare/layer_mapping/postprocess_pass.py +94 -0
  23. msprobe/core/compare/npy_compare.py +52 -23
  24. msprobe/core/compare/utils.py +272 -247
  25. msprobe/core/data_dump/data_collector.py +13 -11
  26. msprobe/core/data_dump/data_processor/base.py +46 -16
  27. msprobe/core/data_dump/data_processor/mindspore_processor.py +4 -4
  28. msprobe/core/data_dump/data_processor/pytorch_processor.py +156 -59
  29. msprobe/core/data_dump/scope.py +113 -34
  30. msprobe/core/grad_probe/constant.py +27 -13
  31. msprobe/core/grad_probe/grad_compare.py +18 -1
  32. msprobe/core/grad_probe/utils.py +30 -2
  33. msprobe/core/overflow_check/abnormal_scene.py +185 -0
  34. msprobe/core/overflow_check/api_info.py +55 -0
  35. msprobe/core/overflow_check/checker.py +138 -0
  36. msprobe/core/overflow_check/filter.py +157 -0
  37. msprobe/core/overflow_check/ignore_rules.yaml +55 -0
  38. msprobe/core/overflow_check/level.py +22 -0
  39. msprobe/core/overflow_check/utils.py +28 -0
  40. msprobe/docs/01.installation.md +10 -0
  41. msprobe/docs/02.config_introduction.md +49 -22
  42. msprobe/docs/03.config_examples.md +2 -9
  43. msprobe/docs/04.kernel_dump_PyTorch.md +73 -0
  44. msprobe/docs/05.data_dump_PyTorch.md +3 -1
  45. msprobe/docs/06.data_dump_MindSpore.md +157 -90
  46. msprobe/docs/07.accuracy_checker_PyTorch.md +12 -12
  47. msprobe/docs/08.accuracy_checker_online_PyTorch.md +1 -6
  48. msprobe/docs/09.accuracy_checker_MindSpore.md +44 -8
  49. msprobe/docs/10.accuracy_compare_PyTorch.md +19 -13
  50. msprobe/docs/11.accuracy_compare_MindSpore.md +104 -13
  51. msprobe/docs/12.overflow_check_PyTorch.md +1 -1
  52. msprobe/docs/13.overflow_check_MindSpore.md +6 -6
  53. msprobe/docs/15.free_benchmarking_PyTorch.md +4 -5
  54. msprobe/docs/16.free_benchmarking_MindSpore.md +56 -37
  55. msprobe/docs/17.grad_probe.md +5 -6
  56. msprobe/docs/19.monitor.md +468 -0
  57. msprobe/docs/20.monitor_performance_baseline.md +52 -0
  58. msprobe/docs/21.visualization_PyTorch.md +386 -0
  59. msprobe/docs/22.visualization_MindSpore.md +384 -0
  60. msprobe/docs/23.tool_function_introduction.md +28 -0
  61. msprobe/docs/FAQ.md +3 -0
  62. msprobe/docs/data_dump_Mindspore/dynamic_graph_quick_start_example.md +211 -0
  63. msprobe/docs/img/compare_result.png +0 -0
  64. msprobe/docs/img/monitor/cpu_info.png +0 -0
  65. msprobe/mindspore/__init__.py +15 -0
  66. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +113 -145
  67. msprobe/mindspore/api_accuracy_checker/api_info.py +21 -6
  68. msprobe/mindspore/api_accuracy_checker/api_runner.py +43 -18
  69. msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +21 -7
  70. msprobe/mindspore/api_accuracy_checker/checker_support_api.yaml +77 -0
  71. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +63 -1
  72. msprobe/mindspore/api_accuracy_checker/compute_element.py +59 -24
  73. msprobe/mindspore/api_accuracy_checker/data_manager.py +264 -0
  74. msprobe/mindspore/api_accuracy_checker/main.py +27 -3
  75. msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +206 -0
  76. msprobe/mindspore/api_accuracy_checker/multi_data_manager.py +58 -0
  77. msprobe/mindspore/api_accuracy_checker/type_mapping.py +22 -5
  78. msprobe/mindspore/api_accuracy_checker/utils.py +34 -17
  79. msprobe/mindspore/cell_processor.py +33 -12
  80. msprobe/mindspore/common/const.py +33 -13
  81. msprobe/mindspore/common/log.py +5 -9
  82. msprobe/mindspore/common/utils.py +43 -4
  83. msprobe/mindspore/compare/distributed_compare.py +22 -22
  84. msprobe/mindspore/compare/ms_compare.py +271 -248
  85. msprobe/mindspore/compare/ms_graph_compare.py +81 -47
  86. msprobe/mindspore/debugger/debugger_config.py +4 -1
  87. msprobe/mindspore/debugger/precision_debugger.py +7 -1
  88. msprobe/mindspore/dump/dump_tool_factory.py +3 -1
  89. msprobe/mindspore/dump/hook_cell/api_registry.py +12 -2
  90. msprobe/mindspore/dump/hook_cell/primitive_hooks.py +13 -16
  91. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +25 -0
  92. msprobe/mindspore/dump/jit_dump.py +17 -5
  93. msprobe/mindspore/dump/kernel_graph_dump.py +2 -4
  94. msprobe/mindspore/dump/kernel_kbyk_dump.py +2 -4
  95. msprobe/mindspore/dym_loader/hook_dynamic_loader.cc +140 -0
  96. msprobe/mindspore/dym_loader/hook_dynamic_loader.h +53 -0
  97. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +145 -39
  98. msprobe/mindspore/free_benchmark/common/handler_params.py +1 -2
  99. msprobe/mindspore/free_benchmark/common/utils.py +19 -4
  100. msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +0 -204
  101. msprobe/mindspore/free_benchmark/handler/base_handler.py +3 -3
  102. msprobe/mindspore/free_benchmark/handler/check_handler.py +4 -5
  103. msprobe/mindspore/free_benchmark/handler/fix_handler.py +4 -4
  104. msprobe/mindspore/free_benchmark/handler/handler_factory.py +4 -4
  105. msprobe/mindspore/free_benchmark/perturbation/add_noise.py +2 -2
  106. msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +15 -6
  107. msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +4 -4
  108. msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +2 -2
  109. msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +13 -6
  110. msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +2 -2
  111. msprobe/mindspore/free_benchmark/self_check_tool_factory.py +2 -2
  112. msprobe/mindspore/grad_probe/global_context.py +28 -8
  113. msprobe/mindspore/grad_probe/grad_analyzer.py +27 -13
  114. msprobe/mindspore/grad_probe/grad_monitor.py +16 -1
  115. msprobe/mindspore/grad_probe/grad_stat_csv.py +33 -5
  116. msprobe/mindspore/grad_probe/hook.py +24 -10
  117. msprobe/mindspore/grad_probe/utils.py +18 -5
  118. msprobe/mindspore/ms_config.py +22 -15
  119. msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +2 -4
  120. msprobe/mindspore/runtime.py +15 -0
  121. msprobe/mindspore/service.py +36 -30
  122. msprobe/mindspore/task_handler_factory.py +15 -0
  123. msprobe/msprobe.py +24 -7
  124. msprobe/pytorch/__init__.py +3 -2
  125. msprobe/pytorch/api_accuracy_checker/common/config.py +62 -0
  126. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +3 -4
  127. msprobe/pytorch/api_accuracy_checker/generate_op_script/config_op.json +9 -0
  128. msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +454 -0
  129. msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +365 -0
  130. msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +6 -1
  131. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +19 -14
  132. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +13 -9
  133. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +77 -53
  134. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +15 -4
  135. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +9 -24
  136. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +4 -12
  137. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/dump_dispatch.py +9 -4
  138. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +3 -11
  139. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +2 -2
  140. msprobe/pytorch/bench_functions/confusion_transpose.py +5 -1
  141. msprobe/pytorch/bench_functions/matmul_backward.py +12 -0
  142. msprobe/pytorch/bench_functions/npu_fusion_attention.py +100 -6
  143. msprobe/pytorch/bench_functions/rotary_mul.py +4 -0
  144. msprobe/pytorch/bench_functions/swiglu.py +10 -2
  145. msprobe/pytorch/common/parse_json.py +6 -6
  146. msprobe/pytorch/common/utils.py +56 -5
  147. msprobe/pytorch/compare/distributed_compare.py +8 -9
  148. msprobe/pytorch/compare/pt_compare.py +8 -6
  149. msprobe/pytorch/debugger/debugger_config.py +19 -15
  150. msprobe/pytorch/dump/kernel_dump/kernel_config.py +33 -0
  151. msprobe/pytorch/free_benchmark/common/constant.py +15 -0
  152. msprobe/pytorch/free_benchmark/common/counter.py +15 -0
  153. msprobe/pytorch/free_benchmark/common/enums.py +15 -0
  154. msprobe/pytorch/free_benchmark/common/params.py +8 -1
  155. msprobe/pytorch/free_benchmark/common/utils.py +26 -4
  156. msprobe/pytorch/free_benchmark/compare/grad_saver.py +20 -3
  157. msprobe/pytorch/free_benchmark/compare/single_benchmark.py +2 -0
  158. msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +3 -1
  159. msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +6 -4
  160. msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +2 -0
  161. msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +4 -0
  162. msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +10 -0
  163. msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +6 -5
  164. msprobe/pytorch/grad_probe/grad_monitor.py +23 -6
  165. msprobe/pytorch/grad_probe/grad_stat_csv.py +40 -10
  166. msprobe/pytorch/hook_module/support_wrap_ops.yaml +1 -0
  167. msprobe/pytorch/hook_module/wrap_functional.py +14 -12
  168. msprobe/pytorch/module_processer.py +2 -5
  169. msprobe/pytorch/monitor/anomaly_analyse.py +201 -0
  170. msprobe/pytorch/monitor/anomaly_detect.py +340 -0
  171. msprobe/pytorch/monitor/distributed/__init__.py +0 -0
  172. msprobe/pytorch/monitor/distributed/distributed_ops.yaml +19 -0
  173. msprobe/pytorch/monitor/distributed/stack_blacklist.yaml +5 -0
  174. msprobe/pytorch/monitor/distributed/wrap_distributed.py +272 -0
  175. msprobe/pytorch/monitor/features.py +108 -0
  176. msprobe/pytorch/monitor/module_hook.py +870 -0
  177. msprobe/pytorch/monitor/module_metric.py +193 -0
  178. msprobe/pytorch/monitor/module_spec_verifier.py +93 -0
  179. msprobe/pytorch/monitor/optimizer_collect.py +295 -0
  180. msprobe/pytorch/monitor/unittest/__init__.py +0 -0
  181. msprobe/pytorch/monitor/unittest/test_monitor.py +145 -0
  182. msprobe/pytorch/monitor/utils.py +250 -0
  183. msprobe/pytorch/monitor/visualizer.py +59 -0
  184. msprobe/pytorch/online_dispatch/__init__.py +2 -3
  185. msprobe/pytorch/online_dispatch/compare.py +29 -38
  186. msprobe/pytorch/online_dispatch/dispatch.py +50 -25
  187. msprobe/pytorch/online_dispatch/dump_compare.py +21 -9
  188. msprobe/pytorch/online_dispatch/single_compare.py +53 -32
  189. msprobe/pytorch/online_dispatch/torch_ops_config.yaml +1 -1
  190. msprobe/pytorch/online_dispatch/utils.py +49 -21
  191. msprobe/pytorch/parse_tool/lib/compare.py +12 -18
  192. msprobe/pytorch/parse_tool/lib/config.py +1 -1
  193. msprobe/pytorch/parse_tool/lib/parse_tool.py +1 -2
  194. msprobe/pytorch/parse_tool/lib/utils.py +16 -35
  195. msprobe/pytorch/parse_tool/lib/visualization.py +2 -0
  196. msprobe/pytorch/pt_config.py +31 -8
  197. msprobe/pytorch/service.py +15 -5
  198. msprobe/visualization/__init__.py +14 -0
  199. msprobe/visualization/builder/__init__.py +14 -0
  200. msprobe/visualization/builder/graph_builder.py +165 -0
  201. msprobe/visualization/builder/msprobe_adapter.py +205 -0
  202. msprobe/visualization/compare/__init__.py +14 -0
  203. msprobe/visualization/compare/graph_comparator.py +130 -0
  204. msprobe/visualization/compare/mode_adapter.py +211 -0
  205. msprobe/visualization/graph/__init__.py +14 -0
  206. msprobe/visualization/graph/base_node.py +124 -0
  207. msprobe/visualization/graph/graph.py +200 -0
  208. msprobe/visualization/graph/node_colors.py +95 -0
  209. msprobe/visualization/graph/node_op.py +39 -0
  210. msprobe/visualization/graph_service.py +214 -0
  211. msprobe/visualization/utils.py +232 -0
  212. mindstudio_probe-1.1.0.dist-info/RECORD +0 -287
  213. msprobe/docs/04.acl_config_examples.md +0 -78
  214. msprobe/mindspore/compare/layer_mapping.py +0 -146
  215. msprobe/mindspore/compare/modify_mapping.py +0 -107
  216. msprobe/mindspore/free_benchmark/decorator/dec_forward.py +0 -57
  217. msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +0 -122
  218. {mindstudio_probe-1.1.0.dist-info → mindstudio_probe-1.1.1.dist-info}/LICENSE +0 -0
  219. {mindstudio_probe-1.1.0.dist-info → mindstudio_probe-1.1.1.dist-info}/top_level.txt +0 -0
  220. /msprobe/{mindspore/free_benchmark/decorator → pytorch/monitor}/__init__.py +0 -0
@@ -6,30 +6,66 @@
6
6
 
7
7
  a. 支持 Mindspore 版本:2.4;
8
8
 
9
- b. 在预检 dump 时可以选择由工具构造随机数进行输入获得 dump 数据或选择获取真实输入数据进行预检 dump 操作。随机生成模式执行效率高,可以快速获得结果,但数据精度低,只能大致判断精度问题;真实数据模式执行效率略低于随机生成模式,但是数据精度高,可以准确判断精度问题。
9
+ b. 在预检时可以由工具构造随机数据或者获取真实dump数据进行预检操作。随机生成模式执行效率高,可以快速获得结果,但结果准确度低,只能大致判断精度问题;真实数据模式执行效率略低于随机生成模式,并且需要较大磁盘空间存放待预检数据,但是结果准确度高,可以准确判断精度问题。
10
10
 
11
11
  ## 2 离线预检流程
12
12
 
13
13
  操作流程如下:
14
14
 
15
- 1. 在 NPU GPU 环境下分别安装 msprobe。详见[ msprobe 安装](./01.installation.md)章节。
15
+ 1. 在 NPU 环境下安装 msprobe。详见[ msprobe 安装](./01.installation.md)章节。
16
16
  2. 在 NPU 训练脚本内添加 msprobe 工具 dump 接口 PrecisionDebugger,采集待预检数据。详见 [MindSpore 场景下的数据采集](./06.data_dump_MindSpore.md)章节,注意需要配置 level="L1"。
17
17
  3. 执行预检操作,查看预检结果文件,分析预检不达标的 API。
18
18
 
19
19
  ## 3 离线预检操作指导
20
20
 
21
- 命令如下:
21
+ ### 3.1 使用 run_ut 执行预检
22
+
23
+ 将 API 信息输入到 run_ut 模块进行精度检测并比对,运行如下命令:
24
+
25
+
22
26
  ```bash
23
27
  msprobe -f mindspore run_ut -api_info ./dump.json -o ./checker_result
24
28
  ```
25
29
 
26
- | 参数名称 | 说明 |参数类型 | 是否必选 |
27
- | ---------------------------- | --------------------------------------|---------------------- | ---------------------------------- |
28
- | -api_info 或 --api_info_file | 指定 API 信息文件 dump.json| str | 是 |
29
- | -o 或 --out_path | 指定预检结果存盘路径,默认“./”。 | str | 否 |
30
+ | 参数名称 | 说明 |参数类型 | 是否必选 |
31
+ | ---------------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------- | ---------------------------------- |
32
+ | -api_info 或 --api_info_file | 指定 API 信息文件 dump.json。对其中的mint api以及部分Tensor api进行预检 | str | 是 |
33
+ | -o 或 --out_path | 指定预检结果存盘路径,默认“./”。 | str | 否 |
34
+ | -csv_path 或 --result_csv_path | 指定本次运行中断时生成的 `accuracy_checking_result_{timestamp}.csv` 文件路径,执行 run_ut 中断时,若想从中断处继续执行,配置此参数即可。需要指定为上次中断的 `accuracy_checking_result_{timestamp}.csv` 文件。详见 [3.3 断点续检](#33-断点续检)。 | str | 否 |
30
35
 
31
36
  预检执行结果包括 `accuracy_checking_result_{timestamp}.csv` 和 `accuracy_checking_details_{timestamp}.csv` 两个文件。`accuracy_checking_result_{timestamp}.csv` 属于 API 级,标明每个 API 是否通过测试。建议用户先查看 `accuracy_checking_result_{timestamp}.csv` 文件,对于其中没有通过测试的或者特定感兴趣的 API,根据其 API Name 字段在 `accuracy_checking_details_{timestamp}.csv` 中查询其各个输出的达标情况以及比较指标。详细介绍请参见 [4 预检结果](#4-预检结果)。
32
37
 
38
+ ### 3.2 使用 multi_run_ut 执行多线程预检
39
+
40
+ multi_run_ut 脚本,可以并行在多个Device执行 run_ut 操作,从而减少预检耗时。示例如下:
41
+
42
+ ```bash
43
+ msprobe -f mindspore multi_run_ut -api_info ./dump.json -d 0 1 2 3
44
+ ```
45
+
46
+ | 参数名称 | 说明 |参数类型 | 是否必选 |
47
+ | ---------------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------- | ---------------------------------- |
48
+ | -api_info 或 --api_info_file | 指定 API 信息文件 dump.json。对其中的mint api以及部分Tensor api进行预检 | str | 是 |
49
+ | -o 或 --out_path | 指定预检结果存盘路径,默认“./”。 | str | 否 |
50
+ | -csv_path 或 --result_csv_path | 指定本次运行中断时生成的 `accuracy_checking_result_{timestamp}.csv` 文件路径,执行 run_ut 中断时,若想从中断处继续执行,配置此参数即可。需要指定为上次中断的 `accuracy_checking_result_{timestamp}.csv` 文件。详见 [3.3 断点续检](#33-断点续检)。 | str | 否 |
51
+ | -d 或 --device | 指定 Device ID,选择 UT 代码运行所在的卡,默认值为 0,支持同时指定 0 ~ Device数量的N - 1 ,例如 0 1 2 3 4 | List[int] | 否 |
52
+
53
+
54
+
55
+
56
+ ### 3.3 断点续检
57
+
58
+ 断点续检操作通过如下命令执行:
59
+
60
+ ```bash
61
+ msprobe -f mindspore run_ut -api_info ./dump.json -csv_path xxx/accuracy_checking_result_{timestamp}.csv
62
+ ```
63
+
64
+ 精度预检 run_ut 过程中,若因环境、数据量过大等原因导致预检进程中断,那么当用户解决这些问题后,重新执行 run_ut 操作,可以通过断点续检操作继续前面未完成的预检,会在 -csv_path 指定的 `accuracy_checking_result_{timestamp}.csv` 文件以及对应的 `accuracy_checking_details_{timestamp}.csv` 文件中继续写入后续的结果,不会重新创建结果文件。
65
+
66
+ 须指定为上次预检中断的 `accuracy_checking_result_{timestamp}.csv` 文件。请勿修改 `accuracy_checking_result_{timestamp}.csv` 和 `accuracy_checking_details_{timestamp}.csv` 文件以及文件名,否则不对断点续检的结果负责。
67
+
68
+
33
69
  ## 4 预检结果
34
70
 
35
71
  精度预检生成的 `accuracy_checking_result_{timestamp}.csv` 和 `accuracy_checking_details_{timestamp}.csv` 文件内容详情如下:
@@ -46,7 +82,7 @@ msprobe -f mindspore run_ut -api_info ./dump.json -o ./checker_result
46
82
  | MaxAbsErr | 被检验数据与标杆数据的最大绝对误差。 |
47
83
  | MaxRelativeErr | 被检验数据与标杆数据的最大相对误差。 |
48
84
  | Status | API 预检通过状态,pass 表示通过测试,error 表示未通过。 |
49
- | message | 提示信息。 |
85
+ | Message | 提示信息。 |
50
86
 
51
87
  注意:PyTorch 无法对 dtype 为整数类型的 tensor 进行反向求导,而 MindSpore 支持。反向过程的预检仅比较 dtype 为浮点型的输出。
52
88
 
@@ -47,12 +47,12 @@ msprobe -f pytorch compare -i ./compare.json -o ./output -s
47
47
 
48
48
  | 参数名 | 说明 | 是否必选 |
49
49
  |-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
50
- | -i 或 --input_path | 指定[比对文件](#211-比对文件),str 类型。 | 是 |
51
- | -o 或 --output_path | 配置比对结果文件存盘目录,str 类型。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。 | |
52
- | -s 或 --stack_mode | 配置 stack_mode 的开关,bool 类型。仅当[比对文件](#214-比对文件)配置 stack_path 需要开启。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
50
+ | -i 或 --input_path | 指定[比对文件](#214-比对文件),str 类型。 | 是 |
51
+ | -o 或 --output_path | 配置比对结果文件存盘目录,str 类型,默认在当前目录创建output目录。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。 | |
52
+ | -s 或 --stack_mode | 比对结果展示调用栈信息(NPU_Stack_Info)的开关,bool 类型。单卡场景开启时,需要使用[比对文件](#214-比对文件)的单卡场景配置stack_path指定stack.json文件,才能生成详细调用栈信息,否则在比对时会报错;多卡场景开启时,npu_dump目录下需要存在stack.json文件,才能生成详细调用栈信息,否则在比对时会报错。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
53
53
  | -c 或 --compare_only | 仅比对开关,bool 类型。该参数默认未配置,会启用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。通过配置该参数取消自动精度分析,仅输出比对结果表格。 | 否 |
54
54
  | -f 或 --fuzzy_match | 模糊匹配,bool 类型。开启后,对于网络中同一层级且命名仅调用次数不同的 API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
55
- | -dm或--data_mapping | 自定义映射关系比对。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件](#215-自定义映射文件)。仅[API和模块无法自动匹配场景](#213-API和模块无法自动匹配场景)需要配置。仅支持逐卡比对,即使用[比对文件](#214-比对文件)的单卡场景示例。 | 否 |
55
+ | -dm或--data_mapping | 自定义映射关系比对。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件](#215-自定义映射文件)。仅[API和模块无法自动匹配场景](#213-api和模块无法自动匹配场景)需要配置。仅支持逐卡比对,即使用[比对文件](#214-比对文件)的单卡场景示例。 | 否 |
56
56
 
57
57
  #### 2.1.2 整网比对场景
58
58
 
@@ -60,11 +60,11 @@ msprobe -f pytorch compare -i ./compare.json -o ./output -s
60
60
 
61
61
  支持单卡和多卡,可同时比对多卡的 dump 数据。多机场景需要每个设备单独执行比对操作。
62
62
 
63
- 1. 配置[config.json](https://gitee.com/ascend/mstt/blob/8914fbb31ff6da3898c3bb7b97ba99e23b0f1d38/debug/accuracy_tools/msprobe/config.json)文件。
63
+ 1. 配置[config.json](../config.json)文件。
64
64
 
65
65
  2. 参见 [PyTorch 场景下的数据采集](./05.data_dump_PyTorch.md)章节完成 CPU 或 GPU 与 NPU 的精度数据 dump。
66
66
 
67
- 3. 创建[比对文件](#211-比对文件)。
67
+ 3. 创建[比对文件](#214-比对文件)。
68
68
 
69
69
  4. 运行命令:
70
70
 
@@ -78,11 +78,11 @@ msprobe -f pytorch compare -i ./compare.json -o ./output -s
78
78
 
79
79
  当存在无法自动匹配的API和模块时,则用户可以通过提供自定义映射关系的配置文件来告知工具可匹配的API或模块,进行比对。
80
80
 
81
- 1. [config.json](https://gitee.com/ascend/mstt/blob/8914fbb31ff6da3898c3bb7b97ba99e23b0f1d38/debug/accuracy_tools/msprobe/config.json)文件level配置为L0或L1、task配置为tensor或statistics并指定需要dump的API或模块名。
81
+ 1. [config.json](../config.json)文件level配置为L0或L1、task配置为tensor或statistics并指定需要dump的API或模块名。
82
82
 
83
83
  2. 参见[PyTorch 场景下的数据采集](./05.data_dump_PyTorch.md)章节完成 CPU 或 GPU 与 NPU 的精度数据 dump。
84
84
 
85
- 3. 创建[比对文件](#211-比对文件)(单卡场景示例)。
85
+ 3. 创建[比对文件](#214-比对文件)(单卡场景示例)。
86
86
 
87
87
  4. 运行命令:
88
88
 
@@ -145,7 +145,7 @@ msprobe -f pytorch compare -i ./compare.json -o ./output -s
145
145
 
146
146
  冒号左侧和右侧分别为PyTorch框架不同版本或不同芯片环境的API的名称和module模块名称。
147
147
 
148
- API和模块名称请从《[PyTorch 场景的精度数据采集](https://gitee.com/ascend/mstt/blob/8914fbb31ff6da3898c3bb7b97ba99e23b0f1d38/debug/accuracy_tools/msprobe/docs/05.data_dump_PyTorch.md)》中的dump.json文件获取。
148
+ API和模块名称请从《[PyTorch 场景的精度数据采集](05.data_dump_PyTorch.md)》中的dump.json文件获取。
149
149
 
150
150
  文件内容示例:
151
151
 
@@ -231,7 +231,7 @@ PyTorch 精度比对是以 CPU 或 GPU 的计算结果为标杆,通过计算
231
231
 
232
232
  - `compare_result_{timestamp}.xlsx` 文件列出了所有执行精度比对的 API 详细信息和比对结果,示例如下:
233
233
 
234
- ![compare_result](https://gitee.com/cai-weiwei1989/att_ptdbg/raw/master/debug/accuracy_tools/ptdbg_ascend/doc/img/compare_result.png)
234
+ ![compare_result](./img/compare_result.png)
235
235
 
236
236
  - **提示**:比对结果通过颜色标记、比对结果(Result)、计算精度达标情况(Accuracy Reached no Not)、错误信息提示(Err_Message)定位可疑算子,但鉴于每种指标都有对应的判定标准,还需要结合实际情况进行判断。
237
237
 
@@ -251,14 +251,18 @@ PyTorch 精度比对是以 CPU 或 GPU 的计算结果为标杆,通过计算
251
251
 
252
252
  统计量有 4 种:最大值(max)、最小值(min)、平均值(mean)和 L2-范数(L2 norm)。
253
253
 
254
- |dump 数据模式|Cosine (tensor 余弦相似度)|MaxAbsErr (tensor 最大绝对误差)|MaxRelativeErr (tensor 最大相对误差)|One Thousandth Err Ratio (tensor 相对误差小于千分之一的比例)|Five Thousandth Err Ratio (tensor 相对误差小于千分之五的比例)|NPU 和 bench 的统计量绝对误差 (max, min, mean, L2 norm) diff| NPU 和 bench 的统计量相对误差 (max, min, mean, L2 norm) RelativeErr |NPU 和 bench 的统计量 (max, min, mean, L2 norm)|NPU MD5 (NPU 数据 MD5 值)|BENCH MD5 (bench 数据 MD5 值)|Result (比对结果)|Accuracy Reached or Not (计算精度是否达标)|Err_message (错误信息提示)|NPU_Stack_Info (堆栈信息)|Data_Name (NPU 真实数据名)|
254
+ |dump 数据模式|Cosine (tensor 余弦相似度)|MaxAbsErr (tensor 最大绝对误差)|MaxRelativeErr (tensor 最大相对误差)|One Thousandth Err Ratio (tensor 相对误差小于千分之一的比例)|Five Thousandth Err Ratio (tensor 相对误差小于千分之五的比例)|NPU 和 bench 的统计量绝对误差 (max, min, mean, L2 norm) diff| NPU 和 bench 的统计量相对误差 (max, min, mean, L2 norm) RelativeErr |NPU 和 bench 的统计量 (max, min, mean, L2 norm)|NPU MD5 (NPU 数据 CRC-32 值)|BENCH MD5 (bench 数据 CRC-32 值)|Result (比对结果)|Accuracy Reached or Not (计算精度是否达标)|Err_message (错误信息提示)|NPU_Stack_Info (堆栈信息)|Data_Name (NPU 真实数据名)|
255
255
  |:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
256
256
  |真实数据模式|√|√|√|√|√|||√||||√|√|√|√|
257
257
  |统计数据模式||||||√|√|√|||√||√|√||
258
258
  |MD5 模式|||||||||√|√|√|||√||
259
259
 
260
+ 上表中NPU_Stack_Info字段需要配置-s参数生成。
261
+
260
262
  ### 3.2 颜色标记——真实数据模式、统计数据模式
261
263
 
264
+ 在比对结果中的Err_message列呈现比对结果颜色标记的原因,具体含义如下:
265
+
262
266
  红色标记情况:
263
267
  1. 一个 API 或模块的 One Thousandth Err Ratio 的 input > 0.9 同时 output < 0.6(真实数据模式);
264
268
  2. 一个 API 或模块的 output 的最大值相对误差 (Max diff 除以 max(0.01, Bench max)) > 0.5(统计数据模式);
@@ -279,8 +283,8 @@ PyTorch 精度比对是以 CPU 或 GPU 的计算结果为标杆,通过计算
279
283
  3. N/A 情况:API 没有匹配上。
280
284
 
281
285
  MD5 模式:
282
- 1. Pass 情况:NPU 与标杆的 MD5 值一致,即 API 数据完全一致;
283
- 2. Different 情况:NPU 与标杆的 MD5 值不一致,即 API 数据不完全一致;
286
+ 1. Pass 情况:NPU 与标杆的 CRC-32 值一致,即 API 数据完全一致;
287
+ 2. Different 情况:NPU 与标杆的 CRC-32 值不一致,即 API 数据不完全一致;
284
288
  3. N/A 情况:API 没有匹配上。
285
289
 
286
290
  ### 3.4 判断计算精度达标情况(Accuracy Reached or Not)——真实数据模式
@@ -314,6 +318,8 @@ MD5 模式:
314
318
  9. "Dtype of NPU and bench Tensor do not match.":NPU 和 Bench 数据的数据类型不同(真实数据模式);
315
319
  10. "":除以上情况的其余情况(真实数据模式、统计数据模式)。
316
320
 
321
+ 除以上错误信息提示外,异常数据颜色高亮标记的原因叠加呈现于此列。
322
+
317
323
  ### 3.6 计算精度评价指标分析
318
324
 
319
325
  1. Cosine:通过计算两个向量的余弦值来判断其相似度,数值越接近于 1 说明计算出的两个张量越相似,实际可接受阈值为大于 0.99。在计算中可能会存在 nan,主要由于可能会出现其中一个向量为 0。
@@ -33,14 +33,16 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
33
33
  | 参数名 | 说明 | 是否必选 |
34
34
  | -------------------- | ------------------------------------------------------------ | -------- |
35
35
  | -i或--input_path | 指定比对文件。比对文件内容及示例请参见[比对文件](#31-比对文件)或[比对文件(kernel)](#32-比对文件kernel)(比对文件(kernel)仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | 是 |
36
- | -o或--output_path | 配置比对结果文件存盘目录。文件名称基于时间戳自动生成,格式为:<br> `compare_result_{timestamp}.xlsx`<br/> `compare_result_{rank_id}_{step_id}_{timestamp}.xlsx`(仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | |
37
- | -s或--stack_mode | 配置stack_mode的开关。仅当[比对文件](#31-比对文件)配置"stack_path"需要开启。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
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
38
  | -c或--compare_only | 仅比对开关,bool 类型。该参数默认未配置,会启用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。通过配置该参数取消自动精度分析,仅输出比对结果表格。 | 否 |
39
39
  | -f或--fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
40
- | -am或--api_mapping | 跨框架比对。配置该参数时表示开启跨框架API比对功能。仅[跨框架的API比对](#25-跨框架的api比对)场景需要配置。 | 否 |
41
- | -cm或--cell_mapping | 跨框架比对。配置该参数时表示开启跨框架cell模块比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(cell)](#33-自定义映射文件cell)。仅[跨框架的cell模块比对](#26-跨框架的cell模块比对)场景需要配置。 | 否 |
42
- | -dm或--data_mapping | 跨框架比对。配置该参数时表示开启跨框架API或模块的比对功能,需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(API和模块)](#34-自定义映射文件api和模块)。仅[跨框架的API或模块比对](#27-跨框架的api或模块比对)场景需要配置。 | 否 |
43
- | -lm或--layer_mapping | 跨框架比对。配置该参数时表示开启跨框架Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#35-自定义映射文件layer)。仅[跨框架的Layer层比对](#28-跨框架的layer层比对)场景需要配置。 | 否 |
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名称需要完全相同才能匹配得上。
44
46
 
45
47
  ### 2.2 不同版本下的全量API比对
46
48
 
@@ -102,6 +104,15 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
102
104
  msprobe -f mindspore compare -i ./compare.json -o ./output -s -am
103
105
  ```
104
106
 
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
+
105
116
  5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
106
117
 
107
118
  ### 2.6 跨框架的cell模块比对
@@ -124,7 +135,8 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
124
135
  msprobe -f mindspore compare -i ./compare.json -o ./output -s -cm cell_mapping.yaml
125
136
  ```
126
137
 
127
- cell_mapping.yaml文件配置请参见[自定义映射文件(cell)](#33-自定义映射文件cell)。
138
+ cell_mapping.yaml文件配置请参见[自定义映射文件(cell)](#34-自定义映射文件cell)。
139
+ 不传入cell_mapping.yaml的情况下仅将Cell改成Module后进行匹配;传入cell_mapping.yaml的情况下将按照cell_mapping.yaml的内容进行匹配。
128
140
 
129
141
  5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
130
142
 
@@ -144,7 +156,7 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
144
156
  msprobe -f mindspore compare -i ./compare.json -o ./output -s -dm data_mapping.yaml
145
157
  ```
146
158
 
147
- data_mapping.yaml文件配置请参见[自定义映射文件(all)](#34-自定义映射文件all)。
159
+ data_mapping.yaml文件配置请参见[自定义映射文件(all)](#35-自定义映射文件api和模块)。
148
160
 
149
161
  5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
150
162
 
@@ -164,7 +176,7 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
164
176
  msprobe -f mindspore compare -i ./compare.json -o ./output -s -lm layer_mapping.yaml
165
177
  ```
166
178
 
167
- layer_mapping.yaml文件配置请参见[自定义映射文件(Layer)](#35-自定义映射文件layer)。
179
+ layer_mapping.yaml文件配置请参见[自定义映射文件(Layer)](#36-自定义映射文件layer)。
168
180
 
169
181
  5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
170
182
 
@@ -184,6 +196,14 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
184
196
  }
185
197
  ```
186
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
+ ```
187
207
 
188
208
  **参数说明**
189
209
 
@@ -232,7 +252,78 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
232
252
  | rank_id | 配置比对的Rank ID。npu_path和bench_path目录下的dump文件需要存在对应Rank的数据。默认为空,表示比对所有Rank。可配置一个或多个Rank,多个Rank ID用逗号隔开,例如:"rank_id": [1,2,3]。数据类型:list[int]。 | 否 |
233
253
  | step_id | 配置比对的Step ID。npu_path和bench_path目录下的dump文件需要存在对应Step的数据。默认为空,表示比对所有Step。可配置一个或多个Step,多个Step ID用逗号隔开,例如:"step_id": [1,2,3]。数据类型:list[int]。 | 否 |
234
254
 
235
- ### 3.3 自定义映射文件(cell
255
+ ### 3.3 自定义映射文件(API
256
+
257
+ 文件名格式:\*.yaml,*为文件名,可自定义。
258
+
259
+ 文件内容格式:
260
+
261
+ ```yaml
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}
284
+ ```
285
+
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 |
299
+
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)
236
327
 
237
328
  文件名格式:\*.yaml,*为文件名,可自定义。
238
329
 
@@ -253,7 +344,7 @@ fc2.Dense: fc2.Linear
253
344
  conv1.Conv2d: conv3.Conv2d
254
345
  ```
255
346
 
256
- ### 3.4 自定义映射文件(API和模块)
347
+ ### 3.5 自定义映射文件(API和模块)
257
348
 
258
349
  文件名格式:\*.yaml,*为文件名,可自定义。
259
350
 
@@ -289,7 +380,7 @@ API和模块名称在dump.json文件中的“data_name”字段展示,如下
289
380
 
290
381
  ![pt_dump](./img/pt_dump.png)
291
382
 
292
- ### 3.5 自定义映射文件(Layer)
383
+ ### 3.6 自定义映射文件(Layer)
293
384
 
294
385
  文件名格式:\*.yaml,*为文件名,可自定义。
295
386
 
@@ -330,4 +421,4 @@ yaml文件中只需配置MindSpore与PyTorch模型代码中功能一致但名称
330
421
 
331
422
  模型代码示例:
332
423
 
333
- ![ms_dump](./img/ms_layer.png)
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 级别(支持的API类型为ops、Tensor、mint和mint.nn.functional,不支持Primitive和Jit类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-结果文件介绍)章节。
@@ -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": [],
@@ -98,14 +96,15 @@ D-->config.json配置
98
96
  <tr><th>参数</th><th>是否必选</th><th>可配置项</th><th>适用场景</th></tr>
99
97
  <tr><td rowspan="6">pert_mode</td><td rowspan="6">否</td><td>"improve_precision" (默认)</td><td>(常用)(可做验证) 插桩算子可能在<b>低精度</b>下有精度问题,扰动因子会将输入的低精度向量升精度。</td></tr>
100
98
  <tr><td>"bit_noise"</td><td>(常用)插桩算子可能在<b>轻微扰动</b>下暴露精度问题,扰动因子会将输入向量最后一个比特位翻转。</td></tr>
101
- <tr><td>"add_noise"</td><td>插桩算子可能在<b>轻微扰动</b>下暴露精度问题,扰动因子会为输入向量增加一个极小。</td></tr>
102
- <tr><td>"change_value"</td><td>插桩算子可能存在<b>大数吃小数</b>问题,扰动因子会交换输入向量的首尾。</td></tr>
103
- <tr><td>"no_change"</td><td>插桩算子可能存在<b>数值稳定性</b>精度问题,扰动因子会复制原始输。</td></tr>
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>
104
102
  <tr><td>"to_cpu"</td><td>(可做验证) 插桩算子可能在<b>同 CPU </b>精度表现不一致,扰动因子会将输入转至 CPU,需要配合 fuzz_device="cpu"使用。</td></tr>
105
103
  <tr><td rowspan="2">fuzz_device</td><td rowspan="2">否</td><td>"npu" (默认)</td><td>pert_mode 不需要to cpu操作。</td></tr>
106
104
  <tr><td>"cpu"</td><td>pert_mode 须配置为"to_cpu",目前仅支持"to cpu"扰动因子。</td></tr>
107
105
  </table>
108
106
 
107
+
109
108
  #### 3.2.3 选择处理方式
110
109
 
111
110
  <table>
@@ -13,6 +13,7 @@
13
13
  * **验证低精度可疑 API**,确认升精度后是否对模型 Loss 有影响。
14
14
  * 该工具的约束
15
15
  * 仅支持 MindSpore 动态图场景。支持的 API 类型为 ops、Tensor、mint 和 mint.nn.functional 类的非 inplace 计算 API,不支持 Primitive 和 Jit 类 API。
16
+ * 仅支持 输入输出向量为浮点数类型(BF16、FP16、FP32、FP64)的 API 比对。
16
17
  * 建议配置白名单(设置 list),控制对少量 API 进行无标杆比对。比对 API 越多,性能和显存损耗越大。
17
18
 
18
19
  ## 2 工具实现原理
@@ -79,40 +80,57 @@ D-->config.json配置
79
80
  用户需根据自己的使用场景,对照[工具实现原理](#2-工具实现原理)中几个关键步骤进行配置
80
81
  #### 3.2.1 确定比对范围
81
82
 
82
- | 相关参数名 | 是否必选 | 可配置项 | 适用场景 |
83
- | ---------- | -------- | ----------------- | ------------------------------------------------------------------------------------------- |
84
- | list | 可选 | | 需要通过指定 API 名来限制比对API个数 如:\["mindspore.ops.bmm"\] 会只对mindspore.ops.bmm API进行比对|
85
- | fuzz_stage | 可选 | "forward"(默认) | 需要进行 API **前向**计算的精度问题排查或验证|
83
+ <table>
84
+ <tr><th>参数</th><th>是否必选</th><th>可配置项</th><th>适用场景</th></tr>
85
+ <tr><td>list</td><td>否</td><td>自定义</td><td>需要通过指定 API 名来限制比对API个数 如:["mindspore.ops.bmm"] 会只对mindspore.ops.bmm API进行比对。</td></tr>
86
+ <tr><td rowspan="2">fuzz_stage</td><td rowspan="2">否</td><td>"forward"(默认)</td><td>需要进行 API <b>前向</b>计算的精度问题排查或验证。</td></tr>
87
+ <tr><td>"backward"</td><td>需要进行 API <b>反向</b>计算的精度问题排查,不支持反向验证(前向验证包括反向)。</td></tr>
88
+ </table>
86
89
 
87
- #### 3.2.2. 选择扰动因子
90
+ #### 3.2.2 选择扰动因子
88
91
 
89
- | 相关参数 | 是否必选 | 可配置项 | 适用场景 |
90
- | ----------- | -------- | ---------------------------- | -------------------------------------------------------------------------------------------------------- |
91
- | pert_mode | 可选 | "improve_precision" (默认) | (常用)(可做验证) API 可能在**低精度**下有精度问题,扰动因子会将输入的低精度向量升精度 |
92
- | | | "add_noise" | API 可能在**轻微扰动**下暴露精度问题,扰动因子会为输入向量增加一个极小值 |
93
- | | | "bit_noise" | API 可能在**轻微扰动**下暴露精度问题,扰动因子会翻转输入向量的最后一个比特位。不支持BF16类型向量 |
94
- | | | "no_change" | API 可能存在**数值稳定性**精度问题,扰动因子会复制原始输入|
95
- | | | "change_value" | API 可能存在**大数吃小数**问题,扰动因子会交换输入向量的首尾值 |
92
+ <table>
93
+ <tr><th>参数</th><th>是否必选</th><th>可配置项</th><th>适用场景</th></tr>
94
+ <tr><td rowspan="5">pert_mode</td><td rowspan="5">否</td><td>"improve_precision" (默认)</td><td>(常用)(可做验证) API 可能在<b>低精度</b>下有精度问题,扰动因子会将输入的低精度向量升精度。</td></tr>
95
+ <tr><td>"add_noise"</td><td>API 可能在<b>轻微扰动</b>下暴露精度问题,扰动因子会为输入向量增加一个极小值。</td></tr>
96
+ <tr><td>"bit_noise"</td><td>API 可能在<b>轻微扰动</b>下暴露精度问题,扰动因子会翻转输入向量的最后一个比特位。不支持BF16类型向量。</td></tr>
97
+ <tr><td>"no_change"</td><td>API 可能存在<b>数值稳定性</b>精度问题,扰动因子会复制原始输入。</td></tr>
98
+ <tr><td>"change_value"</td><td>API 可能存在<b>大数吃小数</b>问题,扰动因子会交换输入向量的首尾值。</td></tr>
99
+ </table>
96
100
 
97
- #### 3.2.3. 选择处理方式
98
- | 相关参数名 | 是否必选 | 可配置项 | 适用场景 |
99
- | ------------ | -------- | ----------------- | ----------------------------------------------------------------------------------------- |
100
- | handler_type | 可选 | "check" (默认) | 要做精度问题 API 排查,输出扰动前后不符合精度标准的 API,支持所有扰动因子 |
101
- | | | "fix" | 要做可疑 API 验证,用扰动后输出替换原始输出,仅支持 "improve_precision" 扰动因子 |
101
+ #### 3.2.3 选择处理方式
102
+
103
+ <table>
104
+ <tr><th>参数</th><th>是否必选</th><th>可配置项</th><th>适用场景</th></tr>
105
+ <tr><td rowspan="2">handler_type</td><td rowspan="2">否</td><td>"check"(默认)</td><td>要做精度问题 API 排查,输出扰动前后不符合精度标准的 API,支持所有扰动因子。</td></tr>
106
+ <tr><td>"fix"</td><td>要做可疑 API 验证,用扰动后输出替换原始输出,仅支持 "improve_precision" 扰动因子。</td></tr>
107
+ </table>
102
108
 
103
109
  ### 3.3 在模型脚本中开启工具
104
110
 
105
111
  通过 PrecisionDebugger 统一接口开启工具,示例如下:
106
112
 
107
113
  ```python
108
- from msprobe.mindspore import PrecisionDebugger
114
+ import mindspore as ms
115
+ ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
116
+
117
+ # 其他模块的导入
118
+ # ...
109
119
 
120
+ from msprobe.mindspore import PrecisionDebugger
110
121
  debugger = PrecisionDebugger(config_path='./config.json')
111
- ...
112
- debugger.start() # 一般在训练循环开头启动工具
113
- ... # 循环体
114
- debugger.stop() # 一般在训练循环末尾结束工具
115
- debugger.step() # 在训练循环的最后需要重置工具,非循环场景不需要
122
+
123
+ # 模型、损失函数的定义以及初始化等操作
124
+ # ...
125
+ model = Network()
126
+
127
+ # 数据集迭代的地方往往是模型开始训练的地方
128
+ for step, (input_ids, input_position, attention_mask) in enumerate(dataset.create_tuple_iterator()):
129
+ debugger.start() # 一般在训练循环开头启动工具
130
+ # 单步训练逻辑
131
+ # ...
132
+ debugger.stop() # 一般在训练循环末尾结束工具
133
+ debugger.step() # 在训练循环的最后需要重置工具,非循环场景不需要
116
134
  ```
117
135
 
118
136
  ### 3.4 查看精度风险算子
@@ -121,20 +139,21 @@ check 模式下,若存在不符合精度标准的 API,则工具会在 dump_p
121
139
 
122
140
  | 字段 | 说明 |
123
141
  | ------------ | ---------------------------------------------------------------------------------------- |
124
- | rank | Rank ID,int 类型 |
125
- | pert_mode | 扰动因子的类型,string 类型 |
126
- | stage | 前/反向,string 类型 |
127
- | step | 迭代数,int 类型 |
128
- | api_name | API 名称,string 类型 |
129
- | max_rel | 输出对比最大相对误差,float 类型 |
130
- | dtype | 输入的 dtype,string 类型 |
131
- | shape | 输入的 shape,tuple 类型 |
132
- | output_index | 如果输出为列表或元组,其中一个元素检测不一致,则会有该元素的 index,否则为空,int 类型 |
142
+ | rank | Rank ID,int 类型。 |
143
+ | pert_mode | 扰动因子的类型,string 类型。 |
144
+ | stage | 前/反向,string 类型。 |
145
+ | step | 迭代数,int 类型。 |
146
+ | api_name | API 名称,string 类型。 |
147
+ | max_rel | 输出对比最大相对误差,float 类型。 |
148
+ | dtype | 输入的 dtype,string 类型。 |
149
+ | shape | 输入的 shape,tuple 类型。 |
150
+ | output_index | 如果输出为列表或元组,其中一个元素检测不一致,则会有该元素的 index,否则为空,int 类型。 |
133
151
 
134
152
  无标杆比对使用的精度标准如下:
135
153
 
136
- | 输出dtype | 相对误差阈值 |
137
- | ----------------- | ------------ |
138
- | mindspore.float16 | 0.002 |
139
- | mindspore.float32 | 0.0002 |
140
- | 其他 | 0.0002 |
154
+ | 输出dtype | 相对误差阈值 |
155
+ | ------------------ | ------------ |
156
+ | mindspore.bfloat16 | 0.004 |
157
+ | mindspore.float16 | 0.002 |
158
+ | mindspore.float32 | 0.0002 |
159
+ | mindspore.float64 | 0.0002 |