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
@@ -2,28 +2,29 @@
2
2
 
3
3
  ## 1 PyTorch框架
4
4
 
5
- | 功能名(英文) | 简介 | 适用场景/优势 | 当前版本局限性 |
6
- |------------------------------------------------------------------------------------|---------------------------------------------------------------|--------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------|
7
- | [数据采集<br>(dump)](./05.data_dump_PyTorch.md) | 采集模型训练过程中的API或Module层级的前反向输入输出数据,包括层次关系、统计值信息、真实数据和调用栈等。 | 1、将模型中训练的API或Module的前反向输入输出数据保存下来分析<br> 2、模型出现溢出时,可用于查看哪些API或Module出现了溢出 | 1、API级数据采集仅支持白名单列表上的API<br>2、工具会做一些同步操作,引入工具可能会导致一些同步问题消失<br>3、当前对inplace操作API或Module的支持度有限<br>4、暂不支持参数及参数梯度的采集 |
8
- | [离线预检<br>(api_accuracy_checker)](./07.accuracy_checker_PyTorch.md) | 为网络中每个API创建用例,检验其精度,并根据不同比对算法综合判定API在NPU上的精度是否达标,快速找出精度差异API。 | 1、对模型中所有的API做精度初步排查<br>2、精度排查不受模型累计误差影响 | 1、依赖GPU环境<br>2、不支持通信算子<br>3、仅支持部分融合算子 |
9
- | [整网比对<br>(compare)](./10.accuracy_compare_PyTorch.md) | 计算模型整网NPU和标杆设备的精度误差指标,标记精度异常API或Module,助力快速定位精度问题根因。 | 1、整网比对定位精度可疑算子 | 1、由于使用整网dump数据,定位的可疑算子受累计误差影响<br>2、当模型规模较大时,比对所需时间较长 |
10
- | [在线预检<br>(online_api_accuracy_checker)](./08.accuracy_checker_online_PyTorch.md) | 通过TCP通信或共享存储空间的方式,进行在线精度预检,解决离线预检大数据量落盘、传输困难痛点。 | 1、使用离线预检,数据量较大落盘困难或传输耗时长时,可通过在线预检进行精度排查 | 1、依赖GPU环境,NPU和GPU能够通信<br>2、重计算模式下,不支持反向aten算子预检 |
11
- | [溢出检查<br>(overflow_checker)](./12.overflow_check_PyTorch.md) | 检测模型计算过程的输入输出,并在溢出时落盘数据,助力用户快速定位溢出位置。 | 1、当模型出现溢出时,用于快速定位最先溢出的API或Module<br>2、相比数据采集,性能更优,磁盘压力更小 | 1、局限性同数据采集 |
12
- | [数据解析<br>(parse_tool)](./14.data_parse_PyTorch.md) | 互交式界面处理解析kernel层级dump数据,便于查看分析。 | 1、比对kernel层级dump数据的一致性 | 1、仅限于NPU |
13
- | [无标杆比对<br>(free_benchmark)](./15.free_benchmarking_PyTorch.md) | 不依赖标杆数据,通过对算子输入增加微小扰动,计算扰动后输出与原始输出的相对误差,识别有精度风险算子。 | 1、无标杆数据场景下的算子精度排查<br>2、对个别算子进行升精度、“to cpu”等操作,以验证其对模型loss的影响 | 1、由于需要拷贝输入进行二次执行,所以在遇到大张量的输入时容易发生显存OOM的问题, 特别是反向比对过程。建议结合白名单使用<br>2、比对会延长训练时间,整网比对可能会造成严重的耗时膨胀,建议结合白名单使用 |
14
- | [梯度状态监测<br>(grad_probe)](./17.grad_probe.md) | 可导出模型权重梯度数据并对比相似度,助力确认训练过程精度问题step和反向中的异常。 | 1、需要分析梯度数据时<br>2、需要定位发生问题的step时 | 暂无 |
15
- | [在线精度比对<br>(online_dispatch)](./18.online_dispatch.md) | 训练过程中直接完成NPU和CPU的精度比对并输出比对结果。 | 1、执行一次就可获取NPU和CPU分别执行后的精度比对结果 | 暂无 |
16
- | [训练状态监控<br>(monitor)](./19.monitor.md) | 收集模型训练过程中的激活值、梯度和优化器状态,助力分析计算、通信、优化器各部分异常情况。 | 1、通过监控模块级统计量指标,快速定位异常模块位置,如loss出现nan | 1、仅支持模块级别统计量指标分析<br>2、仅支持megatron、deepspeed框架<br>3、少量增加时间和显存膨胀 |
17
- | [可视化比对<br>(visualization) ](./21.visualization_PyTorch.md) | 解析dump的精度数据,还原模型图结构,比对各层级精度数据,助力理解模型结构、分析精度问题。 | 1、整网精度比对定位可疑算子,通过浏览器展示比对结果,支持快速搜索到可疑算子<br>2、支持查看模型层级结果,比对模型层级结构差异 | 1、由于使用整网dump数据,定位的可疑算子受累计误差影响<br>2、当模型规模较大时,比对所需时间较长 |
18
- | [单API自动生成脚本<br>(generate_operator) ](./23.generate_operator_PyTorch.md) | 解析dump的精度数据,提取可疑的API算子,自动生成单API复现脚本,并根据不同的API采用不同的比对算法,给定最终比对结果数据;帮助开发者分析算子精度问题。 | 1、该工具支持从整网dump下来的数据中提取可疑算子,并自动生成单API脚本<br>2、除了支持复现单API的前反向过程,同时会根据不同的API选择不同的比对方法,并给出比对结果 |1、不支持通信算子<br>2、融合算子需手动修改脚本进行适配<br>3、目前比对的标杆均为和CPU进行比对,暂不支持直接NPU和GPU比对
5
+ | 功能名(英文) | 简介 | 适用场景/优势 | 当前版本局限性 |
6
+ | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
7
+ | [数据采集<br>(dump)](./05.data_dump_PyTorch.md) | 采集模型训练过程中的API或Module层级的前反向输入输出数据,包括层次关系、统计值信息、真实数据和调用栈等。 | 1、将模型中训练的API或Module的前反向输入输出数据保存下来分析<br> 2、模型出现溢出时,可用于查看哪些API或Module出现了溢出 | 1、API级数据采集仅支持白名单列表上的API<br>2、工具会做一些同步操作,引入工具可能会导致一些同步问题消失<br>3、当前对inplace操作API或Module的支持度有限<br>4、暂不支持参数及参数梯度的采集 |
8
+ | [离线预检<br>(api_accuracy_checker)](./07.accuracy_checker_PyTorch.md) | 为网络中每个API创建用例,检验其精度,并根据不同比对算法综合判定API在NPU上的精度是否达标,快速找出精度差异API。 | 1、对模型中所有的API做精度初步排查<br>2、精度排查不受模型累计误差影响 | 1、依赖GPU环境<br>2、不支持通信算子<br>3、仅支持部分融合算子 |
9
+ | [整网比对<br>(compare)](./10.accuracy_compare_PyTorch.md) | 计算模型整网NPU和标杆设备的精度误差指标,标记精度异常API或Module,助力快速定位精度问题根因。 | 1、整网比对定位精度可疑算子 | 1、由于使用整网dump数据,定位的可疑算子受累计误差影响<br>2、当模型规模较大时,比对所需时间较长 |
10
+ | [在线预检<br>(online_api_accuracy_checker)](./08.accuracy_checker_online_PyTorch.md) | 通过TCP通信或共享存储空间的方式,进行在线精度预检,解决离线预检大数据量落盘、传输困难痛点。 | 1、使用离线预检,数据量较大落盘困难或传输耗时长时,可通过在线预检进行精度排查 | 1、依赖GPU环境,NPU和GPU能够通信<br>2、重计算模式下,不支持反向aten算子预检 |
11
+ | [溢出检查<br>(overflow_checker)](./12.overflow_check_PyTorch.md) | 检测模型计算过程的输入输出,并在溢出时落盘数据,助力用户快速定位溢出位置。 | 1、当模型出现溢出时,用于快速定位最先溢出的API或Module<br>2、相比数据采集,性能更优,磁盘压力更小 | 1、局限性同数据采集 |
12
+ | [数据解析<br>(parse_tool)](./14.data_parse_PyTorch.md) | 交互式界面处理解析kernel层级dump数据,便于查看分析。 | 1、比对kernel层级dump数据的一致性 | 1、仅限于NPU |
13
+ | [无标杆比对<br>(free_benchmark)](./15.free_benchmarking_PyTorch.md) | 不依赖标杆数据,通过对算子输入增加微小扰动,计算扰动后输出与原始输出的相对误差,识别有精度风险算子。 | 1、无标杆数据场景下的算子精度排查<br>2、对个别算子进行升精度、“to cpu”等操作,以验证其对模型loss的影响 | 1、由于需要拷贝输入进行二次执行,所以在遇到大张量的输入时容易发生显存OOM的问题, 特别是反向比对过程。建议结合白名单使用<br>2、比对会延长训练时间,整网比对可能会造成严重的耗时膨胀,建议结合白名单使用 |
14
+ | [梯度状态监测<br>(grad_probe)](./17.grad_probe.md) | 可导出模型权重梯度数据并对比相似度,助力确认训练过程精度问题step和反向中的异常。 | 1、需要分析梯度数据时<br>2、需要定位发生问题的step时 | 暂无 |
15
+ | [在线精度比对<br>(online_dispatch)](./18.online_dispatch.md) | 训练过程中直接完成NPU和CPU的精度比对并输出比对结果。 | 1、执行一次就可获取NPU和CPU分别执行后的精度比对结果 | 暂无 |
16
+ | [训练状态监控<br>(monitor)](./19.monitor.md) | 收集模型训练过程中的激活值、梯度和优化器状态,助力分析计算、通信、优化器各部分异常情况。 | 1、通过监控模块级统计量指标,快速定位异常模块位置,如loss出现nan | 1、仅支持模块级别统计量指标分析<br>2、仅支持megatron、deepspeed框架<br>3、少量增加时间和显存膨胀 |
17
+ | [可视化比对<br>(visualization) ](./21.visualization_PyTorch.md) | 解析dump的精度数据,还原模型图结构,比对各层级精度数据,助力理解模型结构、分析精度问题。 | 1、整网精度比对定位可疑算子,通过浏览器展示比对结果,支持快速搜索到可疑算子<br>2、支持查看模型层级结果,比对模型层级结构差异 | 1、由于使用整网dump数据,定位的可疑算子受累计误差影响<br>2、当模型规模较大时,比对所需时间较长 |
18
+ | [单API自动生成脚本<br>(generate_operator) ](./23.generate_operator_PyTorch.md) | 解析dump的精度数据,提取可疑的API算子,自动生成单API复现脚本,并根据不同的API采用不同的比对算法,给定最终比对结果数据;帮助开发者分析算子精度问题。 | 1、该工具支持从整网dump下来的数据中提取可疑算子,并自动生成单API脚本<br>2、除了支持复现单API的前反向过程,同时会根据不同的API选择不同的比对方法,并给出比对结果 | 1、不支持通信算子<br>2、融合算子需手动修改脚本进行适配<br>3、目前比对的标杆均为和CPU进行比对,暂不支持直接NPU和GPU比对 |
19
19
 
