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,61 +1,59 @@
|
|
|
1
|
-
from msprobe.core.common.const import Const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class DataProcessorFactory:
|
|
5
|
-
_data_processor = {}
|
|
6
|
-
_module_processor = {}
|
|
7
|
-
|
|
8
|
-
@classmethod
|
|
9
|
-
def register_processor(cls, framework, task, processor_class):
|
|
10
|
-
key = (framework, task)
|
|
11
|
-
cls._data_processor[key] = processor_class
|
|
12
|
-
|
|
13
|
-
@classmethod
|
|
14
|
-
def register_module_processor(cls, framework, processor_class):
|
|
15
|
-
cls._module_processor[framework] = processor_class
|
|
16
|
-
|
|
17
|
-
@classmethod
|
|
18
|
-
def get_module_processor(cls, framework):
|
|
19
|
-
processor_class = cls._module_processor.get(framework)
|
|
20
|
-
if not processor_class:
|
|
21
|
-
raise ValueError(f"ModuleProcesser not found for framework: {framework}")
|
|
22
|
-
return processor_class
|
|
23
|
-
|
|
24
|
-
@classmethod
|
|
25
|
-
def create_processor(cls, config, data_writer):
|
|
26
|
-
cls.register_processors(config.framework)
|
|
27
|
-
task = Const.KERNEL_DUMP if config.level == "L2" else config.task
|
|
28
|
-
key = (config.framework, task)
|
|
29
|
-
processor_class = cls._data_processor.get(key)
|
|
30
|
-
if not processor_class:
|
|
31
|
-
raise ValueError(f"Processor not found for framework: {config.framework}, task: {config.task}")
|
|
32
|
-
return processor_class(config, data_writer)
|
|
33
|
-
|
|
34
|
-
@classmethod
|
|
35
|
-
def register_processors(cls, framework):
|
|
36
|
-
if framework == Const.PT_FRAMEWORK:
|
|
37
|
-
from .pytorch_processor import (
|
|
38
|
-
StatisticsDataProcessor as PytorchStatisticsDataProcessor,
|
|
39
|
-
TensorDataProcessor as PytorchTensorDataProcessor,
|
|
40
|
-
OverflowCheckDataProcessor as PytorchOverflowCheckDataProcessor,
|
|
41
|
-
FreeBenchmarkDataProcessor as PytorchFreeBenchmarkDataProcessor,
|
|
42
|
-
KernelDumpDataProcessor as PytorchKernelDumpDataProcessor
|
|
43
|
-
)
|
|
44
|
-
from ....pytorch.module_processer import ModuleProcesser
|
|
45
|
-
cls.register_processor(Const.PT_FRAMEWORK, Const.STATISTICS, PytorchStatisticsDataProcessor)
|
|
46
|
-
cls.register_processor(Const.PT_FRAMEWORK, Const.TENSOR, PytorchTensorDataProcessor)
|
|
47
|
-
cls.register_processor(Const.PT_FRAMEWORK, Const.OVERFLOW_CHECK, PytorchOverflowCheckDataProcessor)
|
|
48
|
-
cls.register_processor(Const.PT_FRAMEWORK, Const.FREE_BENCHMARK, PytorchFreeBenchmarkDataProcessor)
|
|
49
|
-
cls.register_processor(Const.PT_FRAMEWORK, Const.KERNEL_DUMP, PytorchKernelDumpDataProcessor)
|
|
50
|
-
cls.register_module_processor(Const.PT_FRAMEWORK, ModuleProcesser)
|
|
51
|
-
elif framework == Const.MS_FRAMEWORK:
|
|
52
|
-
from .mindspore_processor import (
|
|
53
|
-
StatisticsDataProcessor as MindsporeStatisticsDataProcessor,
|
|
54
|
-
TensorDataProcessor as MindsporeTensorDataProcessor,
|
|
55
|
-
OverflowCheckDataProcessor as MindsporeOverflowCheckDataProcessor
|
|
56
|
-
|
|
57
|
-
)
|
|
58
|
-
cls.register_processor(Const.MS_FRAMEWORK, Const.
|
|
59
|
-
cls.register_processor(Const.MS_FRAMEWORK, Const.
|
|
60
|
-
cls.register_processor(Const.MS_FRAMEWORK, Const.OVERFLOW_CHECK, MindsporeOverflowCheckDataProcessor)
|
|
61
|
-
cls.register_processor(Const.MS_FRAMEWORK, Const.FREE_BENCHMARK, MindsporeFreeBenchmarkDataProcessor)
|
|
1
|
+
from msprobe.core.common.const import Const
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class DataProcessorFactory:
|
|
5
|
+
_data_processor = {}
|
|
6
|
+
_module_processor = {}
|
|
7
|
+
|
|
8
|
+
@classmethod
|
|
9
|
+
def register_processor(cls, framework, task, processor_class):
|
|
10
|
+
key = (framework, task)
|
|
11
|
+
cls._data_processor[key] = processor_class
|
|
12
|
+
|
|
13
|
+
@classmethod
|
|
14
|
+
def register_module_processor(cls, framework, processor_class):
|
|
15
|
+
cls._module_processor[framework] = processor_class
|
|
16
|
+
|
|
17
|
+
@classmethod
|
|
18
|
+
def get_module_processor(cls, framework):
|
|
19
|
+
processor_class = cls._module_processor.get(framework)
|
|
20
|
+
if not processor_class:
|
|
21
|
+
raise ValueError(f"ModuleProcesser not found for framework: {framework}")
|
|
22
|
+
return processor_class
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
def create_processor(cls, config, data_writer):
|
|
26
|
+
cls.register_processors(config.framework)
|
|
27
|
+
task = Const.KERNEL_DUMP if config.level == "L2" else config.task
|
|
28
|
+
key = (config.framework, task)
|
|
29
|
+
processor_class = cls._data_processor.get(key)
|
|
30
|
+
if not processor_class:
|
|
31
|
+
raise ValueError(f"Processor not found for framework: {config.framework}, task: {config.task}")
|
|
32
|
+
return processor_class(config, data_writer)
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def register_processors(cls, framework):
|
|
36
|
+
if framework == Const.PT_FRAMEWORK:
|
|
37
|
+
from .pytorch_processor import (
|
|
38
|
+
StatisticsDataProcessor as PytorchStatisticsDataProcessor,
|
|
39
|
+
TensorDataProcessor as PytorchTensorDataProcessor,
|
|
40
|
+
OverflowCheckDataProcessor as PytorchOverflowCheckDataProcessor,
|
|
41
|
+
FreeBenchmarkDataProcessor as PytorchFreeBenchmarkDataProcessor,
|
|
42
|
+
KernelDumpDataProcessor as PytorchKernelDumpDataProcessor
|
|
43
|
+
)
|
|
44
|
+
from ....pytorch.module_processer import ModuleProcesser
|
|
45
|
+
cls.register_processor(Const.PT_FRAMEWORK, Const.STATISTICS, PytorchStatisticsDataProcessor)
|
|
46
|
+
cls.register_processor(Const.PT_FRAMEWORK, Const.TENSOR, PytorchTensorDataProcessor)
|
|
47
|
+
cls.register_processor(Const.PT_FRAMEWORK, Const.OVERFLOW_CHECK, PytorchOverflowCheckDataProcessor)
|
|
48
|
+
cls.register_processor(Const.PT_FRAMEWORK, Const.FREE_BENCHMARK, PytorchFreeBenchmarkDataProcessor)
|
|
49
|
+
cls.register_processor(Const.PT_FRAMEWORK, Const.KERNEL_DUMP, PytorchKernelDumpDataProcessor)
|
|
50
|
+
cls.register_module_processor(Const.PT_FRAMEWORK, ModuleProcesser)
|
|
51
|
+
elif framework == Const.MS_FRAMEWORK:
|
|
52
|
+
from .mindspore_processor import (
|
|
53
|
+
StatisticsDataProcessor as MindsporeStatisticsDataProcessor,
|
|
54
|
+
TensorDataProcessor as MindsporeTensorDataProcessor,
|
|
55
|
+
OverflowCheckDataProcessor as MindsporeOverflowCheckDataProcessor
|
|
56
|
+
)
|
|
57
|
+
cls.register_processor(Const.MS_FRAMEWORK, Const.STATISTICS, MindsporeStatisticsDataProcessor)
|
|
58
|
+
cls.register_processor(Const.MS_FRAMEWORK, Const.TENSOR, MindsporeTensorDataProcessor)
|
|
59
|
+
cls.register_processor(Const.MS_FRAMEWORK, Const.OVERFLOW_CHECK, MindsporeOverflowCheckDataProcessor)
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Copyright 2024 Huawei Technologies Co., Ltd
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ============================================================================
|
|
15
|
+
|
|
16
|
+
import zlib
|
|
17
|
+
|
|
18
|
+
import mindspore as ms
|
|
19
|
+
from mindspore import mint, ops
|
|
20
|
+
import numpy as np
|
|
21
|
+
|
|
22
|
+
from msprobe.core.common.const import Const
|
|
23
|
+
from msprobe.core.data_dump.data_processor.base import (BaseDataProcessor, TensorStatInfo,
|
|
24
|
+
ModuleForwardInputsOutputs, ModuleBackwardInputsOutputs)
|
|
25
|
+
from msprobe.core.common.file_utils import path_len_exceeds_limit
|
|
26
|
+
from msprobe.mindspore.common.utils import convert_bf16_to_fp32, save_tensor_as_npy
|
|
27
|
+
from msprobe.mindspore.common.log import logger
|
|
28
|
+
from msprobe.mindspore.dump.hook_cell.api_registry import api_register
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class MindsporeDataProcessor(BaseDataProcessor):
|
|
32
|
+
mindspore_special_type = tuple([ms.Tensor])
|
|
33
|
+
|
|
34
|
+
def __init__(self, config, data_writer):
|
|
35
|
+
super().__init__(config, data_writer)
|
|
36
|
+
self.mindspore_object_key = {
|
|
37
|
+
"dtype": self.analyze_dtype_in_kwargs
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@staticmethod
|
|
41
|
+
def get_md5_for_tensor(x):
|
|
42
|
+
x = convert_bf16_to_fp32(x)
|
|
43
|
+
tensor_bytes = x.asnumpy().tobytes()
|
|
44
|
+
crc32_hash = zlib.crc32(tensor_bytes)
|
|
45
|
+
return f"{crc32_hash:08x}"
|
|
46
|
+
|
|
47
|
+
@staticmethod
|
|
48
|
+
def analyze_dtype_in_kwargs(element):
|
|
49
|
+
return {"type": "mindspore.dtype", "value": str(element)}
|
|
50
|
+
|
|
51
|
+
@classmethod
|
|
52
|
+
def get_special_types(cls):
|
|
53
|
+
return super().get_special_types() + cls.mindspore_special_type
|
|
54
|
+
|
|
55
|
+
def get_stat_info(self, data):
|
|
56
|
+
tensor_stat = TensorStatInfo()
|
|
57
|
+
if data.numel() == 0:
|
|
58
|
+
return tensor_stat
|
|
59
|
+
elif data.dtype == ms.bool_:
|
|
60
|
+
data_np = data.asnumpy()
|
|
61
|
+
tensor_stat.max = np.max(data_np).item()
|
|
62
|
+
tensor_stat.min = np.min(data_np).item()
|
|
63
|
+
elif not data.shape:
|
|
64
|
+
tensor_stat.max = tensor_stat.min = tensor_stat.mean = tensor_stat.norm = data.item()
|
|
65
|
+
elif data.dtype == ms.complex64 or data.dtype == ms.complex128:
|
|
66
|
+
data_abs = np.abs(data.asnumpy())
|
|
67
|
+
tensor_stat.max = np.max(data_abs).item()
|
|
68
|
+
tensor_stat.min = np.min(data_abs).item()
|
|
69
|
+
tensor_stat.mean = np.mean(data_abs).item()
|
|
70
|
+
tensor_stat.norm = np.linalg.norm(data_abs).item()
|
|
71
|
+
else:
|
|
72
|
+
if data.dtype == ms.bfloat16 or not ops.is_floating_point(data):
|
|
73
|
+
data = data.to(ms.float32)
|
|
74
|
+
api_register.norm_inner_op_set_ori_func()
|
|
75
|
+
get_max_value = api_register.mint_ops_ori_attr.get("max", mint.max)
|
|
76
|
+
get_min_value = api_register.mint_ops_ori_attr.get("min", mint.min)
|
|
77
|
+
get_mean_value = api_register.mint_ops_ori_attr.get("mean", mint.mean)
|
|
78
|
+
get_norm_value = api_register.functional_ori_attr.get("norm", ops.norm)
|
|
79
|
+
tensor_stat.max = get_max_value(data).item()
|
|
80
|
+
tensor_stat.min = get_min_value(data).item()
|
|
81
|
+
tensor_stat.mean = get_mean_value(data).item()
|
|
82
|
+
tensor_stat.norm = get_norm_value(data).item()
|
|
83
|
+
api_register.norm_inner_op_set_hook_func()
|
|
84
|
+
return tensor_stat
|
|
85
|
+
|
|
86
|
+
def analyze_single_element(self, element, suffix_stack):
|
|
87
|
+
if suffix_stack and suffix_stack[-1] in self.mindspore_object_key:
|
|
88
|
+
return self.mindspore_object_key[suffix_stack[-1]](element)
|
|
89
|
+
|
|
90
|
+
converted_numpy, numpy_type = self._convert_numpy_to_builtin(element)
|
|
91
|
+
if converted_numpy is not element:
|
|
92
|
+
return self._analyze_numpy(converted_numpy, numpy_type)
|
|
93
|
+
if isinstance(element, ms.Tensor):
|
|
94
|
+
return self._analyze_tensor(element, Const.SEP.join(suffix_stack))
|
|
95
|
+
|
|
96
|
+
if isinstance(element, (bool, int, float, str, slice, type(Ellipsis))):
|
|
97
|
+
return self._analyze_builtin(element)
|
|
98
|
+
return {}
|
|
99
|
+
|
|
100
|
+
def _analyze_tensor(self, tensor, suffix):
|
|
101
|
+
tensor_stat = self.get_stat_info(tensor)
|
|
102
|
+
tensor_json = {
|
|
103
|
+
'type': 'mindspore.Tensor',
|
|
104
|
+
'dtype': str(tensor.dtype),
|
|
105
|
+
'shape': tensor.shape,
|
|
106
|
+
'Max': self.transfer_type(tensor_stat.max),
|
|
107
|
+
'Min': self.transfer_type(tensor_stat.min),
|
|
108
|
+
'Mean': self.transfer_type(tensor_stat.mean),
|
|
109
|
+
'Norm': self.transfer_type(tensor_stat.norm),
|
|
110
|
+
}
|
|
111
|
+
if self.config.summary_mode == Const.MD5:
|
|
112
|
+
tensor_md5 = self.get_md5_for_tensor(tensor)
|
|
113
|
+
tensor_json.update({Const.MD5: tensor_md5})
|
|
114
|
+
return tensor_json
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class StatisticsDataProcessor(MindsporeDataProcessor):
|
|
118
|
+
pass
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class TensorDataProcessor(MindsporeDataProcessor):
|
|
122
|
+
def _analyze_tensor(self, tensor, suffix):
|
|
123
|
+
dump_data_name, file_path = self.get_save_file_path(suffix)
|
|
124
|
+
single_arg = super()._analyze_tensor(tensor, suffix)
|
|
125
|
+
single_arg.update({"data_name": dump_data_name})
|
|
126
|
+
save_tensor_as_npy(tensor, file_path)
|
|
127
|
+
return single_arg
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
class OverflowCheckDataProcessor(MindsporeDataProcessor):
|
|
131
|
+
__slots__ = ["cached_tensors_and_file_paths"]
|
|
132
|
+
|
|
133
|
+
def __init__(self, config, data_writer):
|
|
134
|
+
super().__init__(config, data_writer)
|
|
135
|
+
self.has_overflow = False
|
|
136
|
+
self.cached_tensors_and_file_paths = {}
|
|
137
|
+
self.real_overflow_nums = 0
|
|
138
|
+
self.overflow_nums = config.overflow_nums
|
|
139
|
+
|
|
140
|
+
@property
|
|
141
|
+
def is_terminated(self):
|
|
142
|
+
if self.overflow_nums == -1:
|
|
143
|
+
return False
|
|
144
|
+
if self.real_overflow_nums >= self.overflow_nums:
|
|
145
|
+
return True
|
|
146
|
+
return False
|
|
147
|
+
|
|
148
|
+
def analyze_forward(self, name, module, module_input_output: ModuleForwardInputsOutputs):
|
|
149
|
+
self.has_overflow = False
|
|
150
|
+
api_info_struct = super().analyze_forward(name, module, module_input_output)
|
|
151
|
+
self.maybe_save_overflow_data()
|
|
152
|
+
return api_info_struct if self.has_overflow else None
|
|
153
|
+
|
|
154
|
+
def analyze_backward(self, name, module, module_input_output: ModuleBackwardInputsOutputs):
|
|
155
|
+
self.has_overflow = False
|
|
156
|
+
api_info_struct = super().analyze_backward(name, module, module_input_output)
|
|
157
|
+
self.maybe_save_overflow_data()
|
|
158
|
+
return api_info_struct if self.has_overflow else None
|
|
159
|
+
|
|
160
|
+
def maybe_save_overflow_data(self):
|
|
161
|
+
if self.has_overflow:
|
|
162
|
+
for file_path, tensor in self.cached_tensors_and_file_paths.items():
|
|
163
|
+
save_tensor_as_npy(tensor, file_path)
|
|
164
|
+
self.real_overflow_nums += 1
|
|
165
|
+
if self.overflow_nums != -1 and self.real_overflow_nums >= self.overflow_nums:
|
|
166
|
+
logger.info(f"[{Const.TOOL_NAME}] 超过预设溢出次数 当前溢出次数: {self.real_overflow_nums}")
|
|
167
|
+
self.cached_tensors_and_file_paths = {}
|
|
168
|
+
|
|
169
|
+
def _analyze_maybe_overflow_tensor(self, tensor_json):
|
|
170
|
+
if tensor_json['Max'] is None:
|
|
171
|
+
return
|
|
172
|
+
if np.isinf(tensor_json['Max']) or np.isnan(tensor_json['Max']):
|
|
173
|
+
self.has_overflow = True
|
|
174
|
+
if np.isinf(tensor_json['Min']) or np.isnan(tensor_json['Min']):
|
|
175
|
+
self.has_overflow = True
|
|
176
|
+
|
|
177
|
+
def _analyze_tensor(self, tensor, suffix):
|
|
178
|
+
dump_data_name, file_path = self.get_save_file_path(suffix)
|
|
179
|
+
if not path_len_exceeds_limit(file_path):
|
|
180
|
+
self.cached_tensors_and_file_paths.update({file_path: tensor})
|
|
181
|
+
else:
|
|
182
|
+
logger.warning(f'The file path {file_path} length exceeds limit.')
|
|
183
|
+
single_arg = super()._analyze_tensor(tensor, suffix)
|
|
184
|
+
self._analyze_maybe_overflow_tensor(single_arg)
|
|
185
|
+
single_arg.update({"data_name": dump_data_name})
|
|
186
|
+
return single_arg
|