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,121 @@
|
|
|
1
|
+
# Copyright (c) 2024-2024, Huawei Technologies Co., Ltd.
|
|
2
|
+
# All rights reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
import os
|
|
17
|
+
|
|
18
|
+
from mindspore import Tensor, mint, ops
|
|
19
|
+
from mindspore.common._stub_tensor import StubTensor
|
|
20
|
+
from mindspore.communication import comm_func
|
|
21
|
+
from mindspore.mint.nn import functional
|
|
22
|
+
|
|
23
|
+
from msprobe.core.common.const import Const
|
|
24
|
+
from msprobe.core.common.file_utils import load_yaml
|
|
25
|
+
from msprobe.mindspore.common.const import Const as MsConst
|
|
26
|
+
from msprobe.mindspore.dump.hook_cell.hook_cell import HOOKCell
|
|
27
|
+
|
|
28
|
+
cur_path = os.path.dirname(os.path.realpath(__file__))
|
|
29
|
+
yaml_path = os.path.join(cur_path, MsConst.SUPPORTED_API_LIST_FILE)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class HOOKTensor(object):
|
|
33
|
+
pass
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class HOOKStubTensor(object):
|
|
37
|
+
pass
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class HOOKFunctionalOP(object):
|
|
41
|
+
pass
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class HOOKMintOP(object):
|
|
45
|
+
pass
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class HOOKMintNNFunctionalOP(object):
|
|
49
|
+
pass
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class HOOKDistributedOP(object):
|
|
53
|
+
pass
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class ApiTemplate(HOOKCell):
|
|
57
|
+
def __init__(self, api_name, api_dict, prefix, hook):
|
|
58
|
+
self.api_name = api_name
|
|
59
|
+
self.api_func = api_dict[api_name]
|
|
60
|
+
self.prefix_api_name = prefix + str(api_name.split(Const.SEP)[-1]) + Const.SEP
|
|
61
|
+
super().__init__(hook)
|
|
62
|
+
|
|
63
|
+
def construct(self, *args, **kwargs):
|
|
64
|
+
if self.api_name.startswith(MsConst.DROPOUT_API_NAME_PREFIX):
|
|
65
|
+
return args[0] if args else kwargs.get(Const.INPUT)
|
|
66
|
+
return self.api_func(*args, **kwargs)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class WrapApiName:
|
|
70
|
+
def __init__(self, tensor_api_names, stub_tensor_api_names, ops_api_names, mint_api_names, mint_nn_func_api_names,
|
|
71
|
+
distributed_api_names):
|
|
72
|
+
self.tensor_api_names = tensor_api_names
|
|
73
|
+
self.stub_tensor_api_names = stub_tensor_api_names
|
|
74
|
+
self.ops_api_names = ops_api_names
|
|
75
|
+
self.mint_api_names = mint_api_names
|
|
76
|
+
self.mint_nn_func_api_names = mint_nn_func_api_names
|
|
77
|
+
self.distributed_api_names = distributed_api_names
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def get_wrap_api_list():
|
|
81
|
+
api_list = load_yaml(yaml_path)
|
|
82
|
+
tensor_api = api_list.get(MsConst.SUPPORTED_TENSOR_LIST_KEY)
|
|
83
|
+
ops_api = api_list.get(MsConst.SUPPORTED_OPS_LIST_KEY)
|
|
84
|
+
mint_api = api_list.get(MsConst.SUPPORTED_MINT_LIST_KEY)
|
|
85
|
+
mint_nn_func_api = api_list.get(MsConst.SUPPORTED__MINT_NN_FUNC_LIST_KEY)
|
|
86
|
+
distributed_api = api_list.get(MsConst.SUPPORTED_COMM_LIST_KEY)
|
|
87
|
+
wrap_api_name = WrapApiName(set(tensor_api) & set(dir(Tensor)),
|
|
88
|
+
set(tensor_api) & set(dir(StubTensor)),
|
|
89
|
+
set(ops_api) & set(dir(ops)),
|
|
90
|
+
set(mint_api) & set(dir(mint)),
|
|
91
|
+
set(mint_nn_func_api) & set(dir(functional)),
|
|
92
|
+
set(distributed_api) & set(dir(comm_func)))
|
|
93
|
+
return wrap_api_name
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def wrap_api_func(api_name, api_dict, prefix, hook):
|
|
97
|
+
def api_function(*args, **kwargs):
|
|
98
|
+
return ApiTemplate(api_name, api_dict, prefix, hook)(*args, **kwargs)
|
|
99
|
+
return api_function
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def wrap_api_func_and_bind(api_list, api_dict, prefix, hook, hook_class):
|
|
103
|
+
for api_name in api_list:
|
|
104
|
+
if callable(api_dict[api_name]):
|
|
105
|
+
setattr(hook_class, Const.ATTR_NAME_PREFIX + api_name, wrap_api_func(api_name, api_dict, prefix, hook))
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def setup_hooks(hook):
|
|
109
|
+
wrap_api_name = get_wrap_api_list()
|
|
110
|
+
wrap_api_func_and_bind(wrap_api_name.tensor_api_names, {f: getattr(Tensor, f) for f in dir(Tensor)},
|
|
111
|
+
MsConst.TENSOR_DATA_PREFIX, hook, HOOKTensor)
|
|
112
|
+
wrap_api_func_and_bind(wrap_api_name.stub_tensor_api_names, {f: getattr(StubTensor, f) for f in dir(StubTensor)},
|
|
113
|
+
MsConst.STUB_TENSOR_DATA_PREFIX, hook, HOOKStubTensor)
|
|
114
|
+
wrap_api_func_and_bind(wrap_api_name.ops_api_names, {f: getattr(ops, f) for f in dir(ops)},
|
|
115
|
+
MsConst.OPS_DATA_PREFIX, hook, HOOKFunctionalOP)
|
|
116
|
+
wrap_api_func_and_bind(wrap_api_name.mint_api_names, {f: getattr(mint, f) for f in dir(mint)},
|
|
117
|
+
MsConst.MINT_DATA_PREFIX, hook, HOOKMintOP)
|
|
118
|
+
wrap_api_func_and_bind(wrap_api_name.mint_nn_func_api_names, {f: getattr(functional, f) for f in dir(functional)},
|
|
119
|
+
MsConst.MINT_NN_FUNC_DATA_PREFIX, hook, HOOKMintNNFunctionalOP)
|
|
120
|
+
wrap_api_func_and_bind(wrap_api_name.distributed_api_names, {f: getattr(comm_func, f) for f in dir(comm_func)},
|
|
121
|
+
MsConst.DISTRIBUTED_DATA_PREFIX, hook, HOOKDistributedOP)
|
|
@@ -1,56 +1,96 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
1
|
+
# Copyright (c) 2024-2024, Huawei Technologies Co., Ltd.
|
|
2
|
+
# All rights reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
import os
|
|
17
|
+
from collections import defaultdict
|
|
18
|
+
|
|
19
|
+
from mindspore import Tensor
|
|
20
|
+
from mindspore._c_expression import PyNativeExecutor_
|
|
21
|
+
from mindspore.common.api import _MindsporeFunctionExecutor
|
|
22
|
+
|
|
23
|
+
from msprobe.mindspore.dump.hook_cell.api_registry import api_register
|
|
24
|
+
from msprobe.core.data_dump.data_processor.base import ModuleForwardInputsOutputs, ModuleBackwardInputsOutputs
|
|
25
|
+
from msprobe.core.common.const import Const
|
|
26
|
+
from msprobe.core.data_dump.data_processor.base import ModuleForwardInputsOutputs
|
|
27
|
+
from msprobe.mindspore.dump.hook_cell.api_registry import api_register
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def dump_jit(name, in_feat, out_feat, is_forward):
|
|
31
|
+
pid = os.getpid()
|
|
32
|
+
ori_args = str(name)
|
|
33
|
+
index = ori_args.find("<")
|
|
34
|
+
if index != 0 and index != -1:
|
|
35
|
+
result = ori_args[0:index]
|
|
36
|
+
else:
|
|
37
|
+
result = "JitFunction"
|
|
38
|
+
if JitDump.need_dump():
|
|
39
|
+
if is_forward:
|
|
40
|
+
JitDump.jit_count[result] += 1
|
|
41
|
+
name_template = Const.JIT + Const.SEP + result + Const.SEP + str(JitDump.jit_count[result]) + Const.SEP + \
|
|
42
|
+
Const.FORWARD
|
|
43
|
+
JitDump.data_collector.update_api_or_module_name(name_template)
|
|
44
|
+
module_input_output = ModuleForwardInputsOutputs(args=in_feat, kwargs={}, output=out_feat)
|
|
45
|
+
JitDump.data_collector.forward_data_collect(name_template, None, pid, module_input_output)
|
|
46
|
+
else:
|
|
47
|
+
name_template = Const.JIT + Const.SEP + result + Const.SEP + str(JitDump.jit_count[result]) + Const.SEP + \
|
|
48
|
+
Const.BACKWARD
|
|
49
|
+
JitDump.data_collector.update_api_or_module_name(name_template)
|
|
50
|
+
module_input_output = ModuleBackwardInputsOutputs(grad_input=in_feat ,grad_output=out_feat)
|
|
51
|
+
JitDump.data_collector.backward_data_collect(name_template, None, pid, module_input_output)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class JitDump(_MindsporeFunctionExecutor):
|
|
55
|
+
dump_config = None
|
|
56
|
+
jit_enable = False
|
|
57
|
+
jit_dump_switch = True
|
|
58
|
+
jit_count = defaultdict(int)
|
|
59
|
+
|
|
60
|
+
def __init__(self, *args, **kwargs):
|
|
61
|
+
super().__init__(*args, **kwargs)
|
|
62
|
+
self._executor = PyNativeExecutor_.get_instance()
|
|
63
|
+
|
|
64
|
+
def __call__(self, *args, **kwargs):
|
|
65
|
+
api_register.api_set_ori_func()
|
|
66
|
+
out = super().__call__(*args, **kwargs)
|
|
67
|
+
if JitDump.jit_dump_switch and len(args) > 0:
|
|
68
|
+
dump_jit(args[0], args, out, True)
|
|
69
|
+
JitDump.jit_enable = True
|
|
70
|
+
api_register.api_set_hook_func()
|
|
71
|
+
return out
|
|
72
|
+
|
|
73
|
+
@classmethod
|
|
74
|
+
def set_config(cls, value):
|
|
75
|
+
cls.dump_config = value
|
|
76
|
+
|
|
77
|
+
@classmethod
|
|
78
|
+
def set_data_collector(cls, value):
|
|
79
|
+
cls.data_collector = value
|
|
80
|
+
|
|
81
|
+
@classmethod
|
|
82
|
+
def need_dump(cls):
|
|
83
|
+
if cls.dump_config.task != Const.TENSOR and cls.dump_config.task != Const.STATISTICS:
|
|
84
|
+
return False
|
|
85
|
+
if not cls.data_collector or cls.data_collector.data_processor.is_terminated:
|
|
86
|
+
return False
|
|
87
|
+
return True
|
|
88
|
+
|
|
89
|
+
def grad(self, obj, grad, weights, grad_position, *args, **kwargs):
|
|
90
|
+
if JitDump.jit_dump_switch and JitDump.jit_enable:
|
|
91
|
+
api_register.api_set_ori_func()
|
|
92
|
+
output = self._executor.grad(grad, obj, weights, grad_position, *args, *(kwargs.values()))
|
|
93
|
+
if JitDump.jit_dump_switch and JitDump.jit_enable:
|
|
94
|
+
dump_jit(obj, args, None, False)
|
|
95
|
+
api_register.api_set_hook_func()
|
|
96
|
+
return output
|
|
@@ -1,60 +1,75 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
self.dump_json["common_dump_settings"]
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
1
|
+
# Copyright (c) 2024-2024, Huawei Technologies Co., Ltd.
|
|
2
|
+
# All rights reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
import json
|
|
17
|
+
import os
|
|
18
|
+
|
|
19
|
+
from msprobe.core.common.file_utils import FileOpen, create_directory
|
|
20
|
+
from msprobe.mindspore.common.log import logger
|
|
21
|
+
from msprobe.mindspore.debugger.debugger_config import DebuggerConfig
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class KernelGraphDump:
|
|
25
|
+
def __init__(self, config: DebuggerConfig):
|
|
26
|
+
self.dump_json = dict()
|
|
27
|
+
self.dump_json["common_dump_settings"] = dict()
|
|
28
|
+
self.dump_json["common_dump_settings"]["dump_mode"] = 0
|
|
29
|
+
self.dump_json["common_dump_settings"]["path"] = ""
|
|
30
|
+
self.dump_json["common_dump_settings"]["net_name"] = "Net"
|
|
31
|
+
self.dump_json["common_dump_settings"]["iteration"] = "all"
|
|
32
|
+
self.dump_json["common_dump_settings"]["saved_data"] = "statistic"
|
|
33
|
+
self.dump_json["common_dump_settings"]["input_output"] = 0
|
|
34
|
+
self.dump_json["common_dump_settings"]["kernels"] = []
|
|
35
|
+
self.dump_json["common_dump_settings"]["support_device"] = [0, 1, 2, 3, 4, 5, 6, 7]
|
|
36
|
+
self.dump_json["common_dump_settings"]["op_debug_mode"] = 0
|
|
37
|
+
self.dump_json["common_dump_settings"]["file_format"] = "npy"
|
|
38
|
+
|
|
39
|
+
if len(config.list) > 0:
|
|
40
|
+
self.dump_json["common_dump_settings"]["dump_mode"] = 1
|
|
41
|
+
self.dump_json["common_dump_settings"]["kernels"] = config.list
|
|
42
|
+
self.dump_json["common_dump_settings"]["path"] = config.dump_path
|
|
43
|
+
if len(config.step) > 0:
|
|
44
|
+
step_str = ""
|
|
45
|
+
for s in config.step:
|
|
46
|
+
step_str += (str(s) + '|')
|
|
47
|
+
self.dump_json["common_dump_settings"]["iteration"] = step_str[:-1]
|
|
48
|
+
if len(config.rank) > 0:
|
|
49
|
+
self.dump_json["common_dump_settings"]["support_device"] = config.rank
|
|
50
|
+
if config.task == "tensor":
|
|
51
|
+
self.dump_json["common_dump_settings"]["saved_data"] = "tensor"
|
|
52
|
+
self.dump_json["common_dump_settings"]["file_format"] = config.file_format
|
|
53
|
+
if len(config.data_mode) == 1:
|
|
54
|
+
if config.data_mode[0] == "input":
|
|
55
|
+
self.dump_json["common_dump_settings"]["input_output"] = 1
|
|
56
|
+
if config.data_mode[0] == "output":
|
|
57
|
+
self.dump_json["common_dump_settings"]["input_output"] = 2
|
|
58
|
+
|
|
59
|
+
def handle(self):
|
|
60
|
+
if os.getenv("GRAPH_OP_RUN") == "1":
|
|
61
|
+
raise Exception("Must run in graph mode, not kbk mode")
|
|
62
|
+
json_path = self.dump_json["common_dump_settings"]["path"]
|
|
63
|
+
create_directory(json_path)
|
|
64
|
+
json_path = os.path.join(json_path, "kernel_graph_dump.json")
|
|
65
|
+
with FileOpen(json_path, 'w') as f:
|
|
66
|
+
json.dump(self.dump_json, f)
|
|
67
|
+
logger.info(json_path + " has been created.")
|
|
68
|
+
os.environ["MINDSPORE_DUMP_CONFIG"] = json_path
|
|
69
|
+
if self.dump_json["common_dump_settings"]["dump_mode"] == 0:
|
|
70
|
+
if self.dump_json["common_dump_settings"]["iteration"] != "all" or \
|
|
71
|
+
len(self.dump_json["common_dump_settings"]["kernels"]) == 0:
|
|
72
|
+
os.environ["MS_ACL_DUMP_CFG_PATH"] = json_path
|
|
73
|
+
else:
|
|
74
|
+
if "MS_ACL_DUMP_CFG_PATH" in os.environ:
|
|
75
|
+
del os.environ["MS_ACL_DUMP_CFG_PATH"]
|
|
@@ -1,65 +1,79 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
common_set["path"] =
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
1
|
+
# Copyright (c) 2024-2024, Huawei Technologies Co., Ltd.
|
|
2
|
+
# All rights reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
import json
|
|
17
|
+
import os
|
|
18
|
+
|
|
19
|
+
from msprobe.core.common.const import Const
|
|
20
|
+
from msprobe.core.common.file_utils import FileOpen, create_directory
|
|
21
|
+
from msprobe.mindspore.common.log import logger
|
|
22
|
+
from msprobe.mindspore.debugger.debugger_config import DebuggerConfig
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class KernelKbykDump:
|
|
26
|
+
COMMON_SETTINGS = "common_dump_settings"
|
|
27
|
+
E2E_SETTINGS = "e2e_dump_settings"
|
|
28
|
+
|
|
29
|
+
def __init__(self, config: DebuggerConfig):
|
|
30
|
+
self.dump_json = dict()
|
|
31
|
+
common_set = dict()
|
|
32
|
+
e2e_set = dict()
|
|
33
|
+
|
|
34
|
+
common_set = dict()
|
|
35
|
+
common_set["dump_mode"] = 0
|
|
36
|
+
common_set["path"] = ""
|
|
37
|
+
common_set["net_name"] = "Net"
|
|
38
|
+
common_set["iteration"] = "all"
|
|
39
|
+
common_set["saved_data"] = "statistic"
|
|
40
|
+
common_set["input_output"] = 0
|
|
41
|
+
common_set["kernels"] = []
|
|
42
|
+
common_set["support_device"] = [0, 1, 2, 3, 4, 5, 6, 7]
|
|
43
|
+
e2e_set = dict()
|
|
44
|
+
e2e_set["enable"] = True
|
|
45
|
+
e2e_set["trans_flag"] = True
|
|
46
|
+
|
|
47
|
+
if config.list:
|
|
48
|
+
common_set["dump_mode"] = 1
|
|
49
|
+
common_set["kernels"] = config.list
|
|
50
|
+
common_set["path"] = config.dump_path
|
|
51
|
+
if config.step:
|
|
52
|
+
step_str = ""
|
|
53
|
+
for s in config.step:
|
|
54
|
+
step_str += (str(s) + '|')
|
|
55
|
+
common_set["iteration"] = step_str[:-1]
|
|
56
|
+
if config.rank:
|
|
57
|
+
common_set["support_device"] = config.rank
|
|
58
|
+
if config.task == Const.TENSOR:
|
|
59
|
+
common_set["saved_data"] = Const.TENSOR
|
|
60
|
+
if len(config.data_mode) == 1:
|
|
61
|
+
if config.data_mode[0] == Const.INPUT:
|
|
62
|
+
common_set["input_output"] = 1
|
|
63
|
+
if config.data_mode[0] == Const.OUTPUT:
|
|
64
|
+
common_set["input_output"] = 2
|
|
65
|
+
|
|
66
|
+
self.dump_json[KernelKbykDump.COMMON_SETTINGS] = common_set
|
|
67
|
+
self.dump_json[KernelKbykDump.E2E_SETTINGS] = e2e_set
|
|
68
|
+
|
|
69
|
+
def handle(self):
|
|
70
|
+
json_path = self.dump_json[KernelKbykDump.COMMON_SETTINGS]["path"]
|
|
71
|
+
create_directory(json_path)
|
|
72
|
+
json_path = os.path.join(json_path, "kernel_kbyk_dump.json")
|
|
73
|
+
with FileOpen(json_path, 'w') as f:
|
|
74
|
+
json.dump(self.dump_json, f)
|
|
75
|
+
logger.info(json_path + " has been created.")
|
|
76
|
+
|
|
77
|
+
os.environ["MINDSPORE_DUMP_CONFIG"] = json_path
|
|
78
|
+
if "MS_ACL_DUMP_CFG_PATH" in os.environ:
|
|
79
|
+
del os.environ["MS_ACL_DUMP_CFG_PATH"]
|