mindstudio-probe 1.3.0__py3-none-any.whl → 8.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 (213) hide show
  1. {mindstudio_probe-1.3.0.dist-info → mindstudio_probe-8.1.1.dist-info}/METADATA +4 -2
  2. {mindstudio_probe-1.3.0.dist-info → mindstudio_probe-8.1.1.dist-info}/RECORD +204 -152
  3. msprobe/README.md +32 -1
  4. msprobe/core/__init__.py +17 -0
  5. msprobe/core/common/const.py +120 -21
  6. msprobe/core/common/exceptions.py +2 -2
  7. msprobe/core/common/file_utils.py +279 -50
  8. msprobe/core/common/framework_adapter.py +169 -0
  9. msprobe/core/common/global_lock.py +86 -0
  10. msprobe/core/common/runtime.py +25 -0
  11. msprobe/core/common/utils.py +136 -45
  12. msprobe/core/common_config.py +7 -0
  13. msprobe/core/compare/acc_compare.py +646 -428
  14. msprobe/core/compare/check.py +36 -103
  15. msprobe/core/compare/compare_cli.py +4 -0
  16. msprobe/core/compare/config.py +72 -0
  17. msprobe/core/compare/highlight.py +215 -215
  18. msprobe/core/compare/layer_mapping/layer_mapping.py +2 -0
  19. msprobe/core/compare/merge_result/merge_result.py +4 -4
  20. msprobe/core/compare/multiprocessing_compute.py +223 -110
  21. msprobe/core/compare/npy_compare.py +2 -4
  22. msprobe/core/compare/utils.py +214 -244
  23. msprobe/core/config_check/__init__.py +17 -0
  24. msprobe/{pytorch/dump/kernel_dump/kernel_config.py → core/config_check/checkers/__init__.py} +8 -16
  25. msprobe/core/config_check/checkers/base_checker.py +60 -0
  26. msprobe/core/config_check/checkers/dataset_checker.py +138 -0
  27. msprobe/core/config_check/checkers/env_args_checker.py +96 -0
  28. msprobe/core/config_check/checkers/hyperparameter_checker.py +170 -0
  29. msprobe/core/config_check/checkers/pip_checker.py +90 -0
  30. msprobe/core/config_check/checkers/random_checker.py +367 -0
  31. msprobe/core/config_check/checkers/weights_checker.py +147 -0
  32. msprobe/core/config_check/ckpt_compare/ckpt_comparator.py +74 -0
  33. msprobe/core/config_check/ckpt_compare/megatron_loader.py +302 -0
  34. msprobe/core/config_check/ckpt_compare/metrics.py +83 -0
  35. msprobe/core/config_check/ckpt_compare/name_mapping.yaml +12 -0
  36. msprobe/core/config_check/config_check_cli.py +51 -0
  37. msprobe/core/config_check/config_checker.py +100 -0
  38. msprobe/{mindspore/runtime.py → core/config_check/resource/dependency.yaml} +7 -4
  39. msprobe/core/config_check/resource/env.yaml +57 -0
  40. msprobe/core/config_check/resource/hyperparameter.yaml +21 -0
  41. msprobe/core/config_check/utils/hyperparameter_parser.py +115 -0
  42. msprobe/core/config_check/utils/utils.py +107 -0
  43. msprobe/core/data_dump/api_registry.py +67 -4
  44. msprobe/core/data_dump/data_collector.py +170 -89
  45. msprobe/core/data_dump/data_processor/base.py +72 -51
  46. msprobe/core/data_dump/data_processor/mindspore_processor.py +109 -55
  47. msprobe/core/data_dump/data_processor/pytorch_processor.py +90 -82
  48. msprobe/core/data_dump/json_writer.py +143 -27
  49. msprobe/core/debugger/precision_debugger.py +144 -0
  50. msprobe/core/grad_probe/constant.py +1 -1
  51. msprobe/core/grad_probe/grad_compare.py +1 -1
  52. msprobe/core/grad_probe/utils.py +1 -1
  53. msprobe/core/hook_manager.py +242 -0
  54. msprobe/core/monitor/anomaly_processor.py +384 -0
  55. msprobe/core/service.py +357 -0
  56. msprobe/core/single_save/__init__.py +0 -0
  57. msprobe/core/single_save/single_comparator.py +243 -0
  58. msprobe/core/single_save/single_saver.py +146 -0
  59. msprobe/docs/01.installation.md +6 -5
  60. msprobe/docs/02.config_introduction.md +79 -22
  61. msprobe/docs/03.config_examples.md +1 -0
  62. msprobe/docs/04.kernel_dump_PyTorch.md +1 -1
  63. msprobe/docs/05.data_dump_PyTorch.md +118 -49
  64. msprobe/docs/06.data_dump_MindSpore.md +167 -20
  65. msprobe/docs/07.accuracy_checker_PyTorch.md +2 -2
  66. msprobe/docs/08.accuracy_checker_online_PyTorch.md +69 -9
  67. msprobe/docs/09.accuracy_checker_MindSpore.md +18 -6
  68. msprobe/docs/10.accuracy_compare_PyTorch.md +212 -74
  69. msprobe/docs/11.accuracy_compare_MindSpore.md +87 -37
  70. msprobe/docs/12.overflow_check_PyTorch.md +2 -2
  71. msprobe/docs/13.overflow_check_MindSpore.md +2 -2
  72. msprobe/docs/14.data_parse_PyTorch.md +3 -3
  73. msprobe/docs/17.grad_probe.md +2 -1
  74. msprobe/docs/18.online_dispatch.md +2 -2
  75. msprobe/docs/19.monitor.md +90 -44
  76. msprobe/docs/21.visualization_PyTorch.md +68 -15
  77. msprobe/docs/22.visualization_MindSpore.md +71 -18
  78. msprobe/docs/25.tool_function_introduction.md +23 -22
  79. msprobe/docs/26.data_dump_PyTorch_baseline.md +14 -3
  80. msprobe/docs/27.dump_json_instruction.md +1 -1
  81. msprobe/docs/28.debugger_save_instruction.md +111 -20
  82. msprobe/docs/29.data_dump_MSAdapter.md +2 -2
  83. msprobe/docs/30.overflow_check_MSAdapter.md +2 -2
  84. msprobe/docs/31.config_check.md +95 -0
  85. msprobe/docs/32.ckpt_compare.md +69 -0
  86. msprobe/docs/33.generate_operator_MindSpore.md +181 -0
  87. msprobe/docs/34.RL_collect.md +92 -0
  88. msprobe/docs/35.nan_analyze.md +72 -0
  89. msprobe/docs/data_dump_MindSpore/data_dump_MindSpore_baseline.md +12 -1
  90. msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md +3 -1
  91. msprobe/docs/img/compare_result.png +0 -0
  92. msprobe/docs/img/save_compare_result_sample.png +0 -0
  93. msprobe/docs/img/visualization/proxy.png +0 -0
  94. msprobe/mindspore/__init__.py +1 -2
  95. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +150 -58
  96. msprobe/mindspore/api_accuracy_checker/api_runner.py +7 -3
  97. msprobe/mindspore/api_accuracy_checker/bench_functions/flash_attention_score.py +47 -69
  98. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +4 -0
  99. msprobe/mindspore/api_accuracy_checker/compute_element.py +0 -1
  100. msprobe/mindspore/api_accuracy_checker/data_manager.py +2 -2
  101. msprobe/mindspore/api_accuracy_checker/generate_op_script/op_generator.py +460 -0
  102. msprobe/mindspore/api_accuracy_checker/generate_op_script/operator_replication.template +2081 -0
  103. msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +9 -0
  104. msprobe/mindspore/api_accuracy_checker/torch_mindtorch_importer.py +2 -1
  105. msprobe/mindspore/cell_processor.py +204 -33
  106. msprobe/mindspore/code_mapping/graph_parser.py +4 -21
  107. msprobe/mindspore/common/const.py +17 -7
  108. msprobe/mindspore/common/utils.py +128 -11
  109. msprobe/mindspore/compare/common_dir_compare.py +382 -0
  110. msprobe/mindspore/compare/distributed_compare.py +2 -26
  111. msprobe/mindspore/compare/ms_compare.py +17 -405
  112. msprobe/mindspore/compare/ms_graph_compare.py +14 -5
  113. msprobe/mindspore/compare/utils.py +37 -0
  114. msprobe/mindspore/debugger/debugger_config.py +53 -3
  115. msprobe/mindspore/debugger/precision_debugger.py +72 -91
  116. msprobe/mindspore/dump/cell_dump_process.py +877 -0
  117. msprobe/mindspore/dump/cell_dump_with_insert_gradient.py +864 -0
  118. msprobe/mindspore/dump/dump_tool_factory.py +13 -5
  119. msprobe/mindspore/dump/graph_mode_cell_dump.py +139 -0
  120. msprobe/mindspore/dump/graph_tensor_dump.py +123 -0
  121. msprobe/mindspore/dump/hook_cell/api_register.py +40 -6
  122. msprobe/mindspore/dump/hook_cell/hook_cell.py +18 -7
  123. msprobe/mindspore/dump/hook_cell/ms_hook_manager.py +88 -0
  124. msprobe/mindspore/dump/hook_cell/primitive_hooks.py +8 -2
  125. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +18 -0
  126. msprobe/mindspore/dump/jit_dump.py +21 -18
  127. msprobe/mindspore/dump/kernel_kbyk_dump.py +6 -3
  128. msprobe/mindspore/dym_loader/hook_dynamic_loader.cpp +110 -0
  129. msprobe/mindspore/dym_loader/hook_dynamic_loader.h +15 -15
  130. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +12 -6
  131. msprobe/mindspore/free_benchmark/common/utils.py +1 -1
  132. msprobe/mindspore/grad_probe/global_context.py +7 -2
  133. msprobe/mindspore/grad_probe/grad_stat_csv.py +3 -2
  134. msprobe/mindspore/mindspore_service.py +114 -0
  135. msprobe/mindspore/monitor/common_func.py +52 -0
  136. msprobe/mindspore/monitor/data_writers.py +237 -0
  137. msprobe/mindspore/monitor/features.py +20 -7
  138. msprobe/mindspore/monitor/module_hook.py +281 -209
  139. msprobe/mindspore/monitor/optimizer_collect.py +334 -0
  140. msprobe/mindspore/monitor/utils.py +25 -5
  141. msprobe/mindspore/ms_config.py +16 -15
  142. msprobe/mindspore/task_handler_factory.py +5 -2
  143. msprobe/msprobe.py +19 -0
  144. msprobe/nan_analyze/__init__.py +14 -0
  145. msprobe/nan_analyze/analyzer.py +255 -0
  146. msprobe/nan_analyze/graph.py +189 -0
  147. msprobe/nan_analyze/utils.py +211 -0
  148. msprobe/pytorch/api_accuracy_checker/common/config.py +2 -2
  149. msprobe/pytorch/api_accuracy_checker/compare/compare.py +36 -34
  150. msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +20 -20
  151. msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +4 -7
  152. msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +204 -2
  153. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +12 -11
  154. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +1 -0
  155. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +8 -5
  156. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +2 -3
  157. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +29 -13
  158. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +12 -2
  159. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +45 -31
  160. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +156 -0
  161. msprobe/pytorch/attl_manager.py +65 -0
  162. msprobe/pytorch/bench_functions/npu_fusion_attention.py +27 -0
  163. msprobe/pytorch/common/utils.py +26 -14
  164. msprobe/pytorch/compare/distributed_compare.py +4 -36
  165. msprobe/pytorch/compare/pt_compare.py +13 -84
  166. msprobe/pytorch/compare/utils.py +47 -0
  167. msprobe/pytorch/debugger/debugger_config.py +34 -17
  168. msprobe/pytorch/debugger/precision_debugger.py +66 -118
  169. msprobe/pytorch/dump/module_dump/hook_wrapper.py +93 -0
  170. msprobe/pytorch/dump/module_dump/module_dump.py +11 -58
  171. msprobe/pytorch/dump/module_dump/module_processer.py +143 -113
  172. msprobe/pytorch/grad_probe/grad_stat_csv.py +3 -2
  173. msprobe/pytorch/hook_module/api_register.py +29 -5
  174. msprobe/pytorch/hook_module/hook_module.py +9 -18
  175. msprobe/pytorch/hook_module/jit_script_wrapper.py +33 -0
  176. msprobe/pytorch/hook_module/pt_hook_manager.py +68 -0
  177. msprobe/pytorch/hook_module/support_wrap_ops.yaml +22 -1
  178. msprobe/pytorch/hook_module/utils.py +28 -2
  179. msprobe/pytorch/monitor/csv2tb.py +6 -2
  180. msprobe/pytorch/monitor/data_writers.py +259 -0
  181. msprobe/pytorch/monitor/module_hook.py +227 -158
  182. msprobe/pytorch/monitor/module_metric.py +14 -0
  183. msprobe/pytorch/monitor/optimizer_collect.py +242 -270
  184. msprobe/pytorch/monitor/utils.py +16 -3
  185. msprobe/pytorch/online_dispatch/dispatch.py +4 -2
  186. msprobe/pytorch/online_dispatch/dump_compare.py +5 -2
  187. msprobe/pytorch/parse_tool/lib/utils.py +3 -3
  188. msprobe/pytorch/pt_config.py +8 -7
  189. msprobe/pytorch/pytorch_service.py +73 -0
  190. msprobe/visualization/builder/graph_builder.py +33 -13
  191. msprobe/visualization/builder/msprobe_adapter.py +24 -11
  192. msprobe/visualization/compare/graph_comparator.py +53 -45
  193. msprobe/visualization/compare/mode_adapter.py +31 -1
  194. msprobe/visualization/graph/base_node.py +3 -3
  195. msprobe/visualization/graph/graph.py +2 -2
  196. msprobe/visualization/graph_service.py +250 -103
  197. msprobe/visualization/utils.py +27 -11
  198. msprobe/mindspore/dym_loader/hook_dynamic_loader.cc +0 -106
  199. msprobe/mindspore/monitor/anomaly_detect.py +0 -404
  200. msprobe/mindspore/monitor/module_spec_verifier.py +0 -94
  201. msprobe/mindspore/service.py +0 -549
  202. msprobe/pytorch/monitor/anomaly_analyse.py +0 -201
  203. msprobe/pytorch/monitor/anomaly_detect.py +0 -410
  204. msprobe/pytorch/monitor/module_spec_verifier.py +0 -95
  205. msprobe/pytorch/monitor/unittest/test_monitor.py +0 -160
  206. msprobe/pytorch/service.py +0 -473
  207. {mindstudio_probe-1.3.0.dist-info → mindstudio_probe-8.1.1.dist-info}/LICENSE +0 -0
  208. {mindstudio_probe-1.3.0.dist-info → mindstudio_probe-8.1.1.dist-info}/WHEEL +0 -0
  209. {mindstudio_probe-1.3.0.dist-info → mindstudio_probe-8.1.1.dist-info}/entry_points.txt +0 -0
  210. {mindstudio_probe-1.3.0.dist-info → mindstudio_probe-8.1.1.dist-info}/top_level.txt +0 -0
  211. /msprobe/{mindspore → core}/compare/ms_to_pt_api.yaml +0 -0
  212. /msprobe/{mindspore/dump → core}/kernel_dump/kernel_config.py +0 -0
  213. /msprobe/{pytorch/monitor/unittest → core/monitor}/__init__.py +0 -0
