mindstudio-probe 1.0.1__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.1.dist-info → mindstudio_probe-1.0.4.dist-info}/LICENSE +201 -201
- {mindstudio_probe-1.0.1.dist-info → mindstudio_probe-1.0.4.dist-info}/METADATA +36 -30
- mindstudio_probe-1.0.4.dist-info/RECORD +276 -0
- {mindstudio_probe-1.0.1.dist-info → mindstudio_probe-1.0.4.dist-info}/WHEEL +1 -1
- {mindstudio_probe-1.0.1.dist-info → mindstudio_probe-1.0.4.dist-info}/entry_points.txt +1 -0
- msprobe/README.md +101 -182
- msprobe/__init__.py +1 -0
- msprobe/{config/config.json → config.json} +49 -27
- msprobe/core/__init__.py +0 -0
- msprobe/{pytorch → core}/advisor/advisor.py +124 -124
- msprobe/{pytorch → core}/advisor/advisor_const.py +59 -59
- msprobe/{pytorch → core}/advisor/advisor_result.py +58 -58
- msprobe/core/common/const.py +341 -241
- msprobe/core/common/exceptions.py +100 -88
- msprobe/core/common/{file_check.py → file_utils.py} +478 -265
- msprobe/core/common/log.py +76 -55
- msprobe/core/common/utils.py +385 -516
- msprobe/core/common_config.py +85 -58
- msprobe/core/compare/acc_compare.py +300 -0
- msprobe/core/compare/check.py +95 -0
- msprobe/core/compare/compare_cli.py +49 -0
- msprobe/core/compare/highlight.py +223 -0
- msprobe/core/compare/multiprocessing_compute.py +149 -0
- msprobe/{pytorch → core}/compare/npy_compare.py +295 -244
- msprobe/core/compare/utils.py +430 -0
- msprobe/core/data_dump/data_collector.py +154 -140
- msprobe/core/data_dump/data_processor/base.py +314 -245
- msprobe/core/data_dump/data_processor/factory.py +59 -61
- msprobe/core/data_dump/data_processor/mindspore_processor.py +186 -0
- msprobe/core/data_dump/data_processor/pytorch_processor.py +366 -346
- msprobe/core/data_dump/json_writer.py +96 -116
- msprobe/core/data_dump/scope.py +178 -178
- msprobe/core/grad_probe/__init__.py +0 -0
- msprobe/core/grad_probe/constant.py +71 -0
- msprobe/core/grad_probe/grad_compare.py +171 -0
- msprobe/core/grad_probe/utils.py +64 -0
- 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/docs/17.grad_probe.md +207 -0
- 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/docs/img/grad_probe_image-1.png +0 -0
- msprobe/docs/img/grad_probe_image-2.png +0 -0
- msprobe/docs/img/grad_probe_image-3.png +0 -0
- msprobe/docs/img/grad_probe_image-4.png +0 -0
- msprobe/docs/img/grad_probe_image.png +0 -0
- msprobe/mindspore/__init__.py +1 -1
- msprobe/mindspore/api_accuracy_checker/__init__.py +0 -0
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +255 -0
- msprobe/mindspore/api_accuracy_checker/api_info.py +69 -0
- msprobe/mindspore/api_accuracy_checker/api_runner.py +156 -0
- msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +197 -0
- msprobe/mindspore/api_accuracy_checker/cmd_parser.py +6 -0
- msprobe/mindspore/api_accuracy_checker/compute_element.py +239 -0
- msprobe/mindspore/api_accuracy_checker/main.py +9 -0
- msprobe/mindspore/api_accuracy_checker/type_mapping.py +114 -0
- msprobe/mindspore/api_accuracy_checker/utils.py +80 -0
- msprobe/mindspore/cell_processor.py +34 -0
- msprobe/mindspore/common/const.py +106 -0
- msprobe/mindspore/common/log.py +38 -0
- msprobe/mindspore/common/utils.py +81 -0
- msprobe/mindspore/compare/distributed_compare.py +75 -0
- msprobe/mindspore/compare/ms_compare.py +219 -0
- msprobe/mindspore/compare/ms_graph_compare.py +348 -0
- msprobe/mindspore/compare/ms_to_pt_api.yaml +399 -0
- msprobe/mindspore/debugger/debugger_config.py +66 -51
- msprobe/mindspore/debugger/precision_debugger.py +126 -32
- msprobe/mindspore/dump/dump_tool_factory.py +35 -38
- msprobe/mindspore/dump/hook_cell/api_registry.py +118 -0
- msprobe/mindspore/dump/hook_cell/hook_cell.py +55 -0
- msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +922 -0
- msprobe/mindspore/dump/hook_cell/wrap_api.py +113 -0
- msprobe/mindspore/dump/jit_dump.py +72 -0
- msprobe/mindspore/dump/kernel_graph_dump.py +59 -60
- msprobe/mindspore/dump/kernel_kbyk_dump.py +64 -0
- msprobe/mindspore/free_benchmark/__init__.py +0 -0
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +116 -0
- msprobe/mindspore/free_benchmark/common/__init__.py +0 -0
- msprobe/mindspore/free_benchmark/common/config.py +12 -0
- msprobe/mindspore/free_benchmark/common/handler_params.py +17 -0
- msprobe/mindspore/free_benchmark/common/utils.py +71 -0
- msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +842 -0
- msprobe/mindspore/free_benchmark/decorator/__init__.py +0 -0
- msprobe/mindspore/free_benchmark/decorator/dec_forward.py +43 -0
- msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +107 -0
- msprobe/mindspore/free_benchmark/handler/__init__.py +0 -0
- msprobe/mindspore/free_benchmark/handler/base_handler.py +90 -0
- msprobe/mindspore/free_benchmark/handler/check_handler.py +41 -0
- msprobe/mindspore/free_benchmark/handler/fix_handler.py +36 -0
- msprobe/mindspore/free_benchmark/handler/handler_factory.py +21 -0
- msprobe/mindspore/free_benchmark/perturbation/add_noise.py +67 -0
- msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +21 -0
- msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +63 -0
- msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +51 -0
- msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +35 -0
- msprobe/mindspore/free_benchmark/perturbation/no_change.py +12 -0
- msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +29 -0
- msprobe/mindspore/free_benchmark/self_check_tool_factory.py +33 -0
- msprobe/mindspore/grad_probe/__init__.py +0 -0
- msprobe/mindspore/grad_probe/global_context.py +90 -0
- msprobe/mindspore/grad_probe/grad_analyzer.py +231 -0
- msprobe/mindspore/grad_probe/grad_monitor.py +27 -0
- msprobe/mindspore/grad_probe/grad_stat_csv.py +132 -0
- msprobe/mindspore/grad_probe/hook.py +94 -0
- msprobe/mindspore/grad_probe/utils.py +30 -0
- msprobe/mindspore/ms_config.py +128 -78
- msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +44 -45
- msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +34 -32
- msprobe/mindspore/runtime.py +4 -0
- msprobe/mindspore/service.py +378 -0
- msprobe/mindspore/task_handler_factory.py +24 -21
- msprobe/msprobe.py +105 -67
- msprobe/pytorch/__init__.py +4 -4
- msprobe/pytorch/api_accuracy_checker/common/config.py +53 -50
- msprobe/pytorch/api_accuracy_checker/common/utils.py +214 -224
- msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +213 -216
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +606 -545
- 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 -345
- msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +73 -73
- msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +245 -248
- msprobe/pytorch/api_accuracy_checker/config.yaml +10 -4
- msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +335 -328
- msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +200 -203
- msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +133 -127
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +592 -493
- msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +70 -7
- msprobe/pytorch/api_accuracy_checker/run_ut/torch_ut_setting.json +7 -4
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/__init__.py +0 -0
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +197 -0
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +325 -0
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +204 -0
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +219 -0
- msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/ssl_config.py +10 -0
- msprobe/pytorch/bench_functions/__init__.py +15 -0
- msprobe/pytorch/bench_functions/apply_adam_w.py +28 -0
- msprobe/pytorch/bench_functions/confusion_transpose.py +19 -0
- msprobe/pytorch/bench_functions/fast_gelu.py +55 -0
- msprobe/pytorch/bench_functions/layer_norm_eval.py +6 -0
- msprobe/pytorch/bench_functions/linear.py +12 -0
- msprobe/pytorch/bench_functions/matmul_backward.py +48 -0
- msprobe/pytorch/bench_functions/npu_fusion_attention.py +509 -0
- msprobe/pytorch/bench_functions/rms_norm.py +15 -0
- msprobe/pytorch/bench_functions/rotary_mul.py +52 -0
- msprobe/pytorch/bench_functions/scaled_mask_softmax.py +26 -0
- msprobe/pytorch/bench_functions/swiglu.py +55 -0
- 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 -37
- msprobe/pytorch/common/utils.py +305 -224
- msprobe/pytorch/compare/distributed_compare.py +66 -111
- msprobe/pytorch/compare/mapping.yaml +607 -607
- msprobe/pytorch/compare/match.py +34 -36
- msprobe/pytorch/compare/pt_compare.py +50 -0
- msprobe/pytorch/debugger/debugger_config.py +95 -86
- msprobe/pytorch/debugger/precision_debugger.py +125 -95
- msprobe/pytorch/free_benchmark/__init__.py +8 -8
- msprobe/pytorch/free_benchmark/common/constant.py +70 -67
- 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 -98
- msprobe/pytorch/free_benchmark/compare/grad_saver.py +179 -183
- msprobe/pytorch/free_benchmark/compare/single_benchmark.py +104 -104
- msprobe/pytorch/free_benchmark/main.py +105 -102
- 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 -203
- 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 -31
- msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +170 -170
- msprobe/pytorch/function_factory.py +76 -0
- msprobe/pytorch/functional/dump_module.py +39 -39
- msprobe/pytorch/grad_probe/__init__.py +0 -0
- msprobe/pytorch/grad_probe/grad_monitor.py +91 -0
- msprobe/pytorch/grad_probe/grad_stat_csv.py +129 -0
- msprobe/pytorch/hook_module/api_registry.py +161 -161
- msprobe/pytorch/hook_module/hook_module.py +120 -109
- msprobe/pytorch/hook_module/support_wrap_ops.yaml +1879 -1876
- msprobe/pytorch/hook_module/utils.py +30 -29
- msprobe/pytorch/hook_module/wrap_aten.py +110 -100
- msprobe/pytorch/hook_module/wrap_distributed.py +78 -75
- msprobe/pytorch/hook_module/wrap_functional.py +105 -108
- msprobe/pytorch/hook_module/wrap_npu_custom.py +93 -73
- msprobe/pytorch/hook_module/wrap_tensor.py +71 -72
- msprobe/pytorch/hook_module/wrap_torch.py +86 -88
- msprobe/pytorch/hook_module/wrap_vf.py +62 -64
- msprobe/pytorch/module_processer.py +138 -98
- msprobe/pytorch/online_dispatch/__init__.py +20 -20
- msprobe/pytorch/online_dispatch/compare.py +236 -236
- msprobe/pytorch/online_dispatch/dispatch.py +271 -273
- msprobe/pytorch/online_dispatch/dump_compare.py +155 -186
- 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 -187
- msprobe/pytorch/parse.py +4 -4
- msprobe/pytorch/parse_tool/cli.py +32 -32
- msprobe/pytorch/parse_tool/lib/compare.py +260 -259
- msprobe/pytorch/parse_tool/lib/config.py +52 -51
- 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 -367
- msprobe/pytorch/parse_tool/lib/visualization.py +85 -90
- msprobe/pytorch/pt_config.py +188 -93
- msprobe/pytorch/service.py +246 -167
- mindstudio_probe-1.0.1.dist-info/RECORD +0 -228
- msprobe/config/README.md +0 -397
- msprobe/mindspore/doc/dump.md +0 -65
- msprobe/mindspore/dump/api_kbk_dump.py +0 -55
- msprobe/pytorch/compare/acc_compare.py +0 -1024
- msprobe/pytorch/compare/highlight.py +0 -100
- msprobe/pytorch/doc/FAQ.md +0 -193
- msprobe/pytorch/doc/api_accuracy_checker.md +0 -269
- msprobe/pytorch/doc/atat/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/dump.md +0 -207
- msprobe/pytorch/doc/ptdbg_ascend_compare.md +0 -176
- 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/test/core_ut/common/test_utils.py +0 -345
- msprobe/test/core_ut/data_dump/test_data_collector.py +0 -47
- msprobe/test/core_ut/data_dump/test_json_writer.py +0 -183
- msprobe/test/core_ut/data_dump/test_scope.py +0 -151
- msprobe/test/core_ut/test_common_config.py +0 -152
- msprobe/test/core_ut/test_file_check.py +0 -218
- msprobe/test/core_ut/test_log.py +0 -109
- msprobe/test/mindspore_ut/test_api_kbk_dump.py +0 -51
- msprobe/test/mindspore_ut/test_debugger_config.py +0 -42
- msprobe/test/mindspore_ut/test_dump_tool_factory.py +0 -51
- msprobe/test/mindspore_ut/test_kernel_graph_dump.py +0 -66
- msprobe/test/mindspore_ut/test_kernel_graph_overflow_check.py +0 -63
- msprobe/test/mindspore_ut/test_ms_config.py +0 -69
- msprobe/test/mindspore_ut/test_overflow_check_tool_factory.py +0 -51
- msprobe/test/mindspore_ut/test_precision_debugger.py +0 -56
- msprobe/test/mindspore_ut/test_task_handler_factory.py +0 -58
- msprobe/test/pytorch_ut/advisor/test_advisor.py +0 -83
- msprobe/test/pytorch_ut/api_accuracy_checker/common/test_common_utils.py +0 -108
- msprobe/test/pytorch_ut/api_accuracy_checker/common/test_config.py +0 -39
- msprobe/test/pytorch_ut/api_accuracy_checker/compare/test_algorithm.py +0 -112
- msprobe/test/pytorch_ut/api_accuracy_checker/compare/test_api_precision_compare.py +0 -77
- msprobe/test/pytorch_ut/api_accuracy_checker/compare/test_compare.py +0 -125
- msprobe/test/pytorch_ut/api_accuracy_checker/compare/test_compare_column.py +0 -10
- msprobe/test/pytorch_ut/api_accuracy_checker/compare/test_compare_utils.py +0 -43
- msprobe/test/pytorch_ut/api_accuracy_checker/run_ut/dump.json +0 -179
- msprobe/test/pytorch_ut/api_accuracy_checker/run_ut/forward.json +0 -63
- msprobe/test/pytorch_ut/api_accuracy_checker/run_ut/test_data_generate.py +0 -99
- msprobe/test/pytorch_ut/api_accuracy_checker/run_ut/test_multi_run_ut.py +0 -115
- msprobe/test/pytorch_ut/api_accuracy_checker/run_ut/test_run_ut.py +0 -72
- msprobe/test/pytorch_ut/compare/test_acc_compare.py +0 -17
- msprobe/test/pytorch_ut/free_benchmark/perturbed_layers/test_perturbed_layser.py +0 -105
- msprobe/test/pytorch_ut/free_benchmark/result_handlers/test_result_handler.py +0 -121
- msprobe/test/pytorch_ut/free_benchmark/test_main.py +0 -101
- msprobe/test/pytorch_ut/functional/test_dump_module.py +0 -15
- msprobe/test/pytorch_ut/hook_module/test_api_registry.py +0 -130
- msprobe/test/pytorch_ut/hook_module/test_hook_module.py +0 -42
- msprobe/test/pytorch_ut/hook_module/test_wrap_aten.py +0 -65
- msprobe/test/pytorch_ut/hook_module/test_wrap_distributed.py +0 -35
- msprobe/test/pytorch_ut/hook_module/test_wrap_functional.py +0 -20
- msprobe/test/pytorch_ut/hook_module/test_wrap_tensor.py +0 -35
- msprobe/test/pytorch_ut/hook_module/test_wrap_torch.py +0 -43
- msprobe/test/pytorch_ut/hook_module/test_wrap_vf.py +0 -11
- msprobe/test/pytorch_ut/test_pt_config.py +0 -69
- msprobe/test/pytorch_ut/test_service.py +0 -59
- msprobe/test/resources/advisor.txt +0 -3
- msprobe/test/resources/compare_result_20230703104808.csv +0 -9
- msprobe/test/resources/compare_result_without_accuracy.csv +0 -9
- msprobe/test/resources/config.yaml +0 -3
- msprobe/test/resources/npu_test.pkl +0 -8
- msprobe/test/run_test.sh +0 -30
- msprobe/test/run_ut.py +0 -58
- msprobe/test/test_module_processer.py +0 -64
- {mindstudio_probe-1.0.1.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/{pytorch/doc → docs}/img/module_compare.png +0 -0
|
@@ -1,90 +1,85 @@
|
|
|
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 json
|
|
18
|
-
import numpy as np
|
|
19
|
-
|
|
20
|
-
from msprobe.pytorch.parse_tool.lib.config import Const
|
|
21
|
-
from msprobe.pytorch.parse_tool.lib.utils import Util
|
|
22
|
-
from msprobe.pytorch.parse_tool.lib.parse_exception import ParseException
|
|
23
|
-
from msprobe.core.common.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class Visualization:
|
|
27
|
-
def __init__(self):
|
|
28
|
-
self.util = Util()
|
|
29
|
-
|
|
30
|
-
def print_npy_summary(self, target_file):
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
self.util.
|
|
46
|
-
self.util.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
self.util.
|
|
51
|
-
self.util.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
summery_info
|
|
85
|
-
|
|
86
|
-
if not title_printed:
|
|
87
|
-
self.util.log.info("\nStatistic Info:")
|
|
88
|
-
title_printed = True
|
|
89
|
-
self.util.log.info(summery_info)
|
|
90
|
-
pkl_handle.close()
|
|
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 json
|
|
18
|
+
import numpy as np
|
|
19
|
+
|
|
20
|
+
from msprobe.pytorch.parse_tool.lib.config import Const
|
|
21
|
+
from msprobe.pytorch.parse_tool.lib.utils import Util
|
|
22
|
+
from msprobe.pytorch.parse_tool.lib.parse_exception import ParseException
|
|
23
|
+
from msprobe.core.common.file_utils import FileOpen, load_npy, save_npy_to_txt
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class Visualization:
|
|
27
|
+
def __init__(self):
|
|
28
|
+
self.util = Util()
|
|
29
|
+
|
|
30
|
+
def print_npy_summary(self, target_file):
|
|
31
|
+
np_data = load_npy(target_file, enable_pickle=True)
|
|
32
|
+
table = self.util.create_table('', ['Index', 'Data'])
|
|
33
|
+
flatten_data = np_data.flatten()
|
|
34
|
+
tablesize = 8
|
|
35
|
+
for i in range(min(16, int(np.ceil(flatten_data.size / tablesize)))):
|
|
36
|
+
last_idx = min(flatten_data.size, i * tablesize + tablesize)
|
|
37
|
+
table.add_row(str(i * tablesize), ' '.join(flatten_data[i * tablesize: last_idx].astype('str').tolist()))
|
|
38
|
+
summary = ['[yellow]%s[/yellow]' % self.util.gen_npy_info_txt(np_data), 'Path: %s' % target_file,
|
|
39
|
+
"TextFile: %s.txt" % target_file]
|
|
40
|
+
self.util.print_panel(self.util.create_columns([table, "\n".join(summary)]), target_file)
|
|
41
|
+
save_npy_to_txt(np_data, target_file + ".txt")
|
|
42
|
+
|
|
43
|
+
def print_npy_data(self, file_name):
|
|
44
|
+
file_name = self.util.path_strip(file_name)
|
|
45
|
+
self.util.check_path_valid(file_name)
|
|
46
|
+
self.util.check_file_path_format(file_name, Const.NPY_SUFFIX)
|
|
47
|
+
return self.print_npy_summary(file_name)
|
|
48
|
+
|
|
49
|
+
def parse_pkl(self, path, api_name):
|
|
50
|
+
path = self.util.path_strip(path)
|
|
51
|
+
self.util.check_path_valid(path)
|
|
52
|
+
self.util.check_file_path_format(path, Const.PKL_SUFFIX)
|
|
53
|
+
self.util.check_str_param(api_name)
|
|
54
|
+
with FileOpen(path, "r") as pkl_handle:
|
|
55
|
+
title_printed = False
|
|
56
|
+
while True:
|
|
57
|
+
pkl_line = pkl_handle.readline()
|
|
58
|
+
if pkl_line == '\n':
|
|
59
|
+
continue
|
|
60
|
+
if len(pkl_line) == 0:
|
|
61
|
+
break
|
|
62
|
+
try:
|
|
63
|
+
msg = json.loads(pkl_line)
|
|
64
|
+
except json.JSONDecodeError as e:
|
|
65
|
+
self.util.log.error("%s %s in line %s" % ("JSONDecodeError", str(e), pkl_line))
|
|
66
|
+
self.util.log.warning("Please check the pkl file")
|
|
67
|
+
raise ParseException(ParseException.PARSE_JSONDECODE_ERROR) from e
|
|
68
|
+
info_prefix = msg[0]
|
|
69
|
+
if not info_prefix.startswith(api_name):
|
|
70
|
+
continue
|
|
71
|
+
if info_prefix.find("stack_info") != -1 and len(msg) == 2:
|
|
72
|
+
self.util.log.info("\nTrace back({}):".format(msg[0]))
|
|
73
|
+
if msg[1] and len(msg[1]) > 4:
|
|
74
|
+
for item in reversed(msg[1]):
|
|
75
|
+
self.util.log.info(" File \"{}\", line {}, in {}".format(item[0], item[1], item[2]))
|
|
76
|
+
self.util.log.info(" {}".format(item[3]))
|
|
77
|
+
continue
|
|
78
|
+
if len(msg) > 5 and len(msg[5]) >= 3:
|
|
79
|
+
summery_info = " [{}][dtype: {}][shape: {}][max: {}][min: {}][mean: {}]" \
|
|
80
|
+
.format(msg[0], msg[3], msg[4], msg[5][0], msg[5][1], msg[5][2])
|
|
81
|
+
if not title_printed:
|
|
82
|
+
self.util.log.info("\nStatistic Info:")
|
|
83
|
+
title_printed = True
|
|
84
|
+
self.util.log.info(summery_info)
|
|
85
|
+
pkl_handle.close()
|
msprobe/pytorch/pt_config.py
CHANGED
|
@@ -1,93 +1,188 @@
|
|
|
1
|
-
import json
|
|
2
|
-
import os
|
|
3
|
-
|
|
4
|
-
from msprobe.core.common_config import CommonConfig, BaseConfig
|
|
5
|
-
from msprobe.core.common.
|
|
6
|
-
from msprobe.core.common.const import Const
|
|
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
|
-
self.
|
|
53
|
-
self.
|
|
54
|
-
self.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if self.
|
|
60
|
-
raise Exception("
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
def
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
1
|
+
import json
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
from msprobe.core.common_config import CommonConfig, BaseConfig
|
|
5
|
+
from msprobe.core.common.file_utils import FileOpen
|
|
6
|
+
from msprobe.core.common.const import Const
|
|
7
|
+
from msprobe.pytorch.hook_module.utils import get_ops
|
|
8
|
+
from msprobe.core.grad_probe.constant import level_adp
|
|
9
|
+
from msprobe.core.grad_probe.utils import check_numeral_list_ascend
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class TensorConfig(BaseConfig):
|
|
13
|
+
def __init__(self, json_config):
|
|
14
|
+
super().__init__(json_config)
|
|
15
|
+
self.online_run_ut = json_config.get("online_run_ut", False)
|
|
16
|
+
self.nfs_path = json_config.get("nfs_path", "")
|
|
17
|
+
self.host = json_config.get("host", "")
|
|
18
|
+
self.port = json_config.get("port", -1)
|
|
19
|
+
self.tls_path = json_config.get("tls_path", "")
|
|
20
|
+
self.check_config()
|
|
21
|
+
self._check_file_format()
|
|
22
|
+
self._check_tls_path_config()
|
|
23
|
+
|
|
24
|
+
def _check_file_format(self):
|
|
25
|
+
if self.file_format is not None and self.file_format not in ["npy", "bin"]:
|
|
26
|
+
raise Exception("file_format is invalid")
|
|
27
|
+
|
|
28
|
+
def _check_tls_path_config(self):
|
|
29
|
+
if self.tls_path:
|
|
30
|
+
if not os.path.exists(self.tls_path):
|
|
31
|
+
raise Exception("tls_path: %s does not exist" % self.tls_path)
|
|
32
|
+
if not os.path.exists(os.path.join(self.tls_path, "client.key")):
|
|
33
|
+
raise Exception("tls_path does not contain client.key")
|
|
34
|
+
if not os.path.exists(os.path.join(self.tls_path, "client.crt")):
|
|
35
|
+
raise Exception("tls_path does not contain client.crt")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class StatisticsConfig(BaseConfig):
|
|
39
|
+
def __init__(self, json_config):
|
|
40
|
+
super().__init__(json_config)
|
|
41
|
+
self.check_config()
|
|
42
|
+
self._check_summary_mode()
|
|
43
|
+
|
|
44
|
+
def _check_summary_mode(self):
|
|
45
|
+
if self.summary_mode and self.summary_mode not in ["statistics", "md5"]:
|
|
46
|
+
raise Exception("summary_mode is invalid")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class OverflowCheckConfig(BaseConfig):
|
|
50
|
+
def __init__(self, json_config):
|
|
51
|
+
super().__init__(json_config)
|
|
52
|
+
self.overflow_nums = json_config.get("overflow_nums")
|
|
53
|
+
self.check_mode = json_config.get("check_mode")
|
|
54
|
+
self.check_overflow_config()
|
|
55
|
+
|
|
56
|
+
def check_overflow_config(self):
|
|
57
|
+
if self.overflow_nums is not None and not isinstance(self.overflow_nums, int):
|
|
58
|
+
raise Exception("overflow_num is invalid")
|
|
59
|
+
if self.check_mode is not None and self.check_mode not in ["all", "aicore", "atomic"]:
|
|
60
|
+
raise Exception("check_mode is invalid")
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class FreeBenchmarkCheckConfig(BaseConfig):
|
|
64
|
+
def __init__(self, json_config):
|
|
65
|
+
super().__init__(json_config)
|
|
66
|
+
self.fuzz_device = json_config.get("fuzz_device")
|
|
67
|
+
self.pert_mode = json_config.get("pert_mode")
|
|
68
|
+
self.handler_type = json_config.get("handler_type")
|
|
69
|
+
self.fuzz_level = json_config.get("fuzz_level")
|
|
70
|
+
self.fuzz_stage = json_config.get("fuzz_stage")
|
|
71
|
+
self.if_preheat = json_config.get("if_preheat")
|
|
72
|
+
self.preheat_step = json_config.get("preheat_step")
|
|
73
|
+
self.max_sample = json_config.get("max_sample")
|
|
74
|
+
self.check_freebenchmark_config()
|
|
75
|
+
|
|
76
|
+
def check_freebenchmark_config(self):
|
|
77
|
+
if self.if_preheat and self.handler_type == "fix":
|
|
78
|
+
raise Exception("Preheating is not supported in fix handler type")
|
|
79
|
+
if self.preheat_step and self.preheat_step == 0:
|
|
80
|
+
raise Exception("preheat_step cannot be 0")
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class RunUTConfig(BaseConfig):
|
|
84
|
+
WrapApi = get_ops()
|
|
85
|
+
|
|
86
|
+
def __init__(self, json_config):
|
|
87
|
+
super().__init__(json_config)
|
|
88
|
+
self.white_list = json_config.get("white_list", Const.DEFAULT_LIST)
|
|
89
|
+
self.black_list = json_config.get("black_list", Const.DEFAULT_LIST)
|
|
90
|
+
self.error_data_path = json_config.get("error_data_path", Const.DEFAULT_PATH)
|
|
91
|
+
self.is_online = json_config.get("is_online", False)
|
|
92
|
+
self.nfs_path = json_config.get("nfs_path", "")
|
|
93
|
+
self.host = json_config.get("host", "")
|
|
94
|
+
self.port = json_config.get("port", -1)
|
|
95
|
+
self.rank_list = json_config.get("rank_list", Const.DEFAULT_LIST)
|
|
96
|
+
self.tls_path = json_config.get("tls_path", "")
|
|
97
|
+
self.check_run_ut_config()
|
|
98
|
+
|
|
99
|
+
@classmethod
|
|
100
|
+
def check_filter_list_config(cls, key, filter_list):
|
|
101
|
+
if not isinstance(filter_list, list):
|
|
102
|
+
raise Exception("%s must be a list type" % key)
|
|
103
|
+
if not all(isinstance(item, str) for item in filter_list):
|
|
104
|
+
raise Exception("All elements in %s must be string type" % key)
|
|
105
|
+
invalid_api = [item for item in filter_list if item not in cls.WrapApi]
|
|
106
|
+
if invalid_api:
|
|
107
|
+
raise Exception("Invalid api in %s: %s" % (key, invalid_api))
|
|
108
|
+
|
|
109
|
+
@classmethod
|
|
110
|
+
def check_error_data_path_config(cls, error_data_path):
|
|
111
|
+
if not os.path.exists(error_data_path):
|
|
112
|
+
raise Exception("error_data_path: %s does not exist" % error_data_path)
|
|
113
|
+
|
|
114
|
+
@classmethod
|
|
115
|
+
def check_nfs_path_config(cls, nfs_path):
|
|
116
|
+
if nfs_path and not os.path.exists(nfs_path):
|
|
117
|
+
raise Exception("nfs_path: %s does not exist" % nfs_path)
|
|
118
|
+
|
|
119
|
+
@classmethod
|
|
120
|
+
def check_tls_path_config(cls, tls_path):
|
|
121
|
+
if tls_path:
|
|
122
|
+
if not os.path.exists(tls_path):
|
|
123
|
+
raise Exception("tls_path: %s does not exist" % tls_path)
|
|
124
|
+
if not os.path.exists(os.path.join(tls_path, "server.key")):
|
|
125
|
+
raise Exception("tls_path does not contain server.key")
|
|
126
|
+
if not os.path.exists(os.path.join(tls_path, "server.crt")):
|
|
127
|
+
raise Exception("tls_path does not contain server.crt")
|
|
128
|
+
|
|
129
|
+
def check_run_ut_config(self):
|
|
130
|
+
RunUTConfig.check_filter_list_config(Const.WHITE_LIST, self.white_list)
|
|
131
|
+
RunUTConfig.check_filter_list_config(Const.BLACK_LIST, self.black_list)
|
|
132
|
+
RunUTConfig.check_error_data_path_config(self.error_data_path)
|
|
133
|
+
RunUTConfig.check_nfs_path_config(self.nfs_path)
|
|
134
|
+
RunUTConfig.check_tls_path_config(self.tls_path)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
class GradToolConfig(BaseConfig):
|
|
138
|
+
def __init__(self, json_config):
|
|
139
|
+
super().__init__(json_config)
|
|
140
|
+
self.grad_level = json_config.get("grad_level", "L1")
|
|
141
|
+
self.param_list = json_config.get("param_list", [])
|
|
142
|
+
self.bounds = json_config.get("bounds", [-1, 0, 1])
|
|
143
|
+
self._check_config()
|
|
144
|
+
|
|
145
|
+
def _check_config(self):
|
|
146
|
+
if self.grad_level not in level_adp.keys():
|
|
147
|
+
raise Exception(f"grad_level must be one of {level_adp.keys()}")
|
|
148
|
+
if not isinstance(self.param_list, list):
|
|
149
|
+
raise Exception(f"param_list must be a list")
|
|
150
|
+
check_numeral_list_ascend(self.bounds)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def parse_task_config(task, json_config):
|
|
154
|
+
default_dic = {}
|
|
155
|
+
if task == Const.TENSOR:
|
|
156
|
+
config_dic = json_config.get(Const.TENSOR, default_dic)
|
|
157
|
+
return TensorConfig(config_dic)
|
|
158
|
+
elif task == Const.STATISTICS:
|
|
159
|
+
config_dic = json_config.get(Const.STATISTICS, default_dic)
|
|
160
|
+
return StatisticsConfig(config_dic)
|
|
161
|
+
elif task == Const.OVERFLOW_CHECK:
|
|
162
|
+
config_dic = json_config.get(Const.OVERFLOW_CHECK, default_dic)
|
|
163
|
+
return OverflowCheckConfig(config_dic)
|
|
164
|
+
elif task == Const.FREE_BENCHMARK:
|
|
165
|
+
config_dic = json_config.get(Const.FREE_BENCHMARK, default_dic)
|
|
166
|
+
return FreeBenchmarkCheckConfig(config_dic)
|
|
167
|
+
elif task == Const.RUN_UT:
|
|
168
|
+
config_dic = json_config.get(Const.RUN_UT, default_dic)
|
|
169
|
+
return RunUTConfig(config_dic)
|
|
170
|
+
elif task == Const.GRAD_PROBE:
|
|
171
|
+
config_dic = json_config.get(Const.GRAD_PROBE, default_dic)
|
|
172
|
+
return GradToolConfig(config_dic)
|
|
173
|
+
else:
|
|
174
|
+
return StatisticsConfig(default_dic)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def parse_json_config(json_file_path, task):
|
|
178
|
+
if not json_file_path:
|
|
179
|
+
config_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
|
180
|
+
json_file_path = os.path.join(config_dir, "config.json")
|
|
181
|
+
with FileOpen(json_file_path, 'r') as file:
|
|
182
|
+
json_config = json.load(file)
|
|
183
|
+
common_config = CommonConfig(json_config)
|
|
184
|
+
if task and task in Const.TASK_LIST:
|
|
185
|
+
task_config = parse_task_config(task, json_config)
|
|
186
|
+
else:
|
|
187
|
+
task_config = parse_task_config(common_config.task, json_config)
|
|
188
|
+
return common_config, task_config
|