mindstudio-probe 1.1.0__py3-none-any.whl → 1.2.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.
- {mindstudio_probe-1.1.0.dist-info → mindstudio_probe-1.2.1.dist-info}/METADATA +7 -6
- mindstudio_probe-1.2.1.dist-info/RECORD +396 -0
- {mindstudio_probe-1.1.0.dist-info → mindstudio_probe-1.2.1.dist-info}/WHEEL +1 -1
- {mindstudio_probe-1.1.0.dist-info → mindstudio_probe-1.2.1.dist-info}/entry_points.txt +0 -1
- msprobe/CMakeLists.txt +5 -0
- msprobe/README.md +51 -20
- msprobe/config.json +2 -3
- msprobe/core/advisor/advisor.py +8 -3
- msprobe/core/common/const.py +264 -15
- msprobe/core/common/exceptions.py +27 -3
- msprobe/core/common/file_utils.py +176 -26
- msprobe/core/common/inplace_op_checker.py +15 -0
- msprobe/core/common/inplace_ops.yaml +3 -0
- msprobe/core/common/log.py +27 -9
- msprobe/core/common/utils.py +204 -77
- msprobe/core/common_config.py +49 -14
- msprobe/core/compare/acc_compare.py +274 -198
- msprobe/core/compare/check.py +32 -33
- msprobe/core/compare/compare_cli.py +32 -14
- msprobe/core/compare/highlight.py +283 -127
- msprobe/core/compare/layer_mapping/__init__.py +19 -0
- msprobe/core/compare/layer_mapping/data_scope_parser.py +246 -0
- msprobe/core/compare/layer_mapping/layer_mapping.py +249 -0
- msprobe/core/compare/layer_mapping/postprocess_pass.py +95 -0
- msprobe/core/compare/merge_result/merge_result.py +380 -0
- msprobe/core/compare/merge_result/merge_result_cli.py +31 -0
- msprobe/core/compare/multiprocessing_compute.py +2 -2
- msprobe/core/compare/npy_compare.py +135 -144
- msprobe/core/compare/utils.py +419 -274
- msprobe/core/data_dump/data_collector.py +60 -28
- msprobe/core/data_dump/data_processor/base.py +84 -36
- msprobe/core/data_dump/data_processor/factory.py +5 -3
- msprobe/core/data_dump/data_processor/mindspore_processor.py +152 -18
- msprobe/core/data_dump/data_processor/pytorch_processor.py +267 -110
- msprobe/core/data_dump/json_writer.py +29 -1
- msprobe/core/data_dump/scope.py +119 -39
- msprobe/core/grad_probe/constant.py +27 -13
- msprobe/core/grad_probe/grad_compare.py +18 -1
- msprobe/core/grad_probe/utils.py +30 -2
- msprobe/core/overflow_check/abnormal_scene.py +189 -0
- msprobe/core/overflow_check/api_info.py +55 -0
- msprobe/core/overflow_check/checker.py +138 -0
- msprobe/core/overflow_check/filter.py +157 -0
- msprobe/core/overflow_check/ignore_rules.yaml +55 -0
- msprobe/core/overflow_check/level.py +22 -0
- msprobe/core/overflow_check/utils.py +28 -0
- msprobe/docs/01.installation.md +96 -7
- msprobe/docs/02.config_introduction.md +50 -23
- msprobe/docs/03.config_examples.md +2 -9
- msprobe/docs/04.kernel_dump_PyTorch.md +73 -0
- msprobe/docs/05.data_dump_PyTorch.md +93 -61
- msprobe/docs/06.data_dump_MindSpore.md +200 -95
- msprobe/docs/07.accuracy_checker_PyTorch.md +28 -28
- msprobe/docs/08.accuracy_checker_online_PyTorch.md +1 -6
- msprobe/docs/09.accuracy_checker_MindSpore.md +44 -8
- msprobe/docs/10.accuracy_compare_PyTorch.md +114 -50
- msprobe/docs/11.accuracy_compare_MindSpore.md +340 -48
- msprobe/docs/12.overflow_check_PyTorch.md +2 -2
- msprobe/docs/13.overflow_check_MindSpore.md +6 -6
- msprobe/docs/15.free_benchmarking_PyTorch.md +4 -5
- msprobe/docs/16.free_benchmarking_MindSpore.md +56 -37
- msprobe/docs/17.grad_probe.md +5 -6
- msprobe/docs/19.monitor.md +561 -0
- msprobe/docs/20.monitor_performance_baseline.md +52 -0
- msprobe/docs/21.visualization_PyTorch.md +466 -0
- msprobe/docs/22.visualization_MindSpore.md +481 -0
- msprobe/docs/23.generate_operator_PyTorch.md +107 -0
- msprobe/docs/24.code_mapping_Mindspore.md +28 -0
- msprobe/docs/25.tool_function_introduction.md +29 -0
- msprobe/docs/26.data_dump_PyTorch_baseline.md +37 -0
- msprobe/docs/27.dump_json_instruction.md +521 -0
- msprobe/docs/FAQ.md +29 -2
- msprobe/docs/accuracy_checker_MindSpore/accuracy_checker_MindSpore_baseline.md +14 -0
- msprobe/docs/data_dump_MindSpore/data_dump_MindSpore_baseline.md +22 -0
- msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md +211 -0
- msprobe/docs/img/compare_result.png +0 -0
- msprobe/docs/img/merge_result.png +0 -0
- msprobe/docs/img/monitor/cpu_info.png +0 -0
- msprobe/docs/img/visualization/fuzzy_match_ms.png +0 -0
- msprobe/docs/img/visualization/fuzzy_match_pt.png +0 -0
- msprobe/docs/img/visualization/tensorboard_1.png +0 -0
- msprobe/docs/img/visualization/tensorboard_2.png +0 -0
- msprobe/docs/img/visualization/vis_browser_1.png +0 -0
- msprobe/docs/img/visualization/vis_browser_2.png +0 -0
- msprobe/docs/img/visualization/vis_precision_info.png +0 -0
- msprobe/docs/img/visualization/vis_search_info.png +0 -0
- msprobe/docs/img/visualization/vis_show_info.png +0 -0
- msprobe/docs/img/visualization/vis_showcase.png +0 -0
- msprobe/docs/img/visualization/vis_unmatch_info.png +0 -0
- msprobe/docs/visualization/GPTModel.png +0 -0
- msprobe/docs/visualization/ParallelMLP.png +0 -0
- msprobe/docs/visualization/layer_mapping_example.md +132 -0
- msprobe/docs/visualization/mapping.png +0 -0
- msprobe/docs/visualization/mapping1.png +0 -0
- msprobe/docs/visualization/module_name.png +0 -0
- msprobe/docs/visualization/module_name1.png +0 -0
- msprobe/docs/visualization/no_mapping.png +0 -0
- msprobe/docs/visualization/no_mapping1.png +0 -0
- msprobe/docs/visualization/no_mapping_analyze.png +0 -0
- msprobe/docs/visualization/top_layer.png +0 -0
- msprobe/mindspore/__init__.py +25 -0
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +151 -151
- msprobe/mindspore/api_accuracy_checker/api_info.py +21 -6
- msprobe/mindspore/api_accuracy_checker/api_runner.py +43 -18
- msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +21 -7
- msprobe/mindspore/api_accuracy_checker/checker_support_api.yaml +77 -0
- msprobe/mindspore/api_accuracy_checker/cmd_parser.py +64 -1
- msprobe/mindspore/api_accuracy_checker/compute_element.py +64 -31
- msprobe/mindspore/api_accuracy_checker/data_manager.py +301 -0
- msprobe/mindspore/api_accuracy_checker/main.py +28 -3
- msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +212 -0
- msprobe/mindspore/api_accuracy_checker/multi_data_manager.py +60 -0
- msprobe/mindspore/api_accuracy_checker/type_mapping.py +22 -5
- msprobe/mindspore/api_accuracy_checker/utils.py +34 -17
- msprobe/mindspore/cell_processor.py +33 -12
- msprobe/mindspore/code_mapping/bind.py +264 -0
- msprobe/mindspore/code_mapping/cmd_parser.py +40 -0
- msprobe/mindspore/code_mapping/graph.py +49 -0
- msprobe/mindspore/code_mapping/graph_parser.py +226 -0
- msprobe/mindspore/code_mapping/main.py +24 -0
- msprobe/mindspore/code_mapping/processor.py +34 -0
- msprobe/mindspore/common/const.py +35 -13
- msprobe/mindspore/common/log.py +5 -9
- msprobe/mindspore/common/utils.py +88 -4
- msprobe/mindspore/compare/distributed_compare.py +22 -24
- msprobe/mindspore/compare/ms_compare.py +333 -268
- msprobe/mindspore/compare/ms_graph_compare.py +95 -52
- msprobe/mindspore/debugger/debugger_config.py +7 -1
- msprobe/mindspore/debugger/precision_debugger.py +87 -12
- msprobe/mindspore/dump/dump_tool_factory.py +3 -1
- msprobe/mindspore/dump/hook_cell/api_registry.py +95 -18
- msprobe/mindspore/dump/hook_cell/hook_cell.py +60 -38
- msprobe/mindspore/dump/hook_cell/primitive_hooks.py +45 -30
- msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +36 -1
- msprobe/mindspore/dump/hook_cell/wrap_api.py +92 -1
- msprobe/mindspore/dump/jit_dump.py +17 -5
- msprobe/mindspore/dump/kernel_dump/kernel_config.py +33 -0
- msprobe/mindspore/dump/kernel_graph_dump.py +9 -4
- msprobe/mindspore/dump/kernel_kbyk_dump.py +2 -4
- msprobe/mindspore/dym_loader/hook_dynamic_loader.cc +140 -0
- msprobe/mindspore/dym_loader/hook_dynamic_loader.h +53 -0
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +156 -41
- msprobe/mindspore/free_benchmark/common/handler_params.py +1 -2
- msprobe/mindspore/free_benchmark/common/utils.py +19 -4
- msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +0 -204
- msprobe/mindspore/free_benchmark/handler/base_handler.py +3 -3
- msprobe/mindspore/free_benchmark/handler/check_handler.py +4 -5
- msprobe/mindspore/free_benchmark/handler/fix_handler.py +4 -4
- msprobe/mindspore/free_benchmark/handler/handler_factory.py +4 -4
- msprobe/mindspore/free_benchmark/perturbation/add_noise.py +2 -2
- msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +15 -6
- msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +2 -2
- msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +2 -2
- msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +13 -6
- msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +2 -2
- msprobe/mindspore/free_benchmark/self_check_tool_factory.py +2 -2
- msprobe/mindspore/grad_probe/global_context.py +28 -8
- msprobe/mindspore/grad_probe/grad_analyzer.py +50 -24
- msprobe/mindspore/grad_probe/grad_monitor.py +16 -1
- msprobe/mindspore/grad_probe/grad_stat_csv.py +33 -5
- msprobe/mindspore/grad_probe/hook.py +35 -12
- msprobe/mindspore/grad_probe/utils.py +18 -5
- msprobe/mindspore/mindtorch/__init__.py +18 -0
- msprobe/mindspore/mindtorch/mindtorch_adaptor.py +255 -0
- msprobe/mindspore/ms_config.py +27 -16
- msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +9 -4
- msprobe/mindspore/runtime.py +15 -0
- msprobe/mindspore/service.py +285 -113
- msprobe/mindspore/task_handler_factory.py +15 -0
- msprobe/msprobe.py +48 -10
- msprobe/pytorch/__init__.py +8 -6
- msprobe/pytorch/api_accuracy_checker/common/config.py +62 -0
- msprobe/pytorch/api_accuracy_checker/common/utils.py +31 -16
- msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +41 -8
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +103 -271
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_standard.yaml +4 -1
- msprobe/pytorch/api_accuracy_checker/compare/compare.py +69 -68
- msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +54 -0
- msprobe/pytorch/api_accuracy_checker/compare/compare_input.py +51 -0
- msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +2 -4
- msprobe/pytorch/api_accuracy_checker/generate_op_script/config_op.json +9 -0
- msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +478 -0
- msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +365 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/absolute_threshold.py +106 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/accumulative_error_compare.py +107 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/base_standard.py +151 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/benchmark_compare.py +226 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/binary_consistency.py +68 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/standard_config.py +218 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/standard_register.py +104 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/thousandth_standard.py +63 -0
- msprobe/pytorch/api_accuracy_checker/precision_standard/ulp_compare.py +200 -0
- msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +63 -2
- msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +21 -15
- msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +54 -22
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +140 -71
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +49 -8
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +9 -24
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +4 -12
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +5 -3
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/dump_dispatch.py +9 -4
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +3 -11
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +2 -2
- msprobe/pytorch/bench_functions/confusion_transpose.py +5 -1
- msprobe/pytorch/bench_functions/matmul_backward.py +12 -0
- msprobe/pytorch/bench_functions/npu_fusion_attention.py +142 -16
- msprobe/pytorch/bench_functions/rotary_mul.py +4 -0
- msprobe/pytorch/bench_functions/swiglu.py +10 -2
- msprobe/pytorch/common/parse_json.py +7 -6
- msprobe/pytorch/common/utils.py +101 -7
- msprobe/pytorch/compare/distributed_compare.py +17 -30
- msprobe/pytorch/compare/pt_compare.py +44 -22
- msprobe/pytorch/debugger/debugger_config.py +46 -27
- msprobe/pytorch/debugger/precision_debugger.py +42 -12
- msprobe/pytorch/dump/kernel_dump/kernel_config.py +33 -0
- msprobe/pytorch/dump/module_dump/module_dump.py +86 -0
- msprobe/pytorch/{module_processer.py → dump/module_dump/module_processer.py} +81 -10
- msprobe/pytorch/free_benchmark/common/constant.py +15 -0
- msprobe/pytorch/free_benchmark/common/counter.py +15 -0
- msprobe/pytorch/free_benchmark/common/enums.py +15 -0
- msprobe/pytorch/free_benchmark/common/params.py +10 -2
- msprobe/pytorch/free_benchmark/common/utils.py +29 -4
- msprobe/pytorch/free_benchmark/compare/grad_saver.py +20 -5
- msprobe/pytorch/free_benchmark/compare/single_benchmark.py +2 -0
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +3 -1
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +6 -4
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +2 -0
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +4 -0
- msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +41 -47
- msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +6 -5
- msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +0 -4
- msprobe/pytorch/grad_probe/grad_monitor.py +23 -6
- msprobe/pytorch/grad_probe/grad_stat_csv.py +40 -10
- msprobe/pytorch/hook_module/__init__.py +1 -1
- msprobe/pytorch/hook_module/hook_module.py +14 -11
- msprobe/pytorch/hook_module/register_optimizer_hook.py +59 -0
- msprobe/pytorch/hook_module/support_wrap_ops.yaml +35 -0
- msprobe/pytorch/hook_module/wrap_distributed.py +6 -8
- msprobe/pytorch/hook_module/wrap_functional.py +0 -38
- msprobe/pytorch/monitor/__init__.py +0 -0
- msprobe/pytorch/monitor/anomaly_analyse.py +201 -0
- msprobe/pytorch/monitor/anomaly_detect.py +425 -0
- msprobe/pytorch/monitor/csv2tb.py +166 -0
- msprobe/pytorch/monitor/distributed/__init__.py +0 -0
- msprobe/pytorch/monitor/distributed/distributed_ops.yaml +19 -0
- msprobe/pytorch/monitor/distributed/stack_blacklist.yaml +5 -0
- msprobe/pytorch/monitor/distributed/wrap_distributed.py +283 -0
- msprobe/pytorch/monitor/features.py +108 -0
- msprobe/pytorch/monitor/module_hook.py +1076 -0
- msprobe/pytorch/monitor/module_metric.py +172 -0
- msprobe/pytorch/monitor/module_spec_verifier.py +95 -0
- msprobe/pytorch/monitor/optimizer_collect.py +333 -0
- msprobe/pytorch/monitor/unittest/__init__.py +0 -0
- msprobe/pytorch/monitor/unittest/test_monitor.py +160 -0
- msprobe/pytorch/monitor/utils.py +321 -0
- msprobe/pytorch/monitor/visualizer.py +59 -0
- msprobe/pytorch/online_dispatch/__init__.py +2 -3
- msprobe/pytorch/online_dispatch/compare.py +29 -38
- msprobe/pytorch/online_dispatch/dispatch.py +58 -27
- msprobe/pytorch/online_dispatch/dump_compare.py +21 -9
- msprobe/pytorch/online_dispatch/single_compare.py +53 -32
- msprobe/pytorch/online_dispatch/torch_ops_config.yaml +1 -1
- msprobe/pytorch/online_dispatch/utils.py +49 -21
- msprobe/pytorch/parse_tool/lib/compare.py +21 -27
- msprobe/pytorch/parse_tool/lib/config.py +6 -8
- msprobe/pytorch/parse_tool/lib/file_desc.py +15 -1
- msprobe/pytorch/parse_tool/lib/interactive_cli.py +10 -10
- msprobe/pytorch/parse_tool/lib/parse_exception.py +7 -7
- msprobe/pytorch/parse_tool/lib/parse_tool.py +12 -12
- msprobe/pytorch/parse_tool/lib/utils.py +33 -53
- msprobe/pytorch/parse_tool/lib/visualization.py +11 -10
- msprobe/pytorch/pt_config.py +31 -8
- msprobe/pytorch/service.py +188 -108
- msprobe/visualization/__init__.py +14 -0
- msprobe/visualization/builder/__init__.py +14 -0
- msprobe/visualization/builder/graph_builder.py +222 -0
- msprobe/visualization/builder/msprobe_adapter.py +227 -0
- msprobe/visualization/compare/__init__.py +14 -0
- msprobe/visualization/compare/graph_comparator.py +180 -0
- msprobe/visualization/compare/mode_adapter.py +197 -0
- msprobe/visualization/graph/__init__.py +14 -0
- msprobe/visualization/graph/base_node.py +119 -0
- msprobe/visualization/graph/distributed_analyzer.py +318 -0
- msprobe/visualization/graph/graph.py +209 -0
- msprobe/visualization/graph/node_colors.py +95 -0
- msprobe/visualization/graph/node_op.py +39 -0
- msprobe/visualization/graph_service.py +288 -0
- msprobe/visualization/utils.py +217 -0
- mindstudio_probe-1.1.0.dist-info/RECORD +0 -287
- msprobe/docs/04.acl_config_examples.md +0 -78
- msprobe/mindspore/compare/layer_mapping.py +0 -146
- msprobe/mindspore/compare/modify_mapping.py +0 -107
- msprobe/mindspore/free_benchmark/decorator/dec_forward.py +0 -57
- msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +0 -122
- msprobe/pytorch/functional/module_dump.py +0 -84
- {mindstudio_probe-1.1.0.dist-info → mindstudio_probe-1.2.1.dist-info}/LICENSE +0 -0
- {mindstudio_probe-1.1.0.dist-info → mindstudio_probe-1.2.1.dist-info}/top_level.txt +0 -0
- /msprobe/mindspore/{free_benchmark/decorator → code_mapping}/__init__.py +0 -0
- /msprobe/pytorch/{functional → dump/module_dump}/__init__.py +0 -0
|
@@ -10,15 +10,14 @@
|
|
|
10
10
|
|
|
11
11
|
### 1.1 通用配置
|
|
12
12
|
|
|
13
|
-
| 参数 | 解释
|
|
14
|
-
| -----------------
|
|
15
|
-
| task | dump 的任务类型,str 类型。可选参数:<br/> "statistics":仅采集统计信息,默认值;<br/> "tensor":采集统计信息和完全复刻整网的真实数据;<br/> "run_ut":精度预检,仅 PyTorch 场景支持,采集数据时勿选;<br/> "overflow_check":溢出检测;<br/> "free_benchmark"
|
|
16
|
-
| dump_path | 设置 dump 数据目录路径,str 类型。<br/> **配置示例**:"dump_path": "./dump_path"。
|
|
17
|
-
| rank | 指定对某张卡上的数据进行采集,list[Union[int, str]] 类型,默认未配置(表示采集所有卡的数据),应配置元素为 ≥0 的整数或类似"4-6"的字符串,且须配置实际可用的 Rank ID。<br/> PyTorch 场景: Rank ID 从 0 开始计数,最大取值为所有节点可用卡总数-1,若所配置的值大于实际训练所运行的卡的 Rank ID,则 dump 数据为空,比如当前环境 Rank ID 为 0 到 7,实际训练运行 0 到 3 卡,此时若配置 Rank ID 为 4 或不存在的 10 等其他值,dump 数据为空。<br/> MindSpore 场景:所有节点的 Rank ID 均从 0 开始计数,最大取值为每个节点可用卡总数-1,config.json 配置一次 rank 参数对所有节点同时生效。<br/>**配置示例**:"rank": [1, "4-6"]。
|
|
18
|
-
| step | 指定采集某个 step 的数据,list[Union[int, str]] 类型。默认未配置,表示采集所有 step 数据。采集特定 step 时,须指定为训练脚本中存在的 step,可逐个配置,也可以指定范围。<br/> **配置示例**:"step": [0, 1 , 2, "4-6"]。
|
|
19
|
-
| level | dump 级别,str 类型,根据不同级别采集不同数据。可选参数:<br/>"L0":dump 模块级精度数据,仅 PyTorch 与 MindSpore 动态图场景支持,使用背景详见 [1.1.1 模块级精度数据 dump 说明](#111-模块级精度数据-dump-说明);<br/>"L1":dump API 级精度数据,默认值,仅 PyTorch 与 MindSpore 动态图场景支持;<br/>"L2":dump kernel 级精度数据,PyTorch
|
|
20
|
-
|
|
|
21
|
-
| enable_dataloader | 自动控制开关,bool 类型,仅 PyTorch 场景支持。可选参数 true(开启)或 false(关闭),默认为 false。配置为 true 后自动识别 step 参数指定的迭代,并在该迭代执行完成后退出训练,此时 start、stop 和 step 函数可不配置,开启该开关要求训练脚本是通过 torch.utils.data.dataloader 方式加载数据。仅支持 PyTorch 单卡训练使用,分布式训练场景下存在数据 dump 不全问题。 | 否 |
|
|
13
|
+
| 参数 | 解释 | 是否必选 |
|
|
14
|
+
| ----------------- |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
|
|
15
|
+
| task | dump 的任务类型,str 类型。可选参数:<br/> "statistics":仅采集统计信息,默认值;<br/> "tensor":采集统计信息和完全复刻整网的真实数据;<br/> "run_ut":精度预检,仅 PyTorch 场景支持,采集数据时勿选;<br/> "overflow_check":溢出检测;<br/> "free_benchmark":无标杆比对;<br/> "grad_probe":梯度监控。<br/> 根据 task 参数取值的不同,可以配置不同场景参数,详见:<br/>[1.2 task 配置为 statistics](#12-task-配置为-statistics),<br/>[1.3 task 配置为 tensor](#13-task-配置为-tensor),<br/>[1.4 task 配置为 run_ut](#14-task-配置为-run_ut),<br/>[1.5 task 配置为 overflow_check](#15-task-配置为-overflow_check),<br/>[1.6 task 配置为 free_benchmark](#16-task-配置为-free_benchmark),<br/>[1.7 task 配置为 grad_probe](#17-task-配置为-grad_probe)。 <br/> **配置示例**:"task": "tensor"。 | 否 |
|
|
16
|
+
| dump_path | 设置 dump 数据目录路径,str 类型。<br/> **配置示例**:"dump_path": "./dump_path"。 | 是 |
|
|
17
|
+
| rank | 指定对某张卡上的数据进行采集,list[Union[int, str]] 类型,默认未配置(表示采集所有卡的数据),应配置元素为 ≥0 的整数或类似"4-6"的字符串,且须配置实际可用的 Rank ID。<br/> PyTorch 场景: Rank ID 从 0 开始计数,最大取值为所有节点可用卡总数-1,若所配置的值大于实际训练所运行的卡的 Rank ID,则 dump 数据为空,比如当前环境 Rank ID 为 0 到 7,实际训练运行 0 到 3 卡,此时若配置 Rank ID 为 4 或不存在的 10 等其他值,dump 数据为空。<br/> MindSpore 场景:所有节点的 Rank ID 均从 0 开始计数,最大取值为每个节点可用卡总数-1,config.json 配置一次 rank 参数对所有节点同时生效。<br/> 注意,单卡训练时,rank必须为[],即空列表,不能指定rank。<br/>**配置示例**:"rank": [1, "4-6"]。 | 否 |
|
|
18
|
+
| step | 指定采集某个 step 的数据,list[Union[int, str]] 类型。默认未配置,表示采集所有 step 数据。采集特定 step 时,须指定为训练脚本中存在的 step,可逐个配置,也可以指定范围。<br/> **配置示例**:"step": [0, 1 , 2, "4-6"]。 | 否 |
|
|
19
|
+
| level | dump 级别,str 类型,根据不同级别采集不同数据。可选参数:<br/>"L0":dump 模块级精度数据,仅 PyTorch 与 MindSpore 动态图场景支持,使用背景详见 [1.1.1 模块级精度数据 dump 说明](#111-模块级精度数据-dump-说明);<br/>"L1":dump API 级精度数据,默认值,仅 PyTorch 与 MindSpore 动态图场景支持;<br/>"L2":dump kernel 级精度数据,PyTorch场景详细介绍见 [PyTorch 场景的 kernel dump 说明](./04.kernel_dump_PyTorch.md);<br/>"mix":dump module 模块级和 API 级精度数据,即"L0"+"L1",仅 PyTorch 与 MindSpore 动态图场景支持。<br/> **配置示例**:"level": "L1"。 | 否 |
|
|
20
|
+
| enable_dataloader | 自动控制开关,bool 类型,仅 PyTorch 场景支持。可选参数 true(开启)或 false(关闭),默认为 false。配置为 true 后自动识别 step 参数指定的迭代,并在该迭代执行完成后退出训练,此时 start、stop 和 step 函数可不配置,开启该开关要求训练脚本是通过 torch.utils.data.dataloader 方式加载数据。仅支持 PyTorch 单卡训练使用,分布式训练场景下存在数据 dump 不全问题。 **这个特性下个版本将被废弃** | 否 |
|
|
22
21
|
|
|
23
22
|
#### 1.1.1 模块级精度数据 dump 说明
|
|
24
23
|
|
|
@@ -34,19 +33,21 @@
|
|
|
34
33
|
|
|
35
34
|
<table>
|
|
36
35
|
<tr><th>参数</th><th>解释</th><th>是否必选</th></tr>
|
|
37
|
-
<tr><td>scope</td><td>PyTorch 和 MindSpore 动态图场景 dump 范围,list[str] 类型,默认未配置(list 也未配置时表示 dump 所有 API 的数据)。该参数可以在 [ ] 内配置两个模块名或 API
|
|
36
|
+
<tr><td>scope</td><td>PyTorch 和 MindSpore 动态图场景 dump 范围,list[str] 类型,默认未配置(list 也未配置时表示 dump 所有 API 的数据)。该参数可以在 [ ] 内配置两个模块名或 API 名,要求列表长度必须为2,需要配置按照工具命名格式的完整模块名或API名称,用于锁定区间,dump 该范围内的数据。<br/><b>配置示例</b>:
|
|
37
|
+
"scope": ["Module.conv1.Conv2d.forward.0", "Module.fc2.Linear.forward.0"],
|
|
38
|
+
或 "scope": ["Cell.conv1.Conv2d.forward.0", "Cell.fc2.Dense.backward.0"], 或"scope": ["Tensor.add.0.forward", "Functional.square.2.forward"]。与 level 参数取值相关,level 为 L0 级别时,可配置模块名;level 为 L1 级别时,可配置 API 名, level为 mix 级别时,可配置为模块名或API名。</td><td>否</td></tr>
|
|
38
39
|
<tr><td rowspan="4">list</td><td>自定义采集的算子列表,list[str] 类型,默认未配置(scope 也未配置时表示 dump 所有 API 的数据),包含以下配置方法:</td><td rowspan="4">否</td></tr>
|
|
39
|
-
<tr><td>PyTorch 和 MindSpore 动态图场景配置具体的 API 全称,dump 该 API
|
|
40
|
-
<
|
|
40
|
+
<tr><td>PyTorch 和 MindSpore 动态图场景配置具体的 API 全称,dump 该 API 数据。在 PyTorch 场景,如果 level 配置成 L2,该配置为必填项。<br/><b>配置示例</b>:"list": ["Tensor.permute.1.forward", "Tensor.transpose.2.forward", "Torch.relu.3.backward"]。<br/> PyTorch 和 MindSpore 动态图场景在level为 mix 级别时可以配置模块名称,dump该模块展开数据 (dump该模块从执行开始到执行结束期间的所有数据)。
|
|
41
|
+
<br/><b>配置示例</b>:"list": ["Module.module.language_model.encoder.layers.0.mlp.ParallelMlp.forward.0"], 或 "list": ["Cell.network_with_loss.language_model.encoder.layers.0.mlp.ParallelMlp.forward.0"]</td></tr>
|
|
42
|
+
<tr><td>PyTorch 和 MindSpore 动态图场景指定某一类 API,dump 某一类的 API 级别输入输出数据。<br/><b>配置示例</b>:"list": ["relu"]。 <br/> PyTorch 和 MindSpore 动态图场景在level为 mix 级别时, 会dump名称中包含list中配置的字符串的API数据,还会将名称中包含list中配置的字符串的模块进行展开dump (dump该模块从执行开始到执行结束期间的所有数据)。</td></tr>
|
|
41
43
|
<tr><td>MindSpore 静态图场景配置 kernel_name,可以是算子的名称列表,也可以指定算子类型("level": "L2"时不支持),还可以配置算子名称的正则表达式(当字符串符合“name-regex(xxx)”格式时,后台则会将其作为正则表达式。<br/><b>配置示例</b>:list: ["name-regex(Default/.+)"]<br/>可匹配算子名称以“Default/”开头的所有算子。</td></tr>
|
|
42
44
|
<tr><td rowspan="3">data_mode</td><td>dump 数据过滤,str 类型。</td><td rowspan="3">否</td></tr>
|
|
43
|
-
<tr><td>PyTorch
|
|
44
|
-
<tr><td>MindSpore
|
|
45
|
-
<tr><td>summary_mode</td><td>控制 dump 文件输出的模式,str 类型,仅 PyTorch
|
|
45
|
+
<tr><td>PyTorch 与 MindSpore 动态图场景:支持"all"、"forward"、"backward"、"input"和"output",除"all"外,其余参数可以自由组合。默认为["all"],即保存所有 dump 的数据。<br/> <b>配置示例</b>:"data_mode": ["backward"] (仅保存反向数据)或 "data_mode": ["forward", "input"](仅保存前向的输入数据)。</td></tr>
|
|
46
|
+
<tr><td>MindSpore 静态图场景:仅支持"all"、"input"和"output"参数,且各参数只能单独配置,不支持自由组合。<br/><b>配置示例</b>:"data_mode": ["all"]。</td></tr>
|
|
47
|
+
<tr><td rowspan="2">summary_mode</td><td>控制 dump 文件输出的模式,str 类型,仅 PyTorch 与 MindSpore 动态图场景支持,可选参数:<br/> md5:dump 输出包含 CRC-32 值以及 API 统计信息的 dump.json 文件,用于验证数据的完整性;<br/> statistics:dump 仅输出包含 API 统计信息的 dump.json 文件,默认值。<br/><b>配置示例</b>:"summary_mode": "md5"。</td><td rowspan="2">否</td><tr><td>MindSpore静态图jit_level=O2场景L2级dump,支持上述配置的同时额外支持配置统计项列表,可选统计项为max、min、mean、l2norm,可从中任意选取组合搭配。其中mean、l2norm的结果为float数据格式。<br/><b>配置示例</b>:"summary_mode": ["max", "min"]。</td></tr></tr>
|
|
46
48
|
</table>
|
|
47
49
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
**说明**:"summary_mode"配置为"md5"时,所使用的校验算法为CRC-32算法。
|
|
50
51
|
|
|
51
52
|
### 1.3 task 配置为 tensor
|
|
52
53
|
|
|
@@ -54,11 +55,8 @@
|
|
|
54
55
|
| -------------- | ---------------------- | -------- |
|
|
55
56
|
| scope | 与[ 1.2 task 配置为 statistics ](#12-task-配置为-statistics)中的解释相同。 | 否 |
|
|
56
57
|
| list | 与[ 1.2 task 配置为 statistics ](#12-task-配置为-statistics)中的解释相同。 | 否 |
|
|
57
|
-
| backward_input | 首次运行训练采集得到反向 API 输入的 dump 文件,list[str] 类型,仅支持 PyTorch 场景的 kernel dump,默认未配置。例如,若需要采集 Functional.conv2d.1 API 反向过程的输入输出,则需要在 dump 目录下查找命名包含 Functional.conv2d.1、backward 和 input 字段的 dump 文件。<br/>**配置示例**:"backward_input": ["./npu_dump/step0/rank0/dump_tensor_data/Functional.conv2d.1.backward.input.0.pt"] | 否 |
|
|
58
|
-
| list | 与[ 1.2 task 配置为 statistics ](#12-task-配置为-statistics)中的解释相同。另外,<br/> PyTorch 和 MindSpore 动态图场景配置 kernel_api,dump 前向和反向 API 的kernel_api 级别数据,其中 dump 反向 API 时需要配置 **backward_input** 参数。<br/>**前向 API 配置示例**:"list": ["Tensor.permute.1.forward"];<br/>**反向 API 配置示例**:"list": ["Tensor.permute.1.forward"], "backward.input": ["./npu_dump/step0/rank0/Functional.conv2d.1.backward.input.0.pt"]。<br/> | 否 |
|
|
59
|
-
| backward_input | 该输入文件为首次运行训练 dump 得到反向 API 输入的 dump 文件,list[str] 类型,仅 PyTorch 场景支持,默认未配置。例如若需要 dump Functional.conv2d.1 API 的反向过程的输入输出,则需要在 dump 目录下查找命名包含 Functional.conv2d.1、backward 和 input 字段的 dump 文件。<br/>**配置示例**:"backward_input": ["./npu_dump/step0/rank0/Functional.conv2d.1.backward.input.0.pt"] | 否 |
|
|
60
58
|
| data_mode | 与[ 1.2 task 配置为 statistics ](#12-task-配置为-statistics)中的解释相同 | 否 |
|
|
61
|
-
| file_format | tensor 数据的保存格式,str 类型,仅支持 MindSpore 静态图场景的 L2
|
|
59
|
+
| file_format | tensor 数据的保存格式,str 类型,仅支持 MindSpore 静态图场景的 L2 级别配置该字段,其他场景不生效。可选参数:<br/> "bin":dump 的 tensor 文件为二进制格式;<br/>"npy":dump 的 tensor 文件后缀为 .npy,默认值。 | 否 |
|
|
62
60
|
| online_run_ut<sup>a</sup> | 在线预检模式开关,bool 类型,可选参数 true(开启)、false(关闭),默认未配置,表示关闭。配置为 true 表示开启在线预检。| 否 |
|
|
63
61
|
| nfs_path<sup>a</sup> | 在线预检模式共享存储目录路径,str 类型,用于 GPU 设备和 NPU 设备间进行通信。仅在 online_run_ut 字段配置为 true 时生效,配置该参数后 host 和 port 不生效。 | 否 |
|
|
64
62
|
| host<sup>a</sup> | 在线预检模式局域网场景信息接收端 IP,str 类型,用于 GPU 设备和 NPU 设备间进行通信,NPU 侧须配置为 GPU 侧的局域网 IP 地址。仅在 online_run_ut 字段配置为 true 时生效,局域网场景时,不能配置 nfs_path 参数,否则局域网场景不生效。 | 否 |
|
|
@@ -85,7 +83,7 @@
|
|
|
85
83
|
|
|
86
84
|
### 1.5 task 配置为 overflow_check
|
|
87
85
|
|
|
88
|
-
PyTorch 与 MindSpore 动态图场景下,"level"须为"L1";MindSpore 静态图场景下,"level"须为"L2",且模型编译优化等级(jit_level)须为"O2"。
|
|
86
|
+
PyTorch 与 MindSpore 动态图场景下,"level"须为"L0"或"L1";MindSpore 静态图场景下,"level"须为"L2",且模型编译优化等级(jit_level)须为"O2"。
|
|
89
87
|
|
|
90
88
|
| 参数 | 解释 | 是否必选 |
|
|
91
89
|
| ------------- | ---------------------- | -------- |
|
|
@@ -112,7 +110,7 @@ PyTorch 与 MindSpore 动态图场景下,"level"须为"L1";MindSpore 静态
|
|
|
112
110
|
<tr><td>pert_mode</td><td>无标杆扰动因子,str 类型。可选参数:<br/> "improve_precision":对输入做升精度,默认值;<br/> "add_noise":对输入增加噪声;<br/> "no_change":不加扰动直接二次执行;<br/> "bit_noise":输入的末位比特翻转,MindSpore 场景不支持 BF16 类型的向量;<br/> "change_value":输入的张量首尾值调换;<br/> "to_cpu":在 CPU 等价执行(仅 PyTorch 场景支持)。<br/><b>配置示例</b>:"pert_mode": "improve_precision"。</td><td>否</td></tr>
|
|
113
111
|
<tr><td>handler_type</td><td>处理类型,可选参数:<br/> "check":进行无标杆比对检查,默认值;<br/> "fix":将扰动后的 API 输出结果覆盖原始 API 输出结果,尝试将 Loss 曲线恢复正常,该模式下不支持预热功能与反向过程,且仅支持"improve_precision"、"to_cpu"( PyTorch 场景)两种扰动因子。<br/> <b>配置示例</b>:"handler_type": "check"。</td><td>否</td></tr>
|
|
114
112
|
<tr><td>fuzz_level</td><td>无标杆数据 dump 级别,即选择比对结果文件应输出的表头属性,当前仅支持取值为:"L1"。输出结果详见 <a href="#161-无标杆比对数据存盘格式">1.6.1 无标杆比对数据存盘格式</a>。</td><td>否</td></tr>
|
|
115
|
-
<tr><td>fuzz_stage</td><td>比对过程,选择对 API 前向或反向进行无标杆比对,可选参数:<br/> "forward":前向,默认值;<br/> "backward"
|
|
113
|
+
<tr><td>fuzz_stage</td><td>比对过程,选择对 API 前向或反向进行无标杆比对,可选参数:<br/> "forward":前向,默认值;<br/> "backward":反向。当 fuzz_stage 为 "backward" 时,handler_type 只能为 "check"。<br/> <b>配置示例</b>:"fuzz_stage": "backward"。</td><td>否</td></tr>
|
|
116
114
|
<tr><td>if_preheat</td><td>预热功能(仅 PyTorch 场景支持),bool 类型。开启功能后工具可以根据每次迭代的输出调整精度算法的阈值,从而更准确地找出存在精度问题的 API。当"handler_type": "fix"时,不支持预热。可选参数:<br/> true(开启)或 false(关闭),默认关闭。<br/> <b>配置示例</b>:"if_preheat": "true"。</td><td>否</td></tr>
|
|
117
115
|
<tr><td>preheat_step</td><td>开启预热的迭代数量(仅 PyTorch 场景支持),int 类型,默认值为 15。须配置 "if_preheat": "true"。</td><td>否</td></tr>
|
|
118
116
|
<tr><td>max_sample</td><td>每个算子预热的采样次数的最大阈值(仅 PyTorch 场景支持),int 类型,默认值为 20。须配置 "if_preheat": "true"。</td><td>否</td></tr>
|
|
@@ -135,3 +133,32 @@ PyTorch 与 MindSpore 动态图场景下,"level"须为"L1";MindSpore 静态
|
|
|
135
133
|
| dtype | 输入的 dtype,string 类型。 |
|
|
136
134
|
| shape | 输入的 shape,tuple 类型。 |
|
|
137
135
|
| output_index | 如果输出为列表或元组,其中一个元素检测不一致,则会有该元素的 index,否则为空,int 类型。 |
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
### 1.7 task 配置为 grad_probe
|
|
139
|
+
|
|
140
|
+
**参数说明**
|
|
141
|
+
|
|
142
|
+
| 参数 | 说明 | 输入类型 | 是否必选 |
|
|
143
|
+
|--------------------------------|-----------------------------------|-----------------|----------|
|
|
144
|
+
| task | 填为"grad_probe"。 | str | 是 |
|
|
145
|
+
| dump_path | 输出目录。如果不存在就会创建一个新目录。 | str | 是 |
|
|
146
|
+
| rank | rank id列表,在多卡场景下,表示需要导出梯度数据的进程的rank id。列表为空就表示导出所有rank的数据。默认为空。采集特定 rank 时,须指定为训练脚本中存在的 rank_id,可逐个配置,也可以指定范围。<br/> **配置示例**:"rank": [0, 1 , 2, "4-6"]。(MindSpore静态图模式下,当前暂不支持指定rank功能) | list[Union[int, str]] | 否 |
|
|
147
|
+
| step | step列表,表示需要导出数据的step列表。列表为空就表示导出所有step的数据。默认为空。采集特定 step 时,须指定为训练脚本中存在的 step,可逐个配置,也可以指定范围。<br/> **配置示例**:"step": [0, 1 , 2, "4-6"]。(MindSpore静态图模式下,当前暂不支持指定step功能) | list[Union[int, str]] | 否 |
|
|
148
|
+
| grad_level | 输出级别。决定导出数据的详细程度,级别越大导出数据越详细。可取值:L0, L1, L2。默认L1。|str | 否 |
|
|
149
|
+
| param_list | 权重名称列表,表示需要监控的权重。列表为空就表示监控所有权重。默认为空。 | List[str] | 否 |
|
|
150
|
+
| bounds | 区间列表,用来划分区间以统计数值的分布。需要保证由数据小到大排列,并且列表中的元素需要在int64取值范围内。可以使用默认值[-1, 0, 1]。 | List[float, int] | 否 |
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
**不同级别的level的导出数据**
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
| 级别 | 特征数据表头 | 是否有方向数据 |
|
|
157
|
+
| ---- | ------------------------------------------------------------ | -------------- |
|
|
158
|
+
| L0 | ("param_name", "MD5", "max", "min", "norm", "shape") | 否 |
|
|
159
|
+
| L1 | ("param_name", "max", "min", "norm", "shape") | 是 |
|
|
160
|
+
| L2 | ("param_name", *intervals, "=0", "max", "min", "norm", "shape") | 是 |
|
|
161
|
+
|
|
162
|
+
intervals就是根据值分布bounds划分出的区间。
|
|
163
|
+
MindSpore静态图模式下,L0级别中暂不支持"MD5"
|
|
164
|
+
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
"rank": [],
|
|
14
14
|
"step": [],
|
|
15
15
|
"level": "L1",
|
|
16
|
-
"enable_dataloader": false,
|
|
17
16
|
|
|
18
17
|
"statistics": {
|
|
19
18
|
"scope": [],
|
|
@@ -33,13 +32,11 @@
|
|
|
33
32
|
"rank": [],
|
|
34
33
|
"step": [],
|
|
35
34
|
"level": "L1",
|
|
36
|
-
"enable_dataloader": false,
|
|
37
35
|
|
|
38
36
|
"tensor": {
|
|
39
37
|
"scope": [],
|
|
40
38
|
"list":[],
|
|
41
|
-
"data_mode": ["all"]
|
|
42
|
-
"backward_input": []
|
|
39
|
+
"data_mode": ["all"]
|
|
43
40
|
}
|
|
44
41
|
}
|
|
45
42
|
```
|
|
@@ -53,7 +50,6 @@
|
|
|
53
50
|
"rank": [],
|
|
54
51
|
"step": [],
|
|
55
52
|
"level": "L1",
|
|
56
|
-
"enable_dataloader": false,
|
|
57
53
|
|
|
58
54
|
"run_ut": {
|
|
59
55
|
"white_list": [],
|
|
@@ -72,7 +68,6 @@
|
|
|
72
68
|
"rank": [],
|
|
73
69
|
"step": [],
|
|
74
70
|
"level": "L1",
|
|
75
|
-
"enable_dataloader": false,
|
|
76
71
|
|
|
77
72
|
"overflow_check": {
|
|
78
73
|
"overflow_nums": 1
|
|
@@ -89,7 +84,6 @@
|
|
|
89
84
|
"rank": [],
|
|
90
85
|
"step": [],
|
|
91
86
|
"level": "L1",
|
|
92
|
-
"enable_dataloader": false,
|
|
93
87
|
|
|
94
88
|
"free_benchmark": {
|
|
95
89
|
"scope": [],
|
|
@@ -138,8 +132,7 @@
|
|
|
138
132
|
|
|
139
133
|
"tensor": {
|
|
140
134
|
"list":[],
|
|
141
|
-
"data_mode": ["all"]
|
|
142
|
-
"backward_input": []
|
|
135
|
+
"data_mode": ["all"]
|
|
143
136
|
}
|
|
144
137
|
}
|
|
145
138
|
```
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# PyTorch 场景的 kernel dump 说明
|
|
2
|
+
|
|
3
|
+
当使用 msprobe 数据采集功能时,level 配置为 "L2" 表示采集 kernel 层级的算子数据,仅支持昇腾 NPU 平台。
|
|
4
|
+
|
|
5
|
+
本文主要介绍 kernel dump 的配置示例和采集结果介绍, msprobe 数据采集功能的详细使用参考 《[PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)》。
|
|
6
|
+
|
|
7
|
+
## 1 kernel dump 配置示例
|
|
8
|
+
|
|
9
|
+
使用 kernel dump 时,list 必须要填一个 API 名称,kernel dump 目前每个 step 只支持采集一个 API 的数据。
|
|
10
|
+
API 名称填写参考 L1 dump 结果文件 dump.json 中的API名称,命名格式为:`{api_type}.{api_name}.{API调用次数}.{forward/backward}`。
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"task": "tensor",
|
|
15
|
+
"dump_path": "/home/data_dump",
|
|
16
|
+
"level": "L2",
|
|
17
|
+
"rank": [],
|
|
18
|
+
"step": [],
|
|
19
|
+
"tensor": {
|
|
20
|
+
"scope": [],
|
|
21
|
+
"list": ["Functional.linear.0.backward"]
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 2 结果文件介绍
|
|
27
|
+
|
|
28
|
+
### 2.1 采集结果说明
|
|
29
|
+
|
|
30
|
+
如果 API kernel 级数据采集成功,会打印以下信息:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
The kernel data of {api_name} is dumped successfully.
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
注意:如果打印该信息后,没有数据生成,参考**常见问题3.1**进行排查。
|
|
37
|
+
|
|
38
|
+
如果 kernel dump 遇到不支持的 API, 会打印以下信息:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
The kernel dump does not support the {api_name} API.
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
其中 {api_name} 是对应溢出的 API 名称。
|
|
45
|
+
|
|
46
|
+
### 2.2 输出文件说明
|
|
47
|
+
kernel dump 采集成功后,会在指定的 dump_path 目录下生成如下文件:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
├── /home/data_dump/
|
|
51
|
+
│ ├── step0
|
|
52
|
+
│ │ ├── 20241201103000 # 日期时间格式,表示2024-12-01 10:30:00
|
|
53
|
+
│ │ │ ├── 0 # 表示 device id
|
|
54
|
+
│ │ │ │ ├──{op_type}.{op_name}.{task_id}.{stream_id}.{timestamp} # kernel 层算子数据
|
|
55
|
+
│ │ │ ...
|
|
56
|
+
│ │ ├── kernel_config_{device_id}.json # kernel dump 在接口调用过程中生成的中间文件,一般情况下无需关注
|
|
57
|
+
│ │ ...
|
|
58
|
+
│ ├── step1
|
|
59
|
+
│ ...
|
|
60
|
+
```
|
|
61
|
+
成功采集到数据后,可以使用 msprobe 工具提供的《[PyTorch 场景的数据解析](./14.data_parse_PyTorch.md)》功能分析数据。
|
|
62
|
+
|
|
63
|
+
## 3 常见问题
|
|
64
|
+
|
|
65
|
+
#### 3.1 采集结果文件为空,有可能是什么原因?
|
|
66
|
+
|
|
67
|
+
1. 首先需要确认工具使用方式、配置文件内容、list 填写的 API 名称格式是否都正确无误。
|
|
68
|
+
|
|
69
|
+
2. 其次需要确认 API 是否运行在昇腾 NPU 上,如果是运行在其他设备上则不会存在 kernel 级数据。
|
|
70
|
+
|
|
71
|
+
3. 如果排除上述两点仍然没有数据,您可以使用《[Ascend Extension for PyTorch 插件](https://gitee.com/ascend/pytorch)》提供的
|
|
72
|
+
torch_npu.npu 接口进行 kernel 层数据采集,工具的 kernel dump 也是基于其中的init_dump、set_dump和finalize_dump三个子接口实现的。
|
|
73
|
+
torch_npu.npu 接口详细描述见《[torch_npu.npu API 概述](https://www.hiascend.com/document/detail/zh/Pytorch/60RC3/apiref/apilist/ptaoplist_000192.html)》。
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
msprobe 工具主要通过在训练脚本内添加 dump 接口、启动训练的方式采集精度数据。
|
|
4
4
|
|
|
5
|
+
dump的'tensor'模式采集数据量大小,可以参考[数据量基线](./26.data_dump_PyTorch_baseline.md)。
|
|
6
|
+
|
|
5
7
|
本工具提供固定的 API 支持列表,若需要删除或增加 dump 的 API,可以在 msprobe/pytorch/hook_module/support_wrap_ops.yaml 文件内手动修改,如下示例:
|
|
6
8
|
|
|
7
9
|
```yaml
|
|
@@ -11,6 +13,8 @@ functional: # functional为算子类别,找到对应的类别,在该类别
|
|
|
11
13
|
- conv3d
|
|
12
14
|
```
|
|
13
15
|
|
|
16
|
+
删除API的场景:部分模型代码逻辑会存在API原生类型校验,工具执行dump操作时,对模型的API封装可能与模型的原生API类型不一致,此时可能引发校验失败,详见《[FAQ](FAQ.md)》中“异常情况”的第10和11条。
|
|
17
|
+
|
|
14
18
|
## 1 接口介绍
|
|
15
19
|
|
|
16
20
|
### 1.1 PrecisionDebugger
|
|
@@ -23,8 +27,12 @@ functional: # functional为算子类别,找到对应的类别,在该类别
|
|
|
23
27
|
PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None, model=None, step=None)
|
|
24
28
|
```
|
|
25
29
|
|
|
26
|
-
1. config_path:指定 dump 配置文件路径;
|
|
27
|
-
2.
|
|
30
|
+
1. config_path:指定 dump 配置文件路径;
|
|
31
|
+
2. model:指定需要采集 Module 级数据的模型,支持传入 torch.nn.Module 或 list[torch.nn.Module] 类型,默认未配置。
|
|
32
|
+
level 配置为"L0"或"mix"时,必须在该接口或 **start** 接口中配置该参数。该参数在将来会从该接口移除,建议在 **start** 接口中配置该参数。
|
|
33
|
+
3. 其他参数均在 [config.json](../config.json) 文件中可配,详细配置可见 [config.json 介绍](./02.config_introduction.md)。
|
|
34
|
+
|
|
35
|
+
此接口的参数均不是必要,且优先级高于 [config.json](../config.json) 文件中的配置,但可配置的参数相比 config.json 较少。
|
|
28
36
|
|
|
29
37
|
### 1.2 start
|
|
30
38
|
|
|
@@ -36,12 +44,16 @@ PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None, model
|
|
|
36
44
|
debugger.start(model=None)
|
|
37
45
|
```
|
|
38
46
|
|
|
39
|
-
1.
|
|
47
|
+
1. model:指定需要采集 Module 级数据的模型,支持传入 torch.nn.Module 或 list[torch.nn.Module] 类型,默认未配置。
|
|
48
|
+
level 配置为"L0"或"mix"时,必须在该接口或 **PrecisionDebugger** 接口中配置该参数。
|
|
40
49
|
本接口中的 model 比 PrecisionDebugger 中 model 参数优先级更高,会覆盖 PrecisionDebugger 中的 model 参数。
|
|
41
50
|
|
|
42
51
|
### 1.3 stop
|
|
43
52
|
|
|
44
|
-
**功能说明**:停止精度数据采集。在 **start**
|
|
53
|
+
**功能说明**:停止精度数据采集。在 **start** 函数之后的任意位置添加。
|
|
54
|
+
若 **stop** 函数添加在反向计算代码(如loss.backward)之后,则会采集 **start** 和该函数之间的前反向数据。
|
|
55
|
+
若 **stop** 函数添加在反向计算代码之前,则需要将 **step** 函数添加到反向计算代码之后,才能采集 **start** 和该函数之间的前反向数据。
|
|
56
|
+
**step** 函数详细介绍见1.5章节。使用示例可参见 [2.1 快速上手](#21-快速上手) 和 [2.2 采集完整的前反向数据](#22-采集完整的前反向数据)。
|
|
45
57
|
|
|
46
58
|
**原型**:
|
|
47
59
|
|
|
@@ -51,7 +63,8 @@ debugger.stop()
|
|
|
51
63
|
|
|
52
64
|
### 1.4 forward_backward_dump_end
|
|
53
65
|
|
|
54
|
-
|
|
66
|
+
**功能说明**:停止精度数据采集。与 **stop** 函数功能相同,该函数在将来会被移除,建议使用 **stop** 函数。
|
|
67
|
+
使用示例可参见 [2.3 采集指定代码块的前反向数据](#23-采集指定代码块的前反向数据)。
|
|
55
68
|
|
|
56
69
|
**原型**:
|
|
57
70
|
|
|
@@ -61,7 +74,8 @@ forward_backward_dump_end()
|
|
|
61
74
|
|
|
62
75
|
### 1.5 step
|
|
63
76
|
|
|
64
|
-
|
|
77
|
+
**功能说明**:结束一个 step 的数据采集,完成所有数据落盘并更新 dump 参数。在一个 step 结束的位置添加,且必须在 **stop** 函数之后的位置调用。
|
|
78
|
+
该函数需要配合 **start** 和 **stop** 函数使用,尽量添加在反向计算代码(如loss.backward)之后,否则可能会导致反向数据丢失。使用示例可参见[2.2 采集完整的前反向数据](#22-采集完整的前反向数据)。
|
|
65
79
|
|
|
66
80
|
**原型**:
|
|
67
81
|
|
|
@@ -101,13 +115,18 @@ module_dump_end()
|
|
|
101
115
|
|
|
102
116
|
**原型**:
|
|
103
117
|
```python
|
|
104
|
-
seed_all(seed=1234, mode=False)
|
|
118
|
+
seed_all(seed=1234, mode=False, rm_dropout=True)
|
|
105
119
|
```
|
|
106
120
|
|
|
107
121
|
**参数说明**:
|
|
108
122
|
|
|
109
123
|
1. seed: 随机性种子。参数示例: seed=1000。默认值:1234。非必选
|
|
110
124
|
2. mode:确定性计算模式。可配置True或False。参数示例:mode=True。默认为False。非必选(注意:确定性计算会导致API执行性能降低,建议在发现模型多次执行结果不同的情况下开启)
|
|
125
|
+
3. rm_dropout:控制dropout失效的开关。可配置 True 或 False,默认值:True,非必选。参数示例:rm_dropout=True。
|
|
126
|
+
该参数设置为 True 后, 工具会自动将 `torch.nn.functional.dropout`、`torch.nn.functional.dropout2d`、`torch.nn.functional.dropout3d`、`torch.nn.Dropout`、`torch.nn.Dropout2d`、`torch.nn.Dropout3d`
|
|
127
|
+
的接口参数 p 置为0,以避免因随机dropout造成的网络随机性。 注意:通过rm_dropout控制dropout失效或生效需要在初始化dropout实例前调用才能生效。
|
|
128
|
+
|
|
129
|
+
当前工具 dump 默认不会固定随机性和使 dropout 失效,若希望每次采集的数据保持一致,建议在 dump 数据前调用 seed_all 接口。
|
|
111
130
|
|
|
112
131
|
seed_all 函数可固定随机数的范围如下表。
|
|
113
132
|
|
|
@@ -126,29 +145,30 @@ seed_all 函数可固定随机数的范围如下表。
|
|
|
126
145
|
| torch.backends.cudnn.enable=False | 关闭 cuDNN |
|
|
127
146
|
| torch.backends.cudnn.benchmark=False | cuDNN 确定性地选择算法 |
|
|
128
147
|
| torch.backends.cudnn.deterministic=True | cuDNN 仅使用确定性的卷积算法 |
|
|
148
|
+
| torch.nn.functional.dropout | 将 dropout 的接口参数 p 置为0 |
|
|
149
|
+
| torch.nn.functional.dropout2d | 将 dropout2d 的接口参数 p 置为0 |
|
|
150
|
+
| torch.nn.functional.dropout3d | 将 dropout3d 的接口参数 p 置为0 |
|
|
151
|
+
| torch.nn.Dropout | 将 Dropout 的接口参数 p 置为0 |
|
|
152
|
+
| torch.nn.Dropout2d | 将 Dropout2d 的接口参数 p 置为0 |
|
|
153
|
+
| torch.nn.Dropout3d | 将 Dropout3d 的接口参数 p 置为0 |
|
|
129
154
|
|
|
130
155
|
需要保证 CPU 或 GPU 以及 NPU 的模型输入完全一致,dump 数据的比对才有意义,seed_all 并不能保证模型输入完全一致,如下表所示场景需要保证输入的一致性。
|
|
131
156
|
|
|
132
157
|
| 场景 | 固定方法 |
|
|
133
158
|
| --------------- | ------------- |
|
|
134
159
|
| 数据集的 shuffle | 关闭 shuffle。 |
|
|
135
|
-
| dropout | 关闭 dropout。 |
|
|
136
160
|
|
|
137
161
|
关闭 shuffle 示例:
|
|
138
162
|
|
|
139
163
|
```python
|
|
140
164
|
train_loader = torch.utils.data.DataLoader(
|
|
141
|
-
train_dataset,
|
|
142
|
-
batch_size
|
|
143
|
-
shuffle
|
|
144
|
-
num_workers
|
|
165
|
+
train_dataset,
|
|
166
|
+
batch_size=batch_size,
|
|
167
|
+
shuffle=False,
|
|
168
|
+
num_workers=num_workers
|
|
145
169
|
)
|
|
146
170
|
```
|
|
147
171
|
|
|
148
|
-
关闭 dropout:
|
|
149
|
-
|
|
150
|
-
在使用 `from msprobe.pytorch import PrecisionDebugger` 后,工具会自动将 `torch.nn.functional.dropout`、`torch.nn.functional.dropout2d`、`torch.nn.functional.dropout3d`、`torch.nn.Dropout`、`torch.nn.Dropout2d`、`torch.nn.Dropout3d` 的接口参数 p 置为0.
|
|
151
|
-
|
|
152
172
|
## 2 示例代码
|
|
153
173
|
|
|
154
174
|
### 2.1 快速上手
|
|
@@ -159,38 +179,43 @@ num_workers = num_workers
|
|
|
159
179
|
# 根据需要import包
|
|
160
180
|
import torch
|
|
161
181
|
import torch.nn as nn
|
|
162
|
-
import torch_npu # 需安装 torch_npu
|
|
163
182
|
import torch.nn.functional as F
|
|
183
|
+
|
|
184
|
+
# 导入工具的数据采集接口
|
|
164
185
|
from msprobe.pytorch import PrecisionDebugger, seed_all
|
|
186
|
+
|
|
165
187
|
# 在模型训练开始前固定随机性
|
|
166
188
|
seed_all()
|
|
189
|
+
# 在模型训练开始前实例化PrecisionDebugger
|
|
190
|
+
debugger = PrecisionDebugger(config_path='./config.json')
|
|
167
191
|
|
|
168
|
-
torch.npu.set_device("npu:0")
|
|
169
192
|
# 定义网络
|
|
170
193
|
class ModuleOP(nn.Module):
|
|
171
194
|
def __init__(self) -> None:
|
|
172
195
|
super().__init__()
|
|
173
|
-
self.linear_1 = nn.Linear(in_features=8,out_features=4)
|
|
174
|
-
self.linear_2 = nn.Linear(in_features=4,out_features=2)
|
|
196
|
+
self.linear_1 = nn.Linear(in_features=8, out_features=4)
|
|
197
|
+
self.linear_2 = nn.Linear(in_features=4, out_features=2)
|
|
175
198
|
|
|
176
|
-
def forward(self,x):
|
|
199
|
+
def forward(self, x):
|
|
177
200
|
x1 = self.linear_1(x)
|
|
178
201
|
x2 = self.linear_2(x1)
|
|
179
202
|
r1 = F.relu(x2)
|
|
180
203
|
return r1
|
|
181
204
|
|
|
182
205
|
if __name__ == "__main__":
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
debugger.start()
|
|
187
|
-
x = torch.randn(10,8)
|
|
188
|
-
out = module(x)
|
|
189
|
-
loss = out.sum()
|
|
190
|
-
loss.backward()
|
|
191
|
-
debugger.stop()
|
|
206
|
+
module = ModuleOP()
|
|
207
|
+
# 开启数据 dump
|
|
208
|
+
debugger.start(model=module)
|
|
192
209
|
|
|
210
|
+
x = torch.randn(10, 8)
|
|
211
|
+
out = module(x)
|
|
212
|
+
loss = out.sum()
|
|
213
|
+
loss.backward()
|
|
214
|
+
|
|
215
|
+
# 关闭数据 dump
|
|
216
|
+
debugger.stop()
|
|
193
217
|
```
|
|
218
|
+
|
|
194
219
|
### 2.2 采集完整的前反向数据
|
|
195
220
|
|
|
196
221
|
```Python
|
|
@@ -203,19 +228,20 @@ debugger = PrecisionDebugger(config_path="./config.json", dump_path="./dump_path
|
|
|
203
228
|
# ...
|
|
204
229
|
# 数据集迭代的位置一般为模型训练开始的位置
|
|
205
230
|
for data, label in data_loader:
|
|
206
|
-
|
|
207
|
-
|
|
231
|
+
debugger.start() # 开启数据dump
|
|
232
|
+
# 如下是模型每个step执行的逻辑
|
|
208
233
|
output = model(data)
|
|
209
234
|
#...
|
|
210
235
|
loss.backward()
|
|
211
|
-
|
|
212
|
-
|
|
236
|
+
debugger.stop() # 关闭数据dump
|
|
237
|
+
debugger.step() # 结束一个step的dump
|
|
213
238
|
```
|
|
214
239
|
|
|
215
240
|
### 2.3 采集指定代码块的前反向数据
|
|
216
241
|
|
|
217
242
|
```Python
|
|
218
243
|
from msprobe.pytorch import PrecisionDebugger, seed_all
|
|
244
|
+
|
|
219
245
|
# 在模型训练开始前固定随机性
|
|
220
246
|
seed_all()
|
|
221
247
|
# 请勿将PrecisionDebugger的初始化流程插入到循环代码中
|
|
@@ -225,14 +251,14 @@ debugger = PrecisionDebugger(config_path="./config.json", dump_path="./dump_path
|
|
|
225
251
|
# ...
|
|
226
252
|
# 数据集迭代的位置一般为模型训练开始的位置
|
|
227
253
|
for data, label in data_loader:
|
|
228
|
-
|
|
229
|
-
|
|
254
|
+
debugger.start() # 开启数据dump
|
|
255
|
+
# 如下是模型每个step执行的逻辑
|
|
230
256
|
output = model(data)
|
|
231
|
-
|
|
232
|
-
|
|
257
|
+
|
|
258
|
+
debugger.forward_backward_dump_end() # 插入该函数到start函数之后,只dump start函数到该函数之间的前反向数据。
|
|
259
|
+
# ...
|
|
233
260
|
loss.backward()
|
|
234
|
-
|
|
235
|
-
debugger.step() # 结束一个step的dump
|
|
261
|
+
debugger.step() # 结束一个step的dump
|
|
236
262
|
```
|
|
237
263
|
|
|
238
264
|
### 2.4 采集函数模块化数据
|
|
@@ -241,11 +267,14 @@ for data, label in data_loader:
|
|
|
241
267
|
# 根据需要import包
|
|
242
268
|
import torch
|
|
243
269
|
import torch.nn as nn
|
|
244
|
-
import torch_npu # 需安装 torch_npu
|
|
245
270
|
import torch.nn.functional as F
|
|
271
|
+
|
|
272
|
+
# 导入工具的数据采集接口
|
|
246
273
|
from msprobe.pytorch import PrecisionDebugger, module_dump, module_dump_end
|
|
247
274
|
|
|
248
|
-
|
|
275
|
+
# 在模型训练开始前实例化PrecisionDebugger
|
|
276
|
+
debugger = PrecisionDebugger(config_path='./config.json')
|
|
277
|
+
|
|
249
278
|
# 定义网络
|
|
250
279
|
class ModuleOP(nn.Module):
|
|
251
280
|
def __init__(self) -> None:
|
|
@@ -261,37 +290,37 @@ class ModuleOP(nn.Module):
|
|
|
261
290
|
|
|
262
291
|
if __name__ == "__main__":
|
|
263
292
|
module = ModuleOP()
|
|
264
|
-
#
|
|
265
|
-
debugger
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
x = torch.randn(10, 8)
|
|
293
|
+
# 开启数据dump
|
|
294
|
+
debugger.start()
|
|
295
|
+
x = torch.randn(10, 8)
|
|
269
296
|
# ... # start和module_dump接口之间的数据正常dump
|
|
270
297
|
module_dump(module, "MyModuleOP") # 开启模块级精度数据dump
|
|
271
|
-
out = module(x) # module内部的child modules或API
|
|
298
|
+
out = module(x) # module内部的child modules或API将不会被dump
|
|
272
299
|
module_dump_end() # 关闭模块级精度数据dump
|
|
273
300
|
loss = out.sum() # module_dump_end和stop接口之间的数据正常dump
|
|
274
|
-
loss.backward()
|
|
275
|
-
|
|
276
|
-
debugger.stop()
|
|
301
|
+
loss.backward()
|
|
302
|
+
# 关闭数据dump
|
|
303
|
+
debugger.stop()
|
|
277
304
|
```
|
|
278
305
|
|
|
279
306
|
## 3 dump 结果文件介绍
|
|
280
307
|
|
|
281
308
|
训练结束后,工具将 dump 的数据保存在 dump_path 参数指定的目录下。目录结构示例如下:
|
|
282
309
|
|
|
283
|
-
```
|
|
310
|
+
```lua
|
|
284
311
|
├── dump_path
|
|
285
312
|
│ ├── step0
|
|
286
313
|
│ | ├── rank0
|
|
287
314
|
│ | │ ├── dump_tensor_data
|
|
288
315
|
| | | | ├── Tensor.permute.1.forward.pt
|
|
289
|
-
| | | | ├──
|
|
316
|
+
| | | | ├── Module.conv1.Conv2d.forward.0.input.0.pt # 命名格式为{Module}.{module_name}.{class_name}.{forward/backward}.{调用次数}.{input/output}.{参数序号}, 其中,“参数序号”表示该Module的第n个参数,例如1,则为第一个参数,若该参数为list格式,则根据list继续排序,例如1.1,表示该Module的第1个参数的第1个元素。
|
|
317
|
+
| | | | ├── Module.conv1.Conv2D.forward.0.parameters.bias.pt # 模块参数数据:命名格式为{Module}.{module_name}.{class_name}.forward.{调用次数}.parameters.{parameter_name}。
|
|
318
|
+
| | | | ├── Module.conv1.Conv2D.parameters_grad.weight.pt # 模块参数梯度数据:命名格式为{Module}.{module_name}.{class_name}.parameters_grad.{parameter_name}。因为同一模块的参数使用同一梯度进行更新,所以参数梯度文件名不包含调用次数。
|
|
290
319
|
| | | | ...
|
|
291
|
-
| | | | └──
|
|
292
|
-
│ | | ├── dump.json
|
|
293
|
-
│ | | ├── stack.json
|
|
294
|
-
│ | | └── construct.json
|
|
320
|
+
| | | | └── Functional.linear.5.backward.output.pt # 命名格式为{api_type}.{api_name}.{API调用次数}.{forward/backward}.{input/output}.{参数序号}, 其中,“参数序号”表示该API的第n个输入或输出,例如1,则为第一个参数,若该参数为list格式,则根据list继续排序,例如1.1,表示该API的第1个参数的第1个元素。
|
|
321
|
+
│ | | ├── dump.json
|
|
322
|
+
│ | | ├── stack.json
|
|
323
|
+
│ | | └── construct.json
|
|
295
324
|
│ | ├── rank1
|
|
296
325
|
| | | ├── dump_tensor_data
|
|
297
326
|
| | | | └── ...
|
|
@@ -304,7 +333,13 @@ if __name__ == "__main__":
|
|
|
304
333
|
│ ├── step1
|
|
305
334
|
│ | ├── ...
|
|
306
335
|
│ ├── step2
|
|
307
|
-
```
|
|
336
|
+
```
|
|
337
|
+
* `rank`:设备 ID,每张卡的数据保存在对应的 `rank{ID}` 目录下。非分布式场景下没有 rank ID,目录名称为 rank。
|
|
338
|
+
* `dump_tensor_data`:保存采集到的张量数据。
|
|
339
|
+
* `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#1-dumpjson文件介绍pytorch)。
|
|
340
|
+
* `stack.json`:API/Module的调用栈信息。
|
|
341
|
+
* `construct.json`:分层分级结构,level为L1时,construct.json内容为空。
|
|
342
|
+
|
|
308
343
|
|
|
309
344
|
dump 过程中,pt 文件在对应算子或者模块被执行后就会落盘,而 json 文件则需要在正常执行 PrecisionDebugger.stop() 后才会写入完整数据,异常的程序终止会保存终止前被执行算子的相关 npy 文件,可能会导致 json 文件中数据丢失。
|
|
310
345
|
|
|
@@ -321,6 +356,3 @@ pt 文件保存的前缀和 PyTorch 对应关系如下:
|
|
|
321
356
|
| VF | torch._VF |
|
|
322
357
|
| Aten | torch.ops.aten |
|
|
323
358
|
| Distributed | torch.distributed |
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|