20
20
  ## 2 MindSpore框架
21
21
 
22
- | 功能名(英文) | 简介 | 适用场景/优势 | 当前版本局限性 |
23
- |----------------------------------------------------------------------|-------------------------------------------------------------------|------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|
24
- | [数据采集<br>(dump)](./06.data_dump_MindSpore.md) | 采集模型训练过程中的API或Cell层级的前反向输入输出数据,包括层次关系、统计值信息、真实数据和调用栈等。 | 1、将模型中训练的API或Cell的前反向输入输出数据保存下来分析<br> 2、模型出现溢出时,可用于查看哪些API或Cell出现了溢出 | 1、API级数据采集仅支持白名单列表上的API<br>2、当前对inplace操作API或Cell的支持度有限<br>3、暂不支持参数及参数梯度的采集 |
25
- | [离线预检<br>(api_accuracy_checker)](./09.accuracy_checker_MindSpore.md) | 为网络中每个API创建用例,检验其精度,并根据不同比对算法综合判定API在NPU上的精度是否达标,快速找出精度差异API。 | 1、对模型中所有的API做精度初步排查<br>2、精度排查不受模型累计误差影响 | 1、仅针对MindSpore.mint API |
26
- | [整网比对<br>(compare)](./11.accuracy_compare_MindSpore.md) | NPU精度数据与标杆数据的比对,支持MindSpore框架内和与PyTorch跨框架的比对,助力快速定位精度异常API或Cell。 | 1、MindSpore同框架静态图比对<br>2、MindSpore同框架动态图比对<br>3、MindSpore vs PyTorch跨框架动态图比对 | 1、部分PyTorch的API关联不到MindSpore,需要手动配置映射关系 |
27
- | [溢出检查<br>(overflow_checker)](./13.overflow_check_MindSpore.md) | 检测模型计算过程的输入输出,并在溢出时落盘数据,助力用户快速定位溢出位置。 | 1、当模型出现溢出时,可用于定位最先溢出的API或Cell或kernel<br>2、相比数据采集,性能更优,磁盘压力更小 | 1、除具有与数据采集功能相同的局限性外,动态图场景下,不支持 Primitive 和 Jit 类 API 的检测<br>2、动态图场景下,仅支持检测API或Cell级别溢出<br>3、静态图场景下,仅支持检测kernel级别溢出 |
28
- | [无标杆比对<br>(free_benchmark)](./16.free_benchmarking_MindSpore.md) | 不依赖标杆数据,通过对算子输入增加微小扰动,计算扰动后输出与原始输出的相对误差,识别有精度风险算子。 | 1、无标杆数据场景下的算子精度排查<br>2、对个别算子进行升精度修复,验证其对模型loss的影响 | 1、仅支持动态图场景<br>2、由于需要拷贝输入进行二次执行,所以在遇到大张量的输入时容易发生显存OOM的问题, 特别是反向比对过程。建议结合白名单使用<br>3、比对会延长训练时间,整网比对可能会造成严重的耗时膨胀,建议结合白名单使用<br>4、不支持“to cpu”操作,不支持预热功能 |
29
- | [可视化比对<br>(visualization) ](./22.visualization_MindSpore.md) | 解析dump的精度数据,还原模型图结构,比对各层级精度数据,助力理解模型结构、分析精度问题。 | 1、整网精度比对定位可疑算子,通过浏览器展示比对结果,支持快速搜索到可疑算子<br>2、支持查看模型层级结果,比对模型层级结构差异 | 1、由于使用整网dump数据,定位的可疑算子受累计误差影响<br>2、当模型规模较大时,比对所需时间较长 |
22
+ | 功能名(英文) | 简介 | 适用场景/优势 | 当前版本局限性 |
23
+ | ---------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
24
+ | [数据采集 <br>(dump)](./06.data_dump_MindSpore.md) | 采集模型训练过程中的API或Cell层级的前反向输入输出数据,包括层次关系、统计值信息、真实数据和调用栈等。 | 1、将模型中训练的API或Cell的前反向输入输出数据保存下来分析 <br> 2、模型出现溢出时,可用于查看哪些API或Cell出现了溢出 | 1、API级数据采集仅支持白名单列表上的API <br>2、当前对inplace操作API或Cell的支持度有限 <br>3、暂不支持参数及参数梯度的采集 |
25
+ | [离线预检 <br>(api_accuracy_checker)](./09.accuracy_checker_MindSpore.md) | 为网络中每个API创建用例,检验其精度,并根据不同比对算法综合判定API在NPU上的精度是否达标,快速找出精度差异API。 | 1、对模型中所有的API做精度初步排查 <br>2、精度排查不受模型累计误差影响 | 1、仅针对MindSpore.mint API |
26
+ | [整网比对 <br>(compare)](./11.accuracy_compare_MindSpore.md) | NPU精度数据与标杆数据的比对,支持MindSpore框架内和与PyTorch跨框架的比对,助力快速定位精度异常API或Cell。 | 1、MindSpore同框架静态图比对 <br>2、MindSpore同框架动态图比对 <br>3、MindSpore vs PyTorch跨框架动态图比对 | 1、部分PyTorch的API关联不到MindSpore,需要手动配置映射关系 |
27
+ | [溢出检查 <br>(overflow_checker)](./13.overflow_check_MindSpore.md) | 检测模型计算过程的输入输出,并在溢出时落盘数据,助力用户快速定位溢出位置。 | 1、当模型出现溢出时,可用于定位最先溢出的API或Cell或kernel <br>2、相比数据采集,性能更优,磁盘压力更小 | 1、除具有与数据采集功能相同的局限性外,动态图场景下,不支持 Primitive 和 Jit 类 API 的检测 <br>2、动态图场景下,仅支持检测API或Cell级别溢出 <br>3、静态图场景下,仅支持检测kernel级别溢出 |
28
+ | [无标杆比对 <br>(free_benchmark)](./16.free_benchmarking_MindSpore.md) | 不依赖标杆数据,通过对算子输入增加微小扰动,计算扰动后输出与原始输出的相对误差,识别有精度风险算子。 | 1、无标杆数据场景下的算子精度排查 <br>2、对个别算子进行升精度修复,验证其对模型loss的影响 | 1、仅支持动态图场景 <br>2、由于需要拷贝输入进行二次执行,所以在遇到大张量的输入时容易发生显存OOM的问题, 特别是反向比对过程。建议结合白名单使用 <br>3、比对会延长训练时间,整网比对可能会造成严重的耗时膨胀,建议结合白名单使用 <br>4、不支持“to cpu”操作,不支持预热功能 |
29
+ | [可视化比对 <br>(visualization) ](./22.visualization_MindSpore.md) | 解析dump的精度数据,还原模型图结构,比对各层级精度数据,助力理解模型结构、分析精度问题。 | 1、整网精度比对定位可疑算子,通过浏览器展示比对结果,支持快速搜索到可疑算子 <br>2、支持查看模型层级结果,比对模型层级结构差异 | 1、由于使用整网dump数据,定位的可疑算子受累计误差影响 <br>2、当模型规模较大时,比对所需时间较长 |
30
+ | [训练状态监控 <br>(monitor)](./19.monitor.md) | 收集模型训练过程中的激活值、梯度和优化器状态,助力分析计算、通信、优化器各部分异常情况。 | 1、通过监控模块级统计量指标,快速定位异常模块位置,如loss出现nan | 1、仅支持模块级别统计量指标分析 <br>2、仅支持megatron、deepspeed框架 <br>3、少量增加时间和显存膨胀 |
@@ -1,8 +1,19 @@
1
1
  # PyTorch 场景的精度数据采集基线