@@ -0,0 +1,181 @@
1
+ # 单算子API自动生成脚本
2
+
3
+ ## 1 简介
4
+
5
+ 单算子API自动生成脚本通过提取dump数据中的可疑算子,对其进行单API复现,输出单API精度的比对结果。具体而言,该工具可以从dump数据中提取可疑API的前反向信息,根据前反向数据生成单API的前反向过程,最后通过**新精度标准比对法**<sup>a</sup>将 NPU 和 CPU 的结果进行比对,从而给出不同比对方法下的比对结果。本工具支持**随机生成模式和真实数据模式**<sup>b</sup>。
6
+
7
+ a. 在生成单API脚本时可以选择由工具构造随机数获得 dump 数据或选择真实输入的数据进行单API复现。随机生成模式(对应 task: "statistics")执行效率高,可以快速获得结果,但数据精度低,只能大致判断精度问题;真实数据模式(对应 task: "tensor")执行效率略低于随机生成模式,但是数据精度高,可以准确判断精度问题。
8
+
9
+ ## 2 使用方式
10
+
11
+ ### 前提
12
+ 1. 安装 msprobe。详见[ msprobe 安装](./01.installation.md)章节。
13
+ 2. 已完成对训练过程的dump,获得dump.json文件。
14
+ [MindSpore 场景下的数据采集](./06.data_dump_MindSpore.md)章节或[Msadapter 场景下的数据采集](./29.data_dump_MSAdapter.md)章节,注意需要配置 level="L1"。
15
+
16
+ 3. 发现某个算子疑似存在精度问题,并得知算子名,如Mint.split.1、Functional.softmax.3、Tensor.add.0、Torch.matmul.5等,要求API入参与torch场景相同。
17
+
18
+ 4.(可选)当需要使用Msadapter时,由于需要环境中同时存在 Torch 与 Msadapter,所以只支持在**安装原生Torch**的场景下通过export PYTHONPATH="xx/msadapter/build/lib"等通过**环境变量使能Msadapter的方式**的环境中进行预检,预检工具能够自动索引得到所需的 Torch 与 Msadapter环境,环境安装详细参考:[msadapter官网](https://gitee.com/mindspore/msadapter)。
19
+
20
+ ### 2.1 dump.json 示例(由dump生成)
21
+ ```
22
+ {
23
+ "task": "statistics",
24
+ "level": "L1",
25
+ "framework": "mindtorch",
26
+ "dump_data_dir": null,
27
+ "data": {
28
+ "Tensor.reshape.779.forward": {
29
+ "input_args": [
30
+ {
31
+ "type": "mindspore.Tensor",
32
+ "dtype": "BFloat16",
33
+ "shape": [
34
+ 8192,
35
+ 896
36
+ ],
37
+ "Max": 0.62890625,
38
+ "Min": -0.78515625,
39
+ "Mean": 0.00035858154296875,
40
+ "Norm": 105.0
41
+ },
42
+ {
43
+ "type": "int",
44
+ "value": -1
45
+ },
46
+ {
47
+ "type": "int",
48
+ "value": 896
49
+ }
50
+ ],
51
+ "input_kwargs": {},
52
+ "output": [
53
+ {
54
+ "type": "mindspore.Tensor",
55
+ "dtype": "BFloat16",
56
+ "shape": [
57
+ 8192,
58
+ 896
59
+ ],
60
+ "Max": 0.62890625,
61
+ "Min": -0.78515625,
62
+ "Mean": 0.00035858154296875,
63
+ "Norm": 105.0
64
+ }
65
+ ]
66
+ },
67
+ "Tensor.reshape.779.backward": {
68
+ "input": [
69
+ {
70
+ "type": "mindspore.Tensor",
71
+ "dtype": "BFloat16",
72
+ "shape": [
73
+ 8192,
74
+ 896
75
+ ],
76
+ "Max": 0.0,
77
+ "Min": 0.0,
78
+ "Mean": 0.0,
79
+ "Norm": 0.0
80
+ }
81
+ ],
82
+ "output": [
83
+ {
84
+ "type": "mindspore.Tensor",
85
+ "dtype": "BFloat16",
86
+ "shape": [
87
+ 8192,
88
+ 896
89
+ ],
90
+ "Max": 0.0,
91
+ "Min": 0.0,
92
+ "Mean": 0.0,
93
+ "Norm": 0.0
94
+ }
95
+ ]
96
+ }
97
+ }
98
+ }
99
+ ```
100
+
101
+ ### 2.2 配置config_op.json
102
+ 单API复现参数配置如下(以复现softmax算子为例):
103
+ ```
104
+ {
105
+ "dump_json_path": "./dump.json",
106
+ "api_name": "Tensor.reshape.779",
107
+ "extract_api_path": "Tensor.reshape.779",
108
+ "propagation": "backward",
109
+ "data_mode": "random_data",
110
+ "random_seed": 42,
111
+ "iter_times": 1
112
+ }
113
+ ```
114
+ **配置文件参数说明**
115
+
116
+ | 参数名称 | 解释 |
117
+ | ---------------------------- |-------------------------------------------------------------------------------------------------------------------------------------------------------|
118
+ | dump_json_path | dump.json的文件路径,包含所有dump算子的信息;如果已经提取了可疑算子并保存可以不指定。 |
119
+ | api_name | 算子名(目前MindSpore支持类型包括:Mint,Tensor,Msadapter支持类型包括:Tensor,Functional,Torch类中可自动求导api),如Mint.split.1,Functional.softmax.3、Tensor.add.0、Torch.matmul.5等。 |
120
+ | extract_api_path | 提取可疑算子的json文件路径 |
121
+ | propagation | 选择复现算子的forward还是backward,默认为forward |
122
+ | data_mode | 选择复现算子的随机数据(random_data)还是真实数据(real_data)模式,默认为random_data |
123
+ | random_seed | 仅random_data模式有效,表示手动设定的随机种子,默认为42 |
124
+ | iter_times | 仅random_data模式有效,表示单API运行的次数,由于安全相关原因,最大支持设置为1000 |
125
+
126
+ ### 2.3 运行命令生成单API脚本
127
+ config_op.json配置好后,运行如下命令:
128
+ ```
129
+ msprobe -f mindspore op_generate -i ./config_op.json -o ./
130
+ ```
131
+
132
+ **参数说明**
133
+ | 参数名称 | 解释 | 是否必选 |
134
+ | ---------------------------- | ------------------------------------------------------------ | ---------------------------------- |
135
+ | -i 或 --config_input | config_op.json的路径 | 是 |
136
+ | -o 或 --api_output_path | 单API脚本的输出路径 | 是 |
137
+
138
+ ### 2.4 运行单API脚本
139
+ 运行完op_generator.py后,会在指定路径下生成api_name.py的单API脚本,例如Mint.split.1.forward.py、Functional.softmax.3.backward.py、Tensor.add.0.forward.py、Torch.matmul.5.backward.py
140
+
141
+ 运行单API脚本即可获得不同比对方法下的比对结果
142
+ ```
143
+ python api_name.py
144
+ ```
145
+
146
+ **运行结果说明**
147
+
148
+ 单算子脚本生成到路径`./op_result_output`的 `accuracy_checking_result_{timestamp}.csv` 和 `accuracy_checking_details_{timestamp}.csv` 文件内容详情如下:
149
+
150
+ `accuracy_checking_details_{timestamp}.csv`
151
+
152
+ | 字段 | 含义 |
153
+ | ------------------- | ------------------------------------------------------------ |
154
+ | API Name | API 名称。 |
155
+ | Bench Dtype | 标杆数据的 API 数据类型。 |
156
+ | Tested Dtype | 被检验数据的 API 数据类型。 |
157
+ | Shape | API 的 Shape 信息。 |
158
+ | Cosine | 被检验数据与标杆数据的余弦相似度。 |
159
+ | MaxAbsErr | 被检验数据与标杆数据的最大绝对误差。 |
160
+ | MaxRelativeErr | 被检验数据与标杆数据的最大相对误差。 |
161
+ | Status | API 预检通过状态,pass 表示通过测试,error 表示未通过。 |
162
+ | Message | 提示信息。 |
163
+
164
+ 注意:PyTorch 无法对 dtype 为整数类型的 tensor 进行反向求导,而 MindSpore 支持。反向过程的预检仅比较 dtype 为浮点型的输出。
165
+
166
+ `accuracy_checking_result_{timestamp}.csv`
167
+
168
+ | 字段 | 含义 |
169
+ | --------------------- | ----------------- |
170
+ | API Name | API 名称。 |
171
+ | Forward Test Success | 前向 API 是否通过测试,pass 为通过,error 为错误。 |
172
+ | Backward Test Success | 反向 API 是否通过测试,pass 为通过,error 为错误,如果是空白的话代表该 API 没有反向输出。 |
173
+ | Message | 提示信息。 |
174
+
175
+ Forward Test Success 和 Backward Test Success 是否通过测试是由 `accuracy_checking_details_{timestamp}.csv` 中的余弦相似度、最大绝对误差判定结果决定的。具体规则详见 [4.1 API 预检指标](#41-api-预检指标)。
176
+ 需要注意的是 `accuracy_checking_details_{timestamp}.csv` 中可能存在一个 API 的前向(反向)有多个输出,那么每个输出记录一行,而在 `accuracy_checking_result_{timestamp}.csv` 中的结果需要该 API 的所有结果均为 pass 才能标记为 pass,只要存在一个 error 则标记 error。
177
+
178
+ ### 3.1 API 预检指标
179
+
180
+ - API 预检指标是通过对 `accuracy_checking_details_{timestamp}.csv` 中的余弦相似度、最大绝对误差的数值进行判断,得出该 API 是否符合精度标准的参考指标。
181
+ - 余弦相似度大于 0.99,并且最大绝对误差小于 0.0001,标记“pass”,否则标记为“error”。
@@ -0,0 +1,92 @@
1
+ # 强化学习数据采集
2
+
3
+ ## 介绍
4
+ 在强化学习训练过程中,往往存在多个模型(actor、reward、reference)和两个阶段(推理、训练),问题定界困难。
5
+
6
+ 本工具提供一种灵活存储强化学习训练过程中关键阶段性数据的能力,并支持对比两次采集的关键数据,以支持问题快速定界。
7
+
8
+ 常用关键数据示例:prompt、response、reward、log_prob、ref_log_probe、old_log_probe、kl_loss。
9
+
10
+
11
+ ## 安装教程
12
+
13
+ 参见 msprobe [安装教程](./01.installation.md)。
14
+
15
+ ## 使用说明
16
+
17
+ ### 数据采集
18
+
19
+ 用户识别脚本中需要采集数据的地方,然后通过插入代码的方式采集关键数据。
20
+
21
+ 当确定需要采集数据的地方,例如response,可以按如下方式对数据进行存储:
22
+ ```
23
+ from msprobe.core import SingleSave
24
+ SingleSave("./dump_path", fmk="pytorch")
25
+ SingleSave.save({"response": response})
26
+ ```
27
+ 其中"./dump_path"为输出路径,没有默认值,需要自己配置;fmk可选"pytorch"或者"mindspore",默认"pytorch"。
28
+
29
+ 其中"response"是可以任意指定的key,response是训练过程中的真实tensor变量。
30
+
31
+ 也支持一次性存储多个数据:
32
+ ```
33
+ from msprobe.core import SingleSave
34
+ SingleSave("./dump_path", fmk="pytorch")
35
+ SingleSave.save({
36
+ "prompt": prompt,
37
+ "response": response
38
+ })
39
+ ```
40
+
41
+ ### 配置保存
42
+
43
+ 当确定需要采集数据配置json的地方,可以按如下方式对配置进行存储:
44
+ ```
45
+ from msprobe.core import SingleSave
46
+ SingleSave("./dump_path")
47
+ SingleSave.save_config(configurations_json)
48
+ ```
49
+
50
+
51
+ 采集到的数据目录结构如下:
52
+ ```txt
53
+ dump_path/
54
+ ├── data/ # 固定为data
55
+ │ └── response/ # 关键数据名称,来自SingleSave.save的时候的key
56
+ │ └── step0/ # step数
57
+ │ └── rank0/ # rank数
58
+ │ └── micro_step0/ #micro_step数
59
+ | └── response0.npy #存储的关键数据的真实npy文件
60
+ | └── response0.json #存储的关键数据的统计量文件,包括tensor的最大、最小、均值、norm、shape
61
+ ├── configurations.json # 配置json文件
62
+ ```
63
+
64
+ ### 结果比对
65
+
66
+ 两次采集数据之后得到dump_path1和dump_path2,可以创建一个比对脚本,例如compare.py,将两次训练的dump_path传入:
67
+ ```
68
+ from msprobe.core import SingleComparator
69
+ SingleComparator.compare(
70
+ "dump_path1",
71
+ "dump_path2",
72
+ "output_path")
73
+ ```
74
+
75
+ 会在output_path下对每种关键数据都生成excel结果表格,比如response.xlsx,形式为关键数据的名字加上.xlsx后缀。
76
+
77
+ 表格会体现每一个对应tensor的差异,解释:
78
+
79
+ 表头 | 解释 |
80
+ |-------|---------|
81
+ | step | 训练步数 |
82
+ | rank | 卡号 |
83
+ | micro_step | 梯度累计步数 |
84
+ | id | 参数的shape |
85
+ | shape1 | dump_path1中的数据形状 |
86
+ | shape2 | dump_path2中的数据形状 |
87
+ | 相同元素百分比 | 元素相同的个数占总元素个数的百分比 |
88
+ | 首个不匹配元素索引 | 首个匹配不上的元素是第几个 |
89
+ | 最大绝对误差 | 最大绝对误差 |
90
+ | 最大相对误差 | 最大相对误差 |
91
+ | 误差在千分之一内元素占比 | 误差在千分之一内元素个数占总元素个数的百分比 |
92
+ | 误差在百分之一内元素占比 | 误差在百分之一内元素个数占总元素个数的百分比 |
@@ -0,0 +1,72 @@
1
+ # 整网首个溢出节点分析
2
+
3
+ ## 介绍
4
+ 在分析inf、nan的场景下,会采集多个rank下的多个step的dump数据,前面出现的异常会传播到同rank后续的节点,并通过通信算子传播到其他rank的后续节点中,因此如何分析首个nan出现的节点位置尤为重要。
5
+
6
+ 通过nan_analyze工具可以对pytorch的dump数据进行分析。在多卡场景下,检测到每张卡中产生inf/nan的节点。若是经过通信导致的inf/nan,可以分析并找出首个产生inf/nan的rank和节点。
7
+
8
+ ## 安装教程
9
+
10
+ 参见 msprobe [安装教程](./01.installation.md)。
11
+
12
+ ## 使用说明
13
+
14
+ 当前仅支持分析pytorch的dump数据。
15
+
16
+ ### 采集数据
17
+
18
+ 参见 [PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)。
19
+
20
+ ### 执行命令
21
+
22
+ ```commandline
23
+ msprobe -f pytorch nan_analyze -i dump_step_path -o output_dir_path
24
+ ```
25
+
26
+ | 参数 | 说明 |
27
+ |--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
28
+ | -i 或 --input_path | dump数据的目录。需指定到step层级,如`-i /xxx/dump/step0/` |
29
+ | -o 或 --output_path | 输出文件的目录,可选,不填时默认在当前目录下创建 \"./output/" 目录。 |
30
+
31
+ ### 输出文件介绍
32
+
33
+ 当日志打印
34
+ ```
35
+ Cannot find any anomaly node, no need to generate analyze file.
36
+ ```
37
+ 时,分析认为不存在异常节点,不生成分析文件。
38
+
39
+ 存在异常节点时,生成`anomaly_analyze_{timestamp}.json`文件,结构为:
40
+ ```json
41
+ {
42
+ "rank_0": [ // 卡号
43
+ {
44
+ "op_name": "Tensor.op_name.0.forward", // 节点名
45
+ "data_info": {
46
+ "input_args": [], // input_args数据
47
+ "input_kwargs": {}, // input_kwargs数据
48
+ "output": [] // output数据
49
+ },
50
+ "construct_info": [], // 节点层级数据
51
+ "stack_info": {} // 堆栈数据
52
+ }
53
+ ]
54
+ }
55
+ ```
56
+
57
+ ## 异常判定
58
+
59
+ ### 异常计算节点判定
60
+ 当某个计算节点的输入值正常,即Max或Min中不存在inf或nan,而输出值存在异常时认为从此节点开始产生了溢出,并有可能向后传递。
61
+
62
+ ### 异常通信节点判定
63
+ 通信节点按照功能分为有向节点,如`send`, `recv`, `scatter`, `gather`, `broadcast`, `reduce`等,以及无向节点,如`all_gather`, `all_reduce`, `reduce_scatter`, `all_to_all`等。
64
+
65
+ 对于有向节点,当src节点的input存在异常时,通常认为传入的数据中本身就存在异常,因此考虑异常节点发生在src节点所在rank的上一个或多个计算节点中;当src节点的input正常而output存在异常值,或dst节点的output存在异常值时,考虑是通信节点本身的操作产生了异常数据。
66
+
67
+ 对于无向节点,当节点input存在异常时,认为传入的数据中本身就存在异常,因此考虑异常节点发生在src节点所在rank的上一个或多个计算节点中;当input正常而output异常时,考虑是通信节点本身的操作产生了异常数据。
68
+
69
+ ### 顺序判定
70
+ 对于相连接的有向通信算子,认为src节点的异常发生早于dst节点;对于无向通信算子,认为异常是同时发生的。
71
+
72
+ 对于计算节点按照dump的顺序排序。
@@ -1,6 +1,17 @@
1
1
  # MindSpore 场景的精度数据采集基线
2
2
 
3
- ## "tensor"模式采集数据量参考基线
3
+ ## "statistics"模式(未开启md5)采集**时间**膨胀参考基线
4
+
5
+ 该基线为MindSpore框架下,使用"statistics"模式采集数据性能膨胀参考基线。测试了38B语言大模型在不同采集模式8卡下的性能膨胀。
6
+
7
+ | 采集模式 | 无工具 (耗时) | 加工具但未使能 Dump (耗时) | 加工具并使能 Dump (耗时) |
8
+ |:--------:|:-------------:|:--------------------:|:----------------:|
9
+ | L0 | ≈340 ms | ≈340 ms (无膨胀) | ≈1.2 s (膨胀3.5倍) |
10
+ | L1 | ≈340 ms | ≈0.7–1.2 s (膨胀2~4倍) | ≈3.8 s (膨胀11倍) |
11
+ | mix | ≈340 ms | ≈0.7–1.2 s (膨胀2~4倍) | ≈5.5 s (膨胀16倍) |
12
+
13
+
14
+ ## "tensor"模式采集**数据量**参考基线
4
15
 
5
16
  该基线为MindSpore框架下,使用"tensor"模式采集数据量参考基线。本基线测试了38B语言大模型在不同采集模式下,不同global_batch_size下,单卡和8卡下,数据量的变化。
6
17
 
@@ -51,6 +51,7 @@ debugger = PrecisionDebugger(config_path=config_path)
51
51
 
52
52
  # 设置 MindSpore 设备上下文
53
53
  context.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend", device_id=0)
54
+ print("Context set successfully. Please wait for the training task.")
54
55
 
55
56
  # 定义卷积层
56
57
  def conv_layer(in_channels, out_channels, kernel_size, stride=1, padding=0, pad_mode="valid", has_bias=True):
@@ -199,7 +200,7 @@ python alexnet_model.py
199
200
 
200
201
  ## 5. 数据分析
201
202
 
202
- 在 `dump_path` 参数指定的路径下(本例中为 `./output`),会出现如下目录结构,后续精度数据分析操作可使用 msprobe 工具的精度预检和精度比对等功能,详细流程请参见[《msprobe使用手册》](../../README.md#2-精度预检)。:
203
+ 在 `dump_path` 参数指定的路径下(本例中为 `./output`),会出现如下目录结构,后续精度数据分析操作可使用 msprobe 工具的精度预检和精度比对等功能,详细流程请参见[《msprobe使用手册》](../../README.md#2-精度预检)
203
204
 
204
205
  ```bash
205
206
  output/
@@ -208,4 +209,5 @@ output/
208
209
  ├── construct.json # level为L0时,保存Cell的层级关系信息。当前场景为空
209
210
  ├── dump.json # 保存API前反向输入输出数据的统计量信息
210
211
  └── stack.json # 保存API的调用栈
212
+ ......
211
213
  ```
Binary file
Binary file
@@ -25,5 +25,4 @@ except ImportError:
25
25
  from msprobe.mindspore.debugger.precision_debugger import PrecisionDebugger
26
26
  from msprobe.mindspore.common.utils import seed_all, MsprobeStep, MsprobeInitStep
27
27
  from msprobe.mindspore.monitor.module_hook import TrainerMon
28
-
29
- os.environ["MS_HOOK_ENABLE"] = "on"
28
+ from msprobe.mindspore.dump.graph_tensor_dump import save, save_grad