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,197 @@
|
|
|
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 file mainly involves xxxx function.
|
|
21
|
+
"""
|
|
22
|
+
import os
|
|
23
|
+
import re
|
|
24
|
+
import time
|
|
25
|
+
|
|
26
|
+
from msprobe.msaccucmp.cmp_utils import log
|
|
27
|
+
from msprobe.msaccucmp.cmp_utils.file_utils import FileUtils
|
|
28
|
+
from msprobe.msaccucmp.cmp_utils import path_check as path_utils
|
|
29
|
+
from msprobe.msaccucmp.cmp_utils.constant.const_manager import ConstManager
|
|
30
|
+
from msprobe.msaccucmp.cmp_utils.constant.compare_error import CompareError
|
|
31
|
+
from msprobe.msaccucmp.compare_vector import VectorComparison
|
|
32
|
+
from msprobe.msaccucmp.vector_cmp.fusion_manager.fusion_rule_parser import FusionRuleParser
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class BatchCompare:
|
|
36
|
+
"""
|
|
37
|
+
The class for batch compare
|
|
38
|
+
"""
|
|
39
|
+
DUMP_FILE_PATH_FORMAT = "dump_path/time/device_id/model_name/model_id/dump_step/dump_file"
|
|
40
|
+
|
|
41
|
+
def __init__(self: any) -> None:
|
|
42
|
+
self.model_name_to_json_map = {}
|
|
43
|
+
self.json_path_to_dump_path_map = {}
|
|
44
|
+
|
|
45
|
+
@staticmethod
|
|
46
|
+
def _check_path_valid(path: str) -> None:
|
|
47
|
+
ret = path_utils.check_path_valid(path, True, False, path_utils.PathType.Directory)
|
|
48
|
+
if ret != CompareError.MSACCUCMP_NONE_ERROR:
|
|
49
|
+
raise CompareError(ret)
|
|
50
|
+
|
|
51
|
+
def check_fusion_rule_json_dir(self: any, fusion_rule_json_dir: str) -> bool:
|
|
52
|
+
"""
|
|
53
|
+
Check fusion rule is dir or not
|
|
54
|
+
:param fusion_rule_json_dir: the path for fusion rule json
|
|
55
|
+
:return:bool
|
|
56
|
+
"""
|
|
57
|
+
fusion_rule_path = os.path.realpath(fusion_rule_json_dir)
|
|
58
|
+
if os.path.isfile(fusion_rule_path):
|
|
59
|
+
return False
|
|
60
|
+
self._check_path_valid(fusion_rule_json_dir)
|
|
61
|
+
return True
|
|
62
|
+
|
|
63
|
+
def check_argument_valid(self: any, arguments: any) -> None:
|
|
64
|
+
"""
|
|
65
|
+
Check argument valid
|
|
66
|
+
"""
|
|
67
|
+
if arguments.op_name:
|
|
68
|
+
log.print_error_log(
|
|
69
|
+
"the {} single operator comparison is not supported for batch network comparison.".format(
|
|
70
|
+
arguments.op_name))
|
|
71
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
72
|
+
|
|
73
|
+
npu_dump_path = os.path.realpath(arguments.my_dump_path)
|
|
74
|
+
self._check_path_valid(npu_dump_path)
|
|
75
|
+
# check whether the path ends with a timestamp.
|
|
76
|
+
path = os.path.split(npu_dump_path)
|
|
77
|
+
# path[1]:last level directory
|
|
78
|
+
if not path[1].isdigit():
|
|
79
|
+
log.print_error_log("The {} path must end with a timestamp.".format(npu_dump_path))
|
|
80
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PATH_ERROR)
|
|
81
|
+
|
|
82
|
+
def compare(self: any, arguments: any) -> int:
|
|
83
|
+
"""
|
|
84
|
+
Compare the entire network in batches
|
|
85
|
+
:param arguments: the command parameters
|
|
86
|
+
:return: the compare finish status code
|
|
87
|
+
"""
|
|
88
|
+
self.check_argument_valid(arguments)
|
|
89
|
+
self._make_model_name_to_json_map(os.path.realpath(arguments.fusion_rule_file))
|
|
90
|
+
self._make_json_path_to_dump_path_map(os.path.realpath(arguments.my_dump_path))
|
|
91
|
+
return self._execute_batch_compare(arguments)
|
|
92
|
+
|
|
93
|
+
def _make_model_name_to_json_map(self: any, json_dir_path: str) -> None:
|
|
94
|
+
for json_file_name in os.listdir(json_dir_path):
|
|
95
|
+
json_file_path = os.path.join(json_dir_path, json_file_name)
|
|
96
|
+
if json_file_path.endswith(".json"):
|
|
97
|
+
self._parse_json_file(json_file_path)
|
|
98
|
+
|
|
99
|
+
if not self.model_name_to_json_map:
|
|
100
|
+
log.print_error_log('There is no fusion rule json file in "%r".' % json_dir_path)
|
|
101
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PATH_ERROR)
|
|
102
|
+
|
|
103
|
+
def _parse_json_file(self: any, json_file_path: str) -> None:
|
|
104
|
+
fusion_rule_parse = FusionRuleParser(json_file_path)
|
|
105
|
+
json_object = FileUtils.load_json_file(json_file_path)
|
|
106
|
+
fusion_rule_parse.check_array_object_valid(json_object, ConstManager.GRAPH_OBJECT)
|
|
107
|
+
for graph in json_object[ConstManager.GRAPH_OBJECT]:
|
|
108
|
+
fusion_rule_parse.check_string_object_valid(graph, ConstManager.NAME_OBJECT)
|
|
109
|
+
model_name = graph[ConstManager.NAME_OBJECT]
|
|
110
|
+
self.model_name_to_json_map[model_name] = json_file_path
|
|
111
|
+
|
|
112
|
+
def _make_map_for_inconsistent_timestamp(self: any, graph_name: str, dump_file_path_map: dict,
|
|
113
|
+
npu_dump_dir: str) -> None:
|
|
114
|
+
# 1.get the number list from graph name.
|
|
115
|
+
# graph_name:'ge_default_20210420113943_73',graph_name_number_list:['20210420113943', '73'].
|
|
116
|
+
graph_name_number_list = re.findall(r"\d+", graph_name)
|
|
117
|
+
for _, model_name in enumerate(dump_file_path_map):
|
|
118
|
+
# 1.get the number list from model name.for example:
|
|
119
|
+
# model_name:'ge_default_20210420113944_73',model_name_number_list:['20210420113944', '73'].
|
|
120
|
+
model_name_number_list = re.findall(r"\d+", model_name)
|
|
121
|
+
# check graph_name and model_name inconsistent timestamps
|
|
122
|
+
if len(graph_name_number_list) != 2 or len(graph_name_number_list) != len(model_name_number_list):
|
|
123
|
+
log.print_npu_path_valid_message(npu_dump_dir, self.DUMP_FILE_PATH_FORMAT)
|
|
124
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PATH_ERROR)
|
|
125
|
+
if graph_name_number_list[1] == model_name_number_list[1]:
|
|
126
|
+
dump_file_path = dump_file_path_map.get(model_name)
|
|
127
|
+
log.print_warn_log(
|
|
128
|
+
"The {0} and in {1} dump data are not generated at the same time. "
|
|
129
|
+
"The result may be incorrect.".format(graph_name, ",".join(dump_file_path)))
|
|
130
|
+
self.json_path_to_dump_path_map[self.model_name_to_json_map.get(graph_name)] = dump_file_path
|
|
131
|
+
|
|
132
|
+
def _make_json_path_to_dump_path_map(self: any, npu_dump_dir: str) -> None:
|
|
133
|
+
dump_file_path_map = self._get_npu_dump_file_map(npu_dump_dir)
|
|
134
|
+
graph_name_list = self.model_name_to_json_map.keys()
|
|
135
|
+
for graph_name in graph_name_list:
|
|
136
|
+
dump_file_path = dump_file_path_map.get(graph_name)
|
|
137
|
+
if dump_file_path:
|
|
138
|
+
self.json_path_to_dump_path_map[self.model_name_to_json_map.get(graph_name)] = dump_file_path
|
|
139
|
+
else:
|
|
140
|
+
self._make_map_for_inconsistent_timestamp(graph_name, dump_file_path_map, npu_dump_dir)
|
|
141
|
+
|
|
142
|
+
if not self.json_path_to_dump_path_map:
|
|
143
|
+
log.print_error_log("The {} not match fusion rule file".format(npu_dump_dir))
|
|
144
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PATH_ERROR)
|
|
145
|
+
|
|
146
|
+
def _execute_batch_compare(self: any, arguments: any) -> int:
|
|
147
|
+
if os.path.islink(os.path.abspath(arguments.output_path)):
|
|
148
|
+
log.print_error_log('The path "%r" is a softlink, not permitted.' % arguments.output_path)
|
|
149
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PATH_ERROR)
|
|
150
|
+
output_path = os.path.realpath(arguments.output_path)
|
|
151
|
+
my_dump_path = os.path.realpath(arguments.my_dump_path)
|
|
152
|
+
ret = CompareError.MSACCUCMP_NONE_ERROR
|
|
153
|
+
for key, value in self.json_path_to_dump_path_map.items():
|
|
154
|
+
for dump_path in value:
|
|
155
|
+
path_data = dump_path.replace(my_dump_path, "").split("/")
|
|
156
|
+
# remove model_id from path_data,path_data:['0', 'ge_default_20210420113943_71', '10', '1']
|
|
157
|
+
model_id_index = len(path_data) - 2
|
|
158
|
+
path_data.pop(model_id_index)
|
|
159
|
+
if "" in path_data:
|
|
160
|
+
path_data.remove("")
|
|
161
|
+
result_csv = 'result_%s.csv' % time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
|
|
162
|
+
# generate result file,for example:'0_ge_default_20210420113943_71_1_result_20210715022552.csv'
|
|
163
|
+
file_name = "".join(["_".join(path_data), "_", result_csv])
|
|
164
|
+
arguments.my_dump_path = dump_path
|
|
165
|
+
arguments.fusion_rule_file = key
|
|
166
|
+
compare = VectorComparison(arguments)
|
|
167
|
+
compare.set_output_path(os.path.join(output_path, file_name))
|
|
168
|
+
ret = compare.compare()
|
|
169
|
+
return ret
|
|
170
|
+
|
|
171
|
+
def _get_npu_dump_file_map_by_model_id(self: any, model_name_dir: str, dump_file_path_map: dict) -> None:
|
|
172
|
+
for model_id in os.listdir(model_name_dir):
|
|
173
|
+
model_id_dir = os.path.join(model_name_dir, model_id)
|
|
174
|
+
self._check_path_valid(model_id_dir)
|
|
175
|
+
model_id_list = os.listdir(model_id_dir)
|
|
176
|
+
model_name = os.path.basename(model_name_dir)
|
|
177
|
+
if len(model_id_list) != 0:
|
|
178
|
+
step = max(model_id_list) if len(model_id_list) > 1 else model_id_list[0]
|
|
179
|
+
dump_step_path = os.path.join(model_id_dir, step)
|
|
180
|
+
if dump_file_path_map.get(model_name):
|
|
181
|
+
dump_file_path_map.get(model_name).append(dump_step_path)
|
|
182
|
+
else:
|
|
183
|
+
dump_file_path_map[model_name] = [dump_step_path]
|
|
184
|
+
|
|
185
|
+
def _get_npu_dump_file_map(self: any, npu_dump_dir: str) -> dict:
|
|
186
|
+
dump_file_path_map = {}
|
|
187
|
+
for device_id in os.listdir(npu_dump_dir):
|
|
188
|
+
device_id_dir = os.path.join(npu_dump_dir, device_id)
|
|
189
|
+
self._check_path_valid(device_id_dir)
|
|
190
|
+
for model_name in os.listdir(device_id_dir):
|
|
191
|
+
model_name_dir = os.path.join(device_id_dir, model_name)
|
|
192
|
+
self._check_path_valid(model_name_dir)
|
|
193
|
+
self._get_npu_dump_file_map_by_model_id(model_name_dir, dump_file_path_map)
|
|
194
|
+
if not dump_file_path_map:
|
|
195
|
+
log.print_npu_path_valid_message(npu_dump_dir, self.DUMP_FILE_PATH_FORMAT)
|
|
196
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PATH_ERROR)
|
|
197
|
+
return dump_file_path_map
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
|
|
@@ -0,0 +1,245 @@
|
|
|
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
|
+
DetailComparison class. This class mainly involves the compare function.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
import os
|
|
24
|
+
|
|
25
|
+
from msprobe.msaccucmp.vector_cmp.fusion_manager import fusion_rule_parser
|
|
26
|
+
from msprobe.msaccucmp.cmp_utils import utils, utils_type, path_check
|
|
27
|
+
from msprobe.msaccucmp.cmp_utils import log
|
|
28
|
+
from msprobe.msaccucmp.cmp_utils.constant.compare_error import CompareError
|
|
29
|
+
from msprobe.msaccucmp.cmp_utils.constant.const_manager import ConstManager
|
|
30
|
+
from msprobe.msaccucmp.dump_parse import dump, mapping
|
|
31
|
+
from msprobe.msaccucmp.vector_cmp.compare_detail.detail_writer import DetailWriter
|
|
32
|
+
from msprobe.msaccucmp.vector_cmp.compare_detail.detail import DetailInfo
|
|
33
|
+
from msprobe.msaccucmp.vector_cmp.fusion_manager.compare_fusion_op import FusionOpComparison
|
|
34
|
+
from msprobe.msaccucmp.conversion.tensor_conversion import TensorConversion
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class DetailComparison:
|
|
38
|
+
"""
|
|
39
|
+
The class for fusion op compare
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
def __init__(self: any, detail_info: DetailInfo, fusion_op_comparison: FusionOpComparison,
|
|
43
|
+
output_path: str) -> None:
|
|
44
|
+
self.detail_info = detail_info
|
|
45
|
+
self.fusion_op_comparison = fusion_op_comparison
|
|
46
|
+
self.detail_writer = DetailWriter(output_path, detail_info)
|
|
47
|
+
self.fusion_op = None
|
|
48
|
+
|
|
49
|
+
def check_index_valid(self: any, my_output_data: any) -> None:
|
|
50
|
+
"""
|
|
51
|
+
Check index valid
|
|
52
|
+
:param my_output_data: my output data
|
|
53
|
+
"""
|
|
54
|
+
if self.detail_info.tensor_id.is_input():
|
|
55
|
+
count = len(my_output_data.input_data)
|
|
56
|
+
else:
|
|
57
|
+
count = len(my_output_data.output_data)
|
|
58
|
+
if self.detail_info.tensor_id.index >= count:
|
|
59
|
+
log.print_out_of_range_error(self.fusion_op.op_name, self.detail_info.tensor_id.tensor_type,
|
|
60
|
+
self.detail_info.tensor_id.index, '[0, %d)' % count)
|
|
61
|
+
raise CompareError(CompareError.MSACCUCMP_INDEX_OUT_OF_BOUNDS_ERROR)
|
|
62
|
+
|
|
63
|
+
def compare(self: any) -> int:
|
|
64
|
+
"""
|
|
65
|
+
Compare detail by op name
|
|
66
|
+
:return error_code
|
|
67
|
+
"""
|
|
68
|
+
tensor_id = self.detail_info.tensor_id.get_tensor_id()
|
|
69
|
+
log.print_info_log('[%s] Start to compare detail for %s.'
|
|
70
|
+
% (self.detail_info.tensor_id.op_name, tensor_id))
|
|
71
|
+
# get fusion op list by op name
|
|
72
|
+
tensor_list, dump_file_name = self._get_my_output_tensor_list()
|
|
73
|
+
|
|
74
|
+
# delete old result
|
|
75
|
+
try:
|
|
76
|
+
self.detail_writer.delete_old_detail_result_files()
|
|
77
|
+
except (OSError, SystemError, ValueError, TypeError, RuntimeError,
|
|
78
|
+
MemoryError, KeyError, IOError) as error:
|
|
79
|
+
log.print_error_log('Failed to delete the old detail result file. %s' % error)
|
|
80
|
+
raise CompareError(CompareError.MSACCUCMP_DELETE_FILE_ERROR) from error
|
|
81
|
+
|
|
82
|
+
# get right dump data by original op name and index
|
|
83
|
+
try:
|
|
84
|
+
ground_truth_tensor = \
|
|
85
|
+
self.fusion_op_comparison.get_right_dump_data(
|
|
86
|
+
self.fusion_op, self.detail_info.tensor_id.index, self.detail_info.tensor_id.is_input())
|
|
87
|
+
except CompareError as compare_error:
|
|
88
|
+
if compare_error.code == CompareError.MSACCUCMP_NO_DUMP_FILE_ERROR:
|
|
89
|
+
log.print_no_right_dump_file_error(self.fusion_op.op_name, tensor_id, is_error=True)
|
|
90
|
+
raise compare_error
|
|
91
|
+
|
|
92
|
+
# get format by right output info
|
|
93
|
+
self.detail_info.set_detail_format(utils.convert_shape_to_string(
|
|
94
|
+
tensor_list[self.detail_info.tensor_id.index].shape),
|
|
95
|
+
tensor_list[self.detail_info.tensor_id.index].tensor_format,
|
|
96
|
+
ground_truth_tensor.tensor_format
|
|
97
|
+
)
|
|
98
|
+
# deserialize output data to array
|
|
99
|
+
tensor_conversion = TensorConversion(self.fusion_op, self.fusion_op_comparison.format_manager,
|
|
100
|
+
is_detail=True)
|
|
101
|
+
my_output_array, ground_truth_array, my_output_shape = \
|
|
102
|
+
tensor_conversion.get_my_output_and_ground_truth_data(
|
|
103
|
+
self.fusion_op_comparison.compare_data, tensor_list[self.detail_info.tensor_id.index],
|
|
104
|
+
ground_truth_tensor)
|
|
105
|
+
self.detail_writer.write(my_output_shape, my_output_array, ground_truth_array, dump_file_name)
|
|
106
|
+
return CompareError.MSACCUCMP_NONE_ERROR
|
|
107
|
+
|
|
108
|
+
def _print_l1_fusion_warning(self: any) -> None:
|
|
109
|
+
timestamp_list = self.fusion_op_comparison.sort_l1_fusion_dump_file()
|
|
110
|
+
max_timestamp_op_name = timestamp_list[-1][ConstManager.FUSION_OP_INDEX].op_name
|
|
111
|
+
if self.fusion_op.op_name != max_timestamp_op_name:
|
|
112
|
+
log.print_warn_log(
|
|
113
|
+
'The dump data of %s is incomplete, the comparison may be far away. '
|
|
114
|
+
'The dump data of %s may be complete, It is best to use %s for comparison.'
|
|
115
|
+
% (self.fusion_op.op_name, max_timestamp_op_name, max_timestamp_op_name))
|
|
116
|
+
|
|
117
|
+
def _get_my_output_tensor_by_op(self: any, relation: int) -> any:
|
|
118
|
+
my_output_data_path, my_output_data = \
|
|
119
|
+
self.fusion_op_comparison.compare_data.get_left_dump_data(self.fusion_op.op_name)
|
|
120
|
+
dump_file = os.path.basename(my_output_data_path)
|
|
121
|
+
self.check_index_valid(my_output_data)
|
|
122
|
+
if self.detail_info.tensor_id.is_input():
|
|
123
|
+
tensor_list = my_output_data.input_data
|
|
124
|
+
else:
|
|
125
|
+
if relation == utils_type.FusionRelation.L1Fusion:
|
|
126
|
+
self._print_l1_fusion_warning()
|
|
127
|
+
tensor_list = my_output_data.output_data
|
|
128
|
+
return tensor_list, dump_file
|
|
129
|
+
|
|
130
|
+
def _get_my_output_tensor_list(self: any) -> list:
|
|
131
|
+
self.fusion_op, fusion_op_list = self.detail_info.get_detail_op(
|
|
132
|
+
self.fusion_op_comparison.compare_rule.fusion_info)
|
|
133
|
+
if self.fusion_op.is_inner_node():
|
|
134
|
+
log.print_skip_inner_op_msg(self.fusion_op.op_name, is_error=True)
|
|
135
|
+
raise CompareError(CompareError.MSACCUCMP_UNSUPPORTED_COMPARE_ERROR)
|
|
136
|
+
if self.fusion_op.attr.quant_filter:
|
|
137
|
+
log.print_error_log("[{}] The -op param should not specify an operator in quant/dequant pair."
|
|
138
|
+
.format(self.fusion_op.op_name))
|
|
139
|
+
raise CompareError(CompareError.MSACCUCMP_UNSUPPORTED_COMPARE_ERROR)
|
|
140
|
+
relation = fusion_rule_parser.get_relation_for_fusion(fusion_op_list)
|
|
141
|
+
try:
|
|
142
|
+
tensor_list, dumpfile = self._get_my_output_tensor_by_op(relation)
|
|
143
|
+
except CompareError as compare_error:
|
|
144
|
+
if compare_error.code == CompareError.MSACCUCMP_NO_DUMP_FILE_ERROR:
|
|
145
|
+
log.print_no_left_dump_file_error(self.fusion_op.op_name, self.fusion_op.op_type, True)
|
|
146
|
+
raise compare_error
|
|
147
|
+
finally:
|
|
148
|
+
pass
|
|
149
|
+
return tensor_list, dumpfile
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
class DumpDetailComparison:
|
|
153
|
+
"""
|
|
154
|
+
The class for Npu dump op compare
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
def __init__(self: any, detail_info: DetailInfo, compare_data: dump.CompareData,
|
|
158
|
+
output_path: str) -> None:
|
|
159
|
+
self.detail_info = detail_info
|
|
160
|
+
self.compare_data = compare_data
|
|
161
|
+
self.detail_writer = DetailWriter(output_path, detail_info)
|
|
162
|
+
self.fusion_op = None
|
|
163
|
+
|
|
164
|
+
@staticmethod
|
|
165
|
+
def _check_index_valid(tensor_data, op_name, tensor_index, tensor_type):
|
|
166
|
+
if tensor_index >= len(tensor_data):
|
|
167
|
+
log.print_out_of_range_error(op_name, tensor_type, tensor_index, '[0, %d)' % len(tensor_data))
|
|
168
|
+
raise CompareError(CompareError.MSACCUCMP_INDEX_OUT_OF_BOUNDS_ERROR)
|
|
169
|
+
|
|
170
|
+
def compare(self: any) -> int:
|
|
171
|
+
"""
|
|
172
|
+
Compare detail by op name
|
|
173
|
+
:return error_code
|
|
174
|
+
"""
|
|
175
|
+
tensor_id = self.detail_info.tensor_id.get_tensor_id()
|
|
176
|
+
op_name = self.detail_info.tensor_id.op_name
|
|
177
|
+
tensor_type = self.detail_info.tensor_id.tensor_type
|
|
178
|
+
tensor_index = self.detail_info.tensor_id.index
|
|
179
|
+
log.print_info_log('[%s] Start to compare detail for %s.'
|
|
180
|
+
% (op_name, tensor_id))
|
|
181
|
+
|
|
182
|
+
left_path, left_tensor_data, right_tensor_data = self.get_tensor_data(op_name, tensor_type)
|
|
183
|
+
|
|
184
|
+
self._check_index_valid(left_tensor_data, op_name, tensor_index, tensor_type)
|
|
185
|
+
self._check_index_valid(right_tensor_data, op_name, tensor_index, tensor_type)
|
|
186
|
+
|
|
187
|
+
my_output_shape = tuple(left_tensor_data[tensor_index].shape)
|
|
188
|
+
ground_truth_shape = tuple(right_tensor_data[tensor_index].shape)
|
|
189
|
+
if my_output_shape != ground_truth_shape:
|
|
190
|
+
log.print_error_log("My Output data shape %s not equal to Ground Truth data shape %s."
|
|
191
|
+
"Can not compare." % (my_output_shape, ground_truth_shape))
|
|
192
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_DUMP_DATA_ERROR)
|
|
193
|
+
|
|
194
|
+
my_output_array = left_tensor_data[tensor_index].data
|
|
195
|
+
ground_truth_array = right_tensor_data[tensor_index].data
|
|
196
|
+
|
|
197
|
+
self.detail_info.set_detail_ops(op_name, op_name)
|
|
198
|
+
self.detail_info.check_and_set_format(utils.convert_shape_to_string(
|
|
199
|
+
left_tensor_data[tensor_index].shape),
|
|
200
|
+
left_tensor_data[tensor_index].tensor_format,
|
|
201
|
+
right_tensor_data[tensor_index].tensor_format
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
# delete old result
|
|
205
|
+
try:
|
|
206
|
+
self.detail_writer.delete_old_detail_result_files()
|
|
207
|
+
except (OSError, SystemError, ValueError, TypeError, RuntimeError,
|
|
208
|
+
MemoryError, KeyError, IOError) as error:
|
|
209
|
+
log.print_error_log('Failed to delete the old detail result file. %s' % error)
|
|
210
|
+
raise CompareError(CompareError.MSACCUCMP_DELETE_FILE_ERROR) from error
|
|
211
|
+
|
|
212
|
+
dump_file = os.path.basename(left_path)
|
|
213
|
+
self.detail_writer.write(my_output_shape, my_output_array, ground_truth_array, dump_file)
|
|
214
|
+
return CompareError.MSACCUCMP_NONE_ERROR
|
|
215
|
+
|
|
216
|
+
def get_tensor_data(self, op_name, tensor_type):
|
|
217
|
+
"""
|
|
218
|
+
Get tensor form dump data
|
|
219
|
+
:return left_path
|
|
220
|
+
:return left_tensor_data
|
|
221
|
+
:return right_tensor_data
|
|
222
|
+
"""
|
|
223
|
+
try:
|
|
224
|
+
left_path, left_data = self.compare_data.get_left_dump_data(op_name)
|
|
225
|
+
except CompareError as compare_error:
|
|
226
|
+
log.print_error_log('Failed to find %s dump data from -m dump data path.' % op_name)
|
|
227
|
+
raise compare_error
|
|
228
|
+
finally:
|
|
229
|
+
pass
|
|
230
|
+
try:
|
|
231
|
+
right_path, right_data = self.compare_data.get_right_dump_data(op_name)
|
|
232
|
+
except CompareError as compare_error:
|
|
233
|
+
log.print_error_log('Failed to find %s dump data from -g dump data path.' % op_name)
|
|
234
|
+
raise compare_error
|
|
235
|
+
finally:
|
|
236
|
+
pass
|
|
237
|
+
log.print_info_log("My Output data path: " + left_path)
|
|
238
|
+
log.print_info_log("Ground Truth data path: " + right_path)
|
|
239
|
+
if tensor_type == ConstManager.INPUT:
|
|
240
|
+
left_tensor_data = left_data.input_data
|
|
241
|
+
right_tensor_data = right_data.input_data
|
|
242
|
+
else:
|
|
243
|
+
left_tensor_data = left_data.output_data
|
|
244
|
+
right_tensor_data = right_data.output_data
|
|
245
|
+
return left_path, left_tensor_data, right_tensor_data
|
|
@@ -0,0 +1,182 @@
|
|
|
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 file mainly involves the common function.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from msprobe.msaccucmp.cmp_utils import common
|
|
24
|
+
from msprobe.msaccucmp.cmp_utils import log
|
|
25
|
+
from msprobe.msaccucmp.cmp_utils.constant.const_manager import ConstManager, DD
|
|
26
|
+
from msprobe.msaccucmp.cmp_utils.constant.compare_error import CompareError
|
|
27
|
+
from msprobe.msaccucmp.cmp_utils.reg_manager import RegManager
|
|
28
|
+
from msprobe.msaccucmp.cmp_utils.path_check import check_name_valid
|
|
29
|
+
from msprobe.msaccucmp.vector_cmp.fusion_manager.fusion_op import FusionOp
|
|
30
|
+
from msprobe.msaccucmp.vector_cmp.fusion_manager.fusion_rule_parser import FusionRuleParser
|
|
31
|
+
from msprobe.msaccucmp.vector_cmp.fusion_manager import fusion_rule_parser
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class TensorId:
|
|
35
|
+
"""
|
|
36
|
+
The class for tensor id
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(self: any, op_name: str, tensor_type: str, index: str) -> None:
|
|
40
|
+
self.op_name = op_name
|
|
41
|
+
self.tensor_type = tensor_type
|
|
42
|
+
if not RegManager.match_pattern(RegManager.NUMBER_PATTERN, index):
|
|
43
|
+
log.print_only_support_error('detail index', index, 'natural number')
|
|
44
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
45
|
+
self.index = int(index)
|
|
46
|
+
|
|
47
|
+
def check_arguments_valid(self: any) -> None:
|
|
48
|
+
"""
|
|
49
|
+
check arguments valid, if invalid, throw exception
|
|
50
|
+
"""
|
|
51
|
+
ret = check_name_valid(self.op_name)
|
|
52
|
+
if ret != CompareError.MSACCUCMP_NONE_ERROR:
|
|
53
|
+
raise CompareError(ret)
|
|
54
|
+
if self.tensor_type not in ConstManager.SUPPORT_DETAIL_TYPE:
|
|
55
|
+
log.print_only_support_error('detail type', self.tensor_type,
|
|
56
|
+
ConstManager.SUPPORT_DETAIL_TYPE)
|
|
57
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
58
|
+
|
|
59
|
+
def get_tensor_id(self: any) -> str:
|
|
60
|
+
"""
|
|
61
|
+
Get tensor id
|
|
62
|
+
"""
|
|
63
|
+
return "%s:%s:%d" % (self.op_name, self.tensor_type, self.index)
|
|
64
|
+
|
|
65
|
+
def is_input(self: any) -> bool:
|
|
66
|
+
"""
|
|
67
|
+
is input
|
|
68
|
+
:return: true if input
|
|
69
|
+
"""
|
|
70
|
+
return self.tensor_type == ConstManager.INPUT
|
|
71
|
+
|
|
72
|
+
def get_file_prefix(self: any) -> str:
|
|
73
|
+
"""
|
|
74
|
+
Get detail file name prefix
|
|
75
|
+
:return str
|
|
76
|
+
"""
|
|
77
|
+
return "%s_%s_%d" % (self.op_name.replace('/', '_'), self.tensor_type, self.index)
|
|
78
|
+
|
|
79
|
+
def get_tensor_type_index(self: any) -> str:
|
|
80
|
+
"""
|
|
81
|
+
Get detail file name prefix, like _input_0
|
|
82
|
+
:return str
|
|
83
|
+
"""
|
|
84
|
+
return "_%s_%d" % (self.tensor_type, self.index)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class DetailInfo:
|
|
88
|
+
"""
|
|
89
|
+
The class for detail info
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
def __init__(self: any, tensor_id: TensorId, top_n: int, ignore_result: bool, max_line: int) -> None:
|
|
93
|
+
self.tensor_id = tensor_id
|
|
94
|
+
self.my_output_ops = ''
|
|
95
|
+
self.ground_truth_ops = ''
|
|
96
|
+
self.detail_format = ''
|
|
97
|
+
self.top_n = top_n
|
|
98
|
+
self.ignore_result = ignore_result
|
|
99
|
+
self.max_line = max_line
|
|
100
|
+
|
|
101
|
+
def check_arguments_valid(self: any) -> None:
|
|
102
|
+
"""
|
|
103
|
+
check arguments valid, if invalid, throw exception
|
|
104
|
+
"""
|
|
105
|
+
self.tensor_id.check_arguments_valid()
|
|
106
|
+
const_manager = ConstManager()
|
|
107
|
+
if self.top_n < const_manager.min_top_n or self.top_n > const_manager.max_top_n:
|
|
108
|
+
log.print_out_of_range_error('', 'top n', self.top_n,
|
|
109
|
+
'[%d, %d]' % (const_manager.min_top_n, const_manager.max_top_n))
|
|
110
|
+
raise CompareError(CompareError.MSACCUCMP_INDEX_OUT_OF_BOUNDS_ERROR)
|
|
111
|
+
|
|
112
|
+
def get_detail_op(self: any, fusion_rule: FusionRuleParser) -> (FusionOp, list):
|
|
113
|
+
"""
|
|
114
|
+
Get detail op by fusion rule
|
|
115
|
+
:param: fusion_rule: the fusion rule
|
|
116
|
+
:return: the fusion op, the fusion op list
|
|
117
|
+
"""
|
|
118
|
+
fusion_op_list, fusion_op = fusion_rule.get_fusion_op_list(self.tensor_id.op_name)
|
|
119
|
+
# get the map for {original_op_names, op_list}
|
|
120
|
+
right_to_left_map = fusion_rule_parser.make_right_to_left_multi_map(
|
|
121
|
+
fusion_op_list)
|
|
122
|
+
my_output_ops_str, ground_truth_ops_str = fusion_rule_parser.make_left_and_right_string(right_to_left_map)
|
|
123
|
+
# if right ops is empty, mark '*' indicates that the left op is a
|
|
124
|
+
# new operator, and there is no operator on the right that matches it
|
|
125
|
+
if ground_truth_ops_str == "":
|
|
126
|
+
ground_truth_ops_str = '*'
|
|
127
|
+
self.my_output_ops = my_output_ops_str.replace(',', ' ')
|
|
128
|
+
self.ground_truth_ops = ground_truth_ops_str.replace(',', ' ')
|
|
129
|
+
return fusion_op, fusion_op_list
|
|
130
|
+
|
|
131
|
+
def set_detail_format(self: any, shape_str: str, tensor_format: int, ground_truth_format: str) -> None:
|
|
132
|
+
"""
|
|
133
|
+
Set detail format by shape
|
|
134
|
+
:param shape_str: the shape string
|
|
135
|
+
:param tensor_format: tensor format
|
|
136
|
+
:param ground_truth_format: ground truth format
|
|
137
|
+
"""
|
|
138
|
+
if common.contain_depth_dimension(tensor_format):
|
|
139
|
+
self.detail_format = 'N C D H W'
|
|
140
|
+
else:
|
|
141
|
+
if tensor_format == DD.FORMAT_FRACTAL_Z:
|
|
142
|
+
self.detail_format = ' '.join(ground_truth_format)
|
|
143
|
+
else:
|
|
144
|
+
self.detail_format = "N C H W" if shape_str != "()" else "ID"
|
|
145
|
+
|
|
146
|
+
def check_and_set_format(self: any, shape_str: str, tensor_format: int, ground_truth_format: int) -> None:
|
|
147
|
+
"""
|
|
148
|
+
Check and Set detail format by shape
|
|
149
|
+
:param shape_str: the shape string
|
|
150
|
+
:param tensor_format: tensor format
|
|
151
|
+
:param ground_truth_format: ground truth format
|
|
152
|
+
"""
|
|
153
|
+
if tensor_format != ground_truth_format:
|
|
154
|
+
log.print_error_log("NPUDump tensor format not match Ground truth tensor format!"
|
|
155
|
+
"Cannot be directly compared.")
|
|
156
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_FORMAT_ERROR)
|
|
157
|
+
if common.contain_depth_dimension(tensor_format):
|
|
158
|
+
self.detail_format = 'N C D H W'
|
|
159
|
+
else:
|
|
160
|
+
self.detail_format = "N C H W" if shape_str != "()" else "ID"
|
|
161
|
+
|
|
162
|
+
def set_detail_ops(self: any, my_out_ops: str, ground_truth_ops: str) -> None:
|
|
163
|
+
"""
|
|
164
|
+
Check and Set detail format by shape
|
|
165
|
+
:param my_out_ops: the opname of my out tensor
|
|
166
|
+
:param ground_truth_ops: the opname of ground truth tensor
|
|
167
|
+
"""
|
|
168
|
+
self.my_output_ops = my_out_ops.replace(',', ' ')
|
|
169
|
+
self.ground_truth_ops = ground_truth_ops.replace(',', ' ')
|
|
170
|
+
|
|
171
|
+
def make_detail_header(self: any) -> str:
|
|
172
|
+
"""
|
|
173
|
+
Make detail header
|
|
174
|
+
"""
|
|
175
|
+
return "Index,%s,NPUDump,GroundTruth,AbsoluteError,RelativeError\n" % self.detail_format
|
|
176
|
+
|
|
177
|
+
def get_detail_info(self: any) -> str:
|
|
178
|
+
"""
|
|
179
|
+
Get detail_info
|
|
180
|
+
"""
|
|
181
|
+
return "NPUDump:%s\nGroundTruth:%s\nFormat:%s\n" % (self.my_output_ops, self.ground_truth_ops,
|
|
182
|
+
self.detail_format)
|