2
2
 
3
+ ## "statistics"模式(未开启md5)采集时间膨胀参考基线
4
+
5
+ 该基线为PyTorch框架下,使用"statistics"模式采集数据性能膨胀的参考基线。本基线测试了LLAMA2-7B语言大模型在不同采集模式8卡下的时间膨胀。
6
+
7
+ | 采集模式 | 无工具 (耗时) | 加工具但未使能 Dump (耗时) | 加工具并使能 Dump (耗时) |
8
+ |:--------:|:--------:|:--------------------:|:------------------:|
9
+ | L0 | ≈17.4 s | ≈17.4 s (无膨胀) | ≈78.4 s (膨胀4.5倍) |
10
+ | L1 | ≈17.4 s | ≈20.7 s (膨胀1.2倍) | ≈353 s (膨胀20倍) |
11
+ | mix | ≈17.4 s | ≈20.7 s (膨胀1.2倍) | ≈430 s (膨胀24.7 倍) |
12
+
13
+
3
14
  ## "tensor"模式采集数据量参考基线
4
15
 
5
- 该基线为pytorch框架下,使用"tensor"模式采集数据量参考基线。本基线测试了两个模型,分别为LLAMA2-7B和LLAMA2-13B,测试了不同采集模式下,不同global_batch_size下,单卡和8卡下,数据量的变化。
16
+ 该基线为PyTorch框架下,使用"tensor"模式采集数据量参考基线。本基线测试了两个模型,分别为LLAMA2-7B和LLAMA2-13B,测试了不同采集模式下,不同global_batch_size下,单卡和8卡下,数据量的变化。
6
17
 
