mindstudio-probe 1.0.3__py3-none-any.whl → 1.0.4__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.0.4.dist-info}/LICENSE +201 -201
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/METADATA +36 -34
- mindstudio_probe-1.0.4.dist-info/RECORD +276 -0
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/WHEEL +1 -1
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/entry_points.txt +1 -0
- msprobe/README.md +101 -237
- msprobe/{config/config.json → config.json} +49 -49
- msprobe/core/advisor/advisor.py +124 -124
- msprobe/core/advisor/advisor_const.py +59 -59
- msprobe/core/advisor/advisor_result.py +58 -58
- msprobe/core/common/const.py +341 -318
- msprobe/core/common/exceptions.py +99 -99
- msprobe/core/common/{file_check.py → file_utils.py} +478 -283
- msprobe/core/common/log.py +76 -69
- msprobe/core/common/utils.py +385 -616
- msprobe/core/common_config.py +85 -71
- msprobe/core/compare/acc_compare.py +299 -298
- msprobe/core/compare/check.py +95 -95
- msprobe/core/compare/compare_cli.py +49 -49
- msprobe/core/compare/highlight.py +223 -222
- msprobe/core/compare/multiprocessing_compute.py +149 -149
- msprobe/core/compare/npy_compare.py +295 -295
- msprobe/core/compare/utils.py +430 -429
- msprobe/core/data_dump/data_collector.py +154 -144
- msprobe/core/data_dump/data_processor/base.py +314 -293
- msprobe/core/data_dump/data_processor/factory.py +59 -59
- msprobe/core/data_dump/data_processor/mindspore_processor.py +186 -198
- msprobe/core/data_dump/data_processor/pytorch_processor.py +366 -389
- msprobe/core/data_dump/json_writer.py +96 -116
- msprobe/core/data_dump/scope.py +178 -178
- msprobe/core/grad_probe/constant.py +70 -70
- msprobe/core/grad_probe/grad_compare.py +171 -175
- msprobe/core/grad_probe/utils.py +64 -52
- msprobe/docs/01.installation.md +89 -0
- msprobe/docs/02.config_introduction.md +165 -0
- msprobe/docs/03.config_examples.md +247 -0
- msprobe/docs/04.acl_config_examples.md +76 -0
- msprobe/docs/05.data_dump_PyTorch.md +198 -0
- msprobe/docs/06.data_dump_MindSpore.md +243 -0
- msprobe/docs/07.accuracy_checker_PyTorch.md +274 -0
- msprobe/docs/08.accuracy_checker_online_PyTorch.md +198 -0
- msprobe/docs/09.accuracy_checker_MindSpore.md +68 -0
- msprobe/docs/10.accuracy_compare_PyTorch.md +245 -0
- msprobe/docs/11.accuracy_compare_MindSpore.md +202 -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 +164 -0
- msprobe/{doc/grad_probe/grad_probe.md → docs/17.grad_probe.md} +207 -207
- msprobe/docs/FAQ_PyTorch.md +177 -0
- msprobe/docs/S02.report_free_benchmarking_validation_performance_baseline.md +146 -0
- msprobe/docs/img/free_benchmark_framework.png +0 -0
- msprobe/mindspore/__init__.py +1 -1
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +254 -245
- msprobe/mindspore/api_accuracy_checker/api_info.py +69 -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 +34 -34
- msprobe/mindspore/common/const.py +106 -87
- msprobe/mindspore/common/log.py +37 -37
- msprobe/mindspore/common/utils.py +81 -57
- msprobe/mindspore/compare/distributed_compare.py +75 -75
- msprobe/mindspore/compare/ms_compare.py +219 -117
- msprobe/mindspore/compare/ms_graph_compare.py +348 -317
- msprobe/mindspore/compare/ms_to_pt_api.yaml +399 -399
- msprobe/mindspore/debugger/debugger_config.py +66 -74
- msprobe/mindspore/debugger/precision_debugger.py +126 -107
- msprobe/mindspore/dump/dump_tool_factory.py +35 -35
- msprobe/mindspore/dump/hook_cell/api_registry.py +118 -104
- msprobe/mindspore/dump/hook_cell/hook_cell.py +55 -53
- msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +922 -925
- msprobe/mindspore/dump/hook_cell/wrap_api.py +113 -0
- msprobe/mindspore/dump/jit_dump.py +72 -56
- msprobe/mindspore/dump/kernel_graph_dump.py +59 -60
- msprobe/mindspore/dump/kernel_kbyk_dump.py +64 -65
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +116 -116
- msprobe/mindspore/free_benchmark/common/config.py +12 -12
- msprobe/mindspore/free_benchmark/common/handler_params.py +17 -17
- msprobe/mindspore/free_benchmark/common/utils.py +71 -71
- msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +842 -842
- msprobe/mindspore/free_benchmark/decorator/dec_forward.py +43 -42
- msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +107 -107
- msprobe/mindspore/free_benchmark/handler/base_handler.py +90 -90
- msprobe/mindspore/free_benchmark/handler/check_handler.py +41 -41
- msprobe/mindspore/free_benchmark/handler/fix_handler.py +36 -36
- msprobe/mindspore/free_benchmark/handler/handler_factory.py +21 -21
- msprobe/mindspore/free_benchmark/perturbation/add_noise.py +67 -67
- msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +21 -21
- msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +63 -63
- msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +51 -0
- msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +35 -34
- msprobe/mindspore/free_benchmark/perturbation/no_change.py +12 -12
- msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +29 -27
- msprobe/mindspore/free_benchmark/self_check_tool_factory.py +33 -33
- msprobe/mindspore/grad_probe/global_context.py +90 -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 +44 -45
- msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +34 -34
- msprobe/mindspore/runtime.py +4 -4
- msprobe/mindspore/service.py +378 -354
- msprobe/mindspore/task_handler_factory.py +24 -24
- msprobe/msprobe.py +105 -107
- msprobe/pytorch/__init__.py +3 -3
- msprobe/pytorch/api_accuracy_checker/common/config.py +53 -55
- msprobe/pytorch/api_accuracy_checker/common/utils.py +214 -165
- msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +213 -213
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +606 -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 +386 -381
- msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +73 -73
- msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +245 -244
- msprobe/pytorch/api_accuracy_checker/config.yaml +10 -10
- msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +335 -332
- msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +200 -199
- msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +133 -134
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +592 -581
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +70 -74
- msprobe/pytorch/api_accuracy_checker/run_ut/torch_ut_setting.json +7 -4
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +197 -202
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +325 -324
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +204 -204
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +219 -218
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/ssl_config.py +10 -10
- msprobe/pytorch/bench_functions/__init__.py +15 -15
- msprobe/pytorch/bench_functions/apply_adam_w.py +28 -28
- msprobe/pytorch/bench_functions/confusion_transpose.py +19 -19
- msprobe/pytorch/bench_functions/fast_gelu.py +55 -55
- msprobe/pytorch/bench_functions/layer_norm_eval.py +6 -6
- msprobe/pytorch/bench_functions/linear.py +12 -12
- msprobe/pytorch/bench_functions/matmul_backward.py +48 -48
- msprobe/pytorch/bench_functions/npu_fusion_attention.py +509 -421
- msprobe/pytorch/bench_functions/rms_norm.py +15 -15
- msprobe/pytorch/bench_functions/rotary_mul.py +52 -52
- msprobe/pytorch/bench_functions/scaled_mask_softmax.py +26 -26
- msprobe/pytorch/bench_functions/swiglu.py +55 -55
- msprobe/pytorch/common/__init__.py +2 -2
- msprobe/pytorch/common/compare_script.template +14 -14
- msprobe/pytorch/common/log.py +20 -31
- msprobe/pytorch/common/parse_json.py +39 -39
- msprobe/pytorch/common/utils.py +305 -300
- msprobe/pytorch/compare/distributed_compare.py +66 -66
- msprobe/pytorch/compare/mapping.yaml +607 -607
- msprobe/pytorch/compare/match.py +34 -33
- msprobe/pytorch/compare/pt_compare.py +50 -40
- msprobe/pytorch/debugger/debugger_config.py +95 -95
- msprobe/pytorch/debugger/precision_debugger.py +125 -125
- msprobe/pytorch/free_benchmark/__init__.py +8 -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 +37 -37
- msprobe/pytorch/free_benchmark/common/params.py +129 -129
- msprobe/pytorch/free_benchmark/common/utils.py +102 -102
- msprobe/pytorch/free_benchmark/compare/grad_saver.py +179 -179
- msprobe/pytorch/free_benchmark/compare/single_benchmark.py +104 -104
- msprobe/pytorch/free_benchmark/main.py +105 -105
- msprobe/pytorch/free_benchmark/perturbed_layers/base_layer.py +13 -13
- msprobe/pytorch/free_benchmark/perturbed_layers/layer_factory.py +41 -41
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +90 -90
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +104 -104
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +63 -63
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +68 -68
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/no_change.py +28 -28
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/npu_base_layser.py +45 -45
- msprobe/pytorch/free_benchmark/perturbed_layers/run_cpu.py +19 -19
- msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +217 -217
- msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +39 -39
- msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +23 -23
- msprobe/pytorch/free_benchmark/result_handlers/handler_factory.py +30 -30
- msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +170 -170
- msprobe/pytorch/function_factory.py +76 -75
- msprobe/pytorch/functional/dump_module.py +39 -39
- msprobe/pytorch/grad_probe/grad_monitor.py +91 -90
- msprobe/pytorch/grad_probe/grad_stat_csv.py +128 -128
- msprobe/pytorch/hook_module/api_registry.py +161 -161
- msprobe/pytorch/hook_module/hook_module.py +120 -120
- msprobe/pytorch/hook_module/support_wrap_ops.yaml +1879 -1877
- msprobe/pytorch/hook_module/utils.py +30 -29
- msprobe/pytorch/hook_module/wrap_aten.py +110 -110
- msprobe/pytorch/hook_module/wrap_distributed.py +78 -78
- msprobe/pytorch/hook_module/wrap_functional.py +105 -105
- msprobe/pytorch/hook_module/wrap_npu_custom.py +93 -84
- msprobe/pytorch/hook_module/wrap_tensor.py +71 -71
- msprobe/pytorch/hook_module/wrap_torch.py +86 -86
- msprobe/pytorch/hook_module/wrap_vf.py +62 -62
- msprobe/pytorch/module_processer.py +138 -138
- msprobe/pytorch/online_dispatch/__init__.py +20 -20
- msprobe/pytorch/online_dispatch/compare.py +236 -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 +49 -49
- msprobe/pytorch/online_dispatch/utils.py +130 -146
- msprobe/pytorch/parse.py +4 -4
- msprobe/pytorch/parse_tool/cli.py +32 -32
- msprobe/pytorch/parse_tool/lib/compare.py +260 -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 +158 -158
- msprobe/pytorch/parse_tool/lib/utils.py +316 -321
- msprobe/pytorch/parse_tool/lib/visualization.py +85 -91
- msprobe/pytorch/pt_config.py +188 -187
- msprobe/pytorch/service.py +246 -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/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/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 +0 -90
- 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
- {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.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
|
@@ -1,158 +1,158 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
"""
|
|
4
|
-
# Copyright (C) 2022-2024. Huawei Technologies Co., Ltd. All rights reserved.
|
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
# See the License for the specific language governing permissions and
|
|
15
|
-
# limitations under the License.
|
|
16
|
-
"""
|
|
17
|
-
import argparse
|
|
18
|
-
import os
|
|
19
|
-
from collections import namedtuple
|
|
20
|
-
|
|
21
|
-
from msprobe.pytorch.parse_tool.lib.config import Const
|
|
22
|
-
from msprobe.pytorch.parse_tool.lib.utils import Util
|
|
23
|
-
from msprobe.pytorch.parse_tool.lib.compare import Compare
|
|
24
|
-
from msprobe.pytorch.parse_tool.lib.visualization import Visualization
|
|
25
|
-
from msprobe.pytorch.parse_tool.lib.parse_exception import catch_exception, ParseException
|
|
26
|
-
from msprobe.core.common.
|
|
27
|
-
|
|
28
|
-
class ParseTool:
|
|
29
|
-
def __init__(self):
|
|
30
|
-
self.util = Util()
|
|
31
|
-
self.compare = Compare()
|
|
32
|
-
self.visual = Visualization()
|
|
33
|
-
|
|
34
|
-
@catch_exception
|
|
35
|
-
def prepare(self):
|
|
36
|
-
create_directory(Const.DATA_ROOT_DIR)
|
|
37
|
-
|
|
38
|
-
@catch_exception
|
|
39
|
-
def do_vector_compare(self, args):
|
|
40
|
-
if not args.output_path:
|
|
41
|
-
result_dir = os.path.join(Const.COMPARE_DIR)
|
|
42
|
-
else:
|
|
43
|
-
result_dir = args.output_path
|
|
44
|
-
my_dump_path = args.my_dump_path
|
|
45
|
-
golden_dump_path = args.golden_dump_path
|
|
46
|
-
if not os.path.isdir(my_dump_path) or not os.path.isdir(golden_dump_path):
|
|
47
|
-
self.util.log.error("Please enter a directory not a file")
|
|
48
|
-
raise ParseException(ParseException.PARSE_INVALID_PATH_ERROR)
|
|
49
|
-
msaccucmp_path = self.util.path_strip(args.msaccucmp_path) if args.msaccucmp_path else Const.MS_ACCU_CMP_PATH
|
|
50
|
-
self.util.check_path_valid(msaccucmp_path)
|
|
51
|
-
self.util.check_executable_file(msaccucmp_path)
|
|
52
|
-
self.compare.npu_vs_npu_compare(my_dump_path, golden_dump_path, result_dir, msaccucmp_path)
|
|
53
|
-
|
|
54
|
-
@catch_exception
|
|
55
|
-
def do_convert_dump(self, argv=None):
|
|
56
|
-
parser = argparse.ArgumentParser()
|
|
57
|
-
parser.add_argument(
|
|
58
|
-
'-n', '--name', dest='path', default=None, required=True, help='dump file or dump file directory')
|
|
59
|
-
parser.add_argument(
|
|
60
|
-
'-f', '--format', dest='format', default=None, required=False, help='target format')
|
|
61
|
-
parser.add_argument(
|
|
62
|
-
'-out', '--output_path', dest='output_path', required=False, default=None, help='output path')
|
|
63
|
-
parser.add_argument(
|
|
64
|
-
"-cmp_path", "--msaccucmp_path", dest="msaccucmp_path", default=None,
|
|
65
|
-
help="<Optional> the msaccucmp.py file path", required=False)
|
|
66
|
-
args = parser.parse_args(argv)
|
|
67
|
-
self.util.check_path_valid(args.path)
|
|
68
|
-
self.util.check_files_in_path(args.path)
|
|
69
|
-
msaccucmp_path = self.util.path_strip(args.msaccucmp_path) if args.msaccucmp_path else Const.MS_ACCU_CMP_PATH
|
|
70
|
-
self.util.check_path_valid(msaccucmp_path)
|
|
71
|
-
self.util.check_executable_file(msaccucmp_path)
|
|
72
|
-
if args.format:
|
|
73
|
-
self.util.check_str_param(args.format)
|
|
74
|
-
self.compare.convert_dump_to_npy(args.path, args.format, args.output_path, msaccucmp_path)
|
|
75
|
-
|
|
76
|
-
@catch_exception
|
|
77
|
-
def do_print_data(self, argv=None):
|
|
78
|
-
"""print tensor data"""
|
|
79
|
-
parser = argparse.ArgumentParser()
|
|
80
|
-
parser.add_argument('-n', '--name', dest='path', default=None, required=True, help='File name')
|
|
81
|
-
args = parser.parse_args(argv)
|
|
82
|
-
self.visual.print_npy_data(args.path)
|
|
83
|
-
|
|
84
|
-
@catch_exception
|
|
85
|
-
def do_parse_pkl(self, argv=None):
|
|
86
|
-
parser = argparse.ArgumentParser()
|
|
87
|
-
parser.add_argument(
|
|
88
|
-
'-f', '--file', dest='file_name', default=None, required=True, help='PKL file path')
|
|
89
|
-
parser.add_argument(
|
|
90
|
-
'-n', '--name', dest='api_name', default=None, required=True, help='API name')
|
|
91
|
-
args = parser.parse_args(argv)
|
|
92
|
-
self.visual.parse_pkl(args.file_name, args.api_name)
|
|
93
|
-
|
|
94
|
-
@catch_exception
|
|
95
|
-
def do_compare_data(self, argv):
|
|
96
|
-
"""compare two tensor"""
|
|
97
|
-
parser = argparse.ArgumentParser()
|
|
98
|
-
parser.add_argument(
|
|
99
|
-
"-m", "--my_dump_path", dest="my_dump_path", default=None,
|
|
100
|
-
help="<Required> my dump path, the data compared with golden data",
|
|
101
|
-
required=True
|
|
102
|
-
)
|
|
103
|
-
parser.add_argument(
|
|
104
|
-
"-g", "--golden_dump_path", dest="golden_dump_path", default=None,
|
|
105
|
-
help="<Required> the golden dump data path",
|
|
106
|
-
required=True
|
|
107
|
-
)
|
|
108
|
-
parser.add_argument('-p', '--print', dest='count', default=20, type=int, help='print err data num')
|
|
109
|
-
parser.add_argument('-s', '--save', dest='save', action='store_true', help='save data in txt format')
|
|
110
|
-
parser.add_argument('-al', '--atol', dest='atol', default=0.001, type=float, help='set rtol')
|
|
111
|
-
parser.add_argument('-rl', '--rtol', dest='rtol', default=0.001, type=float, help='set atol')
|
|
112
|
-
args = parser.parse_args(argv)
|
|
113
|
-
self.util.check_path_valid(args.my_dump_path)
|
|
114
|
-
self.util.check_path_valid(args.golden_dump_path)
|
|
115
|
-
self.util.check_file_path_format(args.my_dump_path, Const.NPY_SUFFIX)
|
|
116
|
-
self.util.check_file_path_format(args.golden_dump_path, Const.NPY_SUFFIX)
|
|
117
|
-
compare_data_args = namedtuple('compare_data_args', ['my_dump_path', 'golden_dump_path', 'save', 'rtol', 'atol', 'count'])
|
|
118
|
-
compare_data_args.__new__.__defaults__ = (False, 0.001, 0.001, 20)
|
|
119
|
-
res = compare_data_args(args.my_dump_path, args.golden_dump_path, args.save, args.rtol, args.atol, args.count)
|
|
120
|
-
self.compare.compare_data(res)
|
|
121
|
-
|
|
122
|
-
@catch_exception
|
|
123
|
-
def do_compare_converted_dir(self, args):
|
|
124
|
-
"""compare two dir"""
|
|
125
|
-
my_dump_dir = self.util.path_strip(args.my_dump_path)
|
|
126
|
-
golden_dump_dir = self.util.path_strip(args.golden_dump_path)
|
|
127
|
-
if my_dump_dir == golden_dump_dir:
|
|
128
|
-
self.util.log.error("My directory path and golden directory path is same. Please check parameter"
|
|
129
|
-
" '-m' and '-g'.")
|
|
130
|
-
raise ParseException("My directory path and golden directory path is same.")
|
|
131
|
-
output_path = self.util.path_strip(args.output_path) if args.output_path else Const.BATCH_COMPARE_DIR
|
|
132
|
-
if not os.path.isdir(output_path):
|
|
133
|
-
os.makedirs(output_path, mode=0o750)
|
|
134
|
-
self.compare.compare_converted_dir(my_dump_dir, golden_dump_dir, output_path)
|
|
135
|
-
|
|
136
|
-
@catch_exception
|
|
137
|
-
def do_convert_api_dir(self, argv=None):
|
|
138
|
-
parser = argparse.ArgumentParser()
|
|
139
|
-
parser.add_argument(
|
|
140
|
-
"-m", "--my_dump_path", dest="my_dump_path", default=None,
|
|
141
|
-
help="<Required> my dump path, the data need to convert to npy files.",
|
|
142
|
-
required=True
|
|
143
|
-
)
|
|
144
|
-
parser.add_argument(
|
|
145
|
-
'-out', '--output_path', dest='output_path', required=False, default=None, help='output path')
|
|
146
|
-
parser.add_argument(
|
|
147
|
-
"-asc", "--msaccucmp_path", dest="msaccucmp_path", default=None,
|
|
148
|
-
help="<Optional> the msaccucmp.py file path", required=False)
|
|
149
|
-
args = parser.parse_args(argv)
|
|
150
|
-
self.util.check_path_valid(args.my_dump_path)
|
|
151
|
-
self.util.check_files_in_path(args.my_dump_path)
|
|
152
|
-
output_path = self.util.path_strip(args.output_path) if args.output_path else \
|
|
153
|
-
os.path.join(Const.BATCH_DUMP_CONVERT_DIR, self.util.localtime_str())
|
|
154
|
-
msaccucmp_path = self.util.path_strip(
|
|
155
|
-
args.msaccucmp_path) if args.msaccucmp_path else Const.MS_ACCU_CMP_PATH
|
|
156
|
-
self.util.check_path_valid(msaccucmp_path)
|
|
157
|
-
self.util.check_executable_file(msaccucmp_path)
|
|
158
|
-
self.compare.convert_api_dir_to_npy(args.my_dump_path, None, output_path, msaccucmp_path)
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
# Copyright (C) 2022-2024. Huawei Technologies Co., Ltd. All rights reserved.
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
"""
|
|
17
|
+
import argparse
|
|
18
|
+
import os
|
|
19
|
+
from collections import namedtuple
|
|
20
|
+
|
|
21
|
+
from msprobe.pytorch.parse_tool.lib.config import Const
|
|
22
|
+
from msprobe.pytorch.parse_tool.lib.utils import Util
|
|
23
|
+
from msprobe.pytorch.parse_tool.lib.compare import Compare
|
|
24
|
+
from msprobe.pytorch.parse_tool.lib.visualization import Visualization
|
|
25
|
+
from msprobe.pytorch.parse_tool.lib.parse_exception import catch_exception, ParseException
|
|
26
|
+
from msprobe.core.common.file_utils import create_directory
|
|
27
|
+
|
|
28
|
+
class ParseTool:
|
|
29
|
+
def __init__(self):
|
|
30
|
+
self.util = Util()
|
|
31
|
+
self.compare = Compare()
|
|
32
|
+
self.visual = Visualization()
|
|
33
|
+
|
|
34
|
+
@catch_exception
|
|
35
|
+
def prepare(self):
|
|
36
|
+
create_directory(Const.DATA_ROOT_DIR)
|
|
37
|
+
|
|
38
|
+
@catch_exception
|
|
39
|
+
def do_vector_compare(self, args):
|
|
40
|
+
if not args.output_path:
|
|
41
|
+
result_dir = os.path.join(Const.COMPARE_DIR)
|
|
42
|
+
else:
|
|
43
|
+
result_dir = args.output_path
|
|
44
|
+
my_dump_path = args.my_dump_path
|
|
45
|
+
golden_dump_path = args.golden_dump_path
|
|
46
|
+
if not os.path.isdir(my_dump_path) or not os.path.isdir(golden_dump_path):
|
|
47
|
+
self.util.log.error("Please enter a directory not a file")
|
|
48
|
+
raise ParseException(ParseException.PARSE_INVALID_PATH_ERROR)
|
|
49
|
+
msaccucmp_path = self.util.path_strip(args.msaccucmp_path) if args.msaccucmp_path else Const.MS_ACCU_CMP_PATH
|
|
50
|
+
self.util.check_path_valid(msaccucmp_path)
|
|
51
|
+
self.util.check_executable_file(msaccucmp_path)
|
|
52
|
+
self.compare.npu_vs_npu_compare(my_dump_path, golden_dump_path, result_dir, msaccucmp_path)
|
|
53
|
+
|
|
54
|
+
@catch_exception
|
|
55
|
+
def do_convert_dump(self, argv=None):
|
|
56
|
+
parser = argparse.ArgumentParser()
|
|
57
|
+
parser.add_argument(
|
|
58
|
+
'-n', '--name', dest='path', default=None, required=True, help='dump file or dump file directory')
|
|
59
|
+
parser.add_argument(
|
|
60
|
+
'-f', '--format', dest='format', default=None, required=False, help='target format')
|
|
61
|
+
parser.add_argument(
|
|
62
|
+
'-out', '--output_path', dest='output_path', required=False, default=None, help='output path')
|
|
63
|
+
parser.add_argument(
|
|
64
|
+
"-cmp_path", "--msaccucmp_path", dest="msaccucmp_path", default=None,
|
|
65
|
+
help="<Optional> the msaccucmp.py file path", required=False)
|
|
66
|
+
args = parser.parse_args(argv)
|
|
67
|
+
self.util.check_path_valid(args.path)
|
|
68
|
+
self.util.check_files_in_path(args.path)
|
|
69
|
+
msaccucmp_path = self.util.path_strip(args.msaccucmp_path) if args.msaccucmp_path else Const.MS_ACCU_CMP_PATH
|
|
70
|
+
self.util.check_path_valid(msaccucmp_path)
|
|
71
|
+
self.util.check_executable_file(msaccucmp_path)
|
|
72
|
+
if args.format:
|
|
73
|
+
self.util.check_str_param(args.format)
|
|
74
|
+
self.compare.convert_dump_to_npy(args.path, args.format, args.output_path, msaccucmp_path)
|
|
75
|
+
|
|
76
|
+
@catch_exception
|
|
77
|
+
def do_print_data(self, argv=None):
|
|
78
|
+
"""print tensor data"""
|
|
79
|
+
parser = argparse.ArgumentParser()
|
|
80
|
+
parser.add_argument('-n', '--name', dest='path', default=None, required=True, help='File name')
|
|
81
|
+
args = parser.parse_args(argv)
|
|
82
|
+
self.visual.print_npy_data(args.path)
|
|
83
|
+
|
|
84
|
+
@catch_exception
|
|
85
|
+
def do_parse_pkl(self, argv=None):
|
|
86
|
+
parser = argparse.ArgumentParser()
|
|
87
|
+
parser.add_argument(
|
|
88
|
+
'-f', '--file', dest='file_name', default=None, required=True, help='PKL file path')
|
|
89
|
+
parser.add_argument(
|
|
90
|
+
'-n', '--name', dest='api_name', default=None, required=True, help='API name')
|
|
91
|
+
args = parser.parse_args(argv)
|
|
92
|
+
self.visual.parse_pkl(args.file_name, args.api_name)
|
|
93
|
+
|
|
94
|
+
@catch_exception
|
|
95
|
+
def do_compare_data(self, argv):
|
|
96
|
+
"""compare two tensor"""
|
|
97
|
+
parser = argparse.ArgumentParser()
|
|
98
|
+
parser.add_argument(
|
|
99
|
+
"-m", "--my_dump_path", dest="my_dump_path", default=None,
|
|
100
|
+
help="<Required> my dump path, the data compared with golden data",
|
|
101
|
+
required=True
|
|
102
|
+
)
|
|
103
|
+
parser.add_argument(
|
|
104
|
+
"-g", "--golden_dump_path", dest="golden_dump_path", default=None,
|
|
105
|
+
help="<Required> the golden dump data path",
|
|
106
|
+
required=True
|
|
107
|
+
)
|
|
108
|
+
parser.add_argument('-p', '--print', dest='count', default=20, type=int, help='print err data num')
|
|
109
|
+
parser.add_argument('-s', '--save', dest='save', action='store_true', help='save data in txt format')
|
|
110
|
+
parser.add_argument('-al', '--atol', dest='atol', default=0.001, type=float, help='set rtol')
|
|
111
|
+
parser.add_argument('-rl', '--rtol', dest='rtol', default=0.001, type=float, help='set atol')
|
|
112
|
+
args = parser.parse_args(argv)
|
|
113
|
+
self.util.check_path_valid(args.my_dump_path)
|
|
114
|
+
self.util.check_path_valid(args.golden_dump_path)
|
|
115
|
+
self.util.check_file_path_format(args.my_dump_path, Const.NPY_SUFFIX)
|
|
116
|
+
self.util.check_file_path_format(args.golden_dump_path, Const.NPY_SUFFIX)
|
|
117
|
+
compare_data_args = namedtuple('compare_data_args', ['my_dump_path', 'golden_dump_path', 'save', 'rtol', 'atol', 'count'])
|
|
118
|
+
compare_data_args.__new__.__defaults__ = (False, 0.001, 0.001, 20)
|
|
119
|
+
res = compare_data_args(args.my_dump_path, args.golden_dump_path, args.save, args.rtol, args.atol, args.count)
|
|
120
|
+
self.compare.compare_data(res)
|
|
121
|
+
|
|
122
|
+
@catch_exception
|
|
123
|
+
def do_compare_converted_dir(self, args):
|
|
124
|
+
"""compare two dir"""
|
|
125
|
+
my_dump_dir = self.util.path_strip(args.my_dump_path)
|
|
126
|
+
golden_dump_dir = self.util.path_strip(args.golden_dump_path)
|
|
127
|
+
if my_dump_dir == golden_dump_dir:
|
|
128
|
+
self.util.log.error("My directory path and golden directory path is same. Please check parameter"
|
|
129
|
+
" '-m' and '-g'.")
|
|
130
|
+
raise ParseException("My directory path and golden directory path is same.")
|
|
131
|
+
output_path = self.util.path_strip(args.output_path) if args.output_path else Const.BATCH_COMPARE_DIR
|
|
132
|
+
if not os.path.isdir(output_path):
|
|
133
|
+
os.makedirs(output_path, mode=0o750)
|
|
134
|
+
self.compare.compare_converted_dir(my_dump_dir, golden_dump_dir, output_path)
|
|
135
|
+
|
|
136
|
+
@catch_exception
|
|
137
|
+
def do_convert_api_dir(self, argv=None):
|
|
138
|
+
parser = argparse.ArgumentParser()
|
|
139
|
+
parser.add_argument(
|
|
140
|
+
"-m", "--my_dump_path", dest="my_dump_path", default=None,
|
|
141
|
+
help="<Required> my dump path, the data need to convert to npy files.",
|
|
142
|
+
required=True
|
|
143
|
+
)
|
|
144
|
+
parser.add_argument(
|
|
145
|
+
'-out', '--output_path', dest='output_path', required=False, default=None, help='output path')
|
|
146
|
+
parser.add_argument(
|
|
147
|
+
"-asc", "--msaccucmp_path", dest="msaccucmp_path", default=None,
|
|
148
|
+
help="<Optional> the msaccucmp.py file path", required=False)
|
|
149
|
+
args = parser.parse_args(argv)
|
|
150
|
+
self.util.check_path_valid(args.my_dump_path)
|
|
151
|
+
self.util.check_files_in_path(args.my_dump_path)
|
|
152
|
+
output_path = self.util.path_strip(args.output_path) if args.output_path else \
|
|
153
|
+
os.path.join(Const.BATCH_DUMP_CONVERT_DIR, self.util.localtime_str())
|
|
154
|
+
msaccucmp_path = self.util.path_strip(
|
|
155
|
+
args.msaccucmp_path) if args.msaccucmp_path else Const.MS_ACCU_CMP_PATH
|
|
156
|
+
self.util.check_path_valid(msaccucmp_path)
|
|
157
|
+
self.util.check_executable_file(msaccucmp_path)
|
|
158
|
+
self.compare.convert_api_dir_to_npy(args.my_dump_path, None, output_path, msaccucmp_path)
|