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
|
@@ -1,37 +1,82 @@
|
|
|
1
|
-
# MindSpore 场景的精度数据采集
|
|
2
1
|
|
|
3
|
-
msprobe
|
|
2
|
+
# msprobe 工具 MindSpore场景精度数据采集指南
|
|
4
3
|
|
|
5
|
-
需要注意,**动态图 kernel 级**("L2" level)精度数据采集对象为被 PSJit 或 PIJit 装饰的 Cell 或 function 内的算子,其被装饰部分实际以**静态图**模式执行,所以此场景下的工具使用方式与静态图场景完全相同。下文无特殊说明时,介绍的动态图场景不包括 kernel 级("L2" level)dump 情形。
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
## 1. 专业名词解释
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
* **静态图**:在编译时就确定网络结构,静态图模式拥有较高的训练性能,但难以调试。
|
|
8
|
+
* **动态图**:运行时动态构建网络,相较于静态图模式虽然易于调试,但难以高效执行。
|
|
9
|
+
* **高阶 API**:如 `mindspore.train.Model`,封装了训练过程的高级接口。
|
|
10
|
+
* **JIT(Just-In-Time 编译)**:MindSpore提供JIT(just-in-time)技术进一步进行性能优化。JIT模式会通过AST树解析的方式或者Python字节码解析的方式,将代码解析为一张中间表示图(IR,intermediate representation)。IR图作为该代码的唯一表示,编译器通过对该IR图的优化,来达到对代码的优化,提高运行性能。与动态图模式相对应,这种JIT的编译模式被称为静态图模式。
|
|
11
|
+
* **Primitive op**:MindSpore 中的基本算子,通常由 `mindspore.ops.Primitive` 定义,提供底层的算子操作接口。
|
|
10
12
|
|
|
11
|
-
```yaml
|
|
12
|
-
ops: # ops为算子类别,找到对应的类别,在该类别下按照下列格式删除或添加API
|
|
13
|
-
- adaptive_avg_pool1d
|
|
14
|
-
- adaptive_avg_pool2d
|
|
15
|
-
- adaptive_avg_pool3d
|
|
16
|
-
```
|
|
17
13
|
|
|
18
|
-
##
|
|
14
|
+
## 2. 工具安装
|
|
15
|
+
|
|
16
|
+
请参见[《msprobe 工具安装指南》](./01.installation.md)。
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
## 3. 快速入门
|
|
20
|
+
|
|
21
|
+
以下通过一个简单的示例,展示如何在 MindSpore 中使用 msprobe 工具进行精度数据采集。
|
|
22
|
+
|
|
23
|
+
您可以参考 [动态图快速入门示例](data_dump_MindSpore/dynamic_graph_quick_start_example.md) 了解详细步骤。
|
|
24
|
+
|
|
25
|
+
## 4. 概述
|
|
26
|
+
|
|
27
|
+
msprobe 工具通过在训练脚本中添加 `PrecisionDebugger` 接口并启动训练的方式,采集模型在运行过程中的精度数据。该工具支持对MindSpore的静态图和动态图场景进行不同Level等级的精度数据采集。
|
|
28
|
+
|
|
29
|
+
dump 的"tensor"模式采集数据量大小,可以参考[数据量基线](data_dump_MindSpore/data_dump_MindSpore_baseline.md)。
|
|
30
|
+
|
|
31
|
+
## 5. 场景介绍
|
|
32
|
+
|
|
33
|
+
### 5.1 静态图场景
|
|
34
|
+
在静态图场景下,msprobe 仅支持 **L2 Level** 的数据采集。
|
|
35
|
+
- **L2 Level(Kernel 级)** :采集底层算子的输入输出数据,适用于深入分析算子级别的精度问题。
|
|
36
|
+
|
|
37
|
+
采集方式请参见[示例代码 > 静态图场景](#71-静态图场景)。详细介绍请参见[《config.json 配置文件介绍》](./02.config_introduction.md#11-通用配置)中的“level 参数”和[《config.json 配置示例》](./03.config_examples.md#2-mindspore-静态图场景) 中的“MindSpore 静态图场景”。
|
|
38
|
+
|
|
39
|
+
### 5.2 动态图场景
|
|
40
|
+
在动态图场景下,msprobe 支持 **L0** 、**L1** 、**mix** 、**L2 Level** 的数据采集,具体分为以下几种情况:
|
|
41
|
+
- **使用高阶 API(如 `Model 高阶API`)** :
|
|
42
|
+
- 需要使用 `MsprobeStep` 回调类来控制数据采集的启停,适用于 **L0** 、**L1** 、**mix** 、**L2** 数据采集。
|
|
43
|
+
|
|
44
|
+
- **未使用高阶 API** :
|
|
45
|
+
- 手动在训练循环中调用 `start`、`stop`、`step` 等接口,适用于 **L0** 、**L1** 、**mix** 、**L2** 数据采集。
|
|
46
|
+
|
|
47
|
+
采集方式请参见[示例代码 > 动态图场景](#72-动态图场景)。
|
|
48
|
+
|
|
49
|
+
> **注意** :动态图模式下,使用 `PSJit` 或 `PIJit` 装饰的部分实际以静态图模式执行,此时的 **Kernel 级(L2 Level)** 数据采集方式与静态图场景相同。
|
|
50
|
+
- **L0 Level(Cell 级)** :采集 `Cell` 对象的数据,适用于需要分析特定网络模块的情况。
|
|
51
|
+
|
|
52
|
+
- **L1 Level(API 级)** :采集 MindSpore API 的输入输出数据,适用于定位 API 层面的精度问题。
|
|
53
|
+
|
|
54
|
+
- **mix(模块级 + API 级)** :在 `L0` 和 `L1` 级别的基础上同时采集模块级和 API 级数据,适用于需要分析模块和 API 层面精度问题的场景。
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
详细介绍请参见[《config.json 配置文件介绍》](./02.config_introduction.md#11-通用配置)中的“level 参数”和[《config.json 配置示例》](./03.config_examples.md#3-mindspore-动态图场景) 中的“MindSpore 动态图场景”。
|
|
58
|
+
|
|
19
59
|
|
|
20
|
-
|
|
60
|
+
## 6 接口介绍
|
|
61
|
+
|
|
62
|
+
### 6.1 msprobe.mindspore.PrecisionDebugger
|
|
21
63
|
|
|
22
64
|
**功能说明**:通过加载 dump 配置文件的方式来确定 dump 操作的详细配置。
|
|
23
65
|
|
|
24
66
|
**原型**:
|
|
25
67
|
|
|
26
68
|
```Python
|
|
27
|
-
PrecisionDebugger(config_path=None)
|
|
69
|
+
PrecisionDebugger(config_path=None, task=None, dump_path=None, level=None, step=None)
|
|
28
70
|
```
|
|
29
71
|
|
|
30
72
|
**参数说明**:
|
|
31
73
|
|
|
32
74
|
1. config_path:指定 dump 配置文件路径,string 类型。参数示例:"./config.json"。未配置该路径时,默认使用 [config.json](../config.json) 文件的默认配置,配置选项含义可见 [config.json 介绍](./02.config_introduction.md)。
|
|
75
|
+
2. 其他参数均在 [config.json](../config.json) 文件中可配,详细配置可见 [config.json 介绍](./02.config_introduction.md)。
|
|
76
|
+
|
|
77
|
+
此接口的参数均不是必要,且优先级高于 [config.json](../config.json) 文件中的配置,但可配置的参数相比 config.json 较少。
|
|
33
78
|
|
|
34
|
-
####
|
|
79
|
+
#### 6.1.1 start
|
|
35
80
|
|
|
36
81
|
**功能说明**:启动精度数据采集。需在模型执行模式(静态图/动态图、O0/O1/O2编译等级)设置后调用。静态图场景下,必须在模型初始化及 mindspore.communication.init 调用前添加;动态图场景下,如果没有使用 [Model](https://gitee.com/link?target=https%3A%2F%2Fwww.mindspore.cn%2Ftutorials%2Fzh-CN%2Fr2.3.1%2Fadvanced%2Fmodel.html) 高阶 API 进行训练,则需要与 stop 函数一起添加在 for 循环内,否则只有需要传入model参数时,才使用该接口。
|
|
37
82
|
|
|
@@ -43,11 +88,13 @@ start(model=None)
|
|
|
43
88
|
|
|
44
89
|
**参数说明**:
|
|
45
90
|
|
|
46
|
-
1. model:指具体的 mindspore.nn.Cell
|
|
91
|
+
1. model:指具体的 mindspore.nn.Cell对象,默认不配置。Cell级别("L0" level)dump 与 "mix" level dump 时,必须传入 model 才可以采集 model 内的所有Cell 对象数据。API级别("L1" level)dump 时,传入 model 可以采集 model 内包含 primitive op 对象在内的所有 API 数据,若不传入 model 参数,则只采集非 primitive op 的 API 数据。
|
|
47
92
|
|
|
48
|
-
####
|
|
93
|
+
#### 6.1.2 stop
|
|
49
94
|
|
|
50
|
-
|
|
95
|
+
**功能说明**:停止精度数据采集。在 **start** 函数之后的任意位置添加。若 **stop** 函数添加在反向计算代码之后,则会采集 **start** 和该函数之间的前反向数据。
|
|
96
|
+
若 **stop** 函数添加在反向计算代码之前,则需要将 **step** 函数添加到反向计算代码之后,才能采集 **start** 和该函数之间的前反向数据。
|
|
97
|
+
**step** 函数详细介绍见6.1.3章节。**仅未使用 Model 高阶 API 的动态图场景支持。**
|
|
51
98
|
|
|
52
99
|
**原型**:
|
|
53
100
|
|
|
@@ -55,9 +102,11 @@ start(model=None)
|
|
|
55
102
|
stop()
|
|
56
103
|
```
|
|
57
104
|
|
|
58
|
-
####
|
|
105
|
+
#### 6.1.3 step
|
|
59
106
|
|
|
60
|
-
|
|
107
|
+
**功能说明**:结束一个 step 的数据采集,完成所有数据落盘并更新 dump 参数。在一个 step 结束的位置添加,且必须在 **stop** 函数之后的位置调用。
|
|
108
|
+
该函数需要配合 **start** 和 **stop** 函数使用,尽量添加在反向计算代码之后,否则可能会导致反向数据丢失。
|
|
109
|
+
**仅未使用 Model 高阶 API 的动态图场景支持。**
|
|
61
110
|
|
|
62
111
|
**原型**:
|
|
63
112
|
|
|
@@ -65,13 +114,11 @@ stop()
|
|
|
65
114
|
step()
|
|
66
115
|
```
|
|
67
116
|
|
|
68
|
-
####
|
|
117
|
+
#### 6.1.4 forward_backward_dump_end
|
|
69
118
|
|
|
70
|
-
|
|
119
|
+
**功能说明**:停止精度数据采集。与 **stop** 函数功能相同,该函数在将来会被移除,建议使用 **stop** 函数。
|
|
71
120
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
**L1级别数据中的jit数据采集行为不受此接口影响**
|
|
121
|
+
**L1级别数据中的jit数据采集行为不受此接口影响。**
|
|
75
122
|
|
|
76
123
|
**仅未使用 Model 高阶 API 的动态图场景支持。**
|
|
77
124
|
|
|
@@ -81,9 +128,9 @@ step()
|
|
|
81
128
|
forward_backward_dump_end()
|
|
82
129
|
```
|
|
83
130
|
|
|
84
|
-
###
|
|
131
|
+
### 6.2 msprobe.mindspore.common.utils.MsprobeStep
|
|
85
132
|
|
|
86
|
-
**功能说明**:MindSpore Callback类,自动在每个step开始时调用start()接口,在每个step结束时调用stop()、step()接口。实现使用 Model 高阶 API 的动态图场景下 L0、L1 级别的精度数据采集控制,控制粒度为单个 **Step** ,而 PrecisionDebugger.start, PrecisionDebugger.stop 接口的控制粒度任意训练代码段。
|
|
133
|
+
**功能说明**:MindSpore Callback类,自动在每个step开始时调用start()接口,在每个step结束时调用stop()、step()接口。实现使用 Model 高阶 API 的动态图场景下 L0、L1、mix 级别的精度数据采集控制,控制粒度为单个 **Step** ,而 PrecisionDebugger.start, PrecisionDebugger.stop 接口的控制粒度任意训练代码段。
|
|
87
134
|
|
|
88
135
|
**原型**:
|
|
89
136
|
|
|
@@ -95,13 +142,13 @@ MsprobeStep(debugger)
|
|
|
95
142
|
|
|
96
143
|
1. debugger:PrecisionDebugger对象。
|
|
97
144
|
|
|
98
|
-
###
|
|
145
|
+
### 6.3 msprobe.mindspore.seed_all
|
|
99
146
|
|
|
100
147
|
**功能说明**:用于固定网络中的随机性和开启确定性计算。
|
|
101
148
|
|
|
102
149
|
**原型**:
|
|
103
150
|
```python
|
|
104
|
-
seed_all(seed=1234, mode=False)
|
|
151
|
+
seed_all(seed=1234, mode=False, rm_dropout=True)
|
|
105
152
|
```
|
|
106
153
|
|
|
107
154
|
**参数说明**:
|
|
@@ -110,26 +157,36 @@ seed_all(seed=1234, mode=False)
|
|
|
110
157
|
|
|
111
158
|
2. mode:确定性计算使能,可配置 True 或 False,默认值:False,非必选。参数示例:mode=True。该参数设置为 True 后,将会开启算子确定性运行模式与归约类通信算子(AllReduce、ReduceScatter、Reduce)的确定性计算。注意:确定性计算会导致API执行性能降低,建议在发现模型多次执行结果不同的情况下开启。
|
|
112
159
|
|
|
113
|
-
|
|
160
|
+
3. rm_dropout:控制dropout失效的开关。可配置 True 或 False,默认值:True,非必选。参数示例:rm_dropout=True。该参数设置为 True 后,将会使mindspore.ops.Dropout,mindspore.ops.Dropout2D,mindspore.ops.Dropout3D,mindspore.mint.nn.Dropout和mindspore.mint.nn.functional.dropout失效,以避免因随机dropout造成的网络随机性。建议在采集mindspore数据前开启。注意:通过rm_dropout控制dropout失效或生效需要在初始化Dropout实例前调用才能生效。
|
|
114
161
|
|
|
115
|
-
### 2.1 MindSpore 静态图场景
|
|
116
162
|
|
|
117
|
-
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
## 7. 示例代码
|
|
166
|
+
|
|
167
|
+
### 7.1 静态图场景
|
|
168
|
+
|
|
169
|
+
```python
|
|
118
170
|
import mindspore as ms
|
|
119
171
|
ms.set_context(mode=ms.GRAPH_MODE, device_target="Ascend")
|
|
120
172
|
|
|
121
173
|
from msprobe.mindspore import PrecisionDebugger
|
|
122
174
|
debugger = PrecisionDebugger(config_path="./config.json")
|
|
123
175
|
debugger.start()
|
|
124
|
-
# 请勿将以上初始化流程置于模型实例化或mindspore.communication.init调用后
|
|
176
|
+
# 请勿将以上初始化流程置于模型实例化或 mindspore.communication.init 调用后
|
|
177
|
+
# 模型定义和训练代码
|
|
125
178
|
# ...
|
|
179
|
+
|
|
126
180
|
```
|
|
127
181
|
|
|
128
|
-
###
|
|
182
|
+
### 7.2 动态图场景
|
|
129
183
|
|
|
130
|
-
####
|
|
184
|
+
#### 7.2.1 L0 ,L1, mix 级别
|
|
131
185
|
|
|
132
|
-
|
|
186
|
+
##### 7.2.1.1 未使用 Model 高阶 API
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
```python
|
|
133
190
|
import mindspore as ms
|
|
134
191
|
ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
|
|
135
192
|
|
|
@@ -141,60 +198,66 @@ debugger = PrecisionDebugger(config_path="./config.json")
|
|
|
141
198
|
model = Network()
|
|
142
199
|
# 数据集迭代的地方往往是模型开始训练的地方
|
|
143
200
|
for data, label in data_loader:
|
|
144
|
-
debugger.start() # 进行L1级别下非primitive op采集时调用
|
|
145
|
-
# debugger.start(model) # 进行L0级别或L1级别下primitive op的数据采集时调用
|
|
146
|
-
# 如下是模型每个step执行的逻辑
|
|
201
|
+
debugger.start() # 进行 L1 级别下非 primitive op 采集时调用
|
|
202
|
+
# debugger.start(model) # 进行 L0, mix 级别或 L1 级别下 primitive op 的数据采集时调用
|
|
203
|
+
# 如下是模型每个 step 执行的逻辑
|
|
147
204
|
grad_net = ms.grad(model)(data)
|
|
148
205
|
# ...
|
|
149
|
-
debugger.stop() # 关闭数据dump
|
|
150
|
-
debugger.step() #
|
|
206
|
+
debugger.stop() # 关闭数据 dump
|
|
207
|
+
debugger.step() # 更新迭代数
|
|
151
208
|
```
|
|
152
209
|
|
|
153
|
-
|
|
210
|
+
##### 7.2.1.2 使用 Model 高阶 API
|
|
154
211
|
|
|
155
|
-
|
|
212
|
+
|
|
213
|
+
```python
|
|
156
214
|
import mindspore as ms
|
|
215
|
+
from mindspore.train import Model
|
|
157
216
|
ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
|
|
158
217
|
|
|
159
218
|
from msprobe.mindspore import PrecisionDebugger
|
|
219
|
+
from msprobe.mindspore.common.utils import MsprobeStep
|
|
160
220
|
debugger = PrecisionDebugger(config_path="./config.json")
|
|
161
|
-
debugger.start()
|
|
162
|
-
# 请勿将以上初始化流程置于模型实例化或mindspore.communication.init调用后
|
|
163
221
|
|
|
164
222
|
# 模型、损失函数的定义以及初始化等操作
|
|
165
223
|
# ...
|
|
224
|
+
|
|
166
225
|
model = Network()
|
|
167
|
-
#
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
# ...
|
|
226
|
+
# 只有进行 L0 级别下 Cell 对象,mix 级别,L1 级别下 primitive op 的数据采集时才需要调用
|
|
227
|
+
# debugger.start(model)
|
|
228
|
+
trainer = Model(model, loss_fn=loss_fn, optimizer=optimizer, metrics={'accuracy'})
|
|
229
|
+
trainer.train(1, train_dataset, callbacks=[MsprobeStep(debugger)])
|
|
172
230
|
```
|
|
173
231
|
|
|
174
|
-
#### 2.2
|
|
232
|
+
#### 7.2.2 L2 级别
|
|
175
233
|
|
|
176
|
-
|
|
234
|
+
##### 7.2.2.1 未使用 Model 高阶 API
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
```python
|
|
177
238
|
import mindspore as ms
|
|
178
|
-
from mindspore.train import Model
|
|
179
239
|
ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
|
|
180
240
|
|
|
181
241
|
from msprobe.mindspore import PrecisionDebugger
|
|
182
|
-
from msprobe.mindspore.common.utils import MsprobeStep
|
|
183
242
|
debugger = PrecisionDebugger(config_path="./config.json")
|
|
243
|
+
debugger.start()
|
|
244
|
+
# 请勿将以上初始化流程置于模型实例化或 mindspore.communication.init 调用后
|
|
184
245
|
|
|
185
246
|
# 模型、损失函数的定义以及初始化等操作
|
|
186
247
|
# ...
|
|
187
|
-
|
|
188
248
|
model = Network()
|
|
189
|
-
#
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
249
|
+
# 数据集迭代的地方往往是模型开始训练的地方
|
|
250
|
+
for data, label in data_loader:
|
|
251
|
+
# 如下是模型每个 step 执行的逻辑
|
|
252
|
+
grad_net = ms.grad(model)(data)
|
|
253
|
+
# ...
|
|
193
254
|
```
|
|
194
255
|
|
|
195
|
-
#### 2.2.4 使用 Model 高阶 API(L2 级别)
|
|
196
256
|
|
|
197
|
-
|
|
257
|
+
##### 7.2.2.2 使用 Model 高阶 API
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
```python
|
|
198
261
|
import mindspore as ms
|
|
199
262
|
from mindspore.train import Model
|
|
200
263
|
ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
|
|
@@ -202,7 +265,7 @@ ms.set_context(mode=ms.PYNATIVE_MODE, device_target="Ascend")
|
|
|
202
265
|
from msprobe.mindspore import PrecisionDebugger
|
|
203
266
|
debugger = PrecisionDebugger(config_path="./config.json")
|
|
204
267
|
debugger.start()
|
|
205
|
-
# 请勿将以上初始化流程置于模型实例化或mindspore.communication.init调用后
|
|
268
|
+
# 请勿将以上初始化流程置于模型实例化或 mindspore.communication.init 调用后
|
|
206
269
|
|
|
207
270
|
# 模型、损失函数的定义以及初始化等操作
|
|
208
271
|
# ...
|
|
@@ -212,43 +275,64 @@ trainer = Model(model, loss_fn=loss_fn, optimizer=optimizer, metrics={'accuracy'
|
|
|
212
275
|
trainer.train(1, train_dataset)
|
|
213
276
|
```
|
|
214
277
|
|
|
215
|
-
##
|
|
278
|
+
## 8. dump 结果文件介绍
|
|
216
279
|
|
|
217
|
-
###
|
|
280
|
+
### 8.1 静态图场景
|
|
218
281
|
|
|
219
|
-
|
|
282
|
+
训练结束后,数据将保存在 `dump_path` 指定的目录下。
|
|
220
283
|
|
|
221
|
-
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
284
|
+
若jit_level=O2,且使用mindstudio-probe发布包或源码编包时添加了`--include-mod=adump`选项,目录结构示例如下:
|
|
285
|
+
```
|
|
286
|
+
├── dump_path
|
|
287
|
+
│ ├── rank_0
|
|
288
|
+
│ | ├── {timestamp}
|
|
289
|
+
│ | │ ├── step_0
|
|
290
|
+
| | | | ├── AssignAdd.Default_network-TrainOneStepCell_optimzer-Gsd_AssignAdd-op0.0.10.1735011096403740.input.0.ND.INT32.npy
|
|
291
|
+
| | | | ├── Cast.Default_network-TrainOneStepCell_network-WithLossCell__backbone-Net_Cast-op0.9.10.1735011096426349.input.0.ND.FLOAT.npy
|
|
292
|
+
| | | | ├── GetNext.Default_GetNext-op0.0.11.17350110964032987.output.0.ND.FLOAT.npy
|
|
293
|
+
| | | | ...
|
|
294
|
+
| | | | ├── RefDAata.accum_bias1.6.10.1735011096424907.output.0.ND.FLOAT.npy
|
|
295
|
+
| | | | ├── Sub.Default_network-TrainOneStepCell_network-WithLossCell__backbone-Net_Sub-op0.10.10.1735011096427368.input.0.ND.BF16
|
|
296
|
+
| | | | └── mapping.csv
|
|
297
|
+
│ | │ ├── step_1
|
|
298
|
+
| | | | ├── ...
|
|
299
|
+
| | | ├── ...
|
|
300
|
+
| | ├── ...
|
|
301
|
+
| |
|
|
302
|
+
│ ├── ...
|
|
303
|
+
| |
|
|
304
|
+
│ └── rank_7
|
|
305
|
+
│ ├── ...
|
|
306
|
+
```
|
|
307
|
+
**说明**
|
|
308
|
+
1. 若配置文件中指定落盘npy格式,但是实际数据格式不在npy支持范围内(如bf16、int4等),则该tensor会以原始码流落盘,并不会转换为npy格式。
|
|
309
|
+
2. 若原始文件全名长度超过255个字符,则文件基础名会被转换为长度为32位的随机数字字符串,原始文件名与转换后文件名的对应关系会保存在同目录下的`mapping.csv`文件中。
|
|
228
310
|
|
|
229
|
-
jit_level 请参见 [mindspore.set_context](https://www.mindspore.cn/docs/zh-CN/r2.3.1/api_python/mindspore/mindspore.set_context.html) 中的 jit_config 参数。
|
|
230
311
|
|
|
231
|
-
|
|
312
|
+
其他场景请参见 MindSpore 官方文档中的[数据对象目录](https://www.mindspore.cn/docs/zh-CN/r2.4.0/model_train/debug/dump.html)。
|
|
232
313
|
|
|
233
|
-
|
|
314
|
+
### 8.2 动态图场景
|
|
234
315
|
|
|
235
|
-
dump结果目录结构示例如下:
|
|
316
|
+
dump 结果目录结构示例如下:
|
|
236
317
|
|
|
237
|
-
```
|
|
318
|
+
```lua
|
|
238
319
|
├── dump_path
|
|
239
320
|
│ ├── step0
|
|
240
321
|
│ | ├── rank0
|
|
241
322
|
│ | │ ├── dump_tensor_data
|
|
242
323
|
| | | | ├── MintFunctional.relu.0.backward.input.0.npy
|
|
243
324
|
| | | | ├── Mint.abs.0.forward.input.0.npy
|
|
244
|
-
| | | | ├── Functional.split.0.forward.input.0.npy
|
|
325
|
+
| | | | ├── Functional.split.0.forward.input.0.npy # 命名格式为{api_type}.{api_name}.{API调用次数}.{forward/backward}.{input/output}.{参数序号}, 其中,“参数序号”表示该API的第n个输入或输出,例如1,则为第一个参数,若该参数为list格式,则根据list继续排序,例如1.1,表示该API的第1个参数的第1个元素。
|
|
245
326
|
| | | | ├── Tensor.__add__.0.forward.output.0.npy
|
|
246
327
|
| | | | ...
|
|
247
328
|
| | | | ├── Jit.AlexNet.0.forward.input.0.npy
|
|
248
|
-
| | | |
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
329
|
+
| | | | ├── Primitive.conv2d.Conv2D.0.forward.input.0.npy
|
|
330
|
+
| | | | ├── Cell.conv1.Conv2D.forward.0.parameters.weight.npy # 模块参数数据:命名格式为{Cell}.{cell_name}.{class_name}.forward.{调用次数}.parameters.{parameter_name}。
|
|
331
|
+
| | | | ├── Cell.conv1.Conv2D.parameters_grad.weight.npy # 模块参数梯度数据:命名格式为{Cell}.{cell_name}.{class_name}.parameters_grad.{parameter_name}。因为同一模块的参数使用同一梯度进行更新,所以参数梯度文件名不包含调用次数。
|
|
332
|
+
| | | | └── Cell.relu.ReLU.forward.0.input.0.npy # 命名格式为{Cell}.{cell_name}.{class_name}.{forward/backward}.{调用次数}.{input/output}.{参数序号}, 其中,“参数序号”表示该Cell的第n个参数,例如1,则为第一个参数,若该参数为list格式,则根据list继续排序,例如1.1,表示该Cell的第1个参数的第1个元素。
|
|
333
|
+
│ | | ├── dump.json
|
|
334
|
+
│ | | ├── stack.json
|
|
335
|
+
│ | | └── construct.json
|
|
252
336
|
│ | ├── rank1
|
|
253
337
|
| | | ├── dump_tensor_data
|
|
254
338
|
| | | | └── ...
|
|
@@ -263,23 +347,44 @@ dump结果目录结构示例如下:
|
|
|
263
347
|
│ ├── step2
|
|
264
348
|
```
|
|
265
349
|
|
|
266
|
-
|
|
350
|
+
* `rank`:设备 ID,每张卡的数据保存在对应的 `rank{ID}` 目录下。非分布式场景下没有 rank ID,目录名称为 rank。
|
|
351
|
+
* `dump_tensor_data`:保存采集到的张量数据。
|
|
352
|
+
* `dump.json`: 保存API或Cell前反向数据的统计量信息。包含dump数据的API名称或Cell名称,各数据的dtype、 shape、max、min、mean、L2norm(L2范数,平方根)统计信息以及当配置summary_mode="md5"时的CRC-32数据。具体介绍可参考[dump.json文件说明](./27.dump_json_instruction.md#2-dumpjson文件示例mindspore)。
|
|
353
|
+
* `stack.json`:API/Cell的调用栈信息。
|
|
354
|
+
* `construct.json`:分层分级结构,level为L1时,construct.json内容为空。
|
|
267
355
|
|
|
268
|
-
|
|
356
|
+
dump 过程中,npy 文件在对应API或者模块被执行后就会落盘,而 json 文件则需要在正常执行 PrecisionDebugger.stop() 后才会写入完整数据,因此,程序异常终止时,被执行API对应的 npy 文件已被保存,但 json 文件中的数据可能丢失。
|
|
269
357
|
|
|
270
358
|
动态图场景下使能 PSJit 或 PIJit,装饰特定 Cell 或 function,被装饰的部分会全部/部分使能**静态图**流程。
|
|
271
359
|
|
|
272
360
|
- PSJit 场景下 config.json 文件配置 level 为 L1 时,被 PSJit 装饰的部分也作为 API 被 dump 到对应目录;配置 level 为 L2 时,则只会 dump 用户网络中静态图流程下的相关 kernel,其结果目录同jit_level 为 O0/O1 时的静态图 dump 相同。
|
|
273
361
|
- PIJit 场景下 config.json 文件配置 level 为 L1 时,会被还原为动态图,按 API 粒度进行 dump;配置 level 为 L2 时,则只会 dump 用户网络中静态图流程下的相关 kernel。
|
|
274
362
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
|
279
|
-
|
|
|
280
|
-
|
|
|
281
|
-
|
|
|
282
|
-
|
|
|
283
|
-
|
|
|
284
|
-
|
|
|
285
|
-
|
|
|
363
|
+
|
|
364
|
+
npy文件名的前缀含义如下:
|
|
365
|
+
|
|
366
|
+
| 前缀 | 含义 |
|
|
367
|
+
| -------------- |------------------------------|
|
|
368
|
+
| Tensor | mindspore.Tensor API数据 |
|
|
369
|
+
| Functional | mindspore.ops API数据 |
|
|
370
|
+
| Primitive | mindspore.ops.Primitive API数据 |
|
|
371
|
+
| Mint | mindspore.mint API数据 |
|
|
372
|
+
| MintFunctional | mindspore.mint.nn.functional API数据 |
|
|
373
|
+
| Distributed | mindspore.communication.comm_func API数据 |
|
|
374
|
+
| Jit | 被"jit"装饰的模块或函数数据 |
|
|
375
|
+
| Cell | mindspore.nn.Cell 类(模块)数据 |
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
## 9.补充说明
|
|
380
|
+
|
|
381
|
+
### 9.1 修改 API 支持列表
|
|
382
|
+
|
|
383
|
+
动态图 API 级 dump 时,本工具提供固定的 API 支持列表,仅支持对列表中的 API 进行精度数据采集。一般情况下,无需修改该列表,而是通过config.json中的scope/list字段进行 dump API 指定。若需要改变 API 支持列表,可以在 `msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml` 文件内手动修改,如下示例:
|
|
384
|
+
|
|
385
|
+
```yaml
|
|
386
|
+
ops:
|
|
387
|
+
- adaptive_avg_pool1d
|
|
388
|
+
- adaptive_avg_pool2d
|
|
389
|
+
- adaptive_avg_pool3d
|
|
390
|
+
```
|
|
@@ -31,7 +31,7 @@ run_ut 预检操作包括以下两种方式:
|
|
|
31
31
|
将 API 信息输入到 run_ut 模块进行精度检测并比对,运行如下命令:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
msprobe -f pytorch run_ut -api_info ./dump.json
|
|
34
|
+
msprobe -f pytorch run_ut -api_info ./dump_path/step{step_number}/rank{rank_number}/dump.json
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
| 参数名称 | 解释 | 是否必选 |
|
|
@@ -50,7 +50,7 @@ run_ut 执行结果包括 `accuracy_checking_result_{timestamp}.csv` 和 `accura
|
|
|
50
50
|
如果需要保存比对不达标的输入和输出数据,可以在 run_ut 执行命令结尾添加 `-save_error_data`,例如:
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
|
-
msprobe -f pytorch run_ut -api_info ./dump.json -save_error_data
|
|
53
|
+
msprobe -f pytorch run_ut -api_info ./dump_path/step{step_number}/rank{rank_number}/dump.json -save_error_data
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
数据默认会存盘到 './ut_error_data{timestamp}' 路径下,如有需要,用户可以通过 error_data_path 参数来配置保存路径,error_data_path 参数在 [config.json](../config.json) 文件或 [config.yaml](../pytorch/api_accuracy_checker/config.yaml) 文件配置,config.json 文件需要在 run_ut 操作时通过 -config 参数指定。
|
|
@@ -98,7 +98,7 @@ msprobe -f pytorch run_ut -api_info ./dump.json -save_error_data
|
|
|
98
98
|
multi_run_ut 脚本,可以并行执行多个 run_ut 操作,从而减少预检耗时。示例如下:
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
|
-
msprobe -f pytorch multi_run_ut -api_info ./dump.json -n 32 -d 0 1 2 3
|
|
101
|
+
msprobe -f pytorch multi_run_ut -api_info ./dump_path/step{step_number}/rank{rank_number}/dump.json -n 32 -d 0 1 2 3
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
| 参数名称 | 解释 | 是否必选 |
|
|
@@ -117,7 +117,7 @@ msprobe -f pytorch multi_run_ut -api_info ./dump.json -n 32 -d 0 1 2 3
|
|
|
117
117
|
断点续检操作通过如下命令执行:
|
|
118
118
|
|
|
119
119
|
```bash
|
|
120
|
-
msprobe -f pytorch run_ut -api_info ./dump.json -csv_path /home/xxx/ut/accuracy_checking_result_{timestamp}.csv
|
|
120
|
+
msprobe -f pytorch run_ut -api_info ./dump_path/step{step_number}/rank{rank_number}/dump.json -csv_path /home/xxx/ut/accuracy_checking_result_{timestamp}.csv
|
|
121
121
|
```
|
|
122
122
|
|
|
123
123
|
精度预检 run_ut 过程中,若因环境、数据量过大等原因导致预检进程中断,那么当用户解决这些问题后,重新执行 run_ut 操作,可以通过断点续检操作继续前面未完成的预检,会在 -csv_path 指定的 `accuracy_checking_result_{timestamp}.csv` 文件以及对应的 `accuracy_checking_details_{timestamp}.csv` 文件中继续写入后续的结果,不会重新创建结果文件。
|
|
@@ -137,8 +137,8 @@ msprobe -f pytorch run_ut -api_info ./dump.json -csv_path /home/xxx/ut/accuracy_
|
|
|
137
137
|
| 字段 | 含义 |
|
|
138
138
|
| --------------------- | ------------------------- |
|
|
139
139
|
| API name | API 名称。 |
|
|
140
|
-
| Forward Test Success | 前向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误。SKIP 表示跳过该 API 的计算,跳过原因在 Message
|
|
141
|
-
| Backward Test Success | 反向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误。如果是空白的话代表该 API
|
|
140
|
+
| Forward Test Success | 前向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误。SKIP 表示跳过该 API 的计算,跳过原因在 Message 字段中提示,包括:该 API 不支持精度预检,或该 API 被黑名单过滤或不在白名单上,或运行错误等。 |
|
|
141
|
+
| Backward Test Success | 反向 API 是否通过测试,pass 为通过,warning 为待观察,error 为错误。如果是空白的话代表该 API 没有反向输出。SKIP 表示跳过该 API 的计算,跳过原因在 Message 字段中提示,包括:该 API 不支持精度预检,或该 API 被黑名单过滤或不在白名单上,或运行错误等。 |
|
|
142
142
|
| Message | 提示信息。 |
|
|
143
143
|
|
|
144
144
|
该结果为中间结果,仅作为参考,建议完成 [5 预检结果比对](#5-预检结果比对)后查看比对结果。该结果后续将会删除。
|
|
@@ -174,8 +174,8 @@ Forward Test Success 和 Backward Test Success 是否通过测试是由 `accurac
|
|
|
174
174
|
| ULP 误差最大值 | NPU 或 GPU 数据与标杆数据 ULP 误差的最大值(取绝对值后)。 |
|
|
175
175
|
| ULP 误差平均值 | NPU 或 GPU 数据与标杆数据 ULP 误差的平均值(取绝对值后)。 |
|
|
176
176
|
| ULP 误差大于阈值占比 | NPU 或 GPU 数据与标杆数据的 ULP 误差(取绝对值后)大于阈值(当 NPU 或 GPU 数据类型为 float16 或 bfloat16 时,阈值为 1;当 NPU 或 GPU 数据类型为 float32 时,阈值为 32)的元素个数占总元素的个数比例。 |
|
|
177
|
-
| Status | API
|
|
178
|
-
|
|
|
177
|
+
| Status | API 预检通过状态。pass 表示通过测试;error 表示未通过;warning 表示测试未通过双千或双万精度指标;SKIP 表示跳过该 API 的计算,跳过原因在 Message 字段中提示,包括:该 API 的某个参数的反向不计算梯度,没有任何计算过程,其他信息均为空,或该 API 的数据类型不支持使用新精度标准进行比对(如 float64),或该 API 不支持精度预检,或该 API 被黑名单过滤或不在白名单上,或运行错误等。 |
|
|
178
|
+
| Message | 提示信息。 |
|
|
179
179
|
|
|
180
180
|
### 4.1 API 预检指标
|
|
181
181
|
|
|
@@ -194,15 +194,15 @@ Forward Test Success 和 Backward Test Success 是否通过测试是由 `accurac
|
|
|
194
194
|
|
|
195
195
|
判定为小值的阈值:
|
|
196
196
|
|
|
197
|
-
- torch.float32:
|
|
198
|
-
- torch.float16:
|
|
199
|
-
- torch.bfloat16:
|
|
197
|
+
- torch.float32:2**-20
|
|
198
|
+
- torch.float16:2**-10
|
|
199
|
+
- torch.bfloat16:2**-10
|
|
200
200
|
|
|
201
201
|
小值域的绝对误差阈值:
|
|
202
202
|
|
|
203
|
-
- torch.float32:
|
|
204
|
-
- torch.float16:
|
|
205
|
-
- torch.bfloat16:
|
|
203
|
+
- torch.float32:2**-30
|
|
204
|
+
- torch.float16:2**-16
|
|
205
|
+
- torch.bfloat16:2**-16
|
|
206
206
|
|
|
207
207
|
## 5 预检结果比对
|
|
208
208
|
|
|
@@ -214,8 +214,8 @@ msprobe -f pytorch api_precision_compare -npu /home/xxx/npu/accuracy_checking_de
|
|
|
214
214
|
|
|
215
215
|
| 参数名称 | 说明 | 是否必选 |
|
|
216
216
|
| -------------------- | ------------- | -------- |
|
|
217
|
-
| -npu 或 --npu_csv_path | NPU 预检结果 `accuracy_checking_details_{timestamp}.csv` 文件路径。默认从当前目录下识别该文件。 |
|
|
218
|
-
| -gpu 或 --gpu_csv_path | GPU 预检结果 `accuracy_checking_details_{timestamp}.csv` 文件路径。默认从当前目录下识别该文件。 |
|
|
217
|
+
| -npu 或 --npu_csv_path | NPU 预检结果 `accuracy_checking_details_{timestamp}.csv` 文件路径。默认从当前目录下识别该文件。 | 是 |
|
|
218
|
+
| -gpu 或 --gpu_csv_path | GPU 预检结果 `accuracy_checking_details_{timestamp}.csv` 文件路径。默认从当前目录下识别该文件。 | 是 |
|
|
219
219
|
| -o 或 --out_path | 指定 api_precision_compare.py 执行结果存盘路径,默认为当前目录。 | 否 |
|
|
220
220
|
|
|
221
221
|
执行完成后输出 `api_precision_compare_result_{timestamp}.csv` 和 `api_precision_compare_details_{timestamp}.csv` 文件。文件示例如下:
|
|
@@ -228,10 +228,10 @@ msprobe -f pytorch api_precision_compare -npu /home/xxx/npu/accuracy_checking_de
|
|
|
228
228
|
|
|
229
229
|
| 字段 | 含义 |
|
|
230
230
|
| --------------------- | ------------------------------------------------------------ |
|
|
231
|
-
| API name | API 名称。
|
|
232
|
-
| Forward Test Success | 前向 API
|
|
233
|
-
| Backward Test Success | 反向 API
|
|
234
|
-
| Message | 提示信息。
|
|
231
|
+
| API name | API 名称。 |
|
|
232
|
+
| Forward Test Success | 前向 API 是否通过测试。pass 为通过;error 为错误;SKIP 表示跳过该 API 的计算,跳过原因在 Message 字段中提示,包括:该 API 的数据类型不支持使用新精度标准进行比对(如 float64),或该 API 不支持精度预检,或该 API 被黑名单过滤或不在白名单上,或运行错误等。 |
|
|
233
|
+
| Backward Test Success | 反向 API 是否通过测试。pass 为通过;error 为错误;如果是空白的话代表该 API 没有反向输出;SKIP 表示该 API 的数据类型不支持使用新精度标准进行比对(如 float64)。 |
|
|
234
|
+
| Message | 提示信息。 |
|
|
235
235
|
|
|
236
236
|
Forward Test Success 和 Backward Test Success 是否通过测试是由 `api_precision_compare_details_{timestamp}.csv` 中的各个指标判定结果决定的。需要注意的是 `api_precision_compare_details_{timestamp}.csv` 中可能存在一个 API 的前向(反向)有多个输出,那么每个输出记录一行,而在 `api_precision_compare_result_{timestamp}.csv` 中的结果需要该 API 的所有结果均为 pass 才能标记为 pass,只要存在一个 error 则标记 error,仅存在 warning 和 pass 且不存在 error 标记 warning。
|
|
237
237
|
|
|
@@ -243,15 +243,15 @@ Forward Test Success 和 Backward Test Success 是否通过测试是由 `api_pre
|
|
|
243
243
|
| ------------------------ | ------------------------------------------------------------ |
|
|
244
244
|
| API name | NPU 或 GPU 下的 API 名称。 |
|
|
245
245
|
| 小值域错误比值 | NPU 与 CPU 的小值域的错误比率 / GPU 与 CPU 的小值域的错误比率。标杆比对法指标。 |
|
|
246
|
-
| 小值域错误判定结果 | 小值域错误比值小于等于
|
|
246
|
+
| 小值域错误判定结果 | 小值域错误比值小于等于 2 标记为 pass,大于 2 标记为 error。 |
|
|
247
247
|
| 均方根误差比值 | NPU 与 CPU 的均方根误差 / GPU 与 CPU 的均方根误差。标杆比对法指标。 |
|
|
248
|
-
| 均方根误差判定结果 | 均方根误差比值小于等于
|
|
248
|
+
| 均方根误差判定结果 | 均方根误差比值小于等于 2 标记为 pass,大于 2 标记为 error。 |
|
|
249
249
|
| 相对误差最大值比值 | NPU 与 CPU 的相对误差最大值 / GPU 与 CPU 的相对误差最大值。标杆比对法指标。 |
|
|
250
|
-
| 相对误差最大值判定结果 | 相对误差最大值比值小于等于
|
|
250
|
+
| 相对误差最大值判定结果 | 相对误差最大值比值小于等于 10 标记为 pass,大于 10 标记为 error。 |
|
|
251
251
|
| 相对误差平均值比值 | NPU 与 CPU 的相对误差的平均值 / GPU 与 CPU 的相对误差的平均值。标杆比对法指标。 |
|
|
252
|
-
| 相对误差平均值判定结果 | 相对误差平均值比值小于等于
|
|
252
|
+
| 相对误差平均值判定结果 | 相对误差平均值比值小于等于 2 标记为 pass,大于 2 标记为 error。 |
|
|
253
253
|
| 误差均衡性比值 | NPU 与 CPU 的误差均衡性 / GPU 与 CPU 的误差均衡性。标杆比对法指标。 |
|
|
254
|
-
| 误差均衡性判定结果 | 误差均衡性比值小于等于
|
|
254
|
+
| 误差均衡性判定结果 | 误差均衡性比值小于等于 2 标记为 pass,大于 2 标记为 error。该字段暂不参与 api_precision_compare_result 的结果判定。 |
|
|
255
255
|
| inf / nan 错误率 | NPU 与标杆 inf / nan 计算不一致的元素个数占总元素的个数比例。绝对阈值法指标。 |
|
|
256
256
|
| inf / nan 判定结果 | inf / nan 错误率判定结果,等于 0 标记为 pass,其余情况标记为 error。 |
|
|
257
257
|
| 相对误差错误率 | NPU 与标杆的正常值计算相对误差,其大于错误阈值的元素个数占正常值元素个数的比例。绝对阈值法指标。 |
|
|
@@ -266,9 +266,9 @@ Forward Test Success 和 Backward Test Success 是否通过测试是由 `api_pre
|
|
|
266
266
|
| ULP 误差判定结果 | ULP 误差判定结果。<br/> 当 NPU 或 GPU 数据类型是 float16 或 bfloat16 时,以下两条标准满足其一标记为 pass,否则标记为 error:<br> NPU ULP 误差大于阈值占比小于 0.001;<br/> NPU ULP 误差大于阈值占比小于 GPU ULP 误差大于阈值占比。<br/> 当 NPU 或 GPU 数据类型是 float32 时,以下三条标准满足其一标记为 pass,否则标记为 error:<br/> NPU ULP 误差平均值小于 64;<br/> NPU ULP 误差大于阈值占比小于 0.05;<br/> NPU ULP 误差大于阈值占比小于 GPU ULP 误差大于阈值占比。 |
|
|
267
267
|
| 双千指标 | 双千精度指标。是指 NPU 的 Tensor 中的元素逐个与对应的标杆数据对比,相对误差小于千分之一的个数占总元素个数的比例。测试通过标准为相对误差大于千分之一的个数占总元素个数的比例小于千分之一。仅 conv1d 和 conv2d 使用该指标。双千指标法指标。 |
|
|
268
268
|
| 双千指标判定结果 | 双千指标判定结果。双千指标大于 0.999 标记为 pass,否则标记为 error。 |
|
|
269
|
-
| 比对结果 | 综合所有指标的最终结果。如果比对指标中有 error,则标记为 error
|
|
269
|
+
| 比对结果 | 综合所有指标的最终结果。如果比对指标中有 error,则标记为 error,在 Message 字段中提示该 API 比对结果不符合标准的指标;有 warning,则标记为 warning,在 Message 字段中提示该 API 比对结果不符合标准的指标;否则标记为 pass;SKIP 表示跳过该 API 的计算,跳过原因在 Message 字段中提示,包括:该 API 的某个参数的反向不计算梯度,没有任何计算过程,其他信息均为空,或该 API 的数据类型不支持使用新精度标准进行比对(如 float64),或该 API 不支持精度预检,或该 API 被黑名单过滤或不在白名单上,或运行错误等。 |
|
|
270
270
|
| 比对算法 | API 使用的比对算法,为标杆比对法、二进制一致法、绝对阈值法和 ULP 误差比对法中的一种。 |
|
|
271
|
-
| Message |
|
|
271
|
+
| Message | 提示信息。 |
|
|
272
272
|
|
|
273
273
|
a:误差比对法指标。
|
|
274
274
|
|
|
@@ -286,7 +286,7 @@ a:误差比对法指标。
|
|
|
286
286
|
|
|
287
287
|
- npu_linear
|
|
288
288
|
|
|
289
|
-
- npu_fusion_attention(该算子在 GPU 上预检时,需要额外安装 flash_attn
|
|
289
|
+
- npu_fusion_attention(该算子在 GPU 上预检时,需要额外安装 flash_attn,请用户自行安装,建议安装2.1以上版本。)
|
|
290
290
|
|
|
291
291
|
- npu_rms_norm
|
|
292
292
|
|