7
18
  ### LLAMA2-7B
8
19
 
@@ -25,8 +36,8 @@
25
36
  <table>
26
37
  <tr><th>采集模式</th><th>global_batch_size</th><th>单卡</th><th>8卡</th></tr>
27
38
  </td><td rowspan="3">L0</td><td>1</td><td>13GB</td><td>97GB</td></tr>
28
- <tr><td>2</td><td>25B</td><td>194GB</td></tr>
29
- <tr><td>3</td><td>37G</td><td>291GB</td></tr>
39
+ <tr><td>2</td><td>25GB</td><td>194GB</td></tr>
40
+ <tr><td>3</td><td>37GB</td><td>291GB</td></tr>
30
41
  </td><td rowspan="3">L1</td><td>1</td><td>440GB</td><td>3.4TB</td></tr>
31
42
  <tr><td>2</td><td>720GB</td><td>5.4TB</td></tr>
32
43
  <tr><td>3</td><td>960GB</td><td>7.3TB</td></tr>
@@ -268,7 +268,7 @@ dump.json文件中包含以下数据名称:
268
268
 
269
269
  mix级别的dump.json文件同时包括L0和L1级别的dump数据,文件格式与上述示例相同。
270
270
 
271
- ## 2. MindSpore 场景下的 dump.json 文件
271
+ ## 2. MindSpore 场景下的 dump.json 文件
272
272
 
273
273
  ### 2.1 L0 级别
274
274
 
@@ -1,28 +1,33 @@
1
- # 单点保存工具 README
1
+ # 单点保存工具
2
2
 
