mindstudio-probe 8.3.3__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.3.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.3.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 +28 -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.3.dist-info/LICENSE +0 -201
- mindstudio_probe-8.3.3.dist-info/RECORD +0 -491
- mindstudio_probe-8.3.3.dist-info/entry_points.txt +0 -2
- mindstudio_probe-8.3.3.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,669 @@
|
|
|
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 mainly involves common function.
|
|
21
|
+
"""
|
|
22
|
+
import enum
|
|
23
|
+
import itertools
|
|
24
|
+
import os
|
|
25
|
+
import re
|
|
26
|
+
import shutil
|
|
27
|
+
import subprocess
|
|
28
|
+
|
|
29
|
+
import numpy as np
|
|
30
|
+
|
|
31
|
+
from msprobe.infer.offline.compare.msquickcmp.common.dynamic_argument_bean import DynamicArgumentEnum
|
|
32
|
+
from msprobe.core.common.log import logger
|
|
33
|
+
|
|
34
|
+
ACCURACY_COMPARISON_INVALID_PARAM_ERROR = 1
|
|
35
|
+
ACCURACY_COMPARISON_INVALID_DATA_ERROR = 2
|
|
36
|
+
ACCURACY_COMPARISON_INVALID_PATH_ERROR = 3
|
|
37
|
+
ACCURACY_COMPARISON_INVALID_COMMAND_ERROR = 4
|
|
38
|
+
ACCURACY_COMPARISON_PYTHON_VERSION_ERROR = 5
|
|
39
|
+
ACCURACY_COMPARISON_MODEL_TYPE_ERROR = 6
|
|
40
|
+
ACCURACY_COMPARISON_PARSER_JSON_FILE_ERROR = 7
|
|
41
|
+
ACCURACY_COMPARISON_WRITE_JSON_FILE_ERROR = 8
|
|
42
|
+
ACCURACY_COMPARISON_OPEN_FILE_ERROR = 9
|
|
43
|
+
ACCURACY_COMPARISON_BIN_FILE_ERROR = 10
|
|
44
|
+
ACCURACY_COMPARISON_INVALID_KEY_ERROR = 11
|
|
45
|
+
ACCURACY_COMPARISON_PYTHON_COMMAND_ERROR = 12
|
|
46
|
+
ACCURACY_COMPARISON_TENSOR_TYPE_ERROR = 13
|
|
47
|
+
ACCURACY_COMPARISON_NO_DUMP_FILE_ERROR = 14
|
|
48
|
+
ACCURACY_COMPARISON_NOT_SUPPORT_ERROR = 15
|
|
49
|
+
ACCURACY_COMPARISON_NET_OUTPUT_ERROR = 16
|
|
50
|
+
ACCURACY_COMPARISON_INVALID_DEVICE_ERROR = 17
|
|
51
|
+
ACCURACY_COMPARISON_WRONG_AIPP_CONTENT = 18
|
|
52
|
+
ACCRACY_COMPARISON_EXTRACT_ERROR = 19
|
|
53
|
+
ACCRACY_COMPARISON_FETCH_DATA_ERROR = 20
|
|
54
|
+
ACCURACY_COMPARISON_ATC_RUN_ERROR = 21
|
|
55
|
+
ACCURACY_COMPARISON_INVALID_RIGHT_ERROR = 22
|
|
56
|
+
ACCURACY_COMPARISON_INDEX_OUT_OF_BOUNDS_ERROR = 23
|
|
57
|
+
ACCURACY_COMPARISON_EMPTY_CSV_ERROR = 24
|
|
58
|
+
MODEL_TYPE = ['.onnx', '.om']
|
|
59
|
+
DIM_PATTERN = r"^(-?[0-9]{1,100})(,-?[0-9]{1,100}){0,100}"
|
|
60
|
+
DYNAMIC_DIM_PATTERN = r"^([0-9-~]+)(,-?[0-9-~]+){0,3}"
|
|
61
|
+
MAX_DEVICE_ID = 255
|
|
62
|
+
SEMICOLON = ";"
|
|
63
|
+
COLON = ":"
|
|
64
|
+
EQUAL = "="
|
|
65
|
+
COMMA = ","
|
|
66
|
+
DOT = "."
|
|
67
|
+
ASCEND_BATCH_FIELD = "ascend_mbatch_batch_"
|
|
68
|
+
BATCH_SCENARIO_OP_NAME = "{0}_ascend_mbatch_batch_{1}"
|
|
69
|
+
INVALID_CHARS = ['|', ';', '&', '&&', '||', '>', '>>', '<', '`', '\\', '!', '\n']
|
|
70
|
+
MAX_READ_FILE_SIZE_4G = 4294967296 # 4G, 4 * 1024 * 1024 * 1024
|
|
71
|
+
DYM_SHAPE_END_MAX = 1000000
|
|
72
|
+
MAX_TENSOR_SHAPE_CONUT = 200
|
|
73
|
+
OPTYPE_WHITWLIST = ['Data', 'TransData', 'PartitionCall']
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class AccuracyCompareException(Exception):
|
|
77
|
+
"""
|
|
78
|
+
Class for Accuracy Compare Exception
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
def __init__(self, error_info):
|
|
82
|
+
super(AccuracyCompareException, self).__init__()
|
|
83
|
+
self.error_info = error_info
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class InputShapeError(enum.Enum):
|
|
87
|
+
"""
|
|
88
|
+
Class for Input Shape Error
|
|
89
|
+
"""
|
|
90
|
+
|
|
91
|
+
FORMAT_NOT_MATCH = 0
|
|
92
|
+
VALUE_TYPE_NOT_MATCH = 1
|
|
93
|
+
NAME_NOT_MATCH = 2
|
|
94
|
+
TOO_LONG_PARAMS = 3
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def check_exec_cmd(command: str):
|
|
98
|
+
if command.startswith("bash") or command.startswith("python"):
|
|
99
|
+
cmds = command.split()
|
|
100
|
+
if len(cmds) < 2:
|
|
101
|
+
logger.error("Num of command elements is invalid.")
|
|
102
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_COMMAND_ERROR)
|
|
103
|
+
elif len(cmds) == 2:
|
|
104
|
+
script_file = cmds[1]
|
|
105
|
+
check_exec_script_file(script_file)
|
|
106
|
+
else:
|
|
107
|
+
script_file = cmds[1]
|
|
108
|
+
check_exec_script_file(script_file)
|
|
109
|
+
args = cmds[2:]
|
|
110
|
+
check_input_args(args)
|
|
111
|
+
return True
|
|
112
|
+
|
|
113
|
+
else:
|
|
114
|
+
logger.error("Command is not started with bash or python.")
|
|
115
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_COMMAND_ERROR)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def check_exec_script_file(script_path: str):
|
|
119
|
+
if not os.path.exists(script_path):
|
|
120
|
+
logger.error(f"File {script_path} is not exist.")
|
|
121
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PATH_ERROR)
|
|
122
|
+
|
|
123
|
+
if not os.access(script_path, os.X_OK):
|
|
124
|
+
logger.error(f"Script {script_path} don't has X authority.")
|
|
125
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_RIGHT_ERROR)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def check_file_or_directory_path(path, isdir=False):
|
|
129
|
+
"""
|
|
130
|
+
Function Description:
|
|
131
|
+
check whether the path is valid
|
|
132
|
+
Parameter:
|
|
133
|
+
path: the path to check
|
|
134
|
+
isdir: the path is dir or file
|
|
135
|
+
Exception Description:
|
|
136
|
+
when invalid data throw exception
|
|
137
|
+
"""
|
|
138
|
+
|
|
139
|
+
if isdir:
|
|
140
|
+
if not os.path.isdir(path):
|
|
141
|
+
logger.error(f"The path {path} is not a directory. Please check the path")
|
|
142
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PATH_ERROR)
|
|
143
|
+
if not os.access(path, os.W_OK):
|
|
144
|
+
logger.error(f"The path {path} does not have permission to write. Please check the path permission")
|
|
145
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PATH_ERROR)
|
|
146
|
+
else:
|
|
147
|
+
if not os.path.isfile(path):
|
|
148
|
+
logger.error(f"The path {path} is not a file.Please check the path")
|
|
149
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PATH_ERROR)
|
|
150
|
+
if not os.access(path, os.R_OK):
|
|
151
|
+
logger.error(f"The path {path} does not have permission to read.Please check the path permission")
|
|
152
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PATH_ERROR)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def check_input_bin_file_path(input_path):
|
|
156
|
+
"""
|
|
157
|
+
Function Description:
|
|
158
|
+
check the output bin file
|
|
159
|
+
Parameter:
|
|
160
|
+
input_path: input path directory
|
|
161
|
+
"""
|
|
162
|
+
input_bin_files = input_path.split(',')
|
|
163
|
+
bin_file_path_array = []
|
|
164
|
+
for input_item in input_bin_files:
|
|
165
|
+
input_item_path = os.path.realpath(input_item)
|
|
166
|
+
if input_item_path.endswith('.bin'):
|
|
167
|
+
check_file_or_directory_path(input_item_path)
|
|
168
|
+
bin_file_path_array.append(input_item_path)
|
|
169
|
+
else:
|
|
170
|
+
check_file_or_directory_path(input_item_path, True)
|
|
171
|
+
get_input_path(input_item_path, bin_file_path_array)
|
|
172
|
+
return bin_file_path_array
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def check_file_size_valid(file_path, size_max):
|
|
176
|
+
if os.stat(file_path).st_size > size_max:
|
|
177
|
+
logger.error(f'file_path={file_path} is too large, > {size_max}, not valid.')
|
|
178
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_DATA_ERROR)
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def check_input_args(args: list):
|
|
182
|
+
for arg in args:
|
|
183
|
+
if arg in INVALID_CHARS:
|
|
184
|
+
logger.error("Args has invalid character.")
|
|
185
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PARAM_ERROR)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def check_convert_is_valid_used(dump, bin2npy, custom_op):
|
|
189
|
+
"""
|
|
190
|
+
check dump is True while using convert
|
|
191
|
+
"""
|
|
192
|
+
if not dump and (bin2npy or custom_op != ""):
|
|
193
|
+
logger.error(
|
|
194
|
+
"Convert option or custom_op is forbidden when dump is False!\
|
|
195
|
+
Please keep dump True while using convert."
|
|
196
|
+
)
|
|
197
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_COMMAND_ERROR)
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def check_locat_is_valid(dump, locat):
|
|
201
|
+
"""
|
|
202
|
+
Function:
|
|
203
|
+
check locat args is completed
|
|
204
|
+
Return:
|
|
205
|
+
True or False
|
|
206
|
+
"""
|
|
207
|
+
if locat and not dump:
|
|
208
|
+
logger.error("Dump must be True when locat is used")
|
|
209
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_COMMAND_ERROR)
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def check_device_param_valid(device):
|
|
213
|
+
"""
|
|
214
|
+
check device param valid.
|
|
215
|
+
"""
|
|
216
|
+
if not device.isdigit() or int(device) > MAX_DEVICE_ID:
|
|
217
|
+
logger.error(
|
|
218
|
+
"Please enter a valid number for device, the device id should be" " in [0, 255], now is %s." % device
|
|
219
|
+
)
|
|
220
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_DEVICE_ERROR)
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
def check_dynamic_shape(shape):
|
|
224
|
+
"""
|
|
225
|
+
Function Description:
|
|
226
|
+
check dynamic shpae
|
|
227
|
+
Parameter:
|
|
228
|
+
shape:shape
|
|
229
|
+
Return Value:
|
|
230
|
+
False or True
|
|
231
|
+
"""
|
|
232
|
+
dynamic_shape = False
|
|
233
|
+
for item in shape:
|
|
234
|
+
if item is None or isinstance(item, str):
|
|
235
|
+
dynamic_shape = True
|
|
236
|
+
break
|
|
237
|
+
return dynamic_shape
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
def _check_colon_exist(input_shape):
|
|
241
|
+
if ":" not in input_shape:
|
|
242
|
+
logger.error(get_shape_not_match_message(InputShapeError.FORMAT_NOT_MATCH, input_shape))
|
|
243
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PARAM_ERROR)
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def _check_content_split_length(content_split):
|
|
247
|
+
if not content_split[1]:
|
|
248
|
+
logger.error(get_shape_not_match_message(InputShapeError.VALUE_TYPE_NOT_MATCH, content_split[1]))
|
|
249
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PARAM_ERROR)
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def _check_shape_number(input_shape_value, pattern=DIM_PATTERN):
|
|
253
|
+
dim_pattern = re.compile(pattern)
|
|
254
|
+
match = dim_pattern.match(input_shape_value)
|
|
255
|
+
if not match or match.group() is not input_shape_value:
|
|
256
|
+
logger.error(get_shape_not_match_message(InputShapeError.VALUE_TYPE_NOT_MATCH, input_shape_value))
|
|
257
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PARAM_ERROR)
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
def check_input_name_in_model(tensor_name_list, input_name):
|
|
261
|
+
"""
|
|
262
|
+
Function Description:
|
|
263
|
+
check input name in model
|
|
264
|
+
Parameter:
|
|
265
|
+
tensor_name_list: the tensor name list
|
|
266
|
+
input_name: the input name
|
|
267
|
+
Exception Description:
|
|
268
|
+
When input name not in tensor name list throw exception
|
|
269
|
+
"""
|
|
270
|
+
if input_name not in tensor_name_list:
|
|
271
|
+
logger.error(get_shape_not_match_message(InputShapeError.NAME_NOT_MATCH, input_name))
|
|
272
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PARAM_ERROR)
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
def check_max_size_param_valid(max_cmp_size):
|
|
276
|
+
"""
|
|
277
|
+
check max_size param valid.
|
|
278
|
+
"""
|
|
279
|
+
if max_cmp_size < 0:
|
|
280
|
+
logger.error(
|
|
281
|
+
"Please enter a valid number for max_cmp_size, the max_cmp_size should be"
|
|
282
|
+
" in [0, ∞), now is %s." % max_cmp_size
|
|
283
|
+
)
|
|
284
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_DEVICE_ERROR)
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def get_model_name_and_extension(offline_model_path):
|
|
288
|
+
"""
|
|
289
|
+
Function Description:
|
|
290
|
+
obtain the name and extension of the model file
|
|
291
|
+
Parameter:
|
|
292
|
+
offline_model_path: offline model path
|
|
293
|
+
Return Value:
|
|
294
|
+
model_name,extension
|
|
295
|
+
Exception Description:
|
|
296
|
+
when invalid data throw exception
|
|
297
|
+
"""
|
|
298
|
+
file_name = os.path.basename(offline_model_path)
|
|
299
|
+
model_name, extension = os.path.splitext(file_name)
|
|
300
|
+
if extension not in MODEL_TYPE:
|
|
301
|
+
logger.error(f"Model file {offline_model_path} suffix not valid, supported ones are {MODEL_TYPE}")
|
|
302
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PATH_ERROR)
|
|
303
|
+
return model_name, extension
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
def get_input_path(input_item_path, bin_file_path_array):
|
|
307
|
+
for root, _, files in os.walk(input_item_path):
|
|
308
|
+
for bin_file in files:
|
|
309
|
+
if bin_file.endswith('.bin'):
|
|
310
|
+
file_path = os.path.join(root, bin_file)
|
|
311
|
+
bin_file_path_array.append(file_path)
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
def get_dump_data_path(dump_dir, is_net_output=False, model_name=None):
|
|
315
|
+
"""
|
|
316
|
+
Function Description:
|
|
317
|
+
traverse directories and obtain the absolute path of dump data
|
|
318
|
+
Parameter:
|
|
319
|
+
dump_dir: dump data directory
|
|
320
|
+
Return Value:
|
|
321
|
+
dump data path,file is exist or file is not exist
|
|
322
|
+
"""
|
|
323
|
+
dump_data_path = None
|
|
324
|
+
file_is_exist = False
|
|
325
|
+
dump_data_dir = None
|
|
326
|
+
for i in os.listdir(dump_dir):
|
|
327
|
+
if not (os.path.isdir(os.path.join(dump_dir, i))):
|
|
328
|
+
continue
|
|
329
|
+
# net_output dump file directory, name is like 12_423_246_4352
|
|
330
|
+
if is_net_output:
|
|
331
|
+
if not i.isdigit():
|
|
332
|
+
dump_data_dir = os.path.join(dump_dir, i)
|
|
333
|
+
break
|
|
334
|
+
# Contains the dump file directory, whose name is a pure digital timestamp
|
|
335
|
+
elif i.isdigit():
|
|
336
|
+
dump_data_dir = os.path.join(dump_dir, i)
|
|
337
|
+
break
|
|
338
|
+
|
|
339
|
+
if not dump_data_dir:
|
|
340
|
+
logger.error(f"The directory \"{dump_dir}\" does not contain dump data")
|
|
341
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_NO_DUMP_FILE_ERROR)
|
|
342
|
+
|
|
343
|
+
dump_data_path_list = []
|
|
344
|
+
for dir_path, _, files in os.walk(dump_data_dir):
|
|
345
|
+
if files and not any(file.startswith("aclnn") for file in files):
|
|
346
|
+
dump_data_path_list.append(dir_path)
|
|
347
|
+
file_is_exist = True
|
|
348
|
+
|
|
349
|
+
if len(dump_data_path_list) > 1:
|
|
350
|
+
# find the model name directory
|
|
351
|
+
dump_data_path = dump_data_path_list[0]
|
|
352
|
+
for ii in dump_data_path_list:
|
|
353
|
+
if model_name in ii:
|
|
354
|
+
dump_data_path = ii
|
|
355
|
+
break
|
|
356
|
+
|
|
357
|
+
# move all dump files to single directory
|
|
358
|
+
for ii in dump_data_path_list:
|
|
359
|
+
if ii == dump_data_path:
|
|
360
|
+
continue
|
|
361
|
+
for file in os.listdir(ii):
|
|
362
|
+
shutil.move(os.path.join(ii, file), dump_data_path)
|
|
363
|
+
|
|
364
|
+
elif len(dump_data_path_list) == 1:
|
|
365
|
+
dump_data_path = dump_data_path_list[0]
|
|
366
|
+
else:
|
|
367
|
+
dump_data_path = None
|
|
368
|
+
|
|
369
|
+
return dump_data_path, file_is_exist
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
def get_shape_to_directory_name(input_shape):
|
|
373
|
+
shape_info = re.sub(r"[:;]", "-", input_shape)
|
|
374
|
+
shape_info = re.sub(r",", "_", shape_info)
|
|
375
|
+
return shape_info
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
def get_shape_not_match_message(shape_error_type, value):
|
|
379
|
+
"""
|
|
380
|
+
Function Description:
|
|
381
|
+
get shape not match message
|
|
382
|
+
Parameter:
|
|
383
|
+
input:the value
|
|
384
|
+
shape_error_type: the shape error type
|
|
385
|
+
Return Value:
|
|
386
|
+
not match message
|
|
387
|
+
"""
|
|
388
|
+
message = ""
|
|
389
|
+
if shape_error_type == InputShapeError.FORMAT_NOT_MATCH:
|
|
390
|
+
message = (
|
|
391
|
+
"Input shape \"{}\" format mismatch,the format like: "
|
|
392
|
+
"input_name1:1,224,224,3;input_name2:3,300".format(value)
|
|
393
|
+
)
|
|
394
|
+
if shape_error_type == InputShapeError.VALUE_TYPE_NOT_MATCH:
|
|
395
|
+
message = "Input shape \"{}\" value not number".format(value)
|
|
396
|
+
if shape_error_type == InputShapeError.NAME_NOT_MATCH:
|
|
397
|
+
message = "Input tensor name \"{}\" not in model".format(value)
|
|
398
|
+
if shape_error_type == InputShapeError.TOO_LONG_PARAMS:
|
|
399
|
+
message = "Input \"{}\" value too long".format(value)
|
|
400
|
+
return message
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
def get_batch_index(dump_data_path):
|
|
404
|
+
for _, _, files in os.walk(dump_data_path):
|
|
405
|
+
for file_name in files:
|
|
406
|
+
if ASCEND_BATCH_FIELD in file_name:
|
|
407
|
+
return get_batch_index_from_name(file_name)
|
|
408
|
+
return ""
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
def get_mbatch_op_name(om_parser, op_name, npu_dump_data_path):
|
|
412
|
+
_, scenario = om_parser.get_dynamic_scenario_info()
|
|
413
|
+
if scenario in [DynamicArgumentEnum.DYM_BATCH, DynamicArgumentEnum.DYM_DIMS]:
|
|
414
|
+
batch_index = get_batch_index(npu_dump_data_path)
|
|
415
|
+
current_op_name = BATCH_SCENARIO_OP_NAME.format(op_name, batch_index)
|
|
416
|
+
else:
|
|
417
|
+
return op_name
|
|
418
|
+
return current_op_name
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
def get_batch_index_from_name(name):
|
|
422
|
+
batch_index = ""
|
|
423
|
+
last_batch_field_index = name.rfind(ASCEND_BATCH_FIELD)
|
|
424
|
+
pos = last_batch_field_index + len(ASCEND_BATCH_FIELD)
|
|
425
|
+
while pos < len(name) and name[pos].isdigit():
|
|
426
|
+
batch_index += name[pos]
|
|
427
|
+
pos += 1
|
|
428
|
+
return batch_index
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
def get_data_len_by_shape(shape):
|
|
432
|
+
data_len = 1
|
|
433
|
+
for item in shape:
|
|
434
|
+
if item == -1:
|
|
435
|
+
logger.warning("please check your input shape, one dim in shape is -1.")
|
|
436
|
+
return -1
|
|
437
|
+
data_len = data_len * item
|
|
438
|
+
return data_len
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
def parse_input_shape(input_shape):
|
|
442
|
+
"""
|
|
443
|
+
Function Description:
|
|
444
|
+
parse input shape
|
|
445
|
+
Parameter:
|
|
446
|
+
input_shape:the input shape,this format like:tensor_name1:dim1,dim2;tensor_name2:dim1,dim2
|
|
447
|
+
Return Value:
|
|
448
|
+
the map type of input_shapes
|
|
449
|
+
"""
|
|
450
|
+
input_shapes = {}
|
|
451
|
+
if input_shape == '':
|
|
452
|
+
return input_shapes
|
|
453
|
+
_check_colon_exist(input_shape)
|
|
454
|
+
tensor_list = input_shape.split(';')
|
|
455
|
+
for tensor in tensor_list:
|
|
456
|
+
_check_colon_exist(input_shape)
|
|
457
|
+
tensor_shape_list = tensor.rsplit(':', maxsplit=1)
|
|
458
|
+
if len(tensor_shape_list) == 2:
|
|
459
|
+
shape = tensor_shape_list[1]
|
|
460
|
+
input_shapes[tensor_shape_list[0]] = shape.split(',')
|
|
461
|
+
_check_shape_number(shape)
|
|
462
|
+
else:
|
|
463
|
+
logger.error(get_shape_not_match_message(InputShapeError.FORMAT_NOT_MATCH, input_shape))
|
|
464
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PARAM_ERROR)
|
|
465
|
+
return input_shapes
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
def parse_input_shape_to_list(input_shape):
|
|
469
|
+
"""
|
|
470
|
+
Function Description:
|
|
471
|
+
parse input shape and get a list only contains inputs shape
|
|
472
|
+
Parameter:
|
|
473
|
+
input_shape:the input shape,this format like:tensor_name1:dim1,dim2;tensor_name2:dim1,dim2.
|
|
474
|
+
Return Value:
|
|
475
|
+
a list only contains inputs shape, this format like [[dim1,dim2],[dim1,dim2]]
|
|
476
|
+
"""
|
|
477
|
+
input_shape_list = []
|
|
478
|
+
if not input_shape:
|
|
479
|
+
return input_shape_list
|
|
480
|
+
_check_colon_exist(input_shape)
|
|
481
|
+
tensor_list = input_shape.split(';')
|
|
482
|
+
if len(tensor_list) > MAX_TENSOR_SHAPE_CONUT:
|
|
483
|
+
raise ValueError("The input of --input_shape parameter is unreasonable, " \
|
|
484
|
+
"because the number of tensor shape is much than 200.")
|
|
485
|
+
for tensor in tensor_list:
|
|
486
|
+
tensor_shape_list = tensor.rsplit(':', maxsplit=1)
|
|
487
|
+
if len(tensor_shape_list) == 2:
|
|
488
|
+
shape_list_int = []
|
|
489
|
+
for dim in tensor_shape_list[1].split(','):
|
|
490
|
+
if dim.isdigit():
|
|
491
|
+
shape_list_int.append(int(dim))
|
|
492
|
+
else:
|
|
493
|
+
raise ValueError("The input of --input_shape parameter is unreasonable, " \
|
|
494
|
+
"because the tensor shape is not digit.")
|
|
495
|
+
for dim_int in shape_list_int:
|
|
496
|
+
if dim_int < 0:
|
|
497
|
+
raise ValueError("The input of --input_shape parameter is unreasonable, " \
|
|
498
|
+
"possibly because the upper bound is smaller than 0.")
|
|
499
|
+
prompt = "The --input_shape %r is larger than expected. " \
|
|
500
|
+
"Attempting to input such a shape could potentially impact system performance.\n" \
|
|
501
|
+
"Please confirm your awareness of the risks associated with this action ([y]/n): " % tensor
|
|
502
|
+
if dim_int > DYM_SHAPE_END_MAX and not dym_shape_range_interaction(prompt):
|
|
503
|
+
raise ValueError("The dim of --input_shape %r is too large." % (str(dim_int)))
|
|
504
|
+
|
|
505
|
+
input_shape_list.append(shape_list_int)
|
|
506
|
+
else:
|
|
507
|
+
logger.error(get_shape_not_match_message(InputShapeError.FORMAT_NOT_MATCH, input_shape))
|
|
508
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PARAM_ERROR)
|
|
509
|
+
return input_shape_list
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
def dym_shape_range_interaction(prompt):
|
|
513
|
+
confirm_pattern = re.compile(r'y(?:es)?', re.IGNORECASE)
|
|
514
|
+
|
|
515
|
+
try:
|
|
516
|
+
user_action = input(prompt)
|
|
517
|
+
except Exception:
|
|
518
|
+
return False
|
|
519
|
+
|
|
520
|
+
return bool(confirm_pattern.match(user_action))
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
def parse_dym_shape_range(dym_shape_range):
|
|
524
|
+
"""
|
|
525
|
+
Function Description:
|
|
526
|
+
parse dynamic input shape
|
|
527
|
+
Parameter:
|
|
528
|
+
dym_shape_range:the input shape,this format like:tensor_name1:dim1,dim2-dim3;tensor_name2:dim1,dim2~dim3.
|
|
529
|
+
- means the both dim2 and dim3 value, ~ means the range of [dim2:dim3]
|
|
530
|
+
Return Value:
|
|
531
|
+
a list only contains inputs shape, this format like [[dim1,dim2],[dim1,dim2]]
|
|
532
|
+
"""
|
|
533
|
+
_check_colon_exist(dym_shape_range)
|
|
534
|
+
input_shapes = {}
|
|
535
|
+
tensor_list = dym_shape_range.split(";")
|
|
536
|
+
info_list = []
|
|
537
|
+
|
|
538
|
+
for tensor in tensor_list:
|
|
539
|
+
_check_colon_exist(dym_shape_range)
|
|
540
|
+
shapes = []
|
|
541
|
+
name, shapestr = tensor.split(":")
|
|
542
|
+
if len(shapestr) < 50:
|
|
543
|
+
_check_shape_number(shapestr, DYNAMIC_DIM_PATTERN)
|
|
544
|
+
else:
|
|
545
|
+
logger.error(get_shape_not_match_message(InputShapeError.TOO_LONG_PARAMS, input_shapes))
|
|
546
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PARAM_ERROR)
|
|
547
|
+
for content in shapestr.split(","):
|
|
548
|
+
if "~" in content:
|
|
549
|
+
content_split = content.split("~")
|
|
550
|
+
_check_content_split_length(content_split)
|
|
551
|
+
start_str = content_split[0]
|
|
552
|
+
end_str = content_split[1]
|
|
553
|
+
step_str = content_split[2] if len(content_split) == 3 else "1"
|
|
554
|
+
if not start_str.isdigit() or not end_str.isdigit() or not step_str.isdigit():
|
|
555
|
+
raise ValueError(f"--dym-shape parameter should be digit.")
|
|
556
|
+
start = int(start_str)
|
|
557
|
+
end = int(end_str)
|
|
558
|
+
step = int(step_str)
|
|
559
|
+
if start > end or start < 0:
|
|
560
|
+
raise ValueError("The input of --dym-shape parameter is unreasonable, " \
|
|
561
|
+
"possibly because the upper bound of the shape is greater than the lower bound" \
|
|
562
|
+
"or the upper bound is smaller than 0.")
|
|
563
|
+
if step <= 0:
|
|
564
|
+
raise ValueError(f"Step in --dym-shape parameter should be greater than 0, now is {step}.")
|
|
565
|
+
prompt = "The --dym-shape-range %r is larger than expected. " \
|
|
566
|
+
"Attempting to input such a shape could potentially impact system performance.\n" \
|
|
567
|
+
"Please confirm your awareness of the risks associated with this action ([y]/n): " % content
|
|
568
|
+
if (end - start) / step > DYM_SHAPE_END_MAX and not dym_shape_range_interaction(prompt):
|
|
569
|
+
raise ValueError("--dym-shape-range is too large, start: %r, end: %r, step: %r" % (str(start), \
|
|
570
|
+
str(end),
|
|
571
|
+
str(step)))
|
|
572
|
+
ranges = [str(i) for i in range(start, end + 1, step)]
|
|
573
|
+
elif "-" in content:
|
|
574
|
+
ranges = content.split("-")
|
|
575
|
+
else:
|
|
576
|
+
start = int(content)
|
|
577
|
+
ranges = [str(start)]
|
|
578
|
+
shapes.append(ranges)
|
|
579
|
+
shape_list = [",".join(s) for s in list(itertools.product(*shapes))]
|
|
580
|
+
info = ["{}:{}".format(name, s) for s in shape_list]
|
|
581
|
+
info_list.append(info)
|
|
582
|
+
res = [";".join(s) for s in list(itertools.product(*info_list))]
|
|
583
|
+
logger.info("shape_list:" + str(res))
|
|
584
|
+
return res
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
def parse_arg_value(values):
|
|
588
|
+
"""
|
|
589
|
+
parse dynamic arg value of atc cmdline
|
|
590
|
+
"""
|
|
591
|
+
value_list = []
|
|
592
|
+
for item in values.split(SEMICOLON):
|
|
593
|
+
value_list.append(parse_value_by_comma(item))
|
|
594
|
+
return value_list
|
|
595
|
+
|
|
596
|
+
|
|
597
|
+
def parse_value_by_comma(value):
|
|
598
|
+
"""
|
|
599
|
+
parse value by comma, like '1,2,4,8'
|
|
600
|
+
"""
|
|
601
|
+
value_list = []
|
|
602
|
+
value_str_list = value.split(COMMA)
|
|
603
|
+
for value_str in value_str_list:
|
|
604
|
+
value_str = value_str.strip()
|
|
605
|
+
if value_str.isdigit() or value_str == '-1':
|
|
606
|
+
value_list.append(int(value_str))
|
|
607
|
+
else:
|
|
608
|
+
logger.error("please check your input shape.")
|
|
609
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_PARAM_ERROR)
|
|
610
|
+
return value_list
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
def execute_command(cmd, info_need=True):
|
|
614
|
+
"""
|
|
615
|
+
Function Description:
|
|
616
|
+
run the following command
|
|
617
|
+
Parameter:
|
|
618
|
+
cmd: command
|
|
619
|
+
Return Value:
|
|
620
|
+
command output result
|
|
621
|
+
Exception Description:
|
|
622
|
+
when invalid command throw exception
|
|
623
|
+
"""
|
|
624
|
+
if info_need:
|
|
625
|
+
logger.info('Execute command:%s' % " ".join(cmd))
|
|
626
|
+
process = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
|
627
|
+
ais_bench_logs = ""
|
|
628
|
+
try:
|
|
629
|
+
while process.poll() is None:
|
|
630
|
+
line = process.stdout.readline()
|
|
631
|
+
if line: # 检查line是否为空,避免解码和追加是的潜在错误
|
|
632
|
+
ais_bench_logs += line.decode()
|
|
633
|
+
finally:
|
|
634
|
+
process.stdout.close()
|
|
635
|
+
if process.returncode != 0:
|
|
636
|
+
logger.error('Failed to execute command:%s' % " ".join(cmd))
|
|
637
|
+
logger.error(f'\nerror log:\n {ais_bench_logs}')
|
|
638
|
+
raise AccuracyCompareException(ACCURACY_COMPARISON_INVALID_DATA_ERROR)
|
|
639
|
+
|
|
640
|
+
|
|
641
|
+
def handle_ground_truth_files(om_parser, npu_dump_data_path, golden_dump_data_path):
|
|
642
|
+
_, scenario = om_parser.get_dynamic_scenario_info()
|
|
643
|
+
if scenario in [DynamicArgumentEnum.DYM_BATCH, DynamicArgumentEnum.DYM_DIMS]:
|
|
644
|
+
batch_index = get_batch_index(npu_dump_data_path)
|
|
645
|
+
for root, _, files in os.walk(golden_dump_data_path):
|
|
646
|
+
for file_name in files:
|
|
647
|
+
first_dot_index = file_name.find(DOT)
|
|
648
|
+
if first_dot_index == -1:
|
|
649
|
+
logger.warning("file name in golden dump data path found it does not contain '.', skip copy.")
|
|
650
|
+
continue
|
|
651
|
+
current_op_name = BATCH_SCENARIO_OP_NAME.format(file_name[:first_dot_index], batch_index)
|
|
652
|
+
dst_file_name = current_op_name + file_name[first_dot_index:]
|
|
653
|
+
shutil.copy(os.path.join(root, file_name), os.path.join(root, dst_file_name))
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
def load_npy_from_buffer(raw_data, dtype, shape):
|
|
657
|
+
no_dump_data = None
|
|
658
|
+
try:
|
|
659
|
+
return np.frombuffer(raw_data, dtype=dtype).reshape(shape)
|
|
660
|
+
except Exception as e:
|
|
661
|
+
return no_dump_data
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
def find_om_files(dir_path):
|
|
665
|
+
om_files = []
|
|
666
|
+
for filename in os.listdir(dir_path):
|
|
667
|
+
if filename.endswith('.om'):
|
|
668
|
+
om_files.append(os.path.join(dir_path, filename))
|
|
669
|
+
return om_files
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
[URL]
|
|
2
|
+
whl_base_url=https://aisbench.obs.myhuaweicloud.com/packet/ais_bench_infer/0.0.2/ait/
|
|
3
|
+
aclruntime_sha_base_url=https://aisbench.obs.myhuaweicloud.com/packet/ais_bench_infer/0.0.2/ait/hash_info/
|
|
4
|
+
tools_base_url=https://gitee.com/ascend/tools.git
|
|
5
|
+
ais_bench_whl_download_url=https://gitee.com/ascend/tools/tree/master/ais-bench_workload/tool/ais_bench
|
|
6
|
+
ais_bench_sha_base_url=https://aisbench.obs.myhuaweicloud.com/packet/ais_bench_infer/0.0.2/ait/hash_info/
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
# -------------------------------------------------------------------------
|