mindstudio-probe 1.2.2__py3-none-any.whl → 8.1.0__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 (261) hide show
  1. {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/METADATA +4 -3
  2. {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/RECORD +243 -191
  3. msprobe/README.md +57 -21
  4. msprobe/core/__init__.py +17 -0
  5. msprobe/core/common/const.py +224 -82
  6. msprobe/core/common/decorator.py +50 -0
  7. msprobe/core/common/exceptions.py +5 -3
  8. msprobe/core/common/file_utils.py +274 -40
  9. msprobe/core/common/framework_adapter.py +169 -0
  10. msprobe/core/common/global_lock.py +86 -0
  11. msprobe/core/common/runtime.py +25 -0
  12. msprobe/core/common/utils.py +148 -72
  13. msprobe/core/common_config.py +7 -0
  14. msprobe/core/compare/acc_compare.py +640 -462
  15. msprobe/core/compare/check.py +36 -107
  16. msprobe/core/compare/compare_cli.py +4 -0
  17. msprobe/core/compare/config.py +72 -0
  18. msprobe/core/compare/highlight.py +217 -215
  19. msprobe/core/compare/layer_mapping/layer_mapping.py +4 -1
  20. msprobe/core/compare/merge_result/merge_result.py +12 -6
  21. msprobe/core/compare/multiprocessing_compute.py +227 -107
  22. msprobe/core/compare/npy_compare.py +32 -16
  23. msprobe/core/compare/utils.py +218 -244
  24. msprobe/{mindspore/runtime.py → core/config_check/__init__.py} +2 -4
  25. msprobe/{pytorch/dump/kernel_dump/kernel_config.py → core/config_check/checkers/__init__.py} +8 -16
  26. msprobe/core/config_check/checkers/base_checker.py +60 -0
  27. msprobe/core/config_check/checkers/dataset_checker.py +138 -0
  28. msprobe/core/config_check/checkers/env_args_checker.py +96 -0
  29. msprobe/core/config_check/checkers/hyperparameter_checker.py +170 -0
  30. msprobe/core/config_check/checkers/pip_checker.py +90 -0
  31. msprobe/core/config_check/checkers/random_checker.py +367 -0
  32. msprobe/core/config_check/checkers/weights_checker.py +147 -0
  33. msprobe/core/config_check/ckpt_compare/ckpt_comparator.py +74 -0
  34. msprobe/core/config_check/ckpt_compare/megatron_loader.py +302 -0
  35. msprobe/core/config_check/ckpt_compare/metrics.py +83 -0
  36. msprobe/core/config_check/ckpt_compare/name_mapping.yaml +12 -0
  37. msprobe/core/config_check/config_check_cli.py +51 -0
  38. msprobe/core/config_check/config_checker.py +100 -0
  39. msprobe/{pytorch/parse.py → core/config_check/resource/dependency.yaml} +7 -4
  40. msprobe/core/config_check/resource/env.yaml +57 -0
  41. msprobe/core/config_check/resource/hyperparameter.yaml +21 -0
  42. msprobe/core/config_check/utils/hyperparameter_parser.py +115 -0
  43. msprobe/core/config_check/utils/utils.py +107 -0
  44. msprobe/core/data_dump/api_registry.py +239 -0
  45. msprobe/core/data_dump/data_collector.py +36 -9
  46. msprobe/core/data_dump/data_processor/base.py +74 -53
  47. msprobe/core/data_dump/data_processor/mindspore_processor.py +119 -78
  48. msprobe/core/data_dump/data_processor/pytorch_processor.py +134 -96
  49. msprobe/core/data_dump/json_writer.py +146 -57
  50. msprobe/core/debugger/precision_debugger.py +143 -0
  51. msprobe/core/grad_probe/constant.py +2 -1
  52. msprobe/core/grad_probe/grad_compare.py +2 -2
  53. msprobe/core/grad_probe/utils.py +1 -1
  54. msprobe/core/hook_manager.py +242 -0
  55. msprobe/core/monitor/anomaly_processor.py +384 -0
  56. msprobe/core/overflow_check/abnormal_scene.py +2 -0
  57. msprobe/core/service.py +356 -0
  58. msprobe/core/single_save/__init__.py +0 -0
  59. msprobe/core/single_save/single_comparator.py +243 -0
  60. msprobe/core/single_save/single_saver.py +157 -0
  61. msprobe/docs/01.installation.md +6 -5
  62. msprobe/docs/02.config_introduction.md +89 -30
  63. msprobe/docs/03.config_examples.md +1 -0
  64. msprobe/docs/04.kernel_dump_PyTorch.md +1 -1
  65. msprobe/docs/05.data_dump_PyTorch.md +184 -50
  66. msprobe/docs/06.data_dump_MindSpore.md +193 -28
  67. msprobe/docs/07.accuracy_checker_PyTorch.md +13 -3
  68. msprobe/docs/08.accuracy_checker_online_PyTorch.md +72 -10
  69. msprobe/docs/09.accuracy_checker_MindSpore.md +19 -7
  70. msprobe/docs/10.accuracy_compare_PyTorch.md +266 -102
  71. msprobe/docs/11.accuracy_compare_MindSpore.md +117 -43
  72. msprobe/docs/12.overflow_check_PyTorch.md +5 -3
  73. msprobe/docs/13.overflow_check_MindSpore.md +6 -4
  74. msprobe/docs/14.data_parse_PyTorch.md +4 -10
  75. msprobe/docs/17.grad_probe.md +2 -1
  76. msprobe/docs/18.online_dispatch.md +3 -3
  77. msprobe/docs/19.monitor.md +211 -103
  78. msprobe/docs/21.visualization_PyTorch.md +100 -28
  79. msprobe/docs/22.visualization_MindSpore.md +103 -31
  80. msprobe/docs/23.generate_operator_PyTorch.md +9 -9
  81. msprobe/docs/25.tool_function_introduction.md +23 -22
  82. msprobe/docs/26.data_dump_PyTorch_baseline.md +14 -3
  83. msprobe/docs/27.dump_json_instruction.md +278 -8
  84. msprobe/docs/28.debugger_save_instruction.md +111 -20
  85. msprobe/docs/28.kernel_dump_MindSpore.md +1 -1
  86. msprobe/docs/29.data_dump_MSAdapter.md +229 -0
  87. msprobe/docs/30.overflow_check_MSAdapter.md +31 -0
  88. msprobe/docs/31.config_check.md +95 -0
  89. msprobe/docs/32.ckpt_compare.md +69 -0
  90. msprobe/docs/33.generate_operator_MindSpore.md +190 -0
  91. msprobe/docs/34.RL_collect.md +92 -0
  92. msprobe/docs/35.nan_analyze.md +72 -0
  93. msprobe/docs/FAQ.md +3 -11
  94. msprobe/docs/data_dump_MindSpore/data_dump_MindSpore_baseline.md +12 -1
  95. msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md +3 -1
  96. msprobe/docs/img/compare_result.png +0 -0
  97. msprobe/docs/img/merge_result.png +0 -0
  98. msprobe/docs/img/save_compare_result_sample.png +0 -0
  99. msprobe/docs/img/visualization/proxy.png +0 -0
  100. msprobe/docs/img/visualization/vis_browser_1.png +0 -0
  101. msprobe/docs/img/visualization/vis_match_info.png +0 -0
  102. msprobe/docs/img/visualization/vis_precision_info.png +0 -0
  103. msprobe/docs/img/visualization/vis_search_info.png +0 -0
  104. msprobe/docs/img/visualization/vis_show_info.png +0 -0
  105. msprobe/docs/img/visualization/vis_showcase.png +0 -0
  106. msprobe/docs/img/visualization/vis_unmatch_info.png +0 -0
  107. msprobe/mindspore/__init__.py +3 -3
  108. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +151 -55
  109. msprobe/mindspore/api_accuracy_checker/api_runner.py +25 -11
  110. msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +2 -1
  111. msprobe/mindspore/api_accuracy_checker/bench_functions/flash_attention_score.py +580 -0
  112. msprobe/mindspore/api_accuracy_checker/bench_functions/fusion_operator.py +41 -0
  113. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +4 -0
  114. msprobe/mindspore/api_accuracy_checker/data_manager.py +4 -3
  115. msprobe/mindspore/api_accuracy_checker/generate_op_script/config_op.json +9 -0
  116. msprobe/mindspore/api_accuracy_checker/generate_op_script/op_generator.py +451 -0
  117. msprobe/mindspore/api_accuracy_checker/generate_op_script/operator_replication.template +2081 -0
  118. msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +11 -1
  119. msprobe/mindspore/api_accuracy_checker/torch_mindtorch_importer.py +2 -1
  120. msprobe/mindspore/cell_processor.py +204 -33
  121. msprobe/mindspore/code_mapping/graph_parser.py +4 -21
  122. msprobe/mindspore/common/const.py +73 -2
  123. msprobe/mindspore/common/utils.py +157 -29
  124. msprobe/mindspore/compare/common_dir_compare.py +382 -0
  125. msprobe/mindspore/compare/distributed_compare.py +2 -26
  126. msprobe/mindspore/compare/ms_compare.py +18 -398
  127. msprobe/mindspore/compare/ms_graph_compare.py +20 -10
  128. msprobe/mindspore/compare/utils.py +37 -0
  129. msprobe/mindspore/debugger/debugger_config.py +59 -7
  130. msprobe/mindspore/debugger/precision_debugger.py +83 -90
  131. msprobe/mindspore/dump/cell_dump_process.py +902 -0
  132. msprobe/mindspore/dump/cell_dump_with_insert_gradient.py +889 -0
  133. msprobe/mindspore/dump/dump_tool_factory.py +18 -8
  134. msprobe/mindspore/dump/graph_mode_cell_dump.py +139 -0
  135. msprobe/mindspore/dump/graph_tensor_dump.py +123 -0
  136. msprobe/mindspore/dump/hook_cell/api_register.py +176 -0
  137. msprobe/mindspore/dump/hook_cell/hook_cell.py +22 -12
  138. msprobe/mindspore/dump/hook_cell/ms_hook_manager.py +88 -0
  139. msprobe/mindspore/dump/hook_cell/primitive_hooks.py +8 -2
  140. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +42 -26
  141. msprobe/mindspore/dump/jit_dump.py +35 -27
  142. msprobe/mindspore/dump/kernel_kbyk_dump.py +6 -3
  143. msprobe/mindspore/dym_loader/hook_dynamic_loader.cpp +110 -0
  144. msprobe/mindspore/dym_loader/hook_dynamic_loader.h +15 -16
  145. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +22 -12
  146. msprobe/mindspore/free_benchmark/common/utils.py +1 -1
  147. msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +4 -2
  148. msprobe/mindspore/free_benchmark/self_check_tool_factory.py +6 -3
  149. msprobe/mindspore/grad_probe/global_context.py +9 -2
  150. msprobe/mindspore/grad_probe/grad_analyzer.py +2 -1
  151. msprobe/mindspore/grad_probe/grad_stat_csv.py +3 -2
  152. msprobe/mindspore/grad_probe/hook.py +2 -4
  153. msprobe/mindspore/mindspore_service.py +111 -0
  154. msprobe/mindspore/monitor/common_func.py +52 -0
  155. msprobe/mindspore/monitor/data_writers.py +237 -0
  156. msprobe/mindspore/monitor/distributed/wrap_distributed.py +1 -1
  157. msprobe/mindspore/monitor/features.py +13 -1
  158. msprobe/mindspore/monitor/module_hook.py +568 -444
  159. msprobe/mindspore/monitor/optimizer_collect.py +331 -0
  160. msprobe/mindspore/monitor/utils.py +71 -9
  161. msprobe/mindspore/ms_config.py +16 -15
  162. msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +5 -3
  163. msprobe/mindspore/task_handler_factory.py +5 -2
  164. msprobe/msprobe.py +19 -0
  165. msprobe/nan_analyze/__init__.py +14 -0
  166. msprobe/nan_analyze/analyzer.py +255 -0
  167. msprobe/nan_analyze/graph.py +189 -0
  168. msprobe/nan_analyze/utils.py +211 -0
  169. msprobe/pytorch/api_accuracy_checker/common/config.py +2 -2
  170. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +3 -6
  171. msprobe/pytorch/api_accuracy_checker/compare/compare.py +36 -34
  172. msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +15 -13
  173. msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +206 -4
  174. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +9 -9
  175. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +6 -5
  176. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +31 -9
  177. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +28 -20
  178. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +3 -1
  179. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +29 -13
  180. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +12 -2
  181. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +45 -31
  182. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +154 -0
  183. msprobe/pytorch/attl_manager.py +65 -0
  184. msprobe/pytorch/bench_functions/moe_gating_top_k_softmax.py +6 -0
  185. msprobe/pytorch/bench_functions/npu_fusion_attention.py +27 -0
  186. msprobe/pytorch/common/utils.py +53 -19
  187. msprobe/pytorch/compare/distributed_compare.py +4 -36
  188. msprobe/pytorch/compare/pt_compare.py +13 -84
  189. msprobe/pytorch/compare/utils.py +47 -0
  190. msprobe/pytorch/debugger/debugger_config.py +34 -17
  191. msprobe/pytorch/debugger/precision_debugger.py +50 -96
  192. msprobe/pytorch/dump/module_dump/hook_wrapper.py +93 -0
  193. msprobe/pytorch/dump/module_dump/module_dump.py +15 -61
  194. msprobe/pytorch/dump/module_dump/module_processer.py +150 -114
  195. msprobe/pytorch/free_benchmark/common/utils.py +1 -1
  196. msprobe/pytorch/free_benchmark/compare/single_benchmark.py +1 -1
  197. msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +3 -3
  198. msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +3 -3
  199. msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +1 -1
  200. msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +1 -1
  201. msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +1 -1
  202. msprobe/pytorch/function_factory.py +1 -1
  203. msprobe/pytorch/grad_probe/grad_monitor.py +2 -2
  204. msprobe/pytorch/grad_probe/grad_stat_csv.py +3 -2
  205. msprobe/pytorch/hook_module/api_register.py +155 -0
  206. msprobe/pytorch/hook_module/hook_module.py +18 -22
  207. msprobe/pytorch/hook_module/jit_script_wrapper.py +33 -0
  208. msprobe/pytorch/hook_module/pt_hook_manager.py +68 -0
  209. msprobe/pytorch/hook_module/register_optimizer_hook.py +2 -1
  210. msprobe/pytorch/hook_module/support_wrap_ops.yaml +193 -75
  211. msprobe/pytorch/hook_module/utils.py +28 -2
  212. msprobe/pytorch/monitor/csv2tb.py +14 -4
  213. msprobe/pytorch/monitor/data_writers.py +259 -0
  214. msprobe/pytorch/monitor/distributed/wrap_distributed.py +8 -2
  215. msprobe/pytorch/monitor/module_hook.py +336 -241
  216. msprobe/pytorch/monitor/module_metric.py +17 -0
  217. msprobe/pytorch/monitor/optimizer_collect.py +244 -224
  218. msprobe/pytorch/monitor/utils.py +84 -4
  219. msprobe/pytorch/online_dispatch/compare.py +0 -2
  220. msprobe/pytorch/online_dispatch/dispatch.py +13 -2
  221. msprobe/pytorch/online_dispatch/dump_compare.py +8 -2
  222. msprobe/pytorch/online_dispatch/utils.py +3 -0
  223. msprobe/pytorch/parse_tool/lib/interactive_cli.py +1 -6
  224. msprobe/pytorch/parse_tool/lib/utils.py +5 -4
  225. msprobe/pytorch/pt_config.py +16 -11
  226. msprobe/pytorch/pytorch_service.py +70 -0
  227. msprobe/visualization/builder/graph_builder.py +69 -10
  228. msprobe/visualization/builder/msprobe_adapter.py +24 -12
  229. msprobe/visualization/compare/graph_comparator.py +63 -51
  230. msprobe/visualization/compare/mode_adapter.py +22 -20
  231. msprobe/visualization/graph/base_node.py +11 -4
  232. msprobe/visualization/graph/distributed_analyzer.py +1 -10
  233. msprobe/visualization/graph/graph.py +2 -13
  234. msprobe/visualization/graph/node_op.py +1 -2
  235. msprobe/visualization/graph_service.py +251 -104
  236. msprobe/visualization/utils.py +26 -44
  237. msprobe/mindspore/dump/hook_cell/api_registry.py +0 -207
  238. msprobe/mindspore/dump/hook_cell/wrap_api.py +0 -212
  239. msprobe/mindspore/dym_loader/hook_dynamic_loader.cc +0 -140
  240. msprobe/mindspore/monitor/anomaly_detect.py +0 -404
  241. msprobe/mindspore/monitor/module_spec_verifier.py +0 -94
  242. msprobe/mindspore/service.py +0 -543
  243. msprobe/pytorch/hook_module/api_registry.py +0 -166
  244. msprobe/pytorch/hook_module/wrap_distributed.py +0 -79
  245. msprobe/pytorch/hook_module/wrap_functional.py +0 -66
  246. msprobe/pytorch/hook_module/wrap_npu_custom.py +0 -85
  247. msprobe/pytorch/hook_module/wrap_tensor.py +0 -69
  248. msprobe/pytorch/hook_module/wrap_torch.py +0 -84
  249. msprobe/pytorch/hook_module/wrap_vf.py +0 -60
  250. msprobe/pytorch/monitor/anomaly_analyse.py +0 -201
  251. msprobe/pytorch/monitor/anomaly_detect.py +0 -410
  252. msprobe/pytorch/monitor/module_spec_verifier.py +0 -95
  253. msprobe/pytorch/monitor/unittest/test_monitor.py +0 -160
  254. msprobe/pytorch/service.py +0 -470
  255. {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/LICENSE +0 -0
  256. {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/WHEEL +0 -0
  257. {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/entry_points.txt +0 -0
  258. {mindstudio_probe-1.2.2.dist-info → mindstudio_probe-8.1.0.dist-info}/top_level.txt +0 -0
  259. /msprobe/{mindspore → core}/compare/ms_to_pt_api.yaml +0 -0
  260. /msprobe/{mindspore/dump → core}/kernel_dump/kernel_config.py +0 -0
  261. /msprobe/{pytorch/monitor/unittest → core/monitor}/__init__.py +0 -0
@@ -10,26 +10,26 @@
10
10
  要求:
11
11
 
12
12
  - PyTorch场景:torch不低于**2.0**
13
- - MindSpore场景:mindspore不低于**2.4.10**,仅支持**MindSpore动态图**,暂不支持**msadapter**套件
13
+ - MindSpore场景:mindspore不低于**2.4.10**,仅支持**MindSpore动态图**,已支持**msadapter**套件
14
14
 
15
15
  ## 功能介绍
16
16
  下表中字段为训练状态轻量化监控工具的完整功能点:
17
17
 
18
18
  | 功能 | 说明 | 支持场景 |
19
- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------ |
19
+ | ------------------------------------------------------------ | ------------------------------------------------------------ | ----------------- |
20
20
  | [权重监控](#权重监控) | 开启权重监控 | PyTorch、MindSpore |
21
21
  | [权重梯度监控](#权重梯度监控) | 开启权重梯度监控 | PyTorch、MindSpore |
22
22
  | [激活值监控](#激活值监控) | 开启激活值监控 | PyTorch、MindSpore |
23
23
  | [优化器状态监控](#优化器状态监控) | 开启优化器状态监控 | PyTorch、MindSpore |
24
+ | [采集module堆栈信息](#采集module堆栈信息) | 采集监控的第一个 step 的 module 对应的堆栈信息辅助问题定位 | PyTorch、MindSpore |
24
25
  | [指定监控对象](#指定监控对象) | 指定监控的nn.Module(nn.Cell)及对应的输入输出 | PyTorch、MindSpore |
25
- | [打印模型结构](#打印模型结构) | 打印模型结构 | PyTorch |
26
- | [Module全量监控](#Module全量监控) | 对全量module的输入输出做监控 | PyTorch、MindSpore |
27
- | [Parameter全量监控](#Parameter全量监控) | 对全量Parameter的输入输出做监控 | PyTorch、MindSpore |
28
- | [输出格式和统计量](#输出格式和统计量) | format PyTorch支持`csv`、`tensorboard`和`api`,MindSpore仅支持`csv`,`ops`均支持,`ndigits`仅PyTorch支持 | PyTorch、MindSpore |
29
- | [梯度异常时序判断](#梯度异常时序判断) | 梯度异常时自动梯度落盘 | PyTorch |
30
- | [csv格式数据转tensorboard可视化显示](#csv格式数据转tensorboard可视化显示) | 将csv转为tensorboard文件显示 | PyTorch |
31
- | [动态启停](#动态启停) | 训练过程中动态修改配置开启监控 | PyTorch |
32
- | [功能重载](#功能重载) | 训练中开启激活值监控。待废弃,请使用动态启停功能代替。 | PyTorch |
26
+ | [打印模型结构](#打印模型结构) | 打印模型结构 | PyTorch |
27
+ | [输出格式和统计量](#输出格式和统计量) | format PyTorch支持`csv`、`tensorboard`和`api`,MindSpore仅支持`csv`,`ops`、`ndigits`均支持 | PyTorch、MindSpore |
28
+ | [mbs粒度梯度监控](#mbs粒度梯度监控) | 开启梯度监控时,采集聚合前梯度时支持`micro_batch_size`粒度 | PyTorch、MindSpore |
29
+ | [异常告警](#异常告警) | 监控对象指标异常时自动告警,支持异常数据落盘 | PyTorch、MindSpore |
30
+ | [csv格式数据转tensorboard可视化显示](#csv格式数据转tensorboard可视化显示) | 将csv转为tensorboard文件显示 | PyTorch |
31
+ | [动态启停](#动态启停) | 训练过程中动态修改配置开启监控 | PyTorch、MindSpore |
32
+ | [功能重载](#功能重载) | 训练中开启激活值监控。待废弃,请使用动态启停功能代替。 | PyTorch |
33
33
 
34
34
  ## 快速上手
35
35
  根据需求监控相应对象。比如在loss上扬,grad norm正常的异常训练过程中,优先考虑监控模型前向过程;在grad norm异常的训练过程中,监控权重和激活值的梯度。
@@ -107,6 +107,37 @@ monitor.set_monitor(
107
107
  )
108
108
  ```
109
109
 
110
+ 请注意以下两点:
111
+ - Mindspore功能在1.2.2版本后支持, <1.2.2版本不支持
112
+ - 上述接口使用方式为1.2.2后更新的最新接口使用方式, <1.2.2版本的Pytorch旧接口使用方式为:
113
+ ```Python
114
+ from msprobe.pytorch import TrainerMon
115
+ monitor = TrainerMon(
116
+ config_file_path="./monitor_config.json",
117
+ params_have_main_grad=True, # 权重是否使用main_grad,通常megatron为True,deepspeed为False。默认为True。
118
+ opt_ty=None # 优化器类型,默认为None,具体取值参考公开接口
119
+ )
120
+ monitor.set_wrapped_optimizer(optimizer)
121
+ # 挂载监控对象
122
+ monitor.monitor_gnorm_with_ad(
123
+ model,
124
+ grad_acc_steps=args.global_batch_size//args.data_parallel_size//args.micro_batch_size,
125
+ optimizer=optimizer,
126
+ dp_group=None,
127
+ tp_group=None,
128
+ start_iteration=0 # 断点续训时提供当前iteration,默认从0开始
129
+ )
130
+ ```
131
+
132
+ 具体接口变更说明如下:
133
+
134
+ | 变更 | 说明 |
135
+ |-----------|-----------------------------------------------------------------------------------------------------------|
136
+ | 初始化接口统一精简 | TrainerMon.__init__(config_file_path, process_group=None, param_have_main_grad=True), 去除了需用户手动传入的opt_ty参数 |
137
+ | 主调接口修改 | 从monitor_gnorm_with_ad(...)改名为set_monitor(...), 且此时optimizer从可选项改为必传项 |
138
+ | 优化器包装接口废除 | set_wrapped_optimizer接口废除, optimizer传入由set_monitor主调完成 |
139
+
140
+ **其中老版接口目前仍能使用,但预计将在2026年废弃,请及时更新到最新版使用方式**
110
141
 
111
142
  ### 权重监控
112
143
  - 工具配置示例:
@@ -174,12 +205,26 @@ monitor.set_monitor(
174
205
 
175
206
  本工具针对分布式计算框架megatron和deepspeed框架做了适配,暂不支持其他框架。
176
207
 
208
+ ### 采集module堆栈信息
209
+ - 工具配置示例:
210
+ ```json
211
+ {
212
+ "targets": {
213
+ },
214
+ "format": "csv",
215
+ "stack_info": true
216
+ }
217
+ ```
218
+ 开启 `stack_info` 后会采集监控的第一个 step 的所有 module 的堆栈信息,输出格式仅支持 csv 。
177
219
 
178
220
  ## 高阶功能
179
221
 
222
+
180
223
  ### 指定监控对象
181
224
 
182
- 工具支持对nn.Module(**激活值监控**)和nn.Parameter(**权重监控**、**权重梯度监控、优化器监控**)对象实现相应的监控行为,在配置文件的"targets"(dict)字段指定,targets格式为{module_name/param_name: {filed: format}}。
225
+ 工具支持对指定nn.Module进行状态监控,在配置文件的`targets`字段中指定,`targets`格式为{module_name: {}}。
226
+
227
+ module_name可以通过nn.Module的接口named_modules()获取。
183
228
 
184
229
  #### 打印模型结构
185
230
  工具提供可选项`print_struct`打印模型结构,帮助配置targets。工具会在在第一个step后打印结构并停止训练进程,模型结构默认打印在`$MONITOR_OUTPUT_DIR/module_struct.json`。
@@ -190,7 +235,6 @@ monitor.set_monitor(
190
235
  ```
191
236
 
192
237
  输出样例:
193
- 字段`config`用于配置文件中指定module target。其余为各个元素的shape和dtype。
194
238
 
195
239
  ```json
196
240
  "0:63.mlp.linear_fc2": {
@@ -214,40 +258,30 @@ monitor.set_monitor(
214
258
  }
215
259
  },
216
260
  ```
261
+ 对于module对象,通常关心前向/反向传播的输入和输出:
217
262
 
218
- - Module
219
- 对于module对象,通常关心其前向的输入(input)输出(output)和反向的输入--前向输出的梯度(output_grad)和输出--前向输入的梯度(input_grad)。同时需要声明这些对象的类型,通常为"tensor"或"tuple\[length]"。
263
+ - 前向的输入(input)
264
+ - 前向的输出(output)
265
+ - 反向的输入,表示前向输出的梯度(output_grad)
266
+ - 反向的输出,表示前向输入的梯度(input_grad)
220
267
 
221
- "tensor"可以直接用来计算统计量,"tuple"需要进一步指定监控的索引。如"tuple[2]:0",表示该对象为长度2的tuple,对第0元素进行监控;不指定索引时,默认对第0元素进行监控。
222
268
 
223
- module_name可以通过nn.Module的接口`named_modules()`获取。
224
- ```json
225
- // 示例:对一个名为"module.encoder.layers.0.mlp"的module,监控其前向输入第0元素和输出。
226
- {
227
- "targets": {
228
- "module.encoder.layers.0.mlp": {
229
- "input": "tuple[2]:0",
230
- "output": "tensor"
231
- }
232
- }
233
- }
234
- ```
235
- #### Module全量监控
236
- 工具提供简便的全量module监控方式。或不配置targets、all_xy字段,同样表示全量监控。
269
+ #### 指定监控对象
270
+
271
+ targets字段指定监控对象示例如下:
237
272
 
238
273
  ```json
239
- {
240
- "targets": {},
241
- "all_xy": true
274
+ // 示例:对一个名为"module.encoder.layers.0.mlp"的module。
275
+ "targets": {
276
+ "module.encoder.layers.0.mlp": {}
242
277
  }
243
278
  ```
244
279
 
280
+ 对于parameter对象,通常会关注其在一个训练迭代中的梯度(weight grad)、adam类优化器中的动量(1st moment, 2nd moment)。
281
+ parameter归属于某一module,可以通过指定module_name来监控包含在这一module中的**所有**parameter。
245
282
 
246
- - Parameter
247
- 对于parameter对象,通常会关注其在一个训练迭代中的梯度(weight grad)、adam类优化器中的动量(1st moment, 2nd moment)。
248
- parameter归属于某一module,也可以通过指定module_name来监控包含在这一module中的**所有**parameter。
283
+ param_name可以通过nn.Module的接口`named_parameters()`获取。
249
284
 
250
- param_name可以通过nn.Module的接口`named_parameters()`获取。
251
285
  ```json
252
286
  // 示例:监控"module.encoder.layers.0.mlp"的所有参数和"module.embedding.word_embedding.weight"这一参数
253
287
  {
@@ -258,8 +292,9 @@ monitor.set_monitor(
258
292
  }
259
293
  ```
260
294
 
261
- #### Parameter全量监控
262
- 工具提供简便的全量parameter监控方式。或不配置targets,同样表示全量监控。
295
+ #### 全量监控
296
+
297
+ 工具提供简便的全量module对象监控方式。
263
298
 
264
299
  ```json
265
300
  {
@@ -267,7 +302,9 @@ monitor.set_monitor(
267
302
  }
268
303
  ```
269
304
 
305
+
270
306
  ### 输出格式和统计量
307
+
271
308
  工具配置示例:
272
309
  ```json
273
310
  {
@@ -302,7 +339,7 @@ export MONITOR_OUTPUT_DIR=/xxx/output_dir
302
339
  监控结果写入csv文件中,可以通过`ndigits`字段设置小数位数。
303
340
  表头为 vpp_stage | name | step | micro_step(optional) | *ops |。
304
341
  仅在激活值监控的输出文件中包含micor_step。
305
- 激活值监控的name为<module_name>.\<input or output>, 其他任务的name为<param_name>>
342
+ 激活值监控的name为<module_name>.\<input or output>, 其他任务的name为<param_name>
306
343
 
307
344
  - **api**
308
345
  监控结果不落盘,在训练过程中可以通过`generate_wgrad_metrics`、`generate_xy_metrics`等接口获取,使用方式参考[公开接口](#公开接口) 。
@@ -318,16 +355,54 @@ export MONITOR_OUTPUT_DIR=/xxx/output_dir
318
355
 
319
356
  ![step_count_per_record](img/monitor/step_count_per_record.png)
320
357
 
321
- ### 梯度异常时序判断
358
+ ### mbs粒度梯度监控
359
+
360
+ 当配置梯度监控任务时,工具默认`global_batch_size`粒度进行梯度监控。当需要监控`micro_batch_size`粒度梯度信息时,在配置文件中配置`monitor_mbs_grad`为`true`,配置示例如下:
361
+
362
+ ```json
363
+ {
364
+ "wg_distribution": true,
365
+ "monitor_mbs_grad": true
366
+ }
367
+ ```
368
+
369
+ 应用范围
370
+
371
+ - **仅支持采集聚合前梯度**,在梯度累积场景下,聚合后梯度已无法区分`micro_batch`数据。
372
+ - PyTorch场景下,Megatron和DeepSpeed训练框架下均支持,FSDP训练框架下暂不支持。
373
+ - MindSpore场景下均支持。
374
+
375
+ ### 异常告警
376
+
377
+ 工具的异常告警功能旨在自动判断训练过程中的异常现象,用户可通过在配置文件中配置alert字段来指定告警规则,并在训练过程中根据该规则及时打屏对用户发出告警。
378
+
379
+
322
380
  1. 训练前配置相关参数
323
381
 
324
- 工具支持自动判断训练过程中的梯度异常,需要在配置文件中设置alert相关字段。"AnomalyTurbulence"会将当前数值与历史均值比较,如果相对偏差超过阈值,会在打屏信息中提示用户。如果打开"`dump`"选项,则会将异常梯度相关信息落盘到目录`monitor_output/anomaly_detected`,用于后续时序判断。
382
+ 当前支持的异常告警规则如下:
383
+
384
+ | 异常告警 |解释| rule_name | args是否可选 |
385
+ |--------------|----|-----------|---------------------------------------------------------------------|
386
+ | 历史均值偏离告警 |将当前数值与历史均值比较。如果相对偏差超过阈值,会在打屏信息中提示用户指标偏离。当前仅对`norm`和`mean`指标生效。| AnomalyTurbulence | 否,必须传入threshold。当指标超过`(1+threshold)*avg`时,识别为偏离历史均值。 |
387
+ | nan值/极大值告警 |根据是否提供threshold来判断nan值或极大值| AnomalyNan | 是, 若未配置args或未配置threshold,则默认检测nan,若提供threshold,则检测nan值以及绝对值超过阈值的极大值 |
388
+
389
+ 除此之外,我们在alert中支持dump配置项,如果打开"`dump`"选项,则会将异常信息落盘到目录`monitor_output/anomaly_detected`。
390
+
391
+ - 历史均值偏离告警案例如下:
325
392
  ```json
326
393
  "alert": {
327
- "rules": [{"rule_name": "AnomalyTurbulence", "args": {"threshold": 0.5}}],
394
+ "rules": [{"rule_name": "AnomalyTurbulence", "args": {"threshold": 0.5}}], // 0.5表示偏离50%则提示偏离
395
+ "dump": true
396
+ },
397
+ ```
398
+ - nan值/极大值告警案例如下:
399
+ ```json
400
+ "alert": {
401
+ "rules": [{"rule_name": "AnomalyNan", "args": {"threshold": 1e10}}],
328
402
  "dump": true
329
403
  },
330
404
  ```
405
+
331
406
  2. 实例化工具时传入流水线并行group
332
407
  ```python
333
408
  monitor = TrainerMon(
@@ -364,9 +439,9 @@ python3 -m msprobe.pytorch.monitor.anomaly_analyse -d $MONITOR_OUTPUT_DIR/anomal
364
439
  ```
365
440
  异常事件分析结束,将topk事件写入文件`anomaly_detected/anomaly_analyse.json`。异常分析支持以下参数配置:
366
441
 
367
- | 字段名 | 解释 | 是否必选 |
368
- | ----------------- | ------------------------------------------------------------ | -------- |
369
- | -d 或 --data_path | 指定梯度异常落盘文件夹,梯度监控功能输出,一般为$MONITOR_OUTPUT_DIR/anomaly_detected。 | 是 |
442
+ | 字段名 | 解释 | 是否必选 |
443
+ | ----------------- | --------------------------------------------------------- | -------- |
444
+ | -d 或 --data_path | 指定异常落盘文件夹,监控功能输出,一般为$MONITOR_OUTPUT_DIR/anomaly_detected。 | 是 |
370
445
  | -o 或 --out_path | 排序后的异常落盘文件地址,默认在--data_path路径下落盘一个anomaly_analyse.json文件。 | 否 |
371
446
  | -k 或 --topk | 指定保留前topk个异常,默认为8。 | 否 |
372
447
  | -s 或 --step_list | 指定分析的step范围,默认为[]。 | 否 |
@@ -380,39 +455,47 @@ python3 -m msprobe.pytorch.monitor.anomaly_analyse -d $MONITOR_OUTPUT_DIR/anomal
380
455
  from msprobe.pytorch.monitor.csv2tb import csv2tensorboard_by_step
381
456
  # 前三个参数用来指定需要转换的一批文件,指定monitor输出目录及一个时间范围,会对这个范围内的文件进行转换
382
457
  # process_num指定拉起的进程个数,默认为1,更多的进程个数可以加速转换
383
- # data_type_list是一个列表,指定需要转换的数据类型, 数据类型应来自输出件文件前缀,所有类型数据:
384
- # ["actv", "actv_grad", "exp_avg", "exp_avg_sq", "grad_unreduced", "grad_reduced", "param"]
385
- # 不指定就转换全部数据
386
- # output_dirpath可指定输出目录, 不传值时保存到"{curtime}_csv2tensorboard_by_step"文件夹,其中curtime为自动获取的当前时间戳
458
+ # data_type_list是一个列表,指定需要转换的数据类型,默认转换全部数据,数据类型应来自输出件文件前缀,所有类型数据:
459
+ # ["actv", "actv_grad", "exp_avg", "exp_avg_sq", "grad_unreduced", "grad_reduced", "param_origin", "param_updated"]
460
+ # output_dirpath可指定输出目录,默认保存到"{curtime}_csv2tensorboard_by_step"文件夹,其中curtime为自动获取的当前时间戳
387
461
  csv2tensorboard_by_step(
388
- monitor_path="~/monitor_output",
389
- time_start="Dec03_21-34-40",
390
- time_end="Dec03_21-34-42",
462
+ monitor_path="~/monitor_output", # 必填
463
+ time_start="Dec03_21-34-40", # 必填
464
+ time_end="Dec03_21-34-42", # 必填
391
465
  process_num=8,
392
- data_type_list=["param"]
466
+ data_type_list=["param_origin"]
393
467
  )
394
468
  ```
395
469
 
396
470
  ### 动态启停
397
471
  动态启停模式:支持用户在训练过程中随时启动/更新监控。
398
472
 
399
- 用户可在训练开始前通过配置环境变量DYNAMIC_MONITOR=True来确认开启动态启停模式,该模式下需要配合config.json文件中的dynamic_on字段来使用。
473
+ 用户可在训练开始前通过配置环境变量`DYNAMIC_MONITOR=True`来确认进入动态启停模式,该模式下需要配合config.json文件中的`dynamic_on`字段来使用。
400
474
 
401
475
  在动态启停模式下,启动和停止分别由如下控制:
402
476
 
403
- - 启动:
404
- 首次监控:config.json文件中dynamic_on字段为true,代表是否需要开启监控。
405
- 非首次监控:config文件时间戳更新且config.json文件中dynamic_on字段为true
406
- - 停止:
407
- 到达collect_times之后自动停止并改config.json文件中dynamic_on字段为false,可再通过上述操作重启。
477
+ - **启动**:
478
+ - 首次监控:查看config.json文件中`dynamic_on`字段,若为`true`则在下一步开启监控。
479
+ - 非首次监控:查看config.json文件时间戳,若时间戳更新且config.json文件中`dynamic_on`字段为`true`则在下一步开启监控。
480
+ - **停止**:
481
+ 到达`collect_times`之后自动停止并改config.json文件中`dynamic_on`字段为`false`,可再通过上述操作重启。
482
+
483
+ **注意事项:**:
408
484
 
409
- 大部分情况下,用户可在看到异常趋势后再手动更新config.json文件并打开dynamic_on开关;此外,使用时若想要在一开始就启动监控,可直接打开dynamic_on开关做基础配置的监测(首次不要求时间戳更新)
485
+ - 默认监控启动皆统一在配置初始化或查询到更新后的下一步,即第n步挂上hook将在第n+1步启动采集,如需采集第0步数据请使用静态模式。
486
+ - config.json中途修改出错时,若此时不在监控则不生效,若在监控则用原配置继续。
487
+ - 达到`collect_times`之后程序会自动将该值置为`false`待下次改`true`重启。
410
488
 
411
- 注意事项:
489
+ **支持的使用场景说明如下:**
412
490
 
413
- - 默认监控启动皆统一在配置初始化或查询到更新后的下一步,也就是若第n步挂上hook则第n+1步才启动采集,如需采集第0步数据请用静态模式。
414
- - config中途修改出错时,若此时不在监控就不生效,若在监控则用原配置继续。
415
- - 达到collect_times之后会自动将该值置为false待下次改true重启。
491
+ | 场景 | 监控模式 | 操作步骤 | 结果描述 |
492
+ |-----------------------------------------------|----|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
493
+ | 场景1: 使用默认静态模式 | 静态 | 1. 配置环境变量:`export DYNAMIC_MONITOR=False ` <br/>或不设置该环境变量 | 走默认分支进行数据采集和保存,不受config.json中`dynamic_on`影响 |
494
+ | 场景2: 进入动态启停模式,初始不启动监控 | 动态 | 1.配置环境变量:`export DYNAMIC_MONITOR=True` <br/> 2.配置config.json中`dynamic_on: false`或不设置该字段 | 初始状态下无监控,不进行数据采集和保存 |
495
+ | 场景3: 进入动态启停模式,初始即启动监控 | 动态 | 1.配置环境变量:`export DYNAMIC_MONITOR=True` <br/> 2.配置config.json中`dynamic_on: true` | 根据初始配置在第1步(初始计数为0)开启监控并保存,采集`collect_times`次数后结束监控 |
496
+ | 场景4: 进入动态启停模式,初始暂不启动监控,训练中途启动 | 动态 | 1.配置环境变量:`export DYNAMIC_MONITOR=True` <br/> 2.开始时配置config.json中`dynamic_on: false`或不设置该字段<br/>3.训练中途修改config.json中`dynamic_on: true` | 训练中途根据最新配置在下一步开启监控并保存,采集`collect_times`次数后结束监控 |
497
+ | 场景5: 进入动态启停模式,监控还未结束时中途修改config.json采集配置 | 动态 | 1.配置环境变量:`export DYNAMIC_MONITOR=True` <br/> 2.期间配置`dynamic_on: true`启动采集<br/>3.在采集还未达到`collect_times`次数前,中途修改config.json配置 | 更新前按旧配置采集并保存,更新后下一步以最新config.json采集且`collect_times`重新从0开始计数。此功能可配合中途`collect_times`改0来实现提前停止监控。
498
+ | 场景6: 进入动态启停模式,在根据`collect_times`结束监控后,需重新启动监控 | 动态 | 1.配置环境变量:`export DYNAMIC_MONITOR=True` <br/> 2.期间`dynamic_on: true`启动采集<br/>3.采集达到`collect_times`次数后结束监控,程序自动改`dynamic_on:false`<br/>4.配置config.json中`dynamic_on:true`重启监控 | 更新前按旧配置采集并保存,中途停止监控后无采集,重启后下一步以最新config.json重启采集且`collect_times`重新从0开始计数。
416
499
 
417
500
  ### 功能重载
418
501
  此功能将在2026年废弃。请使用[动态启停](#动态启停)功能代替。
@@ -434,14 +517,16 @@ if {some condition}:
434
517
  ## 公开接口
435
518
  - monitor工具初始化
436
519
  ```python
437
- TrainerMon.__init__(config_file_path, process_group=None, params_have_main_grad=True) -> None
520
+ TrainerMon.__init__(config_file_path, process_group=None, params_have_main_grad=True, opt_ty=None) -> None
438
521
  ```
439
522
 
440
- | 参数 | 说明 | 是否必选 |
441
- | --------------------- | ------------------------------------------------------------ | -------- |
442
- | config_file_path | json配置文件路径。 | 是 |
443
- | process_group | 传入ProcessGroup对象,用以确定pipeline并行不同rank异常间时序,megatron下通过core.parallel_state.get_pipeline_model_parallel_group()获得。仅在异常时序判断功能中使用。 | 否 |
444
- | params_have_main_grad | 权重是否使用main_grad,通常megatron为True,deepspeed为False。默认为True。 | 否 |
523
+ | 参数 | 说明 | 是否必选 |
524
+ | --------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------|
525
+ | config_file_path | json配置文件路径。 | 是 |
526
+ | process_group | 传入ProcessGroup对象,用以确定pipeline并行不同rank异常间时序,megatron下通过core.parallel_state.get_pipeline_model_parallel_group()获得。仅在异常时序判断功能中使用。 | 否 |
527
+ | params_have_main_grad | 权重是否使用main_grad,通常megatron为True,deepspeed为False。默认为True。 | 否 |
528
+ | opt_ty | 优化器类型,默认为None。**该参数将在26年废除,只需在版本<msprobe1.2.2时传入**,值选项可为<br/>-Megatron_DistributedOptimizer:megatron分布式优化器;<br/>-Megatron_Float16OptimizerWithFloat16Params:megatron混合精度优化器;<br/>-Megatron_ChainedDistributedOptimizer:megatron分布式优化器序列;<br/>-Megatron_ChainedFloat16OptimizerWithFloat16Params:megatron混合精度优化器序列;<br/>-DeepSpeedZeroOptimizer_Stage1_or_2:DeepSpeed Zero1和Zero2;<br/>-DeepSpeedZeroOptimizer_Stage3:DeepSpeed Zero3。 | 否 |
529
+
445
530
 
446
531
  - 模型挂载monitor工具
447
532
  ```python
@@ -451,7 +536,7 @@ TrainerMon.set_monitor(model, grad_acc_steps, optimizer, dp_group=None, tp_group
451
536
  | --------------- | ------------------------------------------------------------ | -------- |
452
537
  | model | 需要监控的模型,需要是一个torch.nn.Module或者mindspore.nn.Cell。 | 是 |
453
538
  | grad_acc_steps | 梯度累积步数。 | 是 |
454
- | optimizer | 需要patch的优化器。 | |
539
+ | optimizer | 需要patch的优化器。 | |
455
540
  | dp_group | 数据并行的通信组。<br>dp域通信后,且没有使用分布式优化器时,group内所有rank的梯度相同,落盘数据冗余。<br>提供dp_group后,工具仅保留每个dp_group的第一个rank的梯度。 | 否 |
456
541
  | tp_group | 张量并行的通信组。<br/>tp域通信后,group内部分参数所有rank的梯度相同,落盘数据冗余。<br/>提供tp_group后,工具仅保留每个tp_group中冗余参数在第一个rank的梯度。<br/>当前适配Megatron core_r0.6.0, 通过权重属性"tensor_model_parallel"判断是否冗余。 | 否 |
457
542
  | start_iteration | 训练的起始iteration,影响工具计数。**仅PyTorch场景支持此参数**。 | 否 |
@@ -466,8 +551,8 @@ csv2tensorboard_by_step(monitor_path, time_start, time_end, process_num=1, data_
466
551
  | time_start | 起始时间戳。搭配time_end一起使用。指定一个时间范围,会对这个范围内的文件进行转换。左闭右闭的区间。 | 是 |
467
552
  | time_end | 结束时间戳。搭配time_start一起使用。指定一个时间范围,会对这个范围内的文件进行转换。左闭右闭的区间。 | 是 |
468
553
  | process_num | 指定拉起的进程个数,默认为1,更多的进程个数可以加速转换。 | 否 |
469
- | data_type_list | 指定需要转换的数据类型, 数据类型应来自输出件文件前缀,所有类型数据:<br/> ["actv", "actv_grad", "exp_avg", "exp_avg_sq", "grad_unreduced", "grad_reduced", "param"]。<br/>不指定就转换全部数据。 | 否 |
470
-
554
+ | data_type_list | 指定需要转换的数据类型, 数据类型应来自输出件文件前缀,所有类型数据:<br/> ["actv", "actv_grad", "exp_avg", "exp_avg_sq", "grad_unreduced", "grad_reduced", "param_origin", "param_updated"]。<br/>不指定就转换全部数据。 | 否 |
555
+ | output_dirpath | 指定转换后的输出路径,默认输出到"{curtime}_csv2tensorboard_by_step"文件夹,其中curtime为自动获取的当前时间戳。 | 否 |
471
556
  - 在模型任意位置获取当前参数**梯度**统计量
472
557
  ```python
473
558
  TrainerMon.generate_wgrad_metrics() -> tuple[dict, dict]
@@ -486,6 +571,25 @@ TrainerMon.generate_xy_metrics() -> tuple[dict, dict]
486
571
  actv, actv_grad = monitor.generate_xy_metrics()
487
572
  ```
488
573
 
574
+ - 老版接口说明, **将在26年废弃**:
575
+ ```python
576
+ TrainerMon.set_wrapped_optimizer(optimizer) -> None
577
+ ```
578
+ | 参数 | 说明 | 是否必选 |
579
+ |-----------|-------------------------------|------|
580
+ | optimizer | megatron、deepspeed创建好的混合精度优化器 | 是 |
581
+
582
+ ```python
583
+ TrainerMon.monitor_gnorm_with_ad(model, grad_acc_steps, optimizer, dp_group, tp_group, start_iteration) -> None
584
+ ```
585
+ | 参数 | 说明 | 是否必选 |
586
+ | --------------- | ------------------------------------------------------------ | -------- |
587
+ | model | 需要监控的模型,需要是一个torch.nn.Module或者mindspore.nn.Cell。 | 是 |
588
+ | grad_acc_steps | 梯度累积步数。 | 是 |
589
+ | optimizer | 需要patch的优化器。 | 否 |
590
+ | dp_group | 数据并行的通信组。<br>dp域通信后,且没有使用分布式优化器时,group内所有rank的梯度相同,落盘数据冗余。<br>提供dp_group后,工具仅保留每个dp_group的第一个rank的梯度。 | 否 |
591
+ | tp_group | 张量并行的通信组。<br/>tp域通信后,group内部分参数所有rank的梯度相同,落盘数据冗余。<br/>提供tp_group后,工具仅保留每个tp_group中冗余参数在第一个rank的梯度。<br/>当前适配Megatron core_r0.6.0, 通过权重属性"tensor_model_parallel"判断是否冗余。 | 否 |
592
+ | start_iteration | 训练的起始iteration,影响工具计数。**仅PyTorch场景支持此参数**。 | 否 |
489
593
 
490
594
 
491
595
  ## 详细配置
@@ -509,6 +613,7 @@ actv, actv_grad = monitor.generate_xy_metrics()
509
613
  "mv_distribution": true,
510
614
  "param_distribution": true,
511
615
  "wg_distribution": true,
616
+ "monitor_mbs_grad": true,
512
617
  "cc_distribution": {"enable":true, "cc_codeline":[]},
513
618
  "alert": {
514
619
  "rules": [{"rule_name": "AnomalyTurbulence", "args": {"threshold": 0.5}}],
@@ -526,33 +631,36 @@ actv, actv_grad = monitor.generate_xy_metrics()
526
631
 
527
632
  下面详细解释各个字段:
528
633
 
529
- | 字段名字 | 是否必选 | 解释 |
530
- | ----------------------- | -------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
531
- | "targets" | 可选 | 指定需要监控的模型层和监控对象, 例如transformer的第0层language_model.encoder.layers.0,可选择监控input、output、input_grad、output_grad。如果不清楚模型结构, 可以将 "print_struct" 字段设置为 true, 监控工具会打印模型中torch module的名字和详细结构,并在第1个step后退出。未配置时默认为全量监控。 |
532
- | "input" | 可选 | "tuple[2]:0"的意思是目标module的前向input参数为长度为2的tuple, 我们关心的是tuple第0个元素。 |
533
- | "output" | 必选 | "tensor"的意思是目标module的前向output参数类型为tensor |
534
- | "input_grad" | 可选 | "tuple[2]:0"的意思是目标module的后向input_grad参数是长度为2的tuple, 我们关心的是tuple的第0个元素。 |
535
- | "output_grad" | 必选 | "tuple[1]:0"的意思是目标module的后向input_grad参数是长度为1的tuple, 我们关心的是tuple的第0个元素。 |
536
- | "dynamic_on" | 可选 | 在动态启停时使用,true代表打开监控,false代表关闭监控,默认值为false,且达到collect_times之后会自动将该值置为false待下次改true重启。**仅PyTorch场景支持此参数**。 |
537
- | "collect_times" | 可选 | 设置采集次数,达到该次数后停止监控,默认值为100000000,目的是一直采集。 |
538
- | "start_step" | 可选 | 设置开始采集step,模型训练达到start_step后开始监控采集,默认值为0,表示从step0开始监控采集。 |
539
- | "step_interval" | 可选 | 设置采集step间隔,默认值为1,表示每个step均采集监控数据。 |
540
- | "print_struct" | 可选 | 设置为true后监控工具会打印模型中torch module的名字和详细结构,并在第1个step后退出。不填默认为false。**仅PyTorch场景支持此参数**。 |
541
- | "module_ranks" | 可选 | 用于在分布式训练场景中希望控制在哪些rank开启module监控。如果不填,则默认在所有rank开启。 |
542
- | "ur_distribution" | 可选 | 若为true则会统计adam优化器指定模块(targets中指定)参数的update和ratio向量的数值分布,并展示在heatmap里,默认为false,同时format字段必须设置为tensorboard。<br/>依赖histc算子, 需要CANN8.0.rc2以上版本, 否则会有严重的性能问题。**仅PyTorch场景支持此参数**。 |
543
- | "xy_distribution" | 可选 | 若为true则会监控指定module(targets中指定)的输入输出张量。 默认为false。 |
544
- | "all_xy" | 可选 | 开启xy_distribution后生效,若为true,监控所有module。默认为false。<br/>与targets同时生效,all_xy配置为true时,若targets配置module_xx和指定对象,则module_xx按targets配置生效,其他module则监控全部对象,包含input、output、input_grad、output_grad。 |
545
- | "forward_only" | 可选 | 开启xy_distribution后生效,若为true,仅监控指定module的前向,targets中的input_grad、output_grad不生效。默认为false。 |
546
- | "backward_only" | 可选 | 开启xy_distribution后生效,若为true,仅监控指定module的反向,targets中的input、output不生效。默认为false。 |
547
- | "mv_distribution" | 可选 | 若为true则会监控指定模块中的参数的优化器状态, 默认为false。需要在TrainerMon构造函数正确指定opt_ty。 目前支持megatron和Deepspeed的分布式优化器。<br/>-Megatron_DistributedOptimizer:megatron分布式优化器;<br/>-Megatron_Float16OptimizerWithFloat16Params:megatron混合精度优化器;<br/>-Megatron_ChainedDistributedOptimizer:megatron分布式优化器序列;<br/>-Megatron_ChainedFloat16OptimizerWithFloat16Params:megatron混合精度优化器序列;<br/>-DeepSpeedZeroOptimizer_Stage0:DeepSpeed Zero0<br/>-DeepSpeedZeroOptimizer_Stage1_or_2:DeepSpeed Zero1和Zero2;<br/>-DeepSpeedZeroOptimizer_Stage3:DeepSpeed Zero3。<br/>未使用megatron和deepspeed框架时,opt_ty默认为None,无需传入。 |
548
- | "wg_distribution" | 可选 | 若为true则会监控指定模块的参数梯度, 默认为false。 |
549
- | "param_distribution" | 可选 | 若为true则会监控指定模块的参数, 默认为false。 |
550
- | "alert" | 可选 | "rules": 指定自动报警的异常检测机制及其相应的阈值。目前实现的异常检测是AnomalyTurbulence, 如果统计标量超出历史均值的指定浮动范围(threshold 0.5意味着上浮或者下浮50%)则在控制台打印报警信息。当"dump"字段配置为true表示异常事件写入文件,默认为false。**仅PyTorch场景支持此参数**。 |
551
- | "cc_distribution" | 可选 | 其中"enable"字段控制通信监控模块的开关;需要监控通信算子时,务必尽量早地实例化`TrainerMon`, 因为监控通过劫持原始func后挂hook实现,部分加速库初始化时会保存原始function,避免监控失效。"cc_codeline"字段指定监控的代码行,如:`train.py\\[23\\]`,默认为空列表,不特别指定;"cc_pre_hook"字段控制是否监控通信前的数据; 模块会在第二个optimize.step之前打印通信日志,包括通信api的调用栈、输入dtype、通信group。 "cc_log_only"true时,仅打印日志,不监控通信的输入输出,并在打印后中断训练。可以根据通信日志设置"cc_codeline",规避与训练过程不相关的通信,比如一些时间、metrics的同步。**仅PyTorch场景支持此参数**。 |
552
- | "format" | 可选 | 数据落盘格式,默认值为"csv",可选 \["csv", "tensorboard", "api"\]。仅PyThon和MindSpore动态图场景支持此参数,且MindSpore动态图场景仅支持\["csv"\]。 |
553
- | "ops" | 可选 | 类型为list,与ur_distribution、xy_distribution、mv_distribution、wg_distribution、mg_direction、cc_distribution配合,监控所选张量的统计指标,目前支持"min"、"max"、"norm"、"mean"、"zeros"、"nans"。其中,zeros代表监控所选张量的元素小于eps的比例,nans代表张量中nan的数量。当ops中无有效指标时,默认监控norm指标。 |
554
- | "eps" | 可选 | 若ops里包含"zeros"则需要配置,默认为1e-8 |
555
- | "ndigits" | 可选 | "format""csv"时,设置落盘文件中的小数位数,默认为6。**仅PyTorch场景支持此参数**。 |
556
- | "step_count_per_record" | 可选 | "format"为"csv"时生效,每个csv记录多少个step的数据,默认为1 |
557
- | "append_output" | 可选 | 适用于断点续训场景。多卡场景下生效,指定两个时间戳,将输出续写到这两个时间戳范围间的输出件中,不在范围内的rank不被续写。时间戳应来自原有输出件目录前缀,例如["Dec03_21-34-40", "Dec03_21-34-41"]。默认为[],不续写。**仅PyTorch场景支持此参数**。 |
558
- | "squash_name" | 可选 | 是否简化参数名/模块名,多模态场景建议关闭,默认为True |
634
+ | 字段名字 | 是否必选 | 解释 |
635
+ | ----------------------- | -------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
636
+ | "targets" | 可选 | 指定需要监控的模型层和监控对象, 例如transformer的第0层language_model.encoder.layers.0,可选择监控input、output、input_grad、output_grad。如果不清楚模型结构, 可以将 "print_struct" 字段设置为 true, 监控工具会打印模型中torch module的名字和详细结构,并在第1个step后退出。未配置时默认为全量监控。 |
637
+ | "input" | 可选 | "tuple[2]:0"的意思是目标module的前向input参数为长度为2的tuple, 我们关心的是tuple第0个元素。 |
638
+ | "output" | 必选 | "tensor"的意思是目标module的前向output参数类型为tensor |
639
+ | "input_grad" | 可选 | "tuple[2]:0"的意思是目标module的后向input_grad参数是长度为2的tuple, 我们关心的是tuple的第0个元素。 |
640
+ | "output_grad" | 必选 | "tuple[1]:0"的意思是目标module的后向input_grad参数是长度为1的tuple, 我们关心的是tuple的第0个元素。 |
641
+ | "dynamic_on" | 可选 | 在动态启停时使用,true代表打开监控,false代表关闭监控,默认值为false,且达到collect_times之后会自动将该值置为false待下次改true重启。 |
642
+ | "collect_times" | 可选 | 设置采集次数,达到该次数后停止监控,默认值为100000000,目的是一直采集。 |
643
+ | "start_step" | 可选 | 设置开始采集step,模型训练达到start_step后开始监控采集,默认值为0,表示从step0开始监控采集。注:在动态启停模式下该设置不生效,只会从下一步开始监控采集。 |
644
+ | "step_interval" | 可选 | 设置采集step间隔,默认值为1,表示每个step均采集监控数据。 |
645
+ | "print_struct" | 可选 | 设置为true后监控工具会打印模型中torch module的名字和详细结构,并在第1个step后退出。不填默认为false。**仅PyTorch场景支持此参数**。 |
646
+ | "module_ranks" | 可选 | 用于在分布式训练场景中希望控制在哪些rank开启module监控。如果不填,则默认在所有rank开启。 列表内rank要求为int类型。 |
647
+ | "ur_distribution" | 可选 | 若为true则会统计adam优化器指定模块(targets中指定)参数的update和ratio向量的数值分布,并展示在heatmap里,默认为false,同时format字段必须设置为tensorboard。<br/>依赖histc算子, 需要CANN8.0.rc2以上版本, 否则会有严重的性能问题。**仅PyTorch场景支持此参数**。 |
648
+ | "xy_distribution" | 可选 | 若为true则会监控指定module(targets中指定)的输入输出张量。 默认为false。 |
649
+ | "all_xy" | 可选 | 开启xy_distribution后生效,若为true,监控所有module。默认为false。<br/>与targets同时生效,all_xy配置为true时,若targets配置module_xx和指定对象,则module_xx按targets配置生效,其他module则监控全部对象,包含input、output、input_grad、output_grad。 |
650
+ | "forward_only" | 可选 | 开启xy_distribution后生效,若为true,仅监控指定module的前向,targets中的input_grad、output_grad不生效。默认为false。 |
651
+ | "backward_only" | 可选 | 开启xy_distribution后生效,若为true,仅监控指定module的反向,targets中的input、output不生效。默认为false。 |
652
+ | "mv_distribution" | 可选 | 若为true则会监控指定模块中的参数的优化器状态, 默认为false。版本<msprobe1.2.2时需要在TrainerMon构造函数正确指定opt_ty。 |
653
+ | "wg_distribution" | 可选 | 若为true则会监控指定模块的参数梯度, 默认为false。 |
654
+ | "monitor_mbs_grad" | 可选 | 若为true则会监控mbs粒度梯度统计量,默认为false。 |
655
+ | "param_distribution" | 可选 | 若为true则会监控指定模块的参数, 默认为false|
656
+ | "alert" | 可选 | "rules": 指定自动报警的异常检测机制及其相应的阈值。目前实现的异常检测是AnomalyTurbulence, 如果统计标量超出历史均值的指定浮动范围(threshold 0.5意味着上浮或者下浮50%)则在控制台打印报警信息。当"dump"字段配置为true表示异常事件写入文件,默认为false。**仅PyTorch场景支持此参数**。 |
657
+ | "cc_distribution" | 可选 | 其中"enable"字段控制通信监控模块的开关,仅支持在多卡训练时开启;需要监控通信算子时,务必尽量早地实例化`TrainerMon`, 因为监控通过劫持原始func后挂hook实现,部分加速库初始化时会保存原始function,避免监控失效。"cc_codeline"字段指定监控的代码行,如:`train.py\\[23\\]`,默认为空列表,不特别指定;"cc_pre_hook"字段控制是否监控通输入; 模块会在第二个optimize.step之前打印通信日志,包括通信api的调用栈、输入dtype、通信group。 "cc_log_only"为true时,仅打印日志,不监控通信的输入输出,并在打印后中断训练。可以根据通信日志设置"cc_codeline",规避与训练过程不相关的通信,比如一些时间、metrics的同步。 |
658
+ | "mg_direction" | 可选 | 若为true则会计算权重梯度和动量方向一致的比例,默认为false。 |
659
+ | "format" | 可选 | 数据落盘格式,默认值为"csv",可选 \["csv", "tensorboard", "api"\]。仅PyThon和MindSpore动态图场景支持此参数,且MindSpore动态图场景仅支持\["csv"\] |
660
+ | "ops" | 可选 | 类型为list,与ur_distribution、xy_distribution、mv_distribution、wg_distribution、mg_direction、cc_distribution配合,监控所选张量的统计指标,目前支持"min""max"、"norm"、"mean"、"zeros"、"nans"。其中,zeros代表监控所选张量的元素小于eps的比例,nans代表张量中nan的数量。当ops中无有效指标时,默认监控norm指标。 |
661
+ | "eps" | 可选 | 若ops里包含"zeros"则需要配置,默认为1e-8 |
662
+ | "ndigits" | 可选 | "format""csv"时,设置落盘文件中的小数位数,默认为6。 |
663
+ | "step_count_per_record" | 可选 | "format"为"csv"时生效,每个csv记录多少个step的数据,默认为1。 |
664
+ | "append_output" | 可选 | 适用于断点续训场景。多卡场景下生效,指定两个时间戳,将输出续写到这两个时间戳范围间的输出件中,不在范围内的rank不被续写。时间戳应来自原有输出件目录前缀,例如["Dec03_21-34-40", "Dec03_21-34-41"]。默认为[],不续写。**仅PyTorch场景支持此参数**。 |
665
+ | "squash_name" | 可选 | 是否简化参数名/模块名,多模态场景建议关闭,默认为True |
666
+