3
3
  ## 简介
4
- L0, L1, mix dump存在盲区,网络中的非api/module的输入输出不会被批量dump下来。单点保存提供类似np.save和print的功能和使用体验,可以保存指定的变量。同时针对大模型场景进行了增强,具备以下特性:
4
+ L0, L1, mix级别的dump能力存在盲区,网络中的非API或module的输入输出不会被批量dump下来。单点保存提供类似np.save和print的功能和使用体验,可以保存指定的变量。同时针对大模型场景进行了增强,具备以下特性:
5
5
  - 可保存变量的反向梯度结果。
6
6
  - 能直接保存嵌套结构数据(如 list、dict),无需手动遍历。
7
- - 自动分 rank 保存。
7
+ - 自动分 Rank 保存。
8
+ - 可分 Step 保存数据。
8
9
  - 多次调用时会自动计数。
9
- - 可配置保存统计值或者张量。
10
+ - 可配置保存统计值(MindSpore静态图暂不支持)或者张量。
11
+ - 支持异步保存。
10
12
 
11
13
  ## 支持场景
12
- 仅支持 PyTorch 与 MindSpore 的动态图场景。
13
14
 
14
- ## 使能方式
15
+ ## 动态图场景(Pytorch&MindSpore)
15
16
 
16
- ### 配置文件说明
17
+ ### 使能方式
17
18
 
