mindstudio-probe 1.0.3__py3-none-any.whl → 1.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/LICENSE +201 -201
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/METADATA +36 -34
- mindstudio_probe-1.1.0.dist-info/RECORD +287 -0
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/WHEEL +1 -1
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/entry_points.txt +1 -0
- msprobe/README.md +131 -237
- msprobe/__init__.py +16 -1
- msprobe/{config/config.json → config.json} +47 -49
- msprobe/core/advisor/advisor.py +124 -124
- msprobe/core/advisor/advisor_const.py +58 -59
- msprobe/core/advisor/advisor_result.py +58 -58
- msprobe/core/common/const.py +402 -318
- msprobe/core/common/exceptions.py +99 -99
- msprobe/core/common/{file_check.py → file_utils.py} +523 -283
- msprobe/core/common/inplace_op_checker.py +38 -0
- msprobe/core/common/inplace_ops.yaml +251 -0
- msprobe/core/common/log.py +86 -69
- msprobe/core/common/utils.py +371 -616
- msprobe/core/common_config.py +78 -71
- msprobe/core/compare/acc_compare.py +472 -298
- msprobe/core/compare/check.py +180 -95
- msprobe/core/compare/compare_cli.py +69 -49
- msprobe/core/compare/highlight.py +259 -222
- msprobe/core/compare/multiprocessing_compute.py +174 -149
- msprobe/core/compare/npy_compare.py +310 -295
- msprobe/core/compare/utils.py +464 -429
- msprobe/core/data_dump/data_collector.py +153 -144
- msprobe/core/data_dump/data_processor/base.py +337 -293
- msprobe/core/data_dump/data_processor/factory.py +76 -59
- msprobe/core/data_dump/data_processor/mindspore_processor.py +192 -198
- msprobe/core/data_dump/data_processor/pytorch_processor.py +383 -389
- msprobe/core/data_dump/json_writer.py +117 -116
- msprobe/core/data_dump/scope.py +194 -178
- msprobe/core/grad_probe/constant.py +74 -70
- msprobe/core/grad_probe/grad_compare.py +170 -175
- msprobe/core/grad_probe/utils.py +77 -52
- msprobe/docs/01.installation.md +99 -0
- msprobe/docs/02.config_introduction.md +137 -0
- msprobe/docs/03.config_examples.md +237 -0
- msprobe/docs/04.acl_config_examples.md +78 -0
- msprobe/docs/05.data_dump_PyTorch.md +326 -0
- msprobe/docs/06.data_dump_MindSpore.md +285 -0
- msprobe/docs/07.accuracy_checker_PyTorch.md +297 -0
- msprobe/docs/08.accuracy_checker_online_PyTorch.md +238 -0
- msprobe/docs/09.accuracy_checker_MindSpore.md +68 -0
- msprobe/docs/10.accuracy_compare_PyTorch.md +327 -0
- msprobe/docs/11.accuracy_compare_MindSpore.md +333 -0
- msprobe/docs/12.overflow_check_PyTorch.md +79 -0
- msprobe/docs/13.overflow_check_MindSpore.md +31 -0
- msprobe/{pytorch/doc/parse_tool.md → docs/14.data_parse_PyTorch.md} +283 -286
- msprobe/docs/15.free_benchmarking_PyTorch.md +170 -0
- msprobe/docs/16.free_benchmarking_MindSpore.md +140 -0
- msprobe/{doc/grad_probe/grad_probe.md → docs/17.grad_probe.md} +205 -207
- msprobe/{pytorch/doc//321/205/320/254/320/270/321/207/342/225/221/342/224/220/321/207/342/226/223/342/225/233/321/205/342/225/221/320/266/321/206/320/277/320/244/321/205/320/277/342/225/243.md → docs/18.online_dispatch.md} +89 -90
- msprobe/docs/FAQ.md +189 -0
- msprobe/docs/S02.report_free_benchmarking_validation_performance_baseline.md +146 -0
- msprobe/docs/img/free_benchmark_framework.png +0 -0
- msprobe/docs/img/ms_dump.png +0 -0
- msprobe/docs/img/ms_layer.png +0 -0
- msprobe/docs/img/pt_dump.png +0 -0
- msprobe/mindspore/__init__.py +2 -1
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +278 -245
- msprobe/mindspore/api_accuracy_checker/api_info.py +76 -69
- msprobe/mindspore/api_accuracy_checker/api_runner.py +155 -151
- msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +196 -196
- msprobe/mindspore/api_accuracy_checker/cmd_parser.py +6 -0
- msprobe/mindspore/api_accuracy_checker/compute_element.py +238 -223
- msprobe/mindspore/api_accuracy_checker/main.py +8 -15
- msprobe/mindspore/api_accuracy_checker/type_mapping.py +113 -113
- msprobe/mindspore/api_accuracy_checker/utils.py +79 -62
- msprobe/mindspore/cell_processor.py +58 -34
- msprobe/mindspore/common/const.py +108 -87
- msprobe/mindspore/common/log.py +37 -37
- msprobe/mindspore/common/utils.py +97 -57
- msprobe/mindspore/compare/distributed_compare.py +62 -75
- msprobe/mindspore/compare/layer_mapping.py +146 -0
- msprobe/mindspore/compare/modify_mapping.py +107 -0
- msprobe/mindspore/compare/ms_compare.py +357 -117
- msprobe/mindspore/compare/ms_graph_compare.py +364 -317
- msprobe/mindspore/compare/ms_to_pt_api.yaml +399 -399
- msprobe/mindspore/debugger/debugger_config.py +69 -74
- msprobe/mindspore/debugger/precision_debugger.py +150 -107
- msprobe/mindspore/dump/dump_tool_factory.py +50 -35
- msprobe/mindspore/dump/hook_cell/api_registry.py +128 -104
- msprobe/mindspore/dump/hook_cell/hook_cell.py +55 -53
- msprobe/mindspore/dump/hook_cell/primitive_hooks.py +206 -0
- msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +994 -925
- msprobe/mindspore/dump/hook_cell/wrap_api.py +121 -0
- msprobe/mindspore/dump/jit_dump.py +96 -56
- msprobe/mindspore/dump/kernel_graph_dump.py +75 -60
- msprobe/mindspore/dump/kernel_kbyk_dump.py +79 -65
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +131 -116
- msprobe/mindspore/free_benchmark/common/config.py +27 -12
- msprobe/mindspore/free_benchmark/common/handler_params.py +32 -17
- msprobe/mindspore/free_benchmark/common/utils.py +85 -71
- msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +842 -842
- msprobe/mindspore/free_benchmark/decorator/dec_forward.py +57 -42
- msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +122 -107
- msprobe/mindspore/free_benchmark/handler/base_handler.py +105 -90
- msprobe/mindspore/free_benchmark/handler/check_handler.py +56 -41
- msprobe/mindspore/free_benchmark/handler/fix_handler.py +51 -36
- msprobe/mindspore/free_benchmark/handler/handler_factory.py +36 -21
- msprobe/mindspore/free_benchmark/perturbation/add_noise.py +82 -67
- msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +36 -21
- msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +78 -63
- msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +77 -0
- msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +49 -34
- msprobe/mindspore/free_benchmark/perturbation/no_change.py +27 -12
- msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +44 -27
- msprobe/mindspore/free_benchmark/self_check_tool_factory.py +48 -33
- msprobe/mindspore/grad_probe/global_context.py +100 -91
- msprobe/mindspore/grad_probe/grad_analyzer.py +231 -231
- msprobe/mindspore/grad_probe/grad_monitor.py +27 -27
- msprobe/mindspore/grad_probe/grad_stat_csv.py +131 -131
- msprobe/mindspore/grad_probe/hook.py +94 -92
- msprobe/mindspore/grad_probe/utils.py +29 -28
- msprobe/mindspore/ms_config.py +128 -126
- msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +60 -45
- msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +49 -34
- msprobe/mindspore/runtime.py +4 -4
- msprobe/mindspore/service.py +297 -354
- msprobe/mindspore/task_handler_factory.py +24 -24
- msprobe/msprobe.py +105 -107
- msprobe/pytorch/__init__.py +23 -4
- msprobe/pytorch/api_accuracy_checker/common/config.py +70 -55
- msprobe/pytorch/api_accuracy_checker/common/utils.py +246 -165
- msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +230 -213
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +632 -581
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_standard.yaml +132 -132
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_threshold.yaml +390 -390
- msprobe/pytorch/api_accuracy_checker/compare/compare.py +416 -381
- msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +90 -73
- msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +265 -244
- msprobe/pytorch/api_accuracy_checker/config.yaml +10 -10
- msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +370 -332
- msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +221 -199
- msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +150 -134
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +518 -581
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +213 -74
- msprobe/pytorch/api_accuracy_checker/run_ut/torch_ut_setting.json +7 -4
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +218 -202
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +370 -324
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +227 -204
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/dump_dispatch.py +110 -0
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +244 -218
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/torch_ops_config.yaml +63 -0
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +44 -0
- msprobe/pytorch/bench_functions/__init__.py +30 -15
- msprobe/pytorch/bench_functions/apply_adam_w.py +43 -28
- msprobe/pytorch/bench_functions/confusion_transpose.py +34 -19
- msprobe/pytorch/bench_functions/fast_gelu.py +70 -55
- msprobe/pytorch/bench_functions/layer_norm_eval.py +21 -6
- msprobe/pytorch/bench_functions/linear.py +27 -12
- msprobe/pytorch/bench_functions/matmul_backward.py +63 -48
- msprobe/pytorch/bench_functions/npu_fusion_attention.py +538 -421
- msprobe/pytorch/bench_functions/rms_norm.py +30 -15
- msprobe/pytorch/bench_functions/rotary_mul.py +71 -52
- msprobe/pytorch/bench_functions/scaled_mask_softmax.py +41 -26
- msprobe/pytorch/bench_functions/swiglu.py +70 -55
- msprobe/pytorch/common/__init__.py +17 -2
- msprobe/pytorch/common/compare_script.template +14 -14
- msprobe/pytorch/common/log.py +33 -32
- msprobe/pytorch/common/parse_json.py +54 -39
- msprobe/pytorch/common/utils.py +310 -300
- msprobe/pytorch/compare/distributed_compare.py +66 -66
- msprobe/pytorch/compare/mapping.yaml +607 -607
- msprobe/pytorch/compare/match.py +49 -33
- msprobe/pytorch/compare/pt_compare.py +82 -40
- msprobe/pytorch/debugger/debugger_config.py +108 -95
- msprobe/pytorch/debugger/precision_debugger.py +173 -125
- msprobe/pytorch/free_benchmark/__init__.py +23 -8
- msprobe/pytorch/free_benchmark/common/constant.py +70 -70
- msprobe/pytorch/free_benchmark/common/counter.py +71 -71
- msprobe/pytorch/free_benchmark/common/enums.py +65 -37
- msprobe/pytorch/free_benchmark/common/params.py +144 -129
- msprobe/pytorch/free_benchmark/common/utils.py +118 -102
- msprobe/pytorch/free_benchmark/compare/grad_saver.py +200 -179
- msprobe/pytorch/free_benchmark/compare/single_benchmark.py +119 -104
- msprobe/pytorch/free_benchmark/main.py +120 -105
- msprobe/pytorch/free_benchmark/perturbed_layers/base_layer.py +28 -13
- msprobe/pytorch/free_benchmark/perturbed_layers/layer_factory.py +56 -41
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +105 -90
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +119 -104
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +87 -63
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +83 -68
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/no_change.py +43 -28
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/npu_base_layser.py +60 -45
- msprobe/pytorch/free_benchmark/perturbed_layers/run_cpu.py +34 -19
- msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +256 -217
- msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +54 -39
- msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +38 -23
- msprobe/pytorch/free_benchmark/result_handlers/handler_factory.py +45 -30
- msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +185 -170
- msprobe/pytorch/function_factory.py +91 -75
- msprobe/pytorch/functional/module_dump.py +84 -0
- msprobe/pytorch/grad_probe/grad_monitor.py +91 -90
- msprobe/pytorch/grad_probe/grad_stat_csv.py +128 -128
- msprobe/pytorch/hook_module/__init__.py +16 -1
- msprobe/pytorch/hook_module/api_registry.py +166 -161
- msprobe/pytorch/hook_module/hook_module.py +118 -120
- msprobe/pytorch/hook_module/support_wrap_ops.yaml +1879 -1877
- msprobe/pytorch/hook_module/utils.py +28 -29
- msprobe/pytorch/hook_module/wrap_aten.py +111 -110
- msprobe/pytorch/hook_module/wrap_distributed.py +77 -78
- msprobe/pytorch/hook_module/wrap_functional.py +104 -105
- msprobe/pytorch/hook_module/wrap_npu_custom.py +85 -84
- msprobe/pytorch/hook_module/wrap_tensor.py +69 -71
- msprobe/pytorch/hook_module/wrap_torch.py +84 -86
- msprobe/pytorch/hook_module/wrap_vf.py +60 -62
- msprobe/pytorch/module_processer.py +153 -138
- msprobe/pytorch/online_dispatch/__init__.py +20 -20
- msprobe/pytorch/online_dispatch/compare.py +235 -236
- msprobe/pytorch/online_dispatch/dispatch.py +271 -271
- msprobe/pytorch/online_dispatch/dump_compare.py +155 -156
- msprobe/pytorch/online_dispatch/single_compare.py +391 -391
- msprobe/pytorch/online_dispatch/torch_ops_config.yaml +57 -49
- msprobe/pytorch/online_dispatch/utils.py +127 -146
- msprobe/pytorch/parse.py +19 -4
- msprobe/pytorch/parse_tool/cli.py +31 -32
- msprobe/pytorch/parse_tool/lib/compare.py +259 -271
- msprobe/pytorch/parse_tool/lib/config.py +52 -52
- msprobe/pytorch/parse_tool/lib/file_desc.py +31 -31
- msprobe/pytorch/parse_tool/lib/interactive_cli.py +102 -102
- msprobe/pytorch/parse_tool/lib/parse_exception.py +54 -54
- msprobe/pytorch/parse_tool/lib/parse_tool.py +161 -158
- msprobe/pytorch/parse_tool/lib/utils.py +320 -321
- msprobe/pytorch/parse_tool/lib/visualization.py +85 -91
- msprobe/pytorch/pt_config.py +317 -187
- msprobe/pytorch/service.py +311 -252
- mindstudio_probe-1.0.3.dist-info/RECORD +0 -272
- msprobe/config/README.md +0 -539
- msprobe/mindspore/doc/compare.md +0 -58
- msprobe/mindspore/doc/dump.md +0 -217
- msprobe/mindspore/dump/hook_cell/wrap_functional.py +0 -91
- msprobe/mindspore/dump/hook_cell/wrap_tensor.py +0 -63
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/ssl_config.py +0 -10
- msprobe/pytorch/doc/FAQ.md +0 -193
- msprobe/pytorch/doc/api_accuracy_checker.md +0 -313
- msprobe/pytorch/doc/api_accuracy_checker_online.md +0 -187
- msprobe/pytorch/doc/dump.md +0 -260
- msprobe/pytorch/doc/msprobe/321/207/342/226/223/342/225/233/321/205/342/225/221/320/266/321/205/342/225/226/320/265/321/205/320/225/342/225/226/321/206/320/245/342/226/221/321/206/320/235/320/276dump/321/206/320/260/320/227/321/205/320/227/320/226/321/206/320/220/320/267/321/210/320/223/342/225/234/321/205/320/257/342/225/221/321/207/342/225/221/342/224/220/321/206/320/232/320/265/321/205/320/241/320/232.md +0 -182
- msprobe/pytorch/doc/ptdbg_ascend_compare.md +0 -240
- msprobe/pytorch/doc/ptdbg_ascend_overview.md +0 -68
- msprobe/pytorch/doc/ptdbg_ascend_quickstart.md +0 -381
- msprobe/pytorch/doc/run_overflow_check.md +0 -25
- msprobe/pytorch/doc//321/206/320/247/320/260/321/206/320/260/320/227/321/206/320/255/320/226/321/205/342/225/226/320/265/321/205/320/225/342/225/226/321/205/320/254/342/225/221/321/206/320/251/320/277/321/211/320/272/320/234/321/210/320/277/320/221/321/205/320/242/320/234/321/206/320/220/320/267/321/210/320/223/342/225/234/321/205/320/257/342/225/221/321/207/342/225/221/342/224/220/321/206/320/232/320/265/321/205/320/241/320/232.md +0 -151
- msprobe/pytorch/functional/data_processor.py +0 -0
- msprobe/pytorch/functional/dump_module.py +0 -39
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/top_level.txt +0 -0
- /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_1.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_2.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_3.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_4.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_1.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_2.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_3.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_4.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_5.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_6.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_7.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/GPT-3_8.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/YOLOV5S_1.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/YOLOV5S_2.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/accuracy_checking_details.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/accuracy_checking_result.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/api_precision_compare_details.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/api_precision_compare_result.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/auto_analyze_log.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/compare_result_pkl.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/compare_result_pkl_md5.png.png +0 -0
- /msprobe/{pytorch/doc → docs}/img/cpu_info.png +0 -0
- /msprobe/{config → docs}/img/free_benchmark.png +0 -0
- /msprobe/{doc/grad_probe/img/image-1.png → docs/img/grad_probe_image-1.png} +0 -0
- /msprobe/{doc/grad_probe/img/image-2.png → docs/img/grad_probe_image-2.png} +0 -0
- /msprobe/{doc/grad_probe/img/image-3.png → docs/img/grad_probe_image-3.png} +0 -0
- /msprobe/{doc/grad_probe/img/image-4.png → docs/img/grad_probe_image-4.png} +0 -0
- /msprobe/{doc/grad_probe/img/image.png → docs/img/grad_probe_image.png} +0 -0
- /msprobe/{pytorch/doc → docs}/img/module_compare.png +0 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
# PyTorch 场景的精度比对
|
|
2
|
+
|
|
3
|
+
## 1 简介
|
|
4
|
+
|
|
5
|
+
- 本节主要介绍通过命令行和比对函数的方式进行 CPU 或 GPU 与 NPU 的精度数据比对,执行精度比对操作前需要先完成 CPU 或 GPU 与 NPU 的精度数据 dump,参见 [PyTorch 场景下的数据采集](./05.data_dump_PyTorch.md)章节。
|
|
6
|
+
|
|
7
|
+
- msprobe 使用子命令 compare 进行比对,可支持单卡和多卡场景的精度数据比对。
|
|
8
|
+
|
|
9
|
+
- 比对函数均通过单独创建精度比对脚本执行,可支持单卡和多卡场景的精度数据比对。
|
|
10
|
+
|
|
11
|
+
- 工具性能:比对数据量较小时(单份文件小于 10 GB),比对速度 0.1 GB/s;比对数据量较大时,比对速度 0.3 GB/s。 推荐环境配置:独占环境,CPU 核心数 192,固态硬盘(IO 速度参考:固态硬盘 > 500 MB/s,机械硬盘 60 ~ 170 MB/s)。用户环境性能弱于标准约束或非独占使用的比对速度酌情向下浮动。比对速度的计算方式:两份比对文件大小/比对耗时。
|
|
12
|
+
|
|
13
|
+
**使用场景**:
|
|
14
|
+
|
|
15
|
+
- 同一模型,从 CPU 或 GPU 移植到 NPU 中存在精度下降问题,对比 NPU 芯片中的 API 计算数值与 CPU 或 GPU 芯片中的 API 计算数值,进行问题定位。
|
|
16
|
+
- 同一模型,进行迭代(模型、框架版本升级或设备硬件升级)时存在的精度下降问题,对比相同模型在迭代前后版本的 API 计算数值,进行问题定位。
|
|
17
|
+
- 以上两个场景下,当存在无法自动匹配的API和模块时,则通过用户手动指定可以比对的API或模块来自定义映射关系,进行比对。
|
|
18
|
+
|
|
19
|
+
**注意事项**:
|
|
20
|
+
|
|
21
|
+
- NPU 自研 API,在 CPU 或 GPU 侧若没有对应的 API,该 API 的 dump 数据不比对。
|
|
22
|
+
- NPU 与 CPU 或 GPU 的计算结果误差可能会随着模型的执行不断累积,最终会出现同一个 API 因为输入的数据差异较大而无法比对的情况。
|
|
23
|
+
- CPU 或 GPU 与 NPU 中两个相同的 API 会因为调用次数不同导致无法比对或比对到错误的 API,不影响整体运行,该 API 忽略。
|
|
24
|
+
|
|
25
|
+
**API 匹配条件**:
|
|
26
|
+
|
|
27
|
+
进行精度比对时,需要判断 CPU 或 GPU 的 API 与 NPU 的 API 是否可以比对,须满足以下匹配条件:
|
|
28
|
+
|
|
29
|
+
- 两个 API 的名称相同,API 命名规则:`{api_type}.{api_name}.{api调用次数}.{正反向}.{输入输出}.{index}`,如:Functional.conv2d.1.backward.input.0。
|
|
30
|
+
- 两个 API 输入输出的 Tensor 数量相同且各个 Tensor 的 Shape 相同。
|
|
31
|
+
|
|
32
|
+
通常满足以上两个条件,工具就认为是同一个 API,成功进行 API 的匹配,后续进行相应的计算。
|
|
33
|
+
|
|
34
|
+
## 2 精度比对操作指导
|
|
35
|
+
|
|
36
|
+
### 2.1 命令行方式
|
|
37
|
+
|
|
38
|
+
#### 2.1.1 比对命令说明
|
|
39
|
+
|
|
40
|
+
命令示例如下:
|
|
41
|
+
|
|
42
|
+
```shell
|
|
43
|
+
msprobe -f pytorch compare -i ./compare.json -o ./output -s
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**完整参数说明**:
|
|
47
|
+
|
|
48
|
+
| 参数名 | 说明 | 是否必选 |
|
|
49
|
+
|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
|
|
50
|
+
| -i 或 --input_path | 指定[比对文件](#211-比对文件),str 类型。 | 是 |
|
|
51
|
+
| -o 或 --output_path | 配置比对结果文件存盘目录,str 类型。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。 | 是 |
|
|
52
|
+
| -s 或 --stack_mode | 配置 stack_mode 的开关,bool 类型。仅当[比对文件](#214-比对文件)配置 stack_path 需要开启。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
|
|
53
|
+
| -c 或 --compare_only | 仅比对开关,bool 类型。该参数默认未配置,会启用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。通过配置该参数取消自动精度分析,仅输出比对结果表格。 | 否 |
|
|
54
|
+
| -f 或 --fuzzy_match | 模糊匹配,bool 类型。开启后,对于网络中同一层级且命名仅调用次数不同的 API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
|
|
55
|
+
| -dm或--data_mapping | 自定义映射关系比对。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件](#215-自定义映射文件)。仅[API和模块无法自动匹配场景](#213-API和模块无法自动匹配场景)需要配置。仅支持逐卡比对,即使用[比对文件](#214-比对文件)的单卡场景示例。 | 否 |
|
|
56
|
+
|
|
57
|
+
#### 2.1.2 整网比对场景
|
|
58
|
+
|
|
59
|
+
整网比对场景是包含:CPU 或 GPU 与 NPU环境的 API 计算数值的整网数据比对;相同模型不同迭代版本的 API 计算数值的整网数据比对。
|
|
60
|
+
|
|
61
|
+
支持单卡和多卡,可同时比对多卡的 dump 数据。多机场景需要每个设备单独执行比对操作。
|
|
62
|
+
|
|
63
|
+
1. 配置[config.json](https://gitee.com/ascend/mstt/blob/8914fbb31ff6da3898c3bb7b97ba99e23b0f1d38/debug/accuracy_tools/msprobe/config.json)文件。
|
|
64
|
+
|
|
65
|
+
2. 参见 [PyTorch 场景下的数据采集](./05.data_dump_PyTorch.md)章节完成 CPU 或 GPU 与 NPU 的精度数据 dump。
|
|
66
|
+
|
|
67
|
+
3. 创建[比对文件](#211-比对文件)。
|
|
68
|
+
|
|
69
|
+
4. 运行命令:
|
|
70
|
+
|
|
71
|
+
```shell
|
|
72
|
+
msprobe -f pytorch compare -i ./compare.json -o ./output -s
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
5. 查看比对结果,请参见 [3 精度比对结果分析](#3-精度比对结果分析)。
|
|
76
|
+
|
|
77
|
+
#### 2.1.3 API和模块无法自动匹配场景
|
|
78
|
+
|
|
79
|
+
当存在无法自动匹配的API和模块时,则用户可以通过提供自定义映射关系的配置文件来告知工具可匹配的API或模块,进行比对。
|
|
80
|
+
|
|
81
|
+
1. [config.json](https://gitee.com/ascend/mstt/blob/8914fbb31ff6da3898c3bb7b97ba99e23b0f1d38/debug/accuracy_tools/msprobe/config.json)文件level配置为L0或L1、task配置为tensor或statistics并指定需要dump的API或模块名。
|
|
82
|
+
|
|
83
|
+
2. 参见[PyTorch 场景下的数据采集](./05.data_dump_PyTorch.md)章节完成 CPU 或 GPU 与 NPU 的精度数据 dump。
|
|
84
|
+
|
|
85
|
+
3. 创建[比对文件](#211-比对文件)(单卡场景示例)。
|
|
86
|
+
|
|
87
|
+
4. 运行命令:
|
|
88
|
+
|
|
89
|
+
```shell
|
|
90
|
+
msprobe -f pytorch compare -i ./compare.json -o ./output -s -dm data_mapping.yaml
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
data_mapping.yaml文件配置请参见[自定义映射文件](#215-自定义映射文件)。
|
|
94
|
+
|
|
95
|
+
该场景不支持-f模糊匹配。
|
|
96
|
+
|
|
97
|
+
5. 查看比对结果,请参见 [3 精度比对结果分析](#3-精度比对结果分析)。
|
|
98
|
+
|
|
99
|
+
#### 2.1.4 比对文件
|
|
100
|
+
|
|
101
|
+
以在当前目录创建 ./compare.json 为例。
|
|
102
|
+
|
|
103
|
+
- 单卡场景示例:
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"npu_path": "./npu_dump/dump.json",
|
|
108
|
+
"bench_path": "./bench_dump/dump.json",
|
|
109
|
+
"stack_path": "./npu_dump/stack.json",
|
|
110
|
+
"is_print_compare_log": true
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
- 多卡场景示例:
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"npu_path": "./npu_dump/step0",
|
|
119
|
+
"bench_path": "./bench_dump/step0",
|
|
120
|
+
"is_print_compare_log": true
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**参数说明**:
|
|
125
|
+
|
|
126
|
+
| 参数名 | 说明 | 是否必选 |
|
|
127
|
+
| -------------------- | ------------------------------------------------------------ | ------------------ |
|
|
128
|
+
| npu_path | 配置 NPU 环境下的 dump.json 文件(单卡场景)或真实数据目录(多卡场景),str 类型。 | 是 |
|
|
129
|
+
| bench_path | 配置 CPU、GPU 或 NPU 环境下的 dump.json 文件(单卡场景)或真实数据目录(多卡场景),str 类型。 | 是 |
|
|
130
|
+
| stack_path | 配置 NPU dump 目录下的 stack.json 文件,str 类型。 | 单卡必选,多卡不选 |
|
|
131
|
+
| is_print_compare_log | 配置是否开启单个算子的日志打屏。可取值 true 或 false,默认为 true。关闭后则只输出常规日志,bool 类型。 | 否 |
|
|
132
|
+
|
|
133
|
+
#### 2.1.5 自定义映射文件
|
|
134
|
+
|
|
135
|
+
文件名格式:*.yaml,*为文件名,可自定义。
|
|
136
|
+
|
|
137
|
+
文件内容格式:
|
|
138
|
+
|
|
139
|
+
```yaml
|
|
140
|
+
# API
|
|
141
|
+
{api_type}.{api_name}.{API调用次数}.{前向反向}.{input/output}.{参数序号}: {api_type}.{api_name}.{API调用次数}.{前向反向}.{input/output}.{参数序号}
|
|
142
|
+
# 模块
|
|
143
|
+
{Module}.{module_name}.{前向反向}.{index}.{input/output}.{参数序号}: {Module}.{module_name}.{前向反向}.{index}.{input/output}.{参数序号}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
冒号左侧和右侧分别为PyTorch框架不同版本或不同芯片环境的API的名称和module模块名称。
|
|
147
|
+
|
|
148
|
+
API和模块名称请从《[PyTorch 场景的精度数据采集](https://gitee.com/ascend/mstt/blob/8914fbb31ff6da3898c3bb7b97ba99e23b0f1d38/debug/accuracy_tools/msprobe/docs/05.data_dump_PyTorch.md)》中的dump.json文件获取。
|
|
149
|
+
|
|
150
|
+
文件内容示例:
|
|
151
|
+
|
|
152
|
+
```yaml
|
|
153
|
+
# API
|
|
154
|
+
NPU.npu_fusion_attention.4.forward.input.0: NPU.npu_fusion_attention.4.forward.input.0
|
|
155
|
+
# 模块
|
|
156
|
+
Module.module.language_model.embedding.word_embedding.VocabParallelEmbedding.forward.0.input.0: Module.module.language_model.embedding.word_embedding.VocabParallelEmbedding.forward.0.input.0
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
API和模块名称在dump.json文件中的“data_name”字段展示,如下图红框处所示:
|
|
160
|
+
|
|
161
|
+

|
|
162
|
+
|
|
163
|
+
### 2.2 比对函数方式
|
|
164
|
+
|
|
165
|
+
#### 2.2.1 compare 函数
|
|
166
|
+
|
|
167
|
+
此函数将 CPU 或 GPU 与 NPU 的 dump 文件进行比对,仅支持单机单卡。
|
|
168
|
+
|
|
169
|
+
**函数原型**:
|
|
170
|
+
|
|
171
|
+
```Python
|
|
172
|
+
compare(input_param, output_path, stack_mode=False, auto_analyze=True, fuzzy_match=False)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**参数说明**:
|
|
176
|
+
|
|
177
|
+
| 参数名 | 说明 | 是否必选 |
|
|
178
|
+
| ------------ | ------------------------------------------------------------ | -------- |
|
|
179
|
+
| input_param | 配置 dump 数据文件及目录,dict 类型。配置参数包括:<br> "npu_json_path":指定 NPU dump 目录下的 dump.json 文件。<br/>**配置示例**:"npu_json_path": "./npu_dump/dump.json"。<br/> "bench_json_path":指定 CPU、GPU 或 NPU dump 目录下的 dump.json 文件。<br/>**配置示例**:"bench_json_path": "./bench_dump/dump.json"。<br/> "stack_json_path":指定 NPU dump 目录下的 stack.json 文件。<br/>**配置示例**:"stack_json_path": "./npu_dump/stack.json"。<br/> "is_print_compare_log":配置是否开启单个算子的日志打屏。<br/>**配置示例**:True 或 False。 | 是 |
|
|
180
|
+
| output_path | 配置比对结果文件存盘目录,str 类型。<br/>**配置示例**:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.xlsx`。 | 是 |
|
|
181
|
+
| stack_mode | 配置 stack_mode 的开关,bool 类型。仅当配置 stack_json_path 时需要开启。<br/>**配置示例**:stack_mode=True,默认为 False。 | 否 |
|
|
182
|
+
| auto_analyze | 自动精度分析,bool 类型。开启后工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 advisor_{timestamp}.txt 文件)。<br/>**配置示例**:auto_analyze=False,默认为 True。 | 否 |
|
|
183
|
+
| fuzzy_match | 模糊匹配,bool 类型。开启后,对于网络中同一层级且命名仅调用次数不同的 API,可匹配并进行比对。<br/>**配置示例**:fuzzy_match=True,默认为 False。 | 否 |
|
|
184
|
+
|
|
185
|
+
**函数示例**:
|
|
186
|
+
|
|
187
|
+
单机单卡场景下创建比对脚本,例如 compare.py,拷贝如下代码,具体参数请根据实际环境修改。
|
|
188
|
+
|
|
189
|
+
```Python
|
|
190
|
+
from msprobe.pytorch import compare
|
|
191
|
+
input_param={
|
|
192
|
+
"npu_json_path": "./npu_dump/dump.json",
|
|
193
|
+
"bench_json_path": "./bench_dump/dump.json",
|
|
194
|
+
"stack_json_path": "./npu_dump/stack.json",
|
|
195
|
+
"is_print_compare_log": True
|
|
196
|
+
}
|
|
197
|
+
compare(input_param, output_path="./output", stack_mode=True)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
#### 2.2.2 compare_distributed 函数
|
|
201
|
+
|
|
202
|
+
此函数将 CPU 或 GPU 与 NPU 的 dump 文件进行比对,支持单卡和多卡,可同时比对多卡的 dump 数据。多机场景需要每个设备单独执行比对操作。可自动检索和匹配对应卡和进程所 dump 的数据文件,再调用 compare 进行比对。单机单卡时与 compare 函数二选一。
|
|
203
|
+
|
|
204
|
+
**函数原型**:
|
|
205
|
+
|
|
206
|
+
```Python
|
|
207
|
+
compare_distributed(npu_dump_dir, bench_dump_dir, output_path, **kwargs)
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**参数说明**:
|
|
211
|
+
|
|
212
|
+
| 参数名 | 说明 | 是否必选 |
|
|
213
|
+
| -------------- | ------------------------------------------------------------ | -------- |
|
|
214
|
+
| npu_dump_dir | 配置 NPU 环境下的 dump 目录。str 类型。dump 数据目录须指定到 step 级。<br/>**配置示例**:'./npu_dump/step0'。 | 是 |
|
|
215
|
+
| bench_dump_dir | 配置 CPU、GPU 或 NPU 环境下的 dump 目录。str 类型。<br/>**配置示例**:'./gpu_dump/step0'。 | 是 |
|
|
216
|
+
| output_path | 配置比对结果文件存盘目录。需要预先创建 output_path 目录。str 类型。<br/>**配置示例**:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_rank{npu_ID}-rank{cpu/gpu/npu_ID}_{timestamp}.xlsx`。 | 是 |
|
|
217
|
+
| **kwargs | 支持 compare 的所有可选参数。 | 否 |
|
|
218
|
+
|
|
219
|
+
**函数示例**:
|
|
220
|
+
|
|
221
|
+
```Python
|
|
222
|
+
from msprobe.pytorch import *
|
|
223
|
+
compare_distributed('./npu_dump/step0', './gpu_dump/step0', './output')
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## 3 精度比对结果分析
|
|
227
|
+
|
|
228
|
+
PyTorch 精度比对是以 CPU 或 GPU 的计算结果为标杆,通过计算精度评价指标判断 API 在运行时是否存在精度问题。
|
|
229
|
+
|
|
230
|
+
- `advisor_{timestamp}.txt` 文件中给出了可能存在精度问题的 API 的专家建议。
|
|
231
|
+
|
|
232
|
+
- `compare_result_{timestamp}.xlsx` 文件列出了所有执行精度比对的 API 详细信息和比对结果,示例如下:
|
|
233
|
+
|
|
234
|
+

|
|
235
|
+
|
|
236
|
+
- **提示**:比对结果通过颜色标记、比对结果(Result)、计算精度达标情况(Accuracy Reached no Not)、错误信息提示(Err_Message)定位可疑算子,但鉴于每种指标都有对应的判定标准,还需要结合实际情况进行判断。
|
|
237
|
+
|
|
238
|
+
### 3.1 指标说明
|
|
239
|
+
|
|
240
|
+
精度比对从三个层面评估 API 的精度,依次是:真实数据模式、统计数据模式和 MD5 模式。比对结果分别有不同的表头。
|
|
241
|
+
|
|
242
|
+
**公共表头**:
|
|
243
|
+
|
|
244
|
+
|dump 数据模式|NPU Name (NPU 的 API 名)|Bench Name (bench 的 API 名)|NPU Dtype (NPU 数据类型)|Bench Dtype (bench 数据类型)|NPU Tensor Shape (NPU 张量形状)|Bench Tensor Shape (bench 张量形状)|
|
|
245
|
+
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|
|
246
|
+
|真实数据模式|√|√|√|√|√|√|
|
|
247
|
+
|统计数据模式|√|√|√|√|√|√|
|
|
248
|
+
|MD5 模式|√|√|√|√|√|√|
|
|
249
|
+
|
|
250
|
+
**个性表头**:
|
|
251
|
+
|
|
252
|
+
统计量有 4 种:最大值(max)、最小值(min)、平均值(mean)和 L2-范数(L2 norm)。
|
|
253
|
+
|
|
254
|
+
|dump 数据模式|Cosine (tensor 余弦相似度)|MaxAbsErr (tensor 最大绝对误差)|MaxRelativeErr (tensor 最大相对误差)|One Thousandth Err Ratio (tensor 相对误差小于千分之一的比例)|Five Thousandth Err Ratio (tensor 相对误差小于千分之五的比例)|NPU 和 bench 的统计量绝对误差 (max, min, mean, L2 norm) diff| NPU 和 bench 的统计量相对误差 (max, min, mean, L2 norm) RelativeErr |NPU 和 bench 的统计量 (max, min, mean, L2 norm)|NPU MD5 (NPU 数据 MD5 值)|BENCH MD5 (bench 数据 MD5 值)|Result (比对结果)|Accuracy Reached or Not (计算精度是否达标)|Err_message (错误信息提示)|NPU_Stack_Info (堆栈信息)|Data_Name (NPU 真实数据名)|
|
|
255
|
+
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
256
|
+
|真实数据模式|√|√|√|√|√|||√||||√|√|√|√|
|
|
257
|
+
|统计数据模式||||||√|√|√|||√||√|√||
|
|
258
|
+
|MD5 模式|||||||||√|√|√|||√||
|
|
259
|
+
|
|
260
|
+
### 3.2 颜色标记——真实数据模式、统计数据模式
|
|
261
|
+
|
|
262
|
+
红色标记情况:
|
|
263
|
+
1. 一个 API 或模块的 One Thousandth Err Ratio 的 input > 0.9 同时 output < 0.6(真实数据模式);
|
|
264
|
+
2. 一个 API 或模块的 output 的最大值相对误差 (Max diff 除以 max(0.01, Bench max)) > 0.5(统计数据模式);
|
|
265
|
+
3. 一个 API 或模块的 NPU 的最大值或最小值中存在 nan/inf/-inf(真实数据模式、统计数据模式);
|
|
266
|
+
4. 一个 API 或模块的最大值绝对误差大于 1e+10(真实数据模式,统计数据模式)。
|
|
267
|
+
|
|
268
|
+
黄色标记情况:
|
|
269
|
+
1. 一个 API 或模块的 One Thousandth Err Ratio 的 input - output > 0.1(真实数据模式);
|
|
270
|
+
2. 一个 API 或模块的 Cosine 的 input - output > 0.1(真实数据模式);
|
|
271
|
+
3. 一个 API 或模块的 output 的最大值相对误差 > 0.1 同时 input < 0.01(真实数据模式,统计数据模式);
|
|
272
|
+
4. 一个 API 或模块的 input 与 output 的最大值绝对误差都大于 1,同时 output 比 input 大一个数量级以上(真实数据模式、统计数据模式)。
|
|
273
|
+
|
|
274
|
+
### 3.3 比对结果(Result)——统计数据模式、MD5 模式
|
|
275
|
+
|
|
276
|
+
统计数据模式:
|
|
277
|
+
1. Warning 情况:4种统计值至少一种相对误差 > 0.5,要重点检查该 API;
|
|
278
|
+
2. 空情况:相对误差 ≤ 0.5,可以不需要重点关注,但不代表不存在精度问题;
|
|
279
|
+
3. N/A 情况:API 没有匹配上。
|
|
280
|
+
|
|
281
|
+
MD5 模式:
|
|
282
|
+
1. Pass 情况:NPU 与标杆的 MD5 值一致,即 API 数据完全一致;
|
|
283
|
+
2. Different 情况:NPU 与标杆的 MD5 值不一致,即 API 数据不完全一致;
|
|
284
|
+
3. N/A 情况:API 没有匹配上。
|
|
285
|
+
|
|
286
|
+
### 3.4 判断计算精度达标情况(Accuracy Reached or Not)——真实数据模式
|
|
287
|
+
|
|
288
|
+
标记为 `No`,表示精度不达标:
|
|
289
|
+
1. Cosine < 0.99 且 MaxAbsError > 0.001;
|
|
290
|
+
2. Cosine < 0.9;
|
|
291
|
+
3. MaxAbsError > 1;
|
|
292
|
+
4. Cosine 或 MaxAbsError 计算结果为 N/A(NPU 和 Bench 的数据有 nan/inf)。
|
|
293
|
+
|
|
294
|
+
标记为 `None`:
|
|
295
|
+
1. Cosine 或 MaxAbsError 计算结果为 None(读取到的数据为空);
|
|
296
|
+
2. Cosine 或 MaxAbsError 计算结果无法转换为浮点型。
|
|
297
|
+
|
|
298
|
+
标记为 `Unmatched`:
|
|
299
|
+
1. Cosine 计算结果为 `shape unmatched`(NPU 和 Bench 的数据结构不一致)。
|
|
300
|
+
|
|
301
|
+
标记为 `Yes`,表示精度达标:
|
|
302
|
+
1. 除以上情况外的其余情况。
|
|
303
|
+
|
|
304
|
+
### 3.5 错误信息提示(Err_message)——真实数据模式、统计数据模式
|
|
305
|
+
|
|
306
|
+
1. "Need double check api accuracy.":四个统计值中至少 1 个相对误差 > 0.5(统计数据模式);
|
|
307
|
+
2. "Fuzzy matching data, the comparison arruracy may be affected.":NPU 或 Bench 的真实数据名没有匹配上(真实数据模式);
|
|
308
|
+
3. "Dump file: {} not found.":NPU 真实数据不存在或者读取出错(真实数据模式);
|
|
309
|
+
4. "No bench data matched.":Bench 的 API 没有匹配上、Bench 真实数据不存在或读取出错(真实数据模式);
|
|
310
|
+
5. "This is empty data, can not compare.":读取到的数据为空(真实数据模式);
|
|
311
|
+
6. "Shape of NPU and bench Tensor do not match. Skipped.":NPU 和 Bench 的数据结构不一致(真实数据模式);
|
|
312
|
+
7. "The Position of inf or nan in NPU and bench Tensor do not match.":NPU 和 Bench 的数据有 nan/inf(真实数据模式);
|
|
313
|
+
8. "This is type of scalar data, can not compare.":NPU 为标量(真实数据模式);
|
|
314
|
+
9. "Dtype of NPU and bench Tensor do not match.":NPU 和 Bench 数据的数据类型不同(真实数据模式);
|
|
315
|
+
10. "":除以上情况的其余情况(真实数据模式、统计数据模式)。
|
|
316
|
+
|
|
317
|
+
### 3.6 计算精度评价指标分析
|
|
318
|
+
|
|
319
|
+
1. Cosine:通过计算两个向量的余弦值来判断其相似度,数值越接近于 1 说明计算出的两个张量越相似,实际可接受阈值为大于 0.99。在计算中可能会存在 nan,主要由于可能会出现其中一个向量为 0。
|
|
320
|
+
|
|
321
|
+
2. MaxAbsErr:当最大绝对误差越接近 0 表示其计算的误差越小,实际可接受阈值为小于 0.001。
|
|
322
|
+
|
|
323
|
+
3. MaxRelativeErr:当最大相对误差越接近 0 表示其计算的误差越小。
|
|
324
|
+
|
|
325
|
+
当 dump 数据中存在 0 或 Nan 时,比对结果中最大相对误差则出现 inf 或 Nan 的情况,属于正常现象。
|
|
326
|
+
|
|
327
|
+
4. One Thousandth Err Ratio(双千分之一)、Five Thousandths Err Ratio(双千分之五)精度指标:是指 NPU 的 Tensor 中的元素逐个与对应的标杆数据对比,相对误差大于千分之一、千分之五的比例占总元素个数的比例小于千分之一、千分之五。该数据仅作为精度下降趋势的参考,并不参与计算精度是否通过的判定。
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# MindSpore 场景的精度比对
|
|
2
|
+
|
|
3
|
+
## 1 简介
|
|
4
|
+
|
|
5
|
+
msprobe精度比对工具主要用于如下场景:
|
|
6
|
+
|
|
7
|
+
- MindSpore框架内比对
|
|
8
|
+
- 通过对同一个网络模型,在两个不同版本的MindSpore静态图环境下,输入相同的训练数据,在分别得到API dump数据后,对这两个API dump数据进行全量自动比对,从而快速定位不同版本之间的精度问题。
|
|
9
|
+
- 通过对同一个网络模型,在两个不同版本的MindSpore静态图环境下,输入相同的训练数据,在分别得到kernel dump数据后,对这两个kernel dump数据进行全量自动比对,从而快速定位不同版本之间的精度问题。
|
|
10
|
+
- 通过对同一个网络模型,在两个不同版本的MindSpore动态图环境下,输入相同的训练数据,在分别得到cell dump数据后,对这两个cell模块进行全量自动比对,从而快速定位不同版本之间的精度问题。
|
|
11
|
+
- MindSpore与PyTorch跨框架比对
|
|
12
|
+
- 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得API dump数据,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
|
|
13
|
+
- 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得cell dump数据,由用户指定可以比对的cell list,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
|
|
14
|
+
- 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得API或模块dump数据,由用户指定可以比对的API或模块,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
|
|
15
|
+
- 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得API或模块dump数据,由用户指定可以比对的模型代码中的Layer层,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
|
|
16
|
+
|
|
17
|
+
执行精度比对操作需要安装msprobe工具。详见《[MindStudio精度调试工具](../README.md)》的“工具安装”章节。
|
|
18
|
+
|
|
19
|
+
## 2 命令行比对
|
|
20
|
+
|
|
21
|
+
精度比对工具目前使用方式为命令行形式。
|
|
22
|
+
|
|
23
|
+
### 2.1 比对命令说明
|
|
24
|
+
|
|
25
|
+
命令示例如下:
|
|
26
|
+
|
|
27
|
+
```shell
|
|
28
|
+
msprobe -f mindspore compare -i ./compare.json -o ./output -s
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**完整参数说明**
|
|
32
|
+
|
|
33
|
+
| 参数名 | 说明 | 是否必选 |
|
|
34
|
+
| -------------------- | ------------------------------------------------------------ | -------- |
|
|
35
|
+
| -i或--input_path | 指定比对文件。比对文件内容及示例请参见[比对文件](#31-比对文件)或[比对文件(kernel)](#32-比对文件kernel)(比对文件(kernel)仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | 是 |
|
|
36
|
+
| -o或--output_path | 配置比对结果文件存盘目录。文件名称基于时间戳自动生成,格式为:<br> `compare_result_{timestamp}.xlsx`<br/> `compare_result_{rank_id}_{step_id}_{timestamp}.xlsx`(仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | 是 |
|
|
37
|
+
| -s或--stack_mode | 配置stack_mode的开关。仅当[比对文件](#31-比对文件)配置"stack_path"需要开启。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
|
|
38
|
+
| -c或--compare_only | 仅比对开关,bool 类型。该参数默认未配置,会启用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。通过配置该参数取消自动精度分析,仅输出比对结果表格。 | 否 |
|
|
39
|
+
| -f或--fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
|
|
40
|
+
| -am或--api_mapping | 跨框架比对。配置该参数时表示开启跨框架API比对功能。仅[跨框架的API比对](#25-跨框架的api比对)场景需要配置。 | 否 |
|
|
41
|
+
| -cm或--cell_mapping | 跨框架比对。配置该参数时表示开启跨框架cell模块比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(cell)](#33-自定义映射文件cell)。仅[跨框架的cell模块比对](#26-跨框架的cell模块比对)场景需要配置。 | 否 |
|
|
42
|
+
| -dm或--data_mapping | 跨框架比对。配置该参数时表示开启跨框架API或模块的比对功能,需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(API和模块)](#34-自定义映射文件api和模块)。仅[跨框架的API或模块比对](#27-跨框架的api或模块比对)场景需要配置。 | 否 |
|
|
43
|
+
| -lm或--layer_mapping | 跨框架比对。配置该参数时表示开启跨框架Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer)](#35-自定义映射文件layer)。仅[跨框架的Layer层比对](#28-跨框架的layer层比对)场景需要配置。 | 否 |
|
|
44
|
+
|
|
45
|
+
### 2.2 不同版本下的全量API比对
|
|
46
|
+
|
|
47
|
+
1. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》完成不同环境下MindSpore静态图精度数据的采集,得到不同框架版本的API dump数据。
|
|
48
|
+
|
|
49
|
+
2. 创建比对文件,文件内容及示例请参见[比对文件](#31-比对文件)。
|
|
50
|
+
|
|
51
|
+
3. 执行如下示例命令进行比对:
|
|
52
|
+
|
|
53
|
+
```shell
|
|
54
|
+
msprobe -f mindspore compare -i ./compare.json -o ./output -s
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
4. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
|
|
58
|
+
|
|
59
|
+
### 2.3 不同版本下的全量kernel比对
|
|
60
|
+
|
|
61
|
+
1. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》完成不同环境下MindSpore静态图精度数据的采集,得到不同框架版本的kernel dump数据。
|
|
62
|
+
|
|
63
|
+
2. 创建比对文件,文件内容及示例请参见[比对文件(kernel)](#32-比对文件kernel)。
|
|
64
|
+
|
|
65
|
+
3. 执行如下示例命令进行比对:
|
|
66
|
+
|
|
67
|
+
```shell
|
|
68
|
+
msprobe -f mindspore compare -i ./compare.json -o ./output
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
该场景仅支持compare的-i和-o参数。
|
|
72
|
+
|
|
73
|
+
4. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
|
|
74
|
+
|
|
75
|
+
### 2.4 不同版本下的cell模块比对
|
|
76
|
+
|
|
77
|
+
1. 配置[config.json](../config.json)文件level配置为L0、task配置为tensor或statistics并指定需要dump的cell模块名。
|
|
78
|
+
|
|
79
|
+
2. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》完成不同环境下MindSpore动态图精度数据的采集,得到不同框架版本的cell模块dump数据。
|
|
80
|
+
|
|
81
|
+
3. 创建比对文件,文件内容及示例请参见[比对文件](#31-比对文件)。
|
|
82
|
+
|
|
83
|
+
4. 执行如下示例命令进行比对:
|
|
84
|
+
|
|
85
|
+
```shell
|
|
86
|
+
msprobe -f mindspore compare -i ./compare.json -o ./output -s
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
|
|
90
|
+
|
|
91
|
+
### 2.5 跨框架的API比对
|
|
92
|
+
|
|
93
|
+
1. 配置[config.json](../config.json)文件level配置为L1、task配置为tensor或statistics。
|
|
94
|
+
|
|
95
|
+
2. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》和《[PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)》完成不同环境下API精度数据的采集,得到两个框架的API dump数据。
|
|
96
|
+
|
|
97
|
+
3. 创建比对文件,文件内容及示例请参见[比对文件](#31-比对文件)。
|
|
98
|
+
|
|
99
|
+
4. 执行如下示例命令进行比对:
|
|
100
|
+
|
|
101
|
+
```shell
|
|
102
|
+
msprobe -f mindspore compare -i ./compare.json -o ./output -s -am
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
|
|
106
|
+
|
|
107
|
+
### 2.6 跨框架的cell模块比对
|
|
108
|
+
|
|
109
|
+
1. 配置[config.json](../config.json)文件level配置为L0、task配置为tensor或statistics并指定需要dump的cell模块名。
|
|
110
|
+
|
|
111
|
+
2. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》和《[PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)》完成不同环境下cell模块精度数据的采集,得到两个框架的cell模块dump数据。
|
|
112
|
+
|
|
113
|
+
3. 创建比对文件,文件内容及示例请参见[比对文件](#31-比对文件)。
|
|
114
|
+
|
|
115
|
+
4. 执行如下示例命令进行比对:
|
|
116
|
+
|
|
117
|
+
```shell
|
|
118
|
+
msprobe -f mindspore compare -i ./compare.json -o ./output -s -cm
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
或
|
|
122
|
+
|
|
123
|
+
```shell
|
|
124
|
+
msprobe -f mindspore compare -i ./compare.json -o ./output -s -cm cell_mapping.yaml
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
cell_mapping.yaml文件配置请参见[自定义映射文件(cell)](#33-自定义映射文件cell)。
|
|
128
|
+
|
|
129
|
+
5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
|
|
130
|
+
|
|
131
|
+
### 2.7 跨框架的API或模块比对
|
|
132
|
+
|
|
133
|
+
该场景可用于在“**跨框架的API比对**”和“**跨框架的cell模块比对**”场景均无法完全覆盖模型中的API和模块时,通过手动指定映射关系来补全未被比对的API或模块。
|
|
134
|
+
|
|
135
|
+
1. 配置[config.json](../config.json)文件level配置为L0或L1、task配置为tensor或statistics并指定需要dump的API或模块名。
|
|
136
|
+
|
|
137
|
+
2. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》和《[PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)》完成不同环境下API或模块精度数据的采集,得到两个框架的API或模块dump数据。
|
|
138
|
+
|
|
139
|
+
3. 创建比对文件,文件内容及示例请参见[比对文件](#31-比对文件)。
|
|
140
|
+
|
|
141
|
+
4. 执行如下示例命令进行比对:
|
|
142
|
+
|
|
143
|
+
```shell
|
|
144
|
+
msprobe -f mindspore compare -i ./compare.json -o ./output -s -dm data_mapping.yaml
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
data_mapping.yaml文件配置请参见[自定义映射文件(all)](#34-自定义映射文件all)。
|
|
148
|
+
|
|
149
|
+
5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
|
|
150
|
+
|
|
151
|
+
### 2.8 跨框架的Layer层比对
|
|
152
|
+
|
|
153
|
+
该场景可简化API或模块场景的配置,从Layer层识别整网的API和模块。
|
|
154
|
+
|
|
155
|
+
1. 配置[config.json](../config.json)文件level配置为L0或mix、task配置为tensor或statistics并指定需要dump的API或模块名。
|
|
156
|
+
|
|
157
|
+
2. 参见《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》和《[PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)》完成不同环境下API或模块精度数据的采集,得到两个框架的API或模块dump数据。
|
|
158
|
+
|
|
159
|
+
3. 创建比对文件,文件内容及示例请参见[比对文件](#31-比对文件)。
|
|
160
|
+
|
|
161
|
+
4. 执行如下示例命令进行比对:
|
|
162
|
+
|
|
163
|
+
```shell
|
|
164
|
+
msprobe -f mindspore compare -i ./compare.json -o ./output -s -lm layer_mapping.yaml
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
layer_mapping.yaml文件配置请参见[自定义映射文件(Layer)](#35-自定义映射文件layer)。
|
|
168
|
+
|
|
169
|
+
5. 查看比对结果,请详见PyTorch目录下的《[PyTorch 场景的精度比对-精度比对结果分析](./10.accuracy_compare_PyTorch.md#3-精度比对结果分析)》章节。
|
|
170
|
+
|
|
171
|
+
## 3 附录
|
|
172
|
+
|
|
173
|
+
### 3.1 比对文件
|
|
174
|
+
|
|
175
|
+
以在当前目录创建./compare.json为例,单卡场景示例如下:
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"npu_path": "./npu_dump/dump.json",
|
|
181
|
+
"bench_path": "./bench_dump/dump.json",
|
|
182
|
+
"stack_path": "./npu_dump/stack.json",
|
|
183
|
+
"is_print_compare_log": true
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
**参数说明**
|
|
189
|
+
|
|
190
|
+
| 参数名 | 说明 | 是否必选 |
|
|
191
|
+
| -------------------- | ------------------------------------------------------------ | -------- |
|
|
192
|
+
| npu_path | 配置NPU环境下的dump.json文件(单卡场景)。跨框架场景指定为MindSpore的json文件。数据类型:str。 | 是 |
|
|
193
|
+
| bench_path | 配置CPU、GPU或NPU环境下的dump.json文件(单卡场景)。 跨框架场景指定为PyTorch的json文件。数据类型:str。 | 是 |
|
|
194
|
+
| stack_path | 配置NPU dump目录下的stack.json文件。数据类型:str。 | 是 |
|
|
195
|
+
| is_print_compare_log | 配置是否开启单个算子的日志打屏。可取值true或false,默认为true。关闭后则只输出常规日志。数据类型:bool | 否 |
|
|
196
|
+
|
|
197
|
+
### 3.2 比对文件(kernel)
|
|
198
|
+
|
|
199
|
+
仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持。
|
|
200
|
+
|
|
201
|
+
以在当前目录创建./compare.json为例,示例如下:
|
|
202
|
+
|
|
203
|
+
- 单卡场景:
|
|
204
|
+
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"npu_path": "./npu_dump",
|
|
208
|
+
"bench_path": "./bench_dump",
|
|
209
|
+
"rank_id": [1],
|
|
210
|
+
"step_id": []
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
- 多卡场景:
|
|
215
|
+
|
|
216
|
+
```json
|
|
217
|
+
{
|
|
218
|
+
"npu_path": "./npu_dump",
|
|
219
|
+
"bench_path": "./bench_dump",
|
|
220
|
+
"rank_id": [],
|
|
221
|
+
"step_id": []
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
**参数说明**
|
|
227
|
+
|
|
228
|
+
| 参数名 | 说明 | 是否必选 |
|
|
229
|
+
| ---------- | ------------------------------------------------------------ | -------- |
|
|
230
|
+
| npu_path | 配置NPU环境下的真实数据目录。数据类型:str。 | 是 |
|
|
231
|
+
| bench_path | 配置NPU环境下的真实数据目录。数据类型:str。 | 是 |
|
|
232
|
+
| rank_id | 配置比对的Rank ID。npu_path和bench_path目录下的dump文件需要存在对应Rank的数据。默认为空,表示比对所有Rank。可配置一个或多个Rank,多个Rank ID用逗号隔开,例如:"rank_id": [1,2,3]。数据类型:list[int]。 | 否 |
|
|
233
|
+
| step_id | 配置比对的Step ID。npu_path和bench_path目录下的dump文件需要存在对应Step的数据。默认为空,表示比对所有Step。可配置一个或多个Step,多个Step ID用逗号隔开,例如:"step_id": [1,2,3]。数据类型:list[int]。 | 否 |
|
|
234
|
+
|
|
235
|
+
### 3.3 自定义映射文件(cell)
|
|
236
|
+
|
|
237
|
+
文件名格式:\*.yaml,*为文件名,可自定义。
|
|
238
|
+
|
|
239
|
+
文件内容格式:
|
|
240
|
+
|
|
241
|
+
```yaml
|
|
242
|
+
{cell_name}.{class_name}: {module_name}.{class_name}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
冒号左侧为MindSpore框架cell模块的{cell_name}.{class_name},冒号右侧为PyTorch框架module模块的{module_name}.{class_name}。
|
|
246
|
+
|
|
247
|
+
{cell_name}.{class_name}从dump cell模块级.npy文件名获取,命名格式为:`{Cell}.{cell_name}.{class_name}.{前向反向}.{index}.{input/output}.{参数序号}`
|
|
248
|
+
|
|
249
|
+
文件内容示例:
|
|
250
|
+
|
|
251
|
+
```yaml
|
|
252
|
+
fc2.Dense: fc2.Linear
|
|
253
|
+
conv1.Conv2d: conv3.Conv2d
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### 3.4 自定义映射文件(API和模块)
|
|
257
|
+
|
|
258
|
+
文件名格式:\*.yaml,*为文件名,可自定义。
|
|
259
|
+
|
|
260
|
+
文件内容格式:
|
|
261
|
+
|
|
262
|
+
```yaml
|
|
263
|
+
# API
|
|
264
|
+
{api_type}.{api_name}.{API调用次数}.{前向反向}.{input/output}.{参数序号}: {api_type}.{api_name}.{API调用次数}.{前向反向}.{input/output}.{参数序号}
|
|
265
|
+
# 模块
|
|
266
|
+
{Cell}.{cell_name}.{class_name}.{前向反向}.{index}.{input/output}.{参数序号}: {Module}.{module_name}.{前向反向}.{index}.{input/output}.{参数序号}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
冒号左侧为MindSpore框架API的名称和Cell模块的名称,冒号右侧为PyTorch框架API的名称和module模块名称。
|
|
270
|
+
|
|
271
|
+
API和模块名称请分别从《[MindSpore 场景的精度数据采集](./06.data_dump_MindSpore.md)》和《[PyTorch 场景的精度数据采集](./05.data_dump_PyTorch.md)》中的dump.json文件获取。
|
|
272
|
+
|
|
273
|
+
文件内容示例:
|
|
274
|
+
|
|
275
|
+
```yaml
|
|
276
|
+
# API
|
|
277
|
+
Functional.flash_attention_score.4.forward.input.0: NPU.npu_fusion_attention.4.forward.input.0
|
|
278
|
+
# 模块
|
|
279
|
+
Cell.relu.ReLU.forward.0.input.0: Module.module.language_model.embedding.word_embedding.VocabParallelEmbedding.forward.0.input.0
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
API和模块名称在dump.json文件中的“data_name”字段展示,如下图红框处所示:
|
|
283
|
+
|
|
284
|
+
- MindSpore dump
|
|
285
|
+
|
|
286
|
+

|
|
287
|
+
|
|
288
|
+
- PyTorch dump
|
|
289
|
+
|
|
290
|
+

|
|
291
|
+
|
|
292
|
+
### 3.5 自定义映射文件(Layer)
|
|
293
|
+
|
|
294
|
+
文件名格式:\*.yaml,*为文件名,可自定义。
|
|
295
|
+
|
|
296
|
+
文件内容示例:
|
|
297
|
+
|
|
298
|
+
```yaml
|
|
299
|
+
ParallelAttention: # Layer层名称
|
|
300
|
+
qkv_proj: query_key_value # 冒号左侧为MindSpore框架模型代码中嵌套的Layer层名称,冒号右侧为PyTorch框架模型代码中嵌套的Layer层名称
|
|
301
|
+
out_proj: dense
|
|
302
|
+
|
|
303
|
+
ParallelTransformerLayer:
|
|
304
|
+
attention: self_attention
|
|
305
|
+
|
|
306
|
+
Embedding:
|
|
307
|
+
dropout: embedding_dropout
|
|
308
|
+
|
|
309
|
+
ParallelMLP:
|
|
310
|
+
mapping: dense_h_to_4h
|
|
311
|
+
projection: dense_4h_to_h
|
|
312
|
+
|
|
313
|
+
PipelineCell:
|
|
314
|
+
model: module
|
|
315
|
+
|
|
316
|
+
Cell:
|
|
317
|
+
network_with_loss: module
|
|
318
|
+
|
|
319
|
+
layers: # 手动映射MindSpore与PyTorch模型代码中的Layer层序号
|
|
320
|
+
'5': '0'
|
|
321
|
+
'6': '1'
|
|
322
|
+
'7': '2'
|
|
323
|
+
'8': '3'
|
|
324
|
+
'9': '4'
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
Layer层名称需要从模型代码中获取。
|
|
328
|
+
|
|
329
|
+
yaml文件中只需配置MindSpore与PyTorch模型代码中功能一致但名称不同的Layer层,名称相同的Layer层会被自动识别并映射。
|
|
330
|
+
|
|
331
|
+
模型代码示例:
|
|
332
|
+
|
|
333
|
+

|