mindstudio-probe 8.3.2__py3-none-any.whl → 26.0.0a1__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-8.3.2.dist-info → mindstudio_probe-26.0.0a1.dist-info}/METADATA +26 -14
- mindstudio_probe-26.0.0a1.dist-info/RECORD +498 -0
- {mindstudio_probe-8.3.2.dist-info → mindstudio_probe-26.0.0a1.dist-info}/WHEEL +1 -1
- mindstudio_probe-26.0.0a1.dist-info/entry_points.txt +5 -0
- mindstudio_probe-26.0.0a1.dist-info/licenses/LICENSE +124 -0
- mindstudio_probe-26.0.0a1.dist-info/top_level.txt +2 -0
- msprobe/__init__.py +12 -13
- msprobe/config.json +9 -31
- msprobe/core/__init__.py +12 -11
- msprobe/core/acc_check/acc_check_cli.py +145 -0
- msprobe/core/common/const.py +97 -38
- msprobe/core/common/db_manager.py +133 -12
- msprobe/core/common/decorator.py +12 -11
- msprobe/core/common/exceptions.py +12 -11
- msprobe/core/common/file_utils.py +101 -25
- msprobe/core/common/framework_adapter.py +36 -25
- msprobe/core/common/global_lock.py +12 -11
- msprobe/core/common/inplace_op_checker.py +12 -11
- msprobe/core/common/log.py +22 -11
- msprobe/core/common/megatron_utils.py +566 -11
- msprobe/core/common/parallel_state.py +12 -11
- msprobe/core/common/runtime.py +12 -11
- msprobe/core/common/utils.py +41 -41
- msprobe/core/compare/acc_compare.py +361 -104
- msprobe/core/compare/atb_data_compare.py +422 -0
- msprobe/core/compare/auto_compare.py +134 -0
- msprobe/core/compare/check.py +14 -17
- msprobe/core/compare/compare_cli.py +72 -149
- msprobe/core/compare/config.py +12 -13
- msprobe/core/compare/diff_analyze/first_diff_analyze.py +28 -15
- msprobe/core/compare/diff_analyze/ignore_op_list.yaml +3 -0
- msprobe/core/compare/find_first/analyzer.py +18 -18
- msprobe/core/compare/find_first/graph.py +12 -11
- msprobe/core/compare/find_first/utils.py +13 -12
- msprobe/core/compare/indicator_analysis/__init__.py +15 -0
- msprobe/core/compare/indicator_analysis/algorithm.py +363 -0
- msprobe/core/compare/indicator_analysis/api_data.py +141 -0
- msprobe/core/compare/indicator_analysis/calculator.py +181 -0
- msprobe/core/compare/indicator_analysis/utils.py +116 -0
- msprobe/core/compare/layer_mapping/__init__.py +12 -11
- msprobe/core/compare/layer_mapping/data_scope_parser.py +20 -11
- msprobe/core/compare/layer_mapping/layer_mapping.py +14 -13
- msprobe/core/compare/layer_mapping/postprocess_pass.py +13 -11
- msprobe/core/compare/merge_result/merge_result.py +12 -11
- msprobe/core/compare/merge_result/merge_result_cli.py +12 -11
- msprobe/core/compare/merge_result/utils.py +12 -11
- msprobe/core/compare/multiprocessing_compute.py +13 -14
- msprobe/core/compare/npy_compare.py +13 -11
- msprobe/core/compare/offline_data_compare.py +160 -0
- msprobe/core/compare/stats_diff_calc.py +39 -0
- msprobe/core/compare/torchair_acc_cmp.py +764 -0
- msprobe/core/compare/torchair_cmp_utils.py +338 -0
- msprobe/core/compare/utils.py +140 -49
- msprobe/core/config_check/__init__.py +12 -11
- msprobe/core/config_check/checkers/__init__.py +12 -11
- msprobe/core/config_check/checkers/base_checker.py +15 -14
- msprobe/core/config_check/checkers/dataset_checker.py +13 -12
- msprobe/core/config_check/checkers/env_args_checker.py +13 -12
- msprobe/core/config_check/checkers/hyperparameter_checker.py +16 -15
- msprobe/core/config_check/checkers/pip_checker.py +15 -15
- msprobe/core/config_check/checkers/random_checker.py +13 -12
- msprobe/core/config_check/checkers/weights_checker.py +14 -12
- msprobe/core/config_check/ckpt_compare/ckpt_comparator.py +13 -17
- msprobe/core/config_check/ckpt_compare/megatron_loader.py +13 -12
- msprobe/core/config_check/ckpt_compare/metrics.py +12 -11
- msprobe/core/config_check/config_check_cli.py +18 -17
- msprobe/core/config_check/config_checker.py +16 -14
- msprobe/core/config_check/resource/dependency.yaml +15 -12
- msprobe/core/config_check/resource/env.yaml +12 -11
- msprobe/core/config_check/utils/hyperparameter_parser.py +12 -11
- msprobe/core/config_check/utils/utils.py +12 -11
- msprobe/core/{data_dump → dump/api_dump}/api_registry.py +12 -11
- msprobe/core/{common_config.py → dump/common_config.py} +13 -24
- msprobe/core/dump/data_dump/data_collector.py +257 -0
- msprobe/core/{data_dump → dump/data_dump}/data_processor/base.py +45 -36
- msprobe/core/{data_dump → dump/data_dump}/data_processor/factory.py +33 -25
- msprobe/core/{data_dump → dump/data_dump}/data_processor/mindspore_processor.py +37 -113
- msprobe/core/{data_dump → dump/data_dump}/data_processor/pytorch_processor.py +364 -131
- msprobe/core/{data_dump → dump/data_dump}/json_writer.py +24 -31
- msprobe/core/{data_dump → dump/data_dump}/scope.py +12 -13
- msprobe/core/{debugger → dump/debugger}/precision_debugger.py +15 -23
- msprobe/core/dump/dump2db/db_utils.py +215 -0
- msprobe/core/dump/dump2db/dump2db.py +409 -0
- msprobe/core/{hook_manager.py → dump/hook_manager.py} +38 -87
- msprobe/core/dump/kernel_dump/kernel_config.py +34 -0
- msprobe/core/{service.py → dump/service.py} +43 -27
- msprobe/core/install_deps/install_deps.py +51 -0
- msprobe/core/monitor/anomaly_processor.py +13 -11
- msprobe/core/monitor/csv2db.py +73 -93
- msprobe/core/monitor/db_utils.py +140 -205
- msprobe/core/monitor/utils.py +18 -17
- msprobe/core/monitor_v2/__init__.py +20 -0
- msprobe/core/monitor_v2/base.py +83 -0
- msprobe/core/monitor_v2/cc.py +287 -0
- msprobe/core/monitor_v2/factory.py +81 -0
- msprobe/core/monitor_v2/module.py +201 -0
- msprobe/core/monitor_v2/optimizer.py +245 -0
- msprobe/core/monitor_v2/param.py +154 -0
- msprobe/core/monitor_v2/trainer.py +326 -0
- msprobe/core/monitor_v2/utils.py +122 -0
- msprobe/core/monitor_v2/weight_grad.py +419 -0
- msprobe/core/monitor_v2/writer.py +162 -0
- msprobe/core/overflow_check/abnormal_scene.py +12 -11
- msprobe/core/overflow_check/api_info.py +12 -11
- msprobe/core/overflow_check/checker.py +12 -11
- msprobe/core/overflow_check/filter.py +13 -11
- msprobe/core/overflow_check/level.py +12 -11
- msprobe/core/overflow_check/utils.py +12 -11
- msprobe/core/single_save/single_comparator.py +12 -11
- msprobe/core/single_save/single_saver.py +12 -11
- msprobe/infer/__init__.py +16 -0
- msprobe/infer/offline/__init__.py +16 -0
- msprobe/infer/offline/compare/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/adapter_cli/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/adapter_cli/args_adapter.py +46 -0
- msprobe/infer/offline/compare/msquickcmp/atc/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/atc/atc_utils.py +98 -0
- msprobe/infer/offline/compare/msquickcmp/cmp_process.py +328 -0
- msprobe/infer/offline/compare/msquickcmp/common/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/common/args_check.py +112 -0
- msprobe/infer/offline/compare/msquickcmp/common/convert.py +74 -0
- msprobe/infer/offline/compare/msquickcmp/common/dump_data.py +121 -0
- msprobe/infer/offline/compare/msquickcmp/common/dynamic_argument_bean.py +39 -0
- msprobe/infer/offline/compare/msquickcmp/common/utils.py +669 -0
- msprobe/infer/offline/compare/msquickcmp/config.ini +6 -0
- msprobe/infer/offline/compare/msquickcmp/dump/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/dump/args_adapter.py +50 -0
- msprobe/infer/offline/compare/msquickcmp/dump/dump_process.py +91 -0
- msprobe/infer/offline/compare/msquickcmp/install_aclruntime_aisbench.sh +180 -0
- msprobe/infer/offline/compare/msquickcmp/main.py +199 -0
- msprobe/infer/offline/compare/msquickcmp/net_compare/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/net_compare/net_compare.py +277 -0
- msprobe/infer/offline/compare/msquickcmp/npu/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/npu/npu_dump_data.py +558 -0
- msprobe/infer/offline/compare/msquickcmp/npu/om_parser.py +416 -0
- msprobe/infer/offline/compare/msquickcmp/onnx_model/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/onnx_model/onnx_dump_data.py +374 -0
- msprobe/infer/utils/__init__.py +15 -0
- msprobe/infer/utils/acc_cmp.py +94 -0
- msprobe/infer/utils/check/__init__.py +37 -0
- msprobe/infer/utils/check/args_checker.py +35 -0
- msprobe/infer/utils/check/checker.py +227 -0
- msprobe/infer/utils/check/dict_checker.py +78 -0
- msprobe/infer/utils/check/func_wrapper.py +96 -0
- msprobe/infer/utils/check/list_checker.py +56 -0
- msprobe/infer/utils/check/number_checker.py +64 -0
- msprobe/infer/utils/check/obj_checker.py +41 -0
- msprobe/infer/utils/check/path_checker.py +249 -0
- msprobe/infer/utils/check/rule.py +126 -0
- msprobe/infer/utils/check/string_checker.py +66 -0
- msprobe/infer/utils/cmp_algorithm.py +261 -0
- msprobe/infer/utils/constants.py +112 -0
- msprobe/infer/utils/file_open_check.py +337 -0
- msprobe/infer/utils/util.py +177 -0
- msprobe/mindspore/__init__.py +14 -13
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +14 -13
- msprobe/mindspore/api_accuracy_checker/api_info.py +12 -11
- msprobe/mindspore/api_accuracy_checker/api_runner.py +12 -11
- msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +12 -11
- msprobe/mindspore/api_accuracy_checker/bench_functions/flash_attention_score.py +12 -11
- msprobe/mindspore/api_accuracy_checker/bench_functions/fusion_operator.py +12 -11
- msprobe/mindspore/api_accuracy_checker/checker_support_api.yaml +12 -11
- msprobe/mindspore/api_accuracy_checker/cmd_parser.py +15 -14
- msprobe/mindspore/api_accuracy_checker/compute_element.py +12 -11
- msprobe/mindspore/api_accuracy_checker/data_manager.py +13 -11
- msprobe/mindspore/api_accuracy_checker/main.py +12 -11
- msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +14 -12
- msprobe/mindspore/api_accuracy_checker/multi_data_manager.py +13 -11
- msprobe/mindspore/api_accuracy_checker/torch_mindtorch_importer.py +12 -11
- msprobe/mindspore/api_accuracy_checker/type_mapping.py +12 -11
- msprobe/mindspore/api_accuracy_checker/utils.py +12 -11
- msprobe/mindspore/common/const.py +15 -74
- msprobe/mindspore/common/log.py +12 -11
- msprobe/mindspore/common/utils.py +30 -15
- msprobe/mindspore/compare/common_dir_compare.py +21 -23
- msprobe/mindspore/compare/distributed_compare.py +18 -16
- msprobe/mindspore/compare/ms_compare.py +14 -14
- msprobe/mindspore/compare/ms_graph_compare.py +26 -20
- msprobe/mindspore/compare/utils.py +14 -12
- msprobe/mindspore/{cell_processor.py → dump/cell_processor.py} +15 -14
- msprobe/mindspore/{debugger → dump/debugger}/debugger_config.py +12 -30
- msprobe/mindspore/{debugger → dump/debugger}/precision_debugger.py +43 -45
- msprobe/mindspore/dump/{cell_dump_process.py → dump_processor/cell_dump_process.py} +31 -17
- msprobe/mindspore/dump/{cell_dump_with_insert_gradient.py → dump_processor/cell_dump_with_insert_gradient.py} +18 -14
- msprobe/mindspore/dump/{dump_tool_factory.py → dump_processor/dump_tool_factory.py} +16 -15
- msprobe/mindspore/dump/{graph_mode_cell_dump.py → dump_processor/graph_mode_cell_dump.py} +16 -15
- msprobe/mindspore/dump/{graph_tensor_dump.py → dump_processor/graph_tensor_dump.py} +134 -133
- msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/api_register.py +15 -14
- msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/hook_cell.py +12 -11
- msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/ms_hook_manager.py +47 -20
- msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/primitive_hooks.py +14 -13
- msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/support_wrap_ops.yaml +13 -11
- msprobe/mindspore/dump/{jit_dump.py → dump_processor/jit_dump.py} +14 -13
- msprobe/mindspore/dump/{kernel_graph_dump.py → dump_processor/kernel_graph_dump.py} +13 -12
- msprobe/mindspore/dump/{kernel_kbyk_dump.py → dump_processor/kernel_kbyk_dump.py} +13 -12
- msprobe/mindspore/{exception_dump → dump/exception_dump}/exception_dump_tool_factory.py +14 -13
- msprobe/mindspore/{exception_dump → dump/exception_dump}/kernel_graph_exception_dump.py +13 -12
- msprobe/mindspore/{mindspore_service.py → dump/mindspore_service.py} +18 -17
- msprobe/mindspore/dump/mindtorch/__init__.py +19 -0
- msprobe/mindspore/dump/ms_config.py +105 -0
- msprobe/mindspore/{overflow_check → dump/overflow_check}/kernel_graph_overflow_check.py +13 -12
- msprobe/mindspore/{overflow_check → dump/overflow_check}/overflow_check_tool_factory.py +14 -13
- msprobe/mindspore/dump/task_handler_factory.py +43 -0
- msprobe/mindspore/monitor/common_func.py +12 -11
- msprobe/mindspore/monitor/data_writers.py +12 -11
- msprobe/mindspore/monitor/distributed/wrap_distributed.py +93 -39
- msprobe/mindspore/monitor/features.py +12 -11
- msprobe/mindspore/monitor/module_hook.py +19 -22
- msprobe/mindspore/monitor/optimizer_collect.py +29 -25
- msprobe/mindspore/monitor/utils.py +13 -11
- msprobe/msaccucmp/advisor/__init__.py +16 -0
- msprobe/msaccucmp/advisor/advisor_const.py +65 -0
- msprobe/msaccucmp/advisor/advisor_result.py +73 -0
- msprobe/msaccucmp/advisor/compare_advisor.py +99 -0
- msprobe/msaccucmp/advisor/input_advisor.py +66 -0
- msprobe/msaccucmp/advisor/node_advisor.py +68 -0
- msprobe/msaccucmp/advisor/overflow_advisor.py +58 -0
- msprobe/msaccucmp/algorithm_manager/__init__.py +16 -0
- msprobe/msaccucmp/algorithm_manager/algorithm_manager.py +464 -0
- msprobe/msaccucmp/algorithm_manager/algorithm_parameter.py +42 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_AccumulatedRelativeError.py +46 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_CosineSimilarity.py +58 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_KullbackLeiblerDivergence.py +84 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_MaxAbsoluteError.py +41 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_MaxRelativeError.py +46 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_MeanAbsoluteError.py +41 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_MeanRelativeError.py +46 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_RelativeEuclideanDistance.py +46 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_RootMeanSquareError.py +40 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_StandardDeviation.py +47 -0
- msprobe/msaccucmp/cmp_utils/__init__.py +16 -0
- msprobe/msaccucmp/cmp_utils/common.py +113 -0
- msprobe/msaccucmp/cmp_utils/constant/__init__.py +16 -0
- msprobe/msaccucmp/cmp_utils/constant/compare_error.py +81 -0
- msprobe/msaccucmp/cmp_utils/constant/const_manager.py +530 -0
- msprobe/msaccucmp/cmp_utils/file_utils.py +497 -0
- msprobe/msaccucmp/cmp_utils/log.py +257 -0
- msprobe/msaccucmp/cmp_utils/multi_process/__init__.py +16 -0
- msprobe/msaccucmp/cmp_utils/multi_process/multi_convert_process.py +140 -0
- msprobe/msaccucmp/cmp_utils/multi_process/progress.py +78 -0
- msprobe/msaccucmp/cmp_utils/path_check.py +274 -0
- msprobe/msaccucmp/cmp_utils/reg_manager.py +98 -0
- msprobe/msaccucmp/cmp_utils/tlv_parse.py +279 -0
- msprobe/msaccucmp/cmp_utils/utils.py +356 -0
- msprobe/msaccucmp/cmp_utils/utils_type.py +63 -0
- msprobe/msaccucmp/compare_vector.py +48 -0
- msprobe/msaccucmp/conversion/__init__.py +16 -0
- msprobe/msaccucmp/conversion/data_conversion.py +277 -0
- msprobe/msaccucmp/conversion/dtype_conversion.py +99 -0
- msprobe/msaccucmp/conversion/shape_format_conversion.py +477 -0
- msprobe/msaccucmp/conversion/tensor_conversion.py +369 -0
- msprobe/msaccucmp/dump_data_conversion.py +46 -0
- msprobe/msaccucmp/dump_parse/__init__.py +16 -0
- msprobe/msaccucmp/dump_parse/big_dump_data.py +317 -0
- msprobe/msaccucmp/dump_parse/dump.py +423 -0
- msprobe/msaccucmp/dump_parse/dump_data_object.py +322 -0
- msprobe/msaccucmp/dump_parse/dump_data_parser.py +436 -0
- msprobe/msaccucmp/dump_parse/dump_utils.py +246 -0
- msprobe/msaccucmp/dump_parse/ffts_parser.py +137 -0
- msprobe/msaccucmp/dump_parse/mapping.py +62 -0
- msprobe/msaccucmp/dump_parse/nano_dump_data.py +392 -0
- msprobe/msaccucmp/dump_parse/proto_dump_data.py +308 -0
- msprobe/msaccucmp/dump_parser.py +90 -0
- msprobe/msaccucmp/format_manager/__init__.py +16 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_NZ_to_NCHW.py +53 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_NZ_to_ND.py +52 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_NZ_to_NHWC.py +53 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_Z_to_HWCN.py +47 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_Z_to_NCHW.py +47 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_HWCN_to_FRACTAL_Z.py +89 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_HWCN_to_NCHW.py +37 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_HWCN_to_NHWC.py +37 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NC1HWC0_to_HWCN.py +43 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NC1HWC0_to_NCHW.py +48 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NC1HWC0_to_NHWC.py +43 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NCHW_to_FRACTAL_Z.py +87 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NCHW_to_NHWC.py +37 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NDC1HWC0_to_NCDHW.py +48 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NDC1HWC0_to_ND.py +44 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NHWC_to_FRACTAL_Z.py +87 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NHWC_to_HWCN.py +37 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NHWC_to_NCHW.py +37 -0
- msprobe/msaccucmp/format_manager/format_manager.py +307 -0
- msprobe/msaccucmp/inplace_layer_process.py +186 -0
- msprobe/msaccucmp/msaccucmp.py +532 -0
- msprobe/msaccucmp/mscmp_advisor.py +128 -0
- msprobe/msaccucmp/overflow/__init__.py +16 -0
- msprobe/msaccucmp/overflow/overflow_analyse.py +305 -0
- msprobe/msaccucmp/overflow/overflow_detection.py +143 -0
- msprobe/msaccucmp/pytorch_cmp/__init__.py +16 -0
- msprobe/msaccucmp/pytorch_cmp/compare_pytorch.py +389 -0
- msprobe/msaccucmp/pytorch_cmp/hdf5_parser.py +377 -0
- msprobe/msaccucmp/pytorch_cmp/pytorch_dump_data.py +461 -0
- msprobe/msaccucmp/shape_conversion.py +41 -0
- msprobe/msaccucmp/vector_cmp/__init__.py +16 -0
- msprobe/msaccucmp/vector_cmp/batch_compare.py +197 -0
- msprobe/msaccucmp/vector_cmp/compare_detail/__init__.py +16 -0
- msprobe/msaccucmp/vector_cmp/compare_detail/compare_detail.py +245 -0
- msprobe/msaccucmp/vector_cmp/compare_detail/detail.py +182 -0
- msprobe/msaccucmp/vector_cmp/compare_detail/detail_writer.py +580 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/__init__.py +16 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/compare_fusion_op.py +588 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/compare_npu_vs_npu.py +339 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/compare_result.py +326 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/compare_rule.py +156 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/fusion_op.py +204 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/fusion_rule_parser.py +635 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/quant_filter.py +187 -0
- msprobe/msaccucmp/vector_cmp/range_manager/__init__.py +16 -0
- msprobe/msaccucmp/vector_cmp/range_manager/range_manager.py +100 -0
- msprobe/msaccucmp/vector_cmp/range_manager/range_mode.py +94 -0
- msprobe/msaccucmp/vector_cmp/range_manager/select_mode.py +86 -0
- msprobe/msaccucmp/vector_cmp/vector_comparison.py +535 -0
- msprobe/msprobe.py +101 -130
- msprobe/overflow_check/__init__.py +15 -0
- msprobe/{nan_analyze → overflow_check}/analyzer.py +38 -27
- msprobe/{nan_analyze → overflow_check}/graph.py +30 -27
- msprobe/{nan_analyze → overflow_check}/utils.py +15 -14
- msprobe/pytorch/__init__.py +20 -14
- msprobe/pytorch/aclgraph_dump/__init__.py +45 -0
- msprobe/pytorch/aclgraph_dump/_meta.py +26 -0
- msprobe/pytorch/api_accuracy_checker/{run_ut/run_ut.py → acc_check/acc_check.py} +50 -45
- msprobe/pytorch/api_accuracy_checker/{run_ut/run_ut_utils.py → acc_check/acc_check_utils.py} +201 -30
- msprobe/pytorch/api_accuracy_checker/{run_ut → acc_check}/data_generate.py +56 -16
- msprobe/pytorch/api_accuracy_checker/{run_ut/multi_run_ut.py → acc_check/multi_acc_check.py} +32 -47
- msprobe/pytorch/api_accuracy_checker/{run_ut → acc_check}/run_overflow_check.py +19 -18
- msprobe/pytorch/api_accuracy_checker/common/config.py +22 -20
- msprobe/pytorch/api_accuracy_checker/common/utils.py +72 -13
- msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +41 -11
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +23 -14
- msprobe/pytorch/api_accuracy_checker/compare/compare.py +45 -32
- msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +12 -11
- msprobe/pytorch/api_accuracy_checker/compare/compare_input.py +14 -12
- msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +14 -12
- msprobe/pytorch/api_accuracy_checker/precision_standard/absolute_threshold.py +12 -11
- msprobe/pytorch/api_accuracy_checker/precision_standard/accumulative_error_compare.py +12 -11
- msprobe/pytorch/api_accuracy_checker/precision_standard/base_standard.py +21 -19
- msprobe/pytorch/api_accuracy_checker/precision_standard/benchmark_compare.py +14 -13
- msprobe/pytorch/api_accuracy_checker/precision_standard/binary_consistency.py +12 -11
- msprobe/pytorch/api_accuracy_checker/precision_standard/standard_config.py +60 -11
- msprobe/pytorch/api_accuracy_checker/precision_standard/standard_register.py +27 -16
- msprobe/pytorch/api_accuracy_checker/precision_standard/thousandth_standard.py +13 -11
- msprobe/pytorch/api_accuracy_checker/precision_standard/ulp_compare.py +39 -18
- msprobe/pytorch/bench_functions/__init__.py +12 -11
- msprobe/pytorch/bench_functions/apply_adam.py +12 -11
- msprobe/pytorch/bench_functions/apply_adam_w.py +12 -11
- msprobe/pytorch/bench_functions/confusion_transpose.py +12 -11
- msprobe/pytorch/bench_functions/fast_gelu.py +12 -11
- msprobe/pytorch/bench_functions/group_norm_silu.py +12 -11
- msprobe/pytorch/bench_functions/layer_norm_eval.py +12 -11
- msprobe/pytorch/bench_functions/linear.py +12 -11
- msprobe/pytorch/bench_functions/matmul_backward.py +12 -11
- msprobe/pytorch/bench_functions/mish.py +12 -11
- msprobe/pytorch/bench_functions/moe_gating_top_k_softmax.py +12 -11
- msprobe/pytorch/bench_functions/npu_fusion_attention.py +12 -11
- msprobe/pytorch/bench_functions/rms_norm.py +12 -11
- msprobe/pytorch/bench_functions/rotary_mul.py +12 -11
- msprobe/pytorch/bench_functions/scaled_mask_softmax.py +12 -11
- msprobe/pytorch/bench_functions/sort_v2.py +12 -11
- msprobe/pytorch/bench_functions/swiglu.py +12 -11
- msprobe/pytorch/common/__init__.py +12 -11
- msprobe/pytorch/common/log.py +12 -11
- msprobe/pytorch/common/parse_json.py +12 -11
- msprobe/pytorch/common/utils.py +52 -19
- msprobe/pytorch/compare/distributed_compare.py +13 -13
- msprobe/pytorch/compare/match.py +12 -11
- msprobe/pytorch/compare/pt_compare.py +14 -20
- msprobe/pytorch/compare/pt_diff_analyze.py +12 -11
- msprobe/pytorch/compare/utils.py +12 -11
- msprobe/pytorch/{hook_module → dump/api_dump}/api_register.py +18 -16
- msprobe/pytorch/{hook_module → dump/api_dump}/hook_module.py +14 -13
- msprobe/pytorch/{hook_module → dump/api_dump}/pt_hook_manager.py +68 -23
- msprobe/pytorch/{hook_module → dump/api_dump}/register_optimizer_hook.py +13 -11
- msprobe/pytorch/{hook_module → dump/api_dump}/script_wrapper.py +17 -14
- msprobe/pytorch/{hook_module → dump/api_dump}/utils.py +12 -11
- msprobe/pytorch/{debugger → dump/debugger}/debugger_config.py +23 -38
- msprobe/pytorch/dump/debugger/precision_debugger.py +130 -0
- msprobe/pytorch/{function_factory.py → dump/function_factory.py} +12 -11
- msprobe/pytorch/dump/module_dump/hook_wrapper.py +17 -13
- msprobe/pytorch/dump/module_dump/module_dump.py +16 -15
- msprobe/pytorch/dump/module_dump/{module_processer.py → module_processor.py} +54 -42
- msprobe/pytorch/dump/pt_config.py +128 -0
- msprobe/pytorch/{pytorch_service.py → dump/pytorch_service.py} +22 -21
- msprobe/pytorch/monitor/csv2tb.py +13 -11
- msprobe/pytorch/monitor/data_writers.py +13 -11
- msprobe/pytorch/monitor/distributed/wrap_distributed.py +13 -11
- msprobe/pytorch/monitor/features.py +12 -11
- msprobe/pytorch/monitor/module_hook.py +67 -59
- msprobe/pytorch/monitor/module_metric.py +13 -11
- msprobe/pytorch/monitor/optimizer_collect.py +37 -35
- msprobe/pytorch/monitor/utils.py +13 -11
- msprobe/pytorch/monitor/visualizer.py +12 -11
- msprobe/pytorch/torchair_dump/__init__.py +17 -0
- msprobe/pytorch/torchair_dump/torchair_dump.py +114 -0
- msprobe/scripts/atb/config_example.json +10 -0
- msprobe/scripts/atb/load_atb_probe.sh +101 -0
- msprobe/scripts/atb/unload_atb_probe.sh +27 -0
- msprobe/scripts/build_msaccucmp.sh +186 -0
- msprobe/scripts/conf/help.info +6 -0
- msprobe/scripts/conf/version.info +3 -0
- msprobe/scripts/run_script/common.sh +538 -0
- msprobe/scripts/run_script/main_msaccucmp.sh +232 -0
- msprobe/visualization/__init__.py +12 -11
- msprobe/visualization/builder/__init__.py +12 -11
- msprobe/visualization/builder/graph_builder.py +45 -30
- msprobe/visualization/builder/graph_merger.py +53 -32
- msprobe/visualization/builder/msprobe_adapter.py +34 -44
- msprobe/visualization/compare/__init__.py +12 -11
- msprobe/visualization/compare/graph_comparator.py +63 -51
- msprobe/visualization/compare/mode_adapter.py +28 -113
- msprobe/visualization/db_utils.py +133 -22
- msprobe/visualization/graph/__init__.py +12 -11
- msprobe/visualization/graph/base_node.py +15 -27
- msprobe/visualization/graph/distributed_analyzer.py +97 -40
- msprobe/visualization/graph/graph.py +14 -16
- msprobe/visualization/graph/node_colors.py +34 -31
- msprobe/visualization/graph/node_op.py +12 -11
- msprobe/visualization/graph_service.py +580 -205
- msprobe/visualization/utils.py +278 -31
- tb_graph_ascend/secure_build.py +175 -0
- tb_graph_ascend/server/__init__.py +15 -0
- tb_graph_ascend/server/app/__init__.py +15 -0
- tb_graph_ascend/server/app/model/__init__.py +15 -0
- tb_graph_ascend/server/app/model/hierarchy.py +348 -0
- tb_graph_ascend/server/app/model/layout_hierarchy_model.py +69 -0
- tb_graph_ascend/server/app/model/match_nodes_model.py +573 -0
- tb_graph_ascend/server/app/repositories/__init__.py +15 -0
- tb_graph_ascend/server/app/repositories/graph_repo_base.py +32 -0
- tb_graph_ascend/server/app/repositories/graph_repo_db.py +879 -0
- tb_graph_ascend/server/app/repositories/graph_repo_vis.py +83 -0
- tb_graph_ascend/server/app/service/__init__.py +18 -0
- tb_graph_ascend/server/app/service/graph_service_base.py +158 -0
- tb_graph_ascend/server/app/service/graph_service_db.py +438 -0
- tb_graph_ascend/server/app/service/graph_service_factory.py +54 -0
- tb_graph_ascend/server/app/service/graph_service_vis.py +480 -0
- tb_graph_ascend/server/app/utils/__init__.py +15 -0
- tb_graph_ascend/server/app/utils/constant.py +80 -0
- tb_graph_ascend/server/app/utils/file_check_wrapper.py +46 -0
- tb_graph_ascend/server/app/utils/global_state.py +95 -0
- tb_graph_ascend/server/app/utils/graph_utils.py +661 -0
- tb_graph_ascend/server/app/utils/i18n.py +153 -0
- tb_graph_ascend/server/app/utils/request_method.py +46 -0
- tb_graph_ascend/server/app/views/__init__.py +15 -0
- tb_graph_ascend/server/app/views/graph_views.py +304 -0
- tb_graph_ascend/server/plugin.py +108 -0
- tb_graph_ascend/server/static/index.html +9250 -0
- tb_graph_ascend/server/static/index.js +21 -0
- tb_graph_ascend/setup.py +57 -0
- mindstudio_probe-8.3.2.dist-info/LICENSE +0 -201
- mindstudio_probe-8.3.2.dist-info/RECORD +0 -491
- mindstudio_probe-8.3.2.dist-info/entry_points.txt +0 -2
- mindstudio_probe-8.3.2.dist-info/top_level.txt +0 -1
- msprobe/CMakeLists.txt +0 -5
- msprobe/README.md +0 -203
- msprobe/core/advisor/advisor.py +0 -129
- msprobe/core/advisor/advisor_const.py +0 -58
- msprobe/core/advisor/advisor_result.py +0 -58
- msprobe/core/compare/find_first/data_processor.py +0 -35
- msprobe/core/compare/highlight.py +0 -390
- msprobe/core/data_dump/data_collector.py +0 -356
- msprobe/core/grad_probe/constant.py +0 -90
- msprobe/core/grad_probe/grad_compare.py +0 -187
- msprobe/core/grad_probe/utils.py +0 -105
- msprobe/core/kernel_dump/kernel_config.py +0 -33
- msprobe/docs/01.installation.md +0 -250
- msprobe/docs/02.config_introduction.md +0 -221
- msprobe/docs/03.config_examples.md +0 -281
- msprobe/docs/04.kernel_dump_PyTorch.md +0 -73
- msprobe/docs/05.data_dump_PyTorch.md +0 -518
- msprobe/docs/06.data_dump_MindSpore.md +0 -618
- msprobe/docs/07.accuracy_checker_PyTorch.md +0 -310
- msprobe/docs/09.accuracy_checker_MindSpore.md +0 -120
- msprobe/docs/10.accuracy_compare_PyTorch.md +0 -637
- msprobe/docs/11.accuracy_compare_MindSpore.md +0 -769
- msprobe/docs/12.overflow_check_PyTorch.md +0 -82
- msprobe/docs/13.overflow_check_MindSpore.md +0 -33
- msprobe/docs/14.data_parse_PyTorch.md +0 -282
- msprobe/docs/15.free_benchmarking_PyTorch.md +0 -169
- msprobe/docs/16.free_benchmarking_MindSpore.md +0 -159
- msprobe/docs/17.grad_probe.md +0 -205
- msprobe/docs/18.online_dispatch.md +0 -89
- msprobe/docs/19.monitor.md +0 -753
- msprobe/docs/20.monitor_performance_baseline.md +0 -52
- msprobe/docs/21.visualization_PyTorch.md +0 -519
- msprobe/docs/22.visualization_MindSpore.md +0 -515
- msprobe/docs/23.generate_operator_PyTorch.md +0 -107
- msprobe/docs/24.code_mapping_Mindspore.md +0 -29
- msprobe/docs/25.tool_function_introduction.md +0 -29
- msprobe/docs/26.data_dump_PyTorch_baseline.md +0 -48
- msprobe/docs/27.dump_json_instruction.md +0 -795
- msprobe/docs/28.debugger_save_instruction.md +0 -288
- msprobe/docs/28.kernel_dump_MindSpore.md +0 -69
- msprobe/docs/29.data_dump_MSAdapter.md +0 -235
- msprobe/docs/30.overflow_check_MSAdapter.md +0 -31
- msprobe/docs/31.config_check.md +0 -107
- msprobe/docs/32.ckpt_compare.md +0 -69
- msprobe/docs/33.generate_operator_MindSpore.md +0 -181
- msprobe/docs/34.RL_collect.md +0 -101
- msprobe/docs/35.nan_analyze.md +0 -73
- msprobe/docs/36.calculation_result_change.md +0 -75
- msprobe/docs/FAQ.md +0 -232
- msprobe/docs/S02.report_free_benchmarking_validation_performance_baseline.md +0 -146
- msprobe/docs/accuracy_checker_MindSpore/accuracy_checker_MindSpore_baseline.md +0 -14
- msprobe/docs/data_dump_MindSpore/data_dump_MindSpore_baseline.md +0 -33
- msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md +0 -217
- msprobe/docs/img/BLOOM-7B_1.png +0 -0
- msprobe/docs/img/BLOOM-7B_2.png +0 -0
- msprobe/docs/img/BLOOM-7B_3.png +0 -0
- msprobe/docs/img/BLOOM-7B_4.png +0 -0
- msprobe/docs/img/GPT-3_1.png +0 -0
- msprobe/docs/img/GPT-3_2.png +0 -0
- msprobe/docs/img/GPT-3_3.png +0 -0
- msprobe/docs/img/GPT-3_4.png +0 -0
- msprobe/docs/img/GPT-3_5.png +0 -0
- msprobe/docs/img/GPT-3_6.png +0 -0
- msprobe/docs/img/GPT-3_7.png +0 -0
- msprobe/docs/img/GPT-3_8.png +0 -0
- msprobe/docs/img/YOLOV5S_1.png +0 -0
- msprobe/docs/img/YOLOV5S_2.png +0 -0
- msprobe/docs/img/accuracy_checking_details.png +0 -0
- msprobe/docs/img/accuracy_checking_result.png +0 -0
- msprobe/docs/img/api_precision_compare_details.png +0 -0
- msprobe/docs/img/api_precision_compare_result.png +0 -0
- msprobe/docs/img/auto_analyze_log.png +0 -0
- msprobe/docs/img/compare_result.png +0 -0
- msprobe/docs/img/compare_result_pkl.png +0 -0
- msprobe/docs/img/compare_result_pkl_md5.png.png +0 -0
- msprobe/docs/img/cpu_info.png +0 -0
- msprobe/docs/img/free_benchmark.png +0 -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/docs/img/merge_result.png +0 -0
- msprobe/docs/img/module_compare.png +0 -0
- msprobe/docs/img/monitor/cpu_info.png +0 -0
- msprobe/docs/img/monitor/step_count_per_record.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/docs/img/save_compare_result_sample.png +0 -0
- msprobe/docs/img/visualization/fuzzy_match_ms.png +0 -0
- msprobe/docs/img/visualization/fuzzy_match_pt.png +0 -0
- msprobe/docs/img/visualization/proxy.png +0 -0
- msprobe/docs/img/visualization/tensorboard_1.png +0 -0
- msprobe/docs/img/visualization/tensorboard_2.png +0 -0
- msprobe/docs/img/visualization/vis_browser_1.png +0 -0
- msprobe/docs/img/visualization/vis_browser_2.png +0 -0
- msprobe/docs/img/visualization/vis_match_info.png +0 -0
- msprobe/docs/img/visualization/vis_precision_info.png +0 -0
- msprobe/docs/img/visualization/vis_search_info.png +0 -0
- msprobe/docs/img/visualization/vis_show_info.png +0 -0
- msprobe/docs/img/visualization/vis_showcase.png +0 -0
- msprobe/docs/img/visualization/vis_unmatch_info.png +0 -0
- msprobe/docs/visualization/GPTModel.png +0 -0
- msprobe/docs/visualization/ParallelMLP.png +0 -0
- msprobe/docs/visualization/layer_mapping_example.md +0 -132
- msprobe/docs/visualization/mapping.png +0 -0
- msprobe/docs/visualization/mapping1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/3.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/4.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/5.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/6.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/7.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory-qwen25vl.txt +0 -59
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed-mm-qwen25vl.txt +0 -80
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactory_mapping.md +0 -330
- msprobe/docs/visualization/module_name.png +0 -0
- msprobe/docs/visualization/module_name1.png +0 -0
- msprobe/docs/visualization/no_mapping.png +0 -0
- msprobe/docs/visualization/no_mapping1.png +0 -0
- msprobe/docs/visualization/no_mapping_analyze.png +0 -0
- msprobe/docs/visualization/top_layer.png +0 -0
- msprobe/mindspore/api_accuracy_checker/generate_op_script/op_generator.py +0 -460
- msprobe/mindspore/api_accuracy_checker/generate_op_script/operator_replication.template +0 -2081
- msprobe/mindspore/code_mapping/bind.py +0 -283
- msprobe/mindspore/code_mapping/cmd_parser.py +0 -40
- msprobe/mindspore/code_mapping/graph.py +0 -49
- msprobe/mindspore/code_mapping/graph_parser.py +0 -211
- msprobe/mindspore/code_mapping/main.py +0 -24
- msprobe/mindspore/code_mapping/processor.py +0 -34
- msprobe/mindspore/dym_loader/hook_dynamic_loader.cpp +0 -111
- msprobe/mindspore/dym_loader/hook_dynamic_loader.h +0 -52
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +0 -257
- msprobe/mindspore/free_benchmark/common/config.py +0 -27
- msprobe/mindspore/free_benchmark/common/handler_params.py +0 -31
- msprobe/mindspore/free_benchmark/common/utils.py +0 -100
- msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +0 -638
- msprobe/mindspore/free_benchmark/handler/base_handler.py +0 -105
- msprobe/mindspore/free_benchmark/handler/check_handler.py +0 -55
- msprobe/mindspore/free_benchmark/handler/fix_handler.py +0 -51
- msprobe/mindspore/free_benchmark/handler/handler_factory.py +0 -36
- msprobe/mindspore/free_benchmark/perturbation/add_noise.py +0 -82
- msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +0 -45
- msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +0 -78
- msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +0 -77
- msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +0 -56
- msprobe/mindspore/free_benchmark/perturbation/no_change.py +0 -27
- msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +0 -46
- msprobe/mindspore/free_benchmark/self_check_tool_factory.py +0 -51
- msprobe/mindspore/grad_probe/global_context.py +0 -127
- msprobe/mindspore/grad_probe/grad_analyzer.py +0 -260
- msprobe/mindspore/grad_probe/grad_monitor.py +0 -42
- msprobe/mindspore/grad_probe/grad_stat_csv.py +0 -161
- msprobe/mindspore/grad_probe/hook.py +0 -115
- msprobe/mindspore/grad_probe/utils.py +0 -43
- msprobe/mindspore/mindtorch/__init__.py +0 -18
- msprobe/mindspore/ms_config.py +0 -153
- msprobe/mindspore/task_handler_factory.py +0 -44
- msprobe/nan_analyze/__init__.py +0 -14
- msprobe/pytorch/api_accuracy_checker/generate_op_script/config_op.json +0 -9
- msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +0 -480
- msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +0 -567
- msprobe/pytorch/debugger/precision_debugger.py +0 -181
- msprobe/pytorch/free_benchmark/__init__.py +0 -23
- msprobe/pytorch/free_benchmark/common/constant.py +0 -85
- msprobe/pytorch/free_benchmark/common/counter.py +0 -87
- msprobe/pytorch/free_benchmark/common/enums.py +0 -80
- msprobe/pytorch/free_benchmark/common/params.py +0 -152
- msprobe/pytorch/free_benchmark/common/utils.py +0 -143
- msprobe/pytorch/free_benchmark/compare/grad_saver.py +0 -215
- msprobe/pytorch/free_benchmark/compare/single_benchmark.py +0 -121
- msprobe/pytorch/free_benchmark/main.py +0 -123
- msprobe/pytorch/free_benchmark/perturbed_layers/base_layer.py +0 -28
- msprobe/pytorch/free_benchmark/perturbed_layers/layer_factory.py +0 -56
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +0 -107
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +0 -121
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +0 -89
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +0 -87
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/no_change.py +0 -43
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/npu_base_layser.py +0 -60
- msprobe/pytorch/free_benchmark/perturbed_layers/run_cpu.py +0 -34
- msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +0 -252
- msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +0 -54
- msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +0 -40
- msprobe/pytorch/free_benchmark/result_handlers/handler_factory.py +0 -45
- msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +0 -181
- msprobe/pytorch/grad_probe/__init__.py +0 -0
- msprobe/pytorch/grad_probe/grad_monitor.py +0 -108
- msprobe/pytorch/grad_probe/grad_stat_csv.py +0 -160
- msprobe/pytorch/hook_module/__init__.py +0 -16
- msprobe/pytorch/hook_module/wrap_aten.py +0 -111
- msprobe/pytorch/online_dispatch/__init__.py +0 -19
- msprobe/pytorch/online_dispatch/compare.py +0 -224
- msprobe/pytorch/online_dispatch/dispatch.py +0 -332
- msprobe/pytorch/online_dispatch/dump_compare.py +0 -179
- msprobe/pytorch/online_dispatch/single_compare.py +0 -412
- msprobe/pytorch/online_dispatch/torch_ops_config.yaml +0 -58
- msprobe/pytorch/online_dispatch/utils.py +0 -158
- msprobe/pytorch/parse_tool/__init__.py +0 -0
- msprobe/pytorch/parse_tool/cli.py +0 -31
- msprobe/pytorch/parse_tool/lib/__init__.py +0 -0
- msprobe/pytorch/parse_tool/lib/compare.py +0 -253
- msprobe/pytorch/parse_tool/lib/config.py +0 -50
- msprobe/pytorch/parse_tool/lib/file_desc.py +0 -45
- msprobe/pytorch/parse_tool/lib/interactive_cli.py +0 -97
- msprobe/pytorch/parse_tool/lib/parse_exception.py +0 -54
- msprobe/pytorch/parse_tool/lib/parse_tool.py +0 -161
- msprobe/pytorch/parse_tool/lib/utils.py +0 -299
- msprobe/pytorch/parse_tool/lib/visualization.py +0 -85
- msprobe/pytorch/pt_config.py +0 -299
- /msprobe/core/{grad_probe → dump}/__init__.py +0 -0
- /msprobe/{mindspore/code_mapping → core/dump/api_dump}/__init__.py +0 -0
- /msprobe/{mindspore/debugger → core/dump/data_dump}/__init__.py +0 -0
- /msprobe/{mindspore/exception_dump → core/dump/data_dump/data_processor}/__init__.py +0 -0
- /msprobe/{mindspore/free_benchmark → core/dump/debugger}/__init__.py +0 -0
- /msprobe/{mindspore/free_benchmark/common → core/dump/kernel_dump}/__init__.py +0 -0
- /msprobe/mindspore/{free_benchmark/handler → dump/debugger}/__init__.py +0 -0
- /msprobe/mindspore/{grad_probe → dump/dump_processor}/__init__.py +0 -0
- /msprobe/mindspore/{overflow_check → dump/exception_dump}/__init__.py +0 -0
- /msprobe/mindspore/{mindtorch → dump/mindtorch}/mindtorch_adaptor.py +0 -0
- /msprobe/{pytorch/api_accuracy_checker/run_ut → mindspore/dump/overflow_check}/__init__.py +0 -0
- /msprobe/{pytorch/debugger → mindspore/monitor}/__init__.py +0 -0
- /msprobe/{pytorch/free_benchmark/common → msaccucmp}/__init__.py +0 -0
- /msprobe/pytorch/api_accuracy_checker/{run_ut → acc_check}/.keep +0 -0
- /msprobe/pytorch/{free_benchmark/perturbed_layers → api_accuracy_checker/acc_check}/__init__.py +0 -0
- /msprobe/pytorch/api_accuracy_checker/{run_ut → acc_check}/torch_ut_setting.json +0 -0
- /msprobe/pytorch/{free_benchmark/perturbed_layers/npu → dump/api_dump}/__init__.py +0 -0
- /msprobe/pytorch/{hook_module → dump/api_dump}/support_wrap_ops.yaml +0 -0
- /msprobe/pytorch/{free_benchmark/result_handlers → dump/debugger}/__init__.py +0 -0
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# -------------------------------------------------------------------------
|
|
3
|
+
# This file is part of the MindStudio project.
|
|
4
|
+
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
|
|
5
|
+
#
|
|
6
|
+
# MindStudio is licensed under Mulan PSL v2.
|
|
7
|
+
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
8
|
+
# You may obtain a copy of Mulan PSL v2 at:
|
|
9
|
+
#
|
|
10
|
+
# http://license.coscl.org.cn/MulanPSL2
|
|
11
|
+
#
|
|
12
|
+
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
13
|
+
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
14
|
+
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
15
|
+
# See the Mulan PSL v2 for more details.
|
|
16
|
+
# -------------------------------------------------------------------------
|
|
17
|
+
|
|
18
|
+
"""
|
|
19
|
+
Function:
|
|
20
|
+
This class is used to generate GUP dump data of the ONNX model.
|
|
21
|
+
"""
|
|
22
|
+
import os
|
|
23
|
+
import re
|
|
24
|
+
import time
|
|
25
|
+
|
|
26
|
+
import onnx
|
|
27
|
+
import onnxruntime
|
|
28
|
+
import numpy as np
|
|
29
|
+
|
|
30
|
+
from msprobe.core.common.log import logger
|
|
31
|
+
from msprobe.core.common.file_utils import check_file_or_directory_path, create_directory
|
|
32
|
+
from msprobe.infer.offline.compare.msquickcmp.common.dump_data import DumpData
|
|
33
|
+
from msprobe.infer.offline.compare.msquickcmp.common import utils
|
|
34
|
+
from msprobe.infer.offline.compare.msquickcmp.common.utils import AccuracyCompareException
|
|
35
|
+
from msprobe.infer.offline.compare.msquickcmp.common.utils import InputShapeError, load_npy_from_buffer
|
|
36
|
+
from msprobe.infer.offline.compare.msquickcmp.adapter_cli.args_adapter import CmpArgsAdapter
|
|
37
|
+
from msprobe.infer.offline.compare.msquickcmp.common.convert import convert_bin_file_to_npy
|
|
38
|
+
from msprobe.infer.utils.file_open_check import ms_open
|
|
39
|
+
from msprobe.infer.utils.util import load_file_to_read_common_check
|
|
40
|
+
from msprobe.infer.utils.constants import TENSOR_MAX_SIZE
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
NODE_TYPE_TO_DTYPE_MAP = {
|
|
44
|
+
"tensor(int)": np.int32,
|
|
45
|
+
"tensor(int8)": np.int8,
|
|
46
|
+
"tensor(int16)": np.int16,
|
|
47
|
+
"tensor(int32)": np.int32,
|
|
48
|
+
"tensor(int64)": np.int64,
|
|
49
|
+
"tensor(uint8)": np.uint8,
|
|
50
|
+
"tensor(uint16)": np.uint16,
|
|
51
|
+
"tensor(uint32)": np.uint32,
|
|
52
|
+
"tensor(uint64)": np.uint64,
|
|
53
|
+
"tensor(float)": np.float32,
|
|
54
|
+
"tensor(float16)": np.float16,
|
|
55
|
+
"tensor(double)": np.double,
|
|
56
|
+
"tensor(bool)": np.bool_,
|
|
57
|
+
"tensor(complex64)": np.complex64,
|
|
58
|
+
"tensor(complex128)": np.complex_,
|
|
59
|
+
}
|
|
60
|
+
MAX_PROTOBUF = 2000000000
|
|
61
|
+
ONNX_DTYPE = {1: np.float32, 2: np.float64}
|
|
62
|
+
MAX_FILE_NAME_LEN = 255
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class OnnxDumpData(DumpData):
|
|
66
|
+
"""
|
|
67
|
+
This class is used to generate dump data of the ONNX model.
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
def __init__(self, arguments: CmpArgsAdapter, npu_dump_npy_path=None):
|
|
71
|
+
super().__init__()
|
|
72
|
+
self.model_path = arguments.golden_path
|
|
73
|
+
self.output_path = arguments.output_path
|
|
74
|
+
self.input_data = arguments.input_data
|
|
75
|
+
self.input_shape = arguments.input_shape
|
|
76
|
+
self.dym_shape_range = arguments.dym_shape_range
|
|
77
|
+
self.onnx_fusion_switch = arguments.onnx_fusion_switch
|
|
78
|
+
self.cann_path = arguments.cann_path
|
|
79
|
+
|
|
80
|
+
self._check_path_exists(self.model_path, extentions="onnx")
|
|
81
|
+
|
|
82
|
+
self.input_shapes = utils.parse_input_shape(self.input_shape)
|
|
83
|
+
self.data_dir, self.onnx_dump_data_dir, self.model_dir = self._create_dir()
|
|
84
|
+
|
|
85
|
+
self.net_output, self.inputs_map, self.extend_inputs_map = {}, {}, {}
|
|
86
|
+
self.origin_model, origin_model_contents = self._load_onnx(self.model_path)
|
|
87
|
+
|
|
88
|
+
self.dump_model_with_inputs_path = self._new_model_save_path(self.model_path)
|
|
89
|
+
self.model_with_inputs = self.origin_model
|
|
90
|
+
self.model_with_inputs_session = self._load_session(self.model_path)
|
|
91
|
+
|
|
92
|
+
@staticmethod
|
|
93
|
+
def _check_input_shape_fix_value(op_name, model_shape, input_shape):
|
|
94
|
+
message = "fixed input tensor dim not equal to model input dim." "tensor_name:%s, %s vs %s" % (
|
|
95
|
+
op_name,
|
|
96
|
+
str(input_shape),
|
|
97
|
+
str(model_shape),
|
|
98
|
+
)
|
|
99
|
+
if len(model_shape) != len(input_shape):
|
|
100
|
+
logger.error(message)
|
|
101
|
+
raise AccuracyCompareException(utils.ACCURACY_COMPARISON_INVALID_DATA_ERROR)
|
|
102
|
+
for index, value in enumerate(model_shape):
|
|
103
|
+
if value is None or isinstance(value, str):
|
|
104
|
+
continue
|
|
105
|
+
if input_shape[index] != value:
|
|
106
|
+
logger.error(message)
|
|
107
|
+
raise AccuracyCompareException(utils.ACCURACY_COMPARISON_INVALID_DATA_ERROR)
|
|
108
|
+
|
|
109
|
+
def generate_inputs_data(self, npu_dump_data_path=None, use_aipp=False):
|
|
110
|
+
inputs_tensor_info = self._get_inputs_tensor_info()
|
|
111
|
+
if use_aipp:
|
|
112
|
+
if not npu_dump_data_path:
|
|
113
|
+
logger.error("find no aipp op in dump data")
|
|
114
|
+
raise utils.AccuracyCompareException(utils.ACCURACY_COMPARISON_INVALID_PARAM_ERROR)
|
|
115
|
+
self._check_path_exists(npu_dump_data_path)
|
|
116
|
+
self.inputs_map = self._get_inputs_data_aipp(self.data_dir, inputs_tensor_info, npu_dump_data_path)
|
|
117
|
+
else:
|
|
118
|
+
self.inputs_map = self._get_inputs_data(inputs_tensor_info)
|
|
119
|
+
|
|
120
|
+
def get_output_map(self, output_list):
|
|
121
|
+
output_map, res_idx, output_list_size = {}, 0, len(output_list)
|
|
122
|
+
for node in self.origin_model.graph.node:
|
|
123
|
+
for node_output in node.output:
|
|
124
|
+
output_map[node_output] = output_list[res_idx]
|
|
125
|
+
res_idx += 1
|
|
126
|
+
if res_idx >= output_list_size:
|
|
127
|
+
return output_map
|
|
128
|
+
return output_map
|
|
129
|
+
|
|
130
|
+
def get_input_map(self, input_map, output_list):
|
|
131
|
+
output_map = self.get_output_map(output_list)
|
|
132
|
+
input_map = self.augment_input_map(input_map, output_map)
|
|
133
|
+
return input_map
|
|
134
|
+
|
|
135
|
+
def augment_input_map(self, input_map, output_map):
|
|
136
|
+
for temp in self.origin_model.graph.initializer:
|
|
137
|
+
npy_data = load_npy_from_buffer(temp.raw_data, ONNX_DTYPE.get(temp.data_type), temp.dims)
|
|
138
|
+
input_map[temp.name] = npy_data
|
|
139
|
+
input_map = {**input_map, **output_map}
|
|
140
|
+
return input_map
|
|
141
|
+
|
|
142
|
+
def generate_dump_data(self, npu_dump_path=None, om_parser=None):
|
|
143
|
+
self._modify_model_add_outputs_nodes(
|
|
144
|
+
self.model_with_inputs, self.dump_model_with_inputs_path
|
|
145
|
+
)
|
|
146
|
+
session = self._load_session(self.dump_model_with_inputs_path)
|
|
147
|
+
dump_bins = self._run_model(session, self.inputs_map)
|
|
148
|
+
augment_inputs_map = self.get_input_map(self.inputs_map, dump_bins)
|
|
149
|
+
net_output_node = [output_item.name for output_item in self.model_with_inputs_session.get_outputs()]
|
|
150
|
+
self._save_dump_data(dump_bins, self.model_with_inputs, net_output_node, augment_inputs_map)
|
|
151
|
+
|
|
152
|
+
return self.onnx_dump_data_dir
|
|
153
|
+
|
|
154
|
+
def _load_session(self, model_path):
|
|
155
|
+
options = onnxruntime.SessionOptions()
|
|
156
|
+
if not self.onnx_fusion_switch:
|
|
157
|
+
options.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_DISABLE_ALL
|
|
158
|
+
try:
|
|
159
|
+
model_path = load_file_to_read_common_check(model_path)
|
|
160
|
+
infersession = onnxruntime.InferenceSession(model_path, options)
|
|
161
|
+
except Exception as e:
|
|
162
|
+
logger.error(f"Please check onnx model can run in local env. Error: {e}")
|
|
163
|
+
raise utils.AccuracyCompareException(utils.ACCURACY_COMPARISON_MODEL_TYPE_ERROR)
|
|
164
|
+
return infersession
|
|
165
|
+
|
|
166
|
+
def _load_onnx(self, model_path):
|
|
167
|
+
# model_path str -> read as bytes -> deserialize to onnx_model
|
|
168
|
+
# -> onnxruntime load as session
|
|
169
|
+
model_path = load_file_to_read_common_check(model_path)
|
|
170
|
+
with ms_open(model_path, "rb", max_size=TENSOR_MAX_SIZE) as ff:
|
|
171
|
+
model_contents = ff.read()
|
|
172
|
+
onnx_model = onnx.load_model(model_path)
|
|
173
|
+
unique_index = 999
|
|
174
|
+
name_set = set((node.name for node in onnx_model.graph.node))
|
|
175
|
+
|
|
176
|
+
def get_unique_name(ori_name, index):
|
|
177
|
+
new_name = f"{ori_name}_{index}"
|
|
178
|
+
if new_name not in name_set:
|
|
179
|
+
return new_name, index + 1
|
|
180
|
+
else:
|
|
181
|
+
return get_unique_name(ori_name, index + 1)
|
|
182
|
+
|
|
183
|
+
for index, node in enumerate(onnx_model.graph.node):
|
|
184
|
+
if node.name:
|
|
185
|
+
continue
|
|
186
|
+
new_name = node.op_type + "_" + str(index)
|
|
187
|
+
if new_name in name_set:
|
|
188
|
+
new_name, unique_index = get_unique_name(new_name, unique_index)
|
|
189
|
+
name_set.add(new_name)
|
|
190
|
+
node.name = new_name
|
|
191
|
+
return onnx_model, model_contents
|
|
192
|
+
|
|
193
|
+
def _new_model_save_path(self, origin_path):
|
|
194
|
+
save_name = "new_" + os.path.basename(origin_path)
|
|
195
|
+
return os.path.join(self.model_dir, save_name)
|
|
196
|
+
|
|
197
|
+
def _create_dir(self):
|
|
198
|
+
# create input directory
|
|
199
|
+
data_dir = os.path.join(self.output_path, "input")
|
|
200
|
+
create_directory(data_dir)
|
|
201
|
+
|
|
202
|
+
# create dump_data/onnx directory
|
|
203
|
+
onnx_dump_data_dir = os.path.join(self.output_path, "dump_data/onnx")
|
|
204
|
+
create_directory(onnx_dump_data_dir)
|
|
205
|
+
|
|
206
|
+
# create model directory
|
|
207
|
+
model_dir = ""
|
|
208
|
+
if self.dym_shape_range:
|
|
209
|
+
model_relative_name = "../model"
|
|
210
|
+
else:
|
|
211
|
+
model_relative_name = "model"
|
|
212
|
+
model_dir = os.path.join(self.output_path, model_relative_name)
|
|
213
|
+
create_directory(model_dir)
|
|
214
|
+
return data_dir, onnx_dump_data_dir, model_dir
|
|
215
|
+
|
|
216
|
+
def _modify_model_add_outputs_nodes(self, onnx_model, save_path):
|
|
217
|
+
del onnx_model.graph.output[:]
|
|
218
|
+
|
|
219
|
+
onnx_model.graph.output.extend(
|
|
220
|
+
onnx.ValueInfoProto(name=tensor_name)
|
|
221
|
+
for node in onnx_model.graph.node
|
|
222
|
+
for tensor_name in node.output
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
model_size = onnx_model.ByteSize()
|
|
226
|
+
save_external_flag = model_size < 0 or model_size > MAX_PROTOBUF
|
|
227
|
+
|
|
228
|
+
logger.debug(f"Modified model has size over 2G: {save_external_flag}")
|
|
229
|
+
|
|
230
|
+
onnx.save_model(
|
|
231
|
+
onnx_model,
|
|
232
|
+
save_path,
|
|
233
|
+
save_as_external_data=save_external_flag
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
logger.info(f"Modified model has being saved successfully at: {os.path.abspath(save_path)}")
|
|
237
|
+
|
|
238
|
+
def _get_inputs_tensor_info(self):
|
|
239
|
+
inputs_tensor_info = []
|
|
240
|
+
input_tensor_names = [item.name for item in self.model_with_inputs_session.get_inputs()]
|
|
241
|
+
for _, tensor_name in enumerate(self.input_shapes):
|
|
242
|
+
utils.check_input_name_in_model(input_tensor_names, tensor_name)
|
|
243
|
+
for input_item in self.model_with_inputs_session.get_inputs():
|
|
244
|
+
tensor_name = input_item.name
|
|
245
|
+
tensor_type = input_item.type
|
|
246
|
+
tensor_shape = tuple(input_item.shape)
|
|
247
|
+
# skip extend inputs add by custom op
|
|
248
|
+
if tensor_name in self.extend_inputs_map.keys():
|
|
249
|
+
continue
|
|
250
|
+
|
|
251
|
+
if utils.check_dynamic_shape(tensor_shape):
|
|
252
|
+
if not self.input_shapes:
|
|
253
|
+
logger.error(
|
|
254
|
+
f"The dynamic shape {tensor_shape} are not supported. "
|
|
255
|
+
f"Please set '--input_shape' to fix the dynamic shape.")
|
|
256
|
+
raise utils.AccuracyCompareException(utils.ACCURACY_COMPARISON_INVALID_PARAM_ERROR)
|
|
257
|
+
if self.input_shapes and tensor_name in self.input_shapes:
|
|
258
|
+
input_shape = self.input_shapes.get(tensor_name)
|
|
259
|
+
try:
|
|
260
|
+
number_shape = [int(dim) for dim in input_shape]
|
|
261
|
+
except (ValueError, TypeError) as error:
|
|
262
|
+
logger.error(utils.get_shape_not_match_message(InputShapeError.FORMAT_NOT_MATCH, self.input_shape))
|
|
263
|
+
raise utils.AccuracyCompareException(utils.ACCURACY_COMPARISON_INVALID_PARAM_ERROR) from error
|
|
264
|
+
self._check_input_shape_fix_value(tensor_name, tensor_shape, number_shape)
|
|
265
|
+
tensor_info = {"name": tensor_name, "shape": tuple(number_shape), "type": tensor_type}
|
|
266
|
+
logger.info(f"Fix dynamic input shape of {tensor_name} to {number_shape}")
|
|
267
|
+
else:
|
|
268
|
+
tensor_info = {"name": tensor_name, "shape": tensor_shape, "type": tensor_type}
|
|
269
|
+
inputs_tensor_info.append(tensor_info)
|
|
270
|
+
logger.info(f"model inputs tensor info:\n{inputs_tensor_info}\n")
|
|
271
|
+
return inputs_tensor_info
|
|
272
|
+
|
|
273
|
+
def _get_inputs_data(self, inputs_tensor_info):
|
|
274
|
+
names = [ii["name"] for ii in inputs_tensor_info]
|
|
275
|
+
shapes = [ii["shape"] for ii in inputs_tensor_info]
|
|
276
|
+
dtypes = [self._convert_to_numpy_type(ii["type"]) for ii in inputs_tensor_info]
|
|
277
|
+
|
|
278
|
+
bin_file_path_array = []
|
|
279
|
+
if "" == self.input_data:
|
|
280
|
+
check_file_or_directory_path(os.path.realpath(self.data_dir), True)
|
|
281
|
+
input_bin_files = os.listdir(self.data_dir)
|
|
282
|
+
if len(input_bin_files) == 0:
|
|
283
|
+
return self._generate_random_input_data(self.data_dir, names, shapes, dtypes)
|
|
284
|
+
input_bin_files.sort(key=lambda file: int((re.findall("\\d+", file))[0]))
|
|
285
|
+
bin_file_path_array = [os.path.join(self.data_dir, item) for item in input_bin_files]
|
|
286
|
+
|
|
287
|
+
else:
|
|
288
|
+
input_initial_path = self.input_data.split(",")
|
|
289
|
+
for input_item in input_initial_path:
|
|
290
|
+
input_item_path = os.path.realpath(input_item)
|
|
291
|
+
if input_item_path.endswith('.bin'):
|
|
292
|
+
bin_file_path_array.append(input_item_path)
|
|
293
|
+
else:
|
|
294
|
+
utils.get_input_path(input_item_path, bin_file_path_array)
|
|
295
|
+
|
|
296
|
+
self._check_input_data_path(bin_file_path_array, inputs_tensor_info)
|
|
297
|
+
return self._read_input_data(bin_file_path_array, names, shapes, dtypes)
|
|
298
|
+
|
|
299
|
+
def _get_inputs_data_aipp(self, data_dir, inputs_tensor_info, npu_dump_data_path):
|
|
300
|
+
inputs_map = {}
|
|
301
|
+
aipp_input = []
|
|
302
|
+
for bin_file in os.listdir(npu_dump_data_path):
|
|
303
|
+
if bin_file.startswith("Aipp"):
|
|
304
|
+
aipp_input.append(os.path.join(npu_dump_data_path, bin_file))
|
|
305
|
+
if len(aipp_input) != len(inputs_tensor_info):
|
|
306
|
+
logger.error("lengths of aipp_input and input_tensor_info unequal, please check.")
|
|
307
|
+
raise utils.AccuracyCompareException(utils.ACCURACY_COMPARISON_INDEX_OUT_OF_BOUNDS_ERROR)
|
|
308
|
+
for i, tensor_info in enumerate(inputs_tensor_info):
|
|
309
|
+
convert_bin_file_to_npy(aipp_input[i], os.path.join(self.output_path, "input"), self.cann_path)
|
|
310
|
+
aipp_output_path = (os.path.join(self.output_path, "input", aipp_input[i].rsplit("/", 1)[1]) +
|
|
311
|
+
".output.0.npy")
|
|
312
|
+
aipp_output_path = load_file_to_read_common_check(aipp_output_path)
|
|
313
|
+
aipp_output = np.load(aipp_output_path)
|
|
314
|
+
nchw_prod = np.prod(tensor_info["shape"])
|
|
315
|
+
nchwc_prod_without_c1 = np.prod(aipp_output.shape[:-1])
|
|
316
|
+
try:
|
|
317
|
+
c0 = int(nchw_prod / nchwc_prod_without_c1)
|
|
318
|
+
except ZeroDivisionError as e:
|
|
319
|
+
logger.error(f"Aipp output has wrong shape, file path: {aipp_output_path}")
|
|
320
|
+
raise utils.AccuracyCompareException(utils.ACCURACY_COMPARISON_INVALID_DATA_ERROR) from e
|
|
321
|
+
onnx_input = aipp_output[..., :c0].transpose((0, 4, 2, 3, 1)).squeeze(-1).astype(np.float32)
|
|
322
|
+
inputs_map[tensor_info["name"]] = onnx_input
|
|
323
|
+
return inputs_map
|
|
324
|
+
|
|
325
|
+
def _convert_to_numpy_type(self, tensor_type):
|
|
326
|
+
numpy_data_type = NODE_TYPE_TO_DTYPE_MAP.get(tensor_type)
|
|
327
|
+
if numpy_data_type:
|
|
328
|
+
return numpy_data_type
|
|
329
|
+
else:
|
|
330
|
+
logger.error(f"unsupported tensor type: {tensor_type}")
|
|
331
|
+
raise AccuracyCompareException(utils.ACCURACY_COMPARISON_TENSOR_TYPE_ERROR)
|
|
332
|
+
|
|
333
|
+
def _run_model(self, session, inputs_map):
|
|
334
|
+
outputs_name = [node.name for node in session.get_outputs()]
|
|
335
|
+
return session.run(outputs_name, inputs_map)
|
|
336
|
+
|
|
337
|
+
def _save_dump_data(self, dump_bins, old_onnx_model, net_output_node, input_map):
|
|
338
|
+
res_idx = 0
|
|
339
|
+
file_name_map = []
|
|
340
|
+
for node in old_onnx_model.graph.node:
|
|
341
|
+
#存储onnx的输入dump数据
|
|
342
|
+
for i, node_input in enumerate(node.input):
|
|
343
|
+
file_name = self._generate_dump_data_file_name("input_" + node.name, i)
|
|
344
|
+
if len(file_name) > MAX_FILE_NAME_LEN:
|
|
345
|
+
new_file_name = str(round(time.time() * 1e6)) + str(len(file_name_map)) + ".npy"
|
|
346
|
+
file_name_map.append(f"{new_file_name},{file_name}\n")
|
|
347
|
+
file_name = new_file_name
|
|
348
|
+
file_path = os.path.join(self.onnx_dump_data_dir, file_name)
|
|
349
|
+
if input_map.get(node_input) is not None:
|
|
350
|
+
np.save(file_path, input_map.get(node_input))
|
|
351
|
+
for j, output in enumerate(node.output):
|
|
352
|
+
file_name = self._generate_dump_data_file_name(node.name, j)
|
|
353
|
+
if len(file_name) > MAX_FILE_NAME_LEN:
|
|
354
|
+
new_file_name = str(round(time.time() * 1e6)) + str(len(file_name_map)) + ".npy"
|
|
355
|
+
file_name_map.append(f"{new_file_name},{file_name}\n")
|
|
356
|
+
file_name = new_file_name
|
|
357
|
+
|
|
358
|
+
file_path = os.path.join(self.onnx_dump_data_dir, file_name)
|
|
359
|
+
if output in net_output_node:
|
|
360
|
+
self.net_output[net_output_node.index(output)] = file_path
|
|
361
|
+
if res_idx <= len(dump_bins) - 1:
|
|
362
|
+
np.save(file_path, dump_bins[res_idx])
|
|
363
|
+
else:
|
|
364
|
+
logger.error("res_idx out of bounds of dump_bins and can not save, please check.")
|
|
365
|
+
res_idx += 1
|
|
366
|
+
|
|
367
|
+
if len(file_name_map) > 0:
|
|
368
|
+
mapping_file_path = os.path.join(self.onnx_dump_data_dir, "mapping.csv")
|
|
369
|
+
with ms_open(mapping_file_path, mode="w") as map_file:
|
|
370
|
+
map_file.writelines(file_name_map)
|
|
371
|
+
|
|
372
|
+
for key, value in self.net_output.items():
|
|
373
|
+
logger.info(f"net_output node is:{key}, file path is {value}")
|
|
374
|
+
logger.info("dump data success")
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# -------------------------------------------------------------------------
|
|
2
|
+
# This file is part of the MindStudio project.
|
|
3
|
+
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
|
|
4
|
+
#
|
|
5
|
+
# MindStudio is licensed under Mulan PSL v2.
|
|
6
|
+
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
7
|
+
# You may obtain a copy of Mulan PSL v2 at:
|
|
8
|
+
#
|
|
9
|
+
# http://license.coscl.org.cn/MulanPSL2
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
12
|
+
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
13
|
+
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
14
|
+
# See the Mulan PSL v2 for more details.
|
|
15
|
+
# -------------------------------------------------------------------------
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# -------------------------------------------------------------------------
|
|
2
|
+
# This file is part of the MindStudio project.
|
|
3
|
+
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
|
|
4
|
+
#
|
|
5
|
+
# MindStudio is licensed under Mulan PSL v2.
|
|
6
|
+
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
7
|
+
# You may obtain a copy of Mulan PSL v2 at:
|
|
8
|
+
#
|
|
9
|
+
# http://license.coscl.org.cn/MulanPSL2
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
12
|
+
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
13
|
+
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
14
|
+
# See the Mulan PSL v2 for more details.
|
|
15
|
+
# -------------------------------------------------------------------------
|
|
16
|
+
|
|
17
|
+
import os
|
|
18
|
+
import sys
|
|
19
|
+
|
|
20
|
+
import numpy as np
|
|
21
|
+
|
|
22
|
+
from msprobe.core.common.log import logger
|
|
23
|
+
from msprobe.infer.utils.check.string_checker import StringChecker
|
|
24
|
+
from msprobe.infer.utils.file_open_check import ms_open, MAX_SIZE_LIMITE_NORMAL_FILE
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
IS_MSACCUCMP_PATH_SET = False
|
|
28
|
+
GLOBAL_TENSOR_CONVERTER = None
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _lazy_import_torch():
|
|
32
|
+
try:
|
|
33
|
+
import torch # pylint: disable=import-outside-toplevel
|
|
34
|
+
except ModuleNotFoundError as err:
|
|
35
|
+
if err.name == "torch":
|
|
36
|
+
logger.error("Missing dependency: torch. Please install torch to use torchair compare.")
|
|
37
|
+
raise
|
|
38
|
+
return torch
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def default_tensor_converter(tensor):
|
|
42
|
+
torch = _lazy_import_torch()
|
|
43
|
+
if not isinstance(tensor, torch.Tensor):
|
|
44
|
+
raise TypeError(f"Expected a torch.Tensor, but got {type(tensor).__name__}")
|
|
45
|
+
return tensor.data.reshape(tensor.shape)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def set_msaccucmp_path_from_cann():
|
|
49
|
+
global IS_MSACCUCMP_PATH_SET
|
|
50
|
+
global GLOBAL_TENSOR_CONVERTER
|
|
51
|
+
|
|
52
|
+
# env TOOLCHAIN_HOME works for both development and product packages.
|
|
53
|
+
cann_path = os.environ.get("TOOLCHAIN_HOME", os.environ.get("ASCEND_TOOLKIT_HOME", ""))
|
|
54
|
+
if not cann_path:
|
|
55
|
+
raise OSError("CANN toolkit in not installed or not set, try installing the latest CANN toolkit.")
|
|
56
|
+
if StringChecker().is_str_safe().check(cann_path, True):
|
|
57
|
+
cann_path = cann_path.split(":")[0] # Could be multiple split by :, should use the first one
|
|
58
|
+
|
|
59
|
+
msaccucmp_path = os.path.join(cann_path, "tools", "operator_cmp", "compare")
|
|
60
|
+
if not os.path.exists(msaccucmp_path):
|
|
61
|
+
raise OSError(f"{msaccucmp_path} not exists, try installing the latest CANN toolkit.")
|
|
62
|
+
|
|
63
|
+
if msaccucmp_path not in sys.path:
|
|
64
|
+
sys.path.append(msaccucmp_path)
|
|
65
|
+
IS_MSACCUCMP_PATH_SET = True
|
|
66
|
+
logger.info(f"Set msaccucmp_path={msaccucmp_path}")
|
|
67
|
+
|
|
68
|
+
if GLOBAL_TENSOR_CONVERTER is None:
|
|
69
|
+
from conversion import tensor_conversion
|
|
70
|
+
|
|
71
|
+
if hasattr(tensor_conversion, "ConvertSingleTensorFormat"):
|
|
72
|
+
GLOBAL_TENSOR_CONVERTER = tensor_conversion.ConvertSingleTensorFormat()
|
|
73
|
+
else:
|
|
74
|
+
GLOBAL_TENSOR_CONVERTER = default_tensor_converter
|
|
75
|
+
logger.warning("ConvertSingleTensorFormat not found in msaccucmp, connot convert tensor format."
|
|
76
|
+
" Try installing the latest CANN toolkit."
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def parse_torchair_dump_data(dump_file):
|
|
81
|
+
if dump_file.endswith(".npz"): # Custom converted data info
|
|
82
|
+
with ms_open(dump_file, "rb", max_size=MAX_SIZE_LIMITE_NORMAL_FILE) as f:
|
|
83
|
+
loaded = np.load(f)
|
|
84
|
+
return loaded.get("inputs", []), loaded.get("outputs", [])
|
|
85
|
+
|
|
86
|
+
if not IS_MSACCUCMP_PATH_SET:
|
|
87
|
+
set_msaccucmp_path_from_cann()
|
|
88
|
+
from dump_parse.dump_utils import parse_dump_file # Parser tool from CANN msaccucmp
|
|
89
|
+
from cmp_utils.constant.const_manager import ConstManager
|
|
90
|
+
|
|
91
|
+
bin_dump_data = parse_dump_file(dump_file, dump_version=ConstManager.OLD_DUMP_TYPE)
|
|
92
|
+
inputs = [GLOBAL_TENSOR_CONVERTER(input_data) for input_data in bin_dump_data.input_data]
|
|
93
|
+
outputs = [GLOBAL_TENSOR_CONVERTER(output_data) for output_data in bin_dump_data.output_data]
|
|
94
|
+
return inputs, outputs
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# -------------------------------------------------------------------------
|
|
2
|
+
# This file is part of the MindStudio project.
|
|
3
|
+
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
|
|
4
|
+
#
|
|
5
|
+
# MindStudio is licensed under Mulan PSL v2.
|
|
6
|
+
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
7
|
+
# You may obtain a copy of Mulan PSL v2 at:
|
|
8
|
+
#
|
|
9
|
+
# http://license.coscl.org.cn/MulanPSL2
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
12
|
+
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
13
|
+
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
14
|
+
# See the Mulan PSL v2 for more details.
|
|
15
|
+
# -------------------------------------------------------------------------
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
"Rule",
|
|
19
|
+
"NumberChecker",
|
|
20
|
+
"PathChecker",
|
|
21
|
+
"StringChecker",
|
|
22
|
+
"ArgsChecker",
|
|
23
|
+
"DictChecker",
|
|
24
|
+
"ObjectChecker",
|
|
25
|
+
"ListChecker",
|
|
26
|
+
"validate_params",
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
from msprobe.infer.utils.check.number_checker import NumberChecker
|
|
30
|
+
from msprobe.infer.utils.check.path_checker import PathChecker
|
|
31
|
+
from msprobe.infer.utils.check.string_checker import StringChecker
|
|
32
|
+
from msprobe.infer.utils.check.args_checker import ArgsChecker
|
|
33
|
+
from msprobe.infer.utils.check.dict_checker import DictChecker
|
|
34
|
+
from msprobe.infer.utils.check.obj_checker import ObjectChecker
|
|
35
|
+
from msprobe.infer.utils.check.list_checker import ListChecker
|
|
36
|
+
from msprobe.infer.utils.check.func_wrapper import validate_params
|
|
37
|
+
from msprobe.infer.utils.check.rule import Rule
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# -------------------------------------------------------------------------
|
|
2
|
+
# This file is part of the MindStudio project.
|
|
3
|
+
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
|
|
4
|
+
#
|
|
5
|
+
# MindStudio is licensed under Mulan PSL v2.
|
|
6
|
+
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
7
|
+
# You may obtain a copy of Mulan PSL v2 at:
|
|
8
|
+
#
|
|
9
|
+
# http://license.coscl.org.cn/MulanPSL2
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
12
|
+
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
13
|
+
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
14
|
+
# See the Mulan PSL v2 for more details.
|
|
15
|
+
# -------------------------------------------------------------------------
|
|
16
|
+
|
|
17
|
+
from typing import Any
|
|
18
|
+
from argparse import ArgumentTypeError
|
|
19
|
+
from msprobe.infer.utils.check.checker import Checker
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ArgsChecker:
|
|
23
|
+
"""
|
|
24
|
+
parser.add_argument(..., type=ArgsChecker(Rule.to_int()), ...)
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(self, rule: Checker) -> None:
|
|
28
|
+
self.rule = rule
|
|
29
|
+
|
|
30
|
+
def __call__(self, value) -> Any:
|
|
31
|
+
try:
|
|
32
|
+
self.rule.check(value, will_raise=True)
|
|
33
|
+
except ValueError as err:
|
|
34
|
+
raise ArgumentTypeError(str(err)) from err
|
|
35
|
+
return self.rule.get_value()
|