18
- 通用配置:
19
+ #### 配置文件说明
20
+
21
+ 通用配置 (细节详见[通用配置说明](./02.config_introduction.md#11-通用配置) ):
19
22
 
20
23
  | 参数 | 解释 | 是否必选 |
21
24
  | -------- |-------------------------------------------| -------- |
22
25
  | task | dump 的任务类型,str 类型。 单点保存场景仅支持传入"statistics", "tensor"。 | 是 |
23
26
  | level | dump 级别,str 类型,根据不同级别采集不同数据。单点保存场景传入"debug"。 | 是 |
24
- | dump_path | 设置 dump 数据目录路径,str 类型。细节详见[通用配置说明](./02.config_introduction.md#11-通用配置) | 是 |
25
- | rank | 指定对某张卡上的数据进行采集,list[Union[int, str]] 类型。细节详见[通用配置说明](./02.config_introduction.md#11-通用配置) | 否 |
27
+ | dump_path | 设置 dump 数据目录路径,str 类型。 | 是 |
28
+ | rank | 指定对某张卡上的数据进行采集,list[Union[int, str]] 类型。 | 否 |
29
+ | step | 指定采集某个 Step 的数据,list[Union[int, str]] 类型。 | 否 |
30
+ | async_dump | 异步 dump 开关,bool 类型。 | 否 |
26
31
 
27
32
  "statistics" 任务子配置项:
28
33
  | 参数 | 解释 | 是否必选 |
@@ -31,19 +36,21 @@ L0, L1, mix dump存在盲区,网络中的非api/module的输入输出不会被
31
36
 
32
37
  "tensor" 任务无子配置项。
33
38
 
34
- ### 接口调用说明
35
-
36
- 调用PrecisionDebugger.save,传入需要保存的变量,指定变量名称以及是否需要保存反向数据。接口入参说明详见[pytorch单点保存接口](./05.data_dump_PyTorch.md#19-save),[mindspore单点保存接口](./06.data_dump_MindSpore.md#615-save)
39
+ #### 接口调用说明
37
40
 
38
- ### 实例(以pytorch场景为例)
41
+ 调用PrecisionDebugger.save,传入需要保存的变量,指定变量名称以及是否需要保存反向数据。接口入参说明详见[PyTorch单点保存接口](./05.data_dump_PyTorch.md#19-save),[MindSpore单点保存接口](./06.data_dump_MindSpore.md#615-save)
39
42
 
43
+ #### 实例
44
+ (以PyTorch场景为例,MindSpore场景只需要从msprobe.mindspore模块导包即可)
40
45
  配置文件
41
46
  ```json
42
47
  {
43
48
  "task": "statistics",
44
49
  "dump_path": "./dump_path",
45
50
  "rank": [],
51
+ "step": [],
46
52
  "level": "debug",
53
+ "async_dump": false,
47
54
  "statistics": {
48
55
  "summary_mode": "statistics"
49
56
  }
@@ -53,7 +60,7 @@ L0, L1, mix dump存在盲区,网络中的非api/module的输入输出不会被
53
60
  初始化
54
61
  ```python
55
62
  # 训练启动py脚本
56
- from mindspore.pytorch import PrecisionDebugger
63
+ from msprobe.pytorch import PrecisionDebugger
57
64
  debugger = PrecisionDebugger("./config.json")
58
65
  for data, label in data_loader:
59
66
  # 执行模型训练
@@ -64,7 +71,7 @@ for data, label in data_loader:
64
71
  初始化(无配置文件)
65
72
  ```python
66
73
  # 训练启动py脚本
67
- from mindspore.pytorch import PrecisionDebugger
74
+ from msprobe.pytorch import PrecisionDebugger
68
75
  debugger = PrecisionDebugger(dump_path="dump_path", level="debug")
69
76
  for data, label in data_loader:
70
77
  # 执行模型训练
@@ -75,20 +82,104 @@ for data, label in data_loader:
75
82
  调用保存接口
76
83
  ```python
77
84
  # 训练过程中被调用py文件
78
- from mindspore.pytorch import PrecisionDebugger
85
+ from msprobe.pytorch import PrecisionDebugger
79
86
  dict_variable = {"key1": "value1", "key2": [1, 2]}
80
87
  PrecisionDebugger.save(dict_variable, "dict_variable", save_backward=False)
81
88
 
82
89
  ```
83
90
 
91
+ ## 静态图场景(MindSpore)
92
+
93
+ ### 使能方式
94
+
95
+ #### 接口调用说明
96
+ 工具提供两个对外接口`save`和`save_grad`,分别用于保存训练中的tensor以及tensor对应的反向数据
97
+ | 接口名称 | 入参 | device | MindSpore版本 |备注 |
98
+ | ------- | ------ | -------------- | --------------|--------------------------------------------------- |
99
+ | save | save_dir name, data | Ascend | >= 2.6.0 | (主流场景)图模式下只支持Ascend,pynative下支持Ascend/GPU/CPU。 |
100
+ | save_grad | save_dir, name, data | Ascend | >= 2.6.0 | (主流场景)图模式下只支持Ascend,pynative下支持Ascend/GPU/CPU。 |
101
+
102
+
103
+ ----
104
+ > 函数原型:
105
+ `save(save_dir:str, name:str, data)`
106
+ - save_dir:表示要保存的目录。
107
+ - name :表示要保存的文件标志名称。
108
+ - data :表示数据入参,可以是`mindspore.Tensor`或者是`List`,`Tuple`,`Dict`等嵌套结构。
109
+
110
+ > 函数原型:
111
+ `save_grad(save_dir:str, name:str, data)`
112
+ - save_dir:表示要保存的目录。
113
+ - name :表示要保存的文件标志名称。
114
+ - data :表示数据入参,**只能**是`mindspore.Tensor`。
115
+
116
+ #### 实例
117
+
118
+ - save接口使用:
119
+
120
+ ```python
121
+ # save api usage
122
+ # **first import**
123
+ from msprobe.mindspore import save
124
+
125
+
126
+ class Net(nn.Cell):
127
+ def construct(self, x, y, z):
128
+ # **use save api**
129
+ save("./test_dump", 'x', x)
130
+ return x * y * z
131
+
132
+ x = Tensor([1, 2], ms.float32)
133
+ y = Tensor([-2, 3], ms.float32)
134
+ z = Tensor([0, 3], ms.float32)
135
+ net = Net()
136
+ output = grad(net, grad_position=(1, 2))(x, y, z)
137
+ time.sleep(1)
138
+
139
+ # then will generate **./test_dump/step0/rank0/x_float32_0.npy**
140
+ ```
141
+
142
+ - save_grad接口使用:
143
+
144
+ ```python
145
+ # save_grad usage
146
+ # **first import**
147
+ from msprobe.mindspore import save_grad
148
+ class Net(nn.Cell):
149
+ def construct(self, x, y, z):
150
+ # **use save api** the return value of save_grad must be received by origin
151
+ z = save_grad("./test_dump", 'z', z)
152
+ return x * y * z
153
+
154
+ x = Tensor([1, 2], ms.float32)
155
+ y = Tensor([-2, 3], ms.float32)
156
+ z = Tensor([0, 3], ms.float32)
157
+ net = Net()
158
+ output = grad(net, grad_position=(1, 2))(x, y, z)
159
+ time.sleep(1)
160
+
161
+ # then will generate **./test_dump/step0/rank0/z_grad_float32_0.npy**
162
+ ```
163
+ **注意**save_grad需要将返回值回传给原tensor,此操作不会有精度影响,只会传递原值。
164
+
165
+
84
166
  ## 输出结果
167
+ ### 动态图场景(Pytorch&MindSpore)
85
168
  * **"task" 配置为 "statistics" 场景** :在 dump 目录下会生成包含变量统计值信息的 `debug.json` 文件。
86
- * **"task" 配置为 "tensor" 场景** :除了在 dump 目录下生成包含变量统计值信息的 `debug.json` 文件外,还会在 dump 子目录 `dump_tensor_data` 中保存张量二进制文件,文件名称格式为 `{variable_name}{grad_flag}.{count}.tensor.{indexes}.{file_suffix}`。
169
+ `debug.json` 中统计值的key命名格式为 `{variable_name}{grad_flag}.{count}.debug`。
170
+ * **"task" 配置为 "tensor" 场景** :除了在 dump 目录下生成包含变量统计值信息的 `debug.json` 文件外,还会在 dump 子目录 `dump_tensor_data` 中保存张量二进制文件,文件名称格式为 `{variable_name}{grad_flag}.{count}.debug.{indexes}.{file_suffix}`。
87
171
 
88
172
  - variable_name: 传入save接口的变量名称。
89
173
  - grad_flag: 反向数据标识,反向数据为"_grad",正向数据为""。
90
174
  - count: 调用计数,多次以相同变量名称调用时的计数。
91
- - indexes: 索引,在保存嵌套结构数据时的索引。例如:嵌套结构为`{"key1": "value1", "key2": ["value2", "value3"]}`,"value2"的索引为"key2.0"
92
- - file_suffix:文件后缀,pytorch场景为"pt",mindspore场景为"npy"
175
+ - indexes: 索引,在保存嵌套结构数据时的索引。例如:嵌套结构为`{"key1": "value1", "key2": ["value2", "value3"]}`,"value2"的索引为"key2.0"
176
+ - file_suffix:文件后缀,PyTorch场景为"pt",MindSpore场景为"npy"
177
+
178
+ ### 静态图场景(MindSpore)
179
+ 在指定目录`save_dir`下生成`{step}/{rank}`目录,目录下生成指定`{name}`的npy文件,如果是save_grad接口调用,则会生成`{name}_grad`的npy文件。
180
+
181
+ 如`save("./test_dump", 'x', x)` -> `./test_dump/step0/rank0/x_float32_0.npy`。
182
+
183
+ 或如`z = save_grad("./test_dump", 'z', z)` -> `./test_dump/step0/rank0/z_grad_float32_0.npy`。
93
184
 
94
185
 
@@ -13,7 +13,7 @@ functional: # functional为算子类别,找到对应的类别,在该类别
13
13
  - conv3d
14
14
  ```
15
15
 
16
- 删除 API 的场景:部分模型代码逻辑会存在 API 原生类型校验,工具执行dump操作时,对封装后的模型 API 可能与模型的原生 API 类型不一致,此时可能引发校验失败,详见《[FAQ](FAQ.md)》中“异常情况”的第10和11条。
16
+ 删除 API 的场景:部分模型代码逻辑会存在 API 原生类型校验,工具执行dump操作时,对封装后的模型 API 可能与模型的原生 API 类型不一致,此时可能引发校验失败,详见《[FAQ](FAQ.md#33-异常情况)》中“异常情况”的第10和11条。
17
17
 
18
18
  ## 1. 工具安装
19
19
 
@@ -207,7 +207,7 @@ if __name__ == "__main__":
207
207
  ```
208
208
  * `rank`:设备 ID,每张卡的数据保存在对应的 `rank{ID}` 目录下。非分布式场景下没有 rank ID,目录名称为 rank。
209
209
  * `dump_tensor_data`:保存采集到的张量数据。
210
- * `dump.json`: 保存 API 或 Module 前反向数据的统计量信息。包含 dump 数据的 API 名称或 Module 名称,各数据的 dtype、 shape、max、min、mean、L2norm(L2范数,平方根)统计信息以及当配置 summary_mode="md5" 时的 CRC-32 数据。具体介绍可参考[dump.json文件说明](./27.dump_json_instruction.md#3-MSAdapter场景下的dump.json文件)。
210
+ * `dump.json`: 保存 API 或 Module 前反向数据的统计量信息。包含 dump 数据的 API 名称或 Module 名称,各数据的 dtype、 shape、max、min、mean、L2norm(L2范数,平方根)统计信息以及当配置 summary_mode="md5" 时的 CRC-32 数据。具体介绍可参考[dump.json文件说明](./27.dump_json_instruction.md#3-msadapter-场景下的-dumpjson-文件)。
211
211
  * `stack.json`:API/Module 的调用栈信息。
212
212
  * `construct.json`:分层分级结构,level 为 L1 时,construct.json 内容为空。
213
213
 
@@ -11,9 +11,9 @@ export INF_NAN_MODE_ENABLE=1
11
11
  export MS_ASCEND_CHECK_OVERFLOW_MODE="INFNAN_MODE"
12
12
  ```
13
13
 
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 框架侧配置须一致。
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
- 溢出检测任务的配置示例见["**MindSpore 动态图场景 task 配置为 overflow_check**"](./03.config_examples.md#33-task配置为overflow_check)小节。
16
+ 溢出检测任务的配置示例见["**MindSpore 动态图场景 task 配置为 overflow_check**"](./03.config_examples.md#33-task-配置为-overflow_check)小节。
17
17
 
18
18
 
19
19
  ## 1 接口介绍
@@ -0,0 +1,95 @@
1
+ # config check
2
+
3
+ ## 介绍
4
+
5
+ 该工具主要适用于对比两个环境下可能影响训练精度的配置差异,支持mindspore和pytorch两个框架,包括:
6
+
7
+ - 环境变量
8
+ - 三方库版本
9
+ - 训练超参
10
+ - 权重
11
+ - 数据集
12
+ - 随机操作
13
+
14
+
15
+ ## 安装教程
16
+
17
+ 参见 msprobe [安装教程](./01.installation.md)
18
+
19
+ ## 使用说明
20
+
21
+ 用户需要在两个待比对的训练的环境上分别进行数据采集, 工具会采集两个环境下影响精度的配置,采集结果上传到同一机器进行比对。
22
+
23
+ ### 数据采集
24
+
25
+ #### 静态数据采集
26
+
27
+ 静态数据采集仅支持环境变量,三方库版本及训练超参采集,其中环境变量,三方库版本默认采集,训练超参采集需要用户传入启动训练的 shell 脚本路径或 yaml 配置文件,
28
+ 支持多个输入,不传入表示不采集。
29
+
30
+ 启动命令如下
31
+ ```shell
32
+ msprobe -f pytorch/mindspore config_check -d **.sh **.yaml -o output_path
33
+ ```
34
+ -f 代表训练框架,传入pytorch或mindspore,必选。
35
+
36
+ -d 代表数据采集模式,可传入启动训练的 shell 脚本路径或 yaml 配置文件路径,可选,不传入代表不采集。
37
+
38
+ -o 代表输出路径,可选,默认为 config_check_pack.zip。
39
+
40
+ #### 动态数据采集
41
+
42
+
43
+ 在训练流程执行到的第一个python脚本开始处插入如下代码:
44
+ ```
45
+ from msprobe.core.config_check import ConfigChecker
46
+ ConfigChecker.apply_patches(fmk)
47
+ ```
48
+
49
+ 说明:
50
+
51
+ - fmk:训练框架。可选 pytorch 和 mindspore ,不传默认为 pytorch。
52
+
53
+ 在模型初始化好之后插入如下代码:
54
+ ```
55
+ from msprobe.core.config_check import ConfigChecker
56
+ ConfigChecker(model, shell_path, output_zip_path, fmk)
57
+ ```
58
+
59
+ 说明:
60
+
61
+ - model:初始化好的模型。不传或缺省就不会采集权重和数据集。
62
+ - shell_path:动态采集模式下支持 **megatron** 训练超参自动捕获,使用 **megatron** 时推荐不传入,其他情况下可传入训练脚本路径,类型为列表,传入一个或多个训练配置/启动脚本。不传或缺省就不会采集超参。
63
+ - output_zip_path:输出zip包的路径,不传默认为"./config_check_pack.zip"。
64
+ - fmk:当前是什么框架。可选 pytorch 和 mindspore ,不传默认为 pytorch。
65
+
66
+ 采集完成后会得到一个zip包,里面包括各项[影响精度的配置](#介绍)。会分rank和step存储,其中step为micro_step。
67
+
68
+ 在另一个环境上执行上述操作,得到另一个zip包
69
+
70
+ ### 数据比对
71
+
72
+ 将两个zip包传到同一个环境下,使用如下命令进行比对:
73
+
74
+ ```shell
75
+ msprobe -f pytorch config_check -c bench_zip_path cmp_zip_path -o output_path
76
+ ```
77
+
78
+ 其中**bench_zip_path** 为标杆侧采集到的数据, **cmp_zip_path** 为待对比侧采集到的数据。
79
+
80
+ **output_path 会被删掉再新建**,不传默认为"./config_check_result", 在 **output_path** 里会生成2个目录和1个文件:
81
+ - bench:bench_zip_path里打包的数据。
82
+ - cmp:cmp_zip_path里打包的数据。
83
+ - result.xlsx:比对结果。里面会有多个sheet页,其中**summary**总览通过情况,其余页是具体检查项的详情。其中step为micro_step。
84
+
85
+ ## 通过标准
86
+
87
+ 以下五项检查通过:
88
+
89
+ - 环境变量
90
+ - 三方库版本
91
+ - 训练超参
92
+ - 权重
93
+ - 数据集
94
+
95
+ 这五项检查在**精度比对**前必须保证达成。
@@ -0,0 +1,69 @@
1
+ # Checkpoint Compare
2
+
3
+ ## 介绍
4
+ 在模型训练过程中或结束后,可能保存一些检查点文件(checkpoint,简称ckpt)记录当前模型、优化器等训练状态, 工具支持比较两个不同的ckpt,评估模型相似度。
5
+
6
+ 当前支持Megatron-LM、MindSpeed(PyTorch/MindTorch)的ckpt比较。支持TP、PP、EP、VPP模型并行;支持megatron.core、megatron.legacy、TransformerEngine的模型实现。
7
+
8
+
9
+ ## 安装教程
10
+
11
+ 参见 msprobe [安装教程](./01.installation.md)
12
+
13
+ ## 使用说明
14
+ Megatron、MindSpeed的ckpt加载依赖megatron,请确保megatron在python环境中或megatron在当前路径下。
15
+
16
+
17
+ 启动命令如下
18
+ ```shell
19
+ msprobe --framework pytorch config_check --compare path1 path2 -o output_path.json
20
+ ```
21
+
22
+ | 参数名 | 解释 | 是否必选 |
23
+ |--------|-------|--------|
24
+ | -f 或 --framework | 深度学习框架,str类型。支持参数:pytorch,mindspore,注意:msadaptor场景传入mindspore。 | 是 |
25
+ | -c 或 --compare | 2个ckpt的路径 | 是 |
26
+ | -o 或 --output | 比对结果输出路径,默认为 ./ckpt_similarity.json。输出路径存在时将报错终止。 | 否 |
27
+
28
+ Megatron-LM 和 MindSpeed 的 ckpt 目录结构如下:
29
+
30
+ ```txt
31
+ directory_name/
32
+ ├── iter_0000005/ # 某个iteration时的ckpt目录。
33
+ │ └── mp_rank_xx_xxx/ # 单个rank的ckpt目录,xx_xxx为模型并行索引。
34
+ │ └── model_optim_rng.pt # 包含模型参数、随机状态等的PyTorch binary文件。
35
+ ├── iter_0000010/
36
+ ├── latest_checkpointed_iteration.txt # 记录最后一个保存的ckpt的纯文本文件。
37
+ ```
38
+
39
+ 对于--compare参数的两个路径,为directory_name时,工具通过latest_checkpointed_iteration.txt自动选择latest checkpoint进行比对. 为directory_name/iter_xxxxxxx时, 工具使用指定iteration的ckpt进行比对。暂不支持单个rank的比对。
40
+
41
+ ## 输出示例
42
+ Checkpoint比对结果以json文件输出,内容如下示例:
43
+ ```json
44
+ {
45
+ "decoder.layers.0.input_layernorm.weight": {
46
+ "l2": 0.0,
47
+ "cos": 0.999999,
48
+ "numel": 128,
49
+ "shape": [
50
+ 128
51
+ ]
52
+ },
53
+ "decoder.layers.0.pre_mlp_layernorm.weight": {
54
+ "l2": 0.012,
55
+ "cos": 0.98,
56
+ "numel": 128,
57
+ "shape": [
58
+ 128
59
+ ]
60
+ }
61
+ }
62
+ ```
63
+
64
+ 统计量 | 解释 |
65
+ |-------|---------|
66
+ | l2 | 欧式距离,$\|\|a-b\|\|_2$ |
67
+ | cos | 余弦相似度, $\frac{<a,b>}{\|\|a\|\|_2\|\|b\|\|_2}$ |
68
+ | numel | 参数的元素个数 |
69
+ | shape | 参数的shape |