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,338 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
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
|
+
Utility helpers that support the torchair accuracy comparison flow.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
import datetime
|
|
23
|
+
import os
|
|
24
|
+
from typing import Any, Dict, List
|
|
25
|
+
|
|
26
|
+
import numpy as np
|
|
27
|
+
import pandas as pd
|
|
28
|
+
|
|
29
|
+
from msprobe.core.common.const import FileCheckConst
|
|
30
|
+
from msprobe.core.common.file_utils import FileChecker, create_directory, write_df_to_csv
|
|
31
|
+
from msprobe.core.common.log import logger
|
|
32
|
+
from msprobe.infer.utils.check.rule import Rule
|
|
33
|
+
from msprobe.infer.utils.constants import TENSOR_MAX_SIZE
|
|
34
|
+
from msprobe.infer.utils.util import safe_torch_load
|
|
35
|
+
|
|
36
|
+
GLOBAL_HISTORY_AIT_DUMP_PATH_LIST = ["msit_dump", "ait_dump"]
|
|
37
|
+
|
|
38
|
+
TOKEN_ID = "token_id"
|
|
39
|
+
DATA_ID = "data_id"
|
|
40
|
+
GOLDEN_DATA_PATH = "golden_data_path"
|
|
41
|
+
GOLDEN_DTYPE = "golden_dtype"
|
|
42
|
+
GOLDEN_SHAPE = "golden_shape"
|
|
43
|
+
GOLDEN_MAX_VALUE = "golden_max_value"
|
|
44
|
+
GOLDEN_MIN_VALUE = "golden_min_value"
|
|
45
|
+
GOLDEN_MEAN_VALUE = "golden_mean_value"
|
|
46
|
+
GOLDEN_OP_TYPE = "golden_op_type"
|
|
47
|
+
MY_DATA_PATH = "my_data_path"
|
|
48
|
+
MY_DTYPE = "my_dtype"
|
|
49
|
+
MY_SHAPE = "my_shape"
|
|
50
|
+
MY_MAX_VALUE = "my_max_value"
|
|
51
|
+
MY_MIN_VALUE = "my_min_value"
|
|
52
|
+
MY_MEAN_VALUE = "my_mean_value"
|
|
53
|
+
MY_OP_TYPE = "my_op_type"
|
|
54
|
+
CMP_FAIL_REASON = "cmp_fail_reason"
|
|
55
|
+
DTYPE = "dtype"
|
|
56
|
+
SHAPE = "shape"
|
|
57
|
+
MAX_VALUE = "max_value"
|
|
58
|
+
MIN_VALUE = "min_value"
|
|
59
|
+
MEAN_VALUE = "mean_value"
|
|
60
|
+
|
|
61
|
+
CSV_GOLDEN_HEADER_BASE = [
|
|
62
|
+
TOKEN_ID,
|
|
63
|
+
DATA_ID,
|
|
64
|
+
GOLDEN_DATA_PATH,
|
|
65
|
+
GOLDEN_OP_TYPE,
|
|
66
|
+
GOLDEN_DTYPE,
|
|
67
|
+
GOLDEN_SHAPE,
|
|
68
|
+
GOLDEN_MAX_VALUE,
|
|
69
|
+
GOLDEN_MIN_VALUE,
|
|
70
|
+
GOLDEN_MEAN_VALUE,
|
|
71
|
+
MY_DATA_PATH,
|
|
72
|
+
MY_OP_TYPE,
|
|
73
|
+
MY_DTYPE,
|
|
74
|
+
MY_SHAPE,
|
|
75
|
+
MY_MAX_VALUE,
|
|
76
|
+
MY_MIN_VALUE,
|
|
77
|
+
MY_MEAN_VALUE,
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _lazy_import_torch():
|
|
82
|
+
try:
|
|
83
|
+
import torch # pylint: disable=import-outside-toplevel
|
|
84
|
+
except ModuleNotFoundError as err:
|
|
85
|
+
if err.name == "torch":
|
|
86
|
+
logger.error("Missing dependency: torch. Please install torch to use torchair compare.")
|
|
87
|
+
raise
|
|
88
|
+
return torch
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def _lazy_cmp_alg_maps():
|
|
92
|
+
from msprobe.infer.utils import cmp_algorithm # pylint: disable=import-outside-toplevel
|
|
93
|
+
|
|
94
|
+
return cmp_algorithm.CMP_ALG_MAP, cmp_algorithm.CUSTOM_ALG_MAP
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def _build_csv_golden_header():
|
|
98
|
+
cmp_alg_map, _ = _lazy_cmp_alg_maps()
|
|
99
|
+
header = list(CSV_GOLDEN_HEADER_BASE)
|
|
100
|
+
header.extend(list(cmp_alg_map.keys()))
|
|
101
|
+
header.append(CMP_FAIL_REASON)
|
|
102
|
+
return header
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class BasicDataInfo:
|
|
106
|
+
"""Metadata holder for a pair of tensors."""
|
|
107
|
+
|
|
108
|
+
count_data_id = 0 # Count data_id, increment by 1 every time creating a new instance
|
|
109
|
+
TORCH_UNSUPPORTED_D_TYPE_MAP = {"uint16": "int32", "uint32": "int64"}
|
|
110
|
+
|
|
111
|
+
def __init__(self, golden_data_path, my_data_path, token_id=None, data_id=None, op_type=None):
|
|
112
|
+
global_path = os.path.realpath(golden_data_path.split(",")[0])
|
|
113
|
+
self._check_path(global_path)
|
|
114
|
+
my_real_path = os.path.realpath(my_data_path.split(",")[0])
|
|
115
|
+
self._check_path(my_real_path)
|
|
116
|
+
|
|
117
|
+
self.my_data_path, self.golden_data_path = os.path.realpath(my_data_path), os.path.realpath(golden_data_path)
|
|
118
|
+
self.token_id = self.get_token_id(self.my_data_path) if token_id is None else token_id
|
|
119
|
+
self.data_id = self.count_data_id if data_id is None else data_id
|
|
120
|
+
self.my_op_type, self.golden_op_type = self._validate_op_type(op_type)
|
|
121
|
+
self._count()
|
|
122
|
+
|
|
123
|
+
@staticmethod
|
|
124
|
+
def _check_path(path):
|
|
125
|
+
path_type = FileCheckConst.DIR if os.path.isdir(path) else FileCheckConst.FILE
|
|
126
|
+
FileChecker(path, path_type, ability=FileCheckConst.READ_ABLE).common_check()
|
|
127
|
+
|
|
128
|
+
@staticmethod
|
|
129
|
+
def _validate_op_type(op_type):
|
|
130
|
+
if op_type is None:
|
|
131
|
+
return None, None
|
|
132
|
+
|
|
133
|
+
if isinstance(op_type, (list, tuple)) and len(op_type) == 2:
|
|
134
|
+
return op_type[0], op_type[1]
|
|
135
|
+
raise ValueError("op_type must be a list or tuple containing two elements")
|
|
136
|
+
|
|
137
|
+
@classmethod
|
|
138
|
+
def _count(cls):
|
|
139
|
+
cls.count_data_id += 1
|
|
140
|
+
|
|
141
|
+
def to_dict(self):
|
|
142
|
+
return {
|
|
143
|
+
TOKEN_ID: str(self.token_id),
|
|
144
|
+
DATA_ID: str(self.data_id),
|
|
145
|
+
GOLDEN_DATA_PATH: self.golden_data_path,
|
|
146
|
+
GOLDEN_OP_TYPE: self.golden_op_type,
|
|
147
|
+
MY_DATA_PATH: self.my_data_path,
|
|
148
|
+
MY_OP_TYPE: self.my_op_type,
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
def get_token_id(self, cur_path):
|
|
152
|
+
dump_filename_idx = 4
|
|
153
|
+
dump_tensor_idx = 3
|
|
154
|
+
dirseg = cur_path.split(os.path.sep)
|
|
155
|
+
if len(dirseg) > 16:
|
|
156
|
+
raise RecursionError(f'The depth of "{cur_path}" directory is too deep.')
|
|
157
|
+
if len(dirseg) < dump_filename_idx:
|
|
158
|
+
return 0
|
|
159
|
+
flag1 = dirseg[-dump_tensor_idx] in {"tensors", "torch_tensors"}
|
|
160
|
+
flag2 = any(dirseg[-dump_filename_idx].startswith(x) for x in GLOBAL_HISTORY_AIT_DUMP_PATH_LIST)
|
|
161
|
+
if flag1 and flag2:
|
|
162
|
+
try:
|
|
163
|
+
token_id = int(dirseg[-1])
|
|
164
|
+
except (IndexError, AttributeError, TypeError, ValueError) as err:
|
|
165
|
+
logger.debug(f"get_token_id error, dirseg: {dirseg}, error: {err}")
|
|
166
|
+
token_id = 0
|
|
167
|
+
else:
|
|
168
|
+
token_id = self.get_token_id(os.path.dirname(cur_path))
|
|
169
|
+
return token_id
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def fill_row_data(
|
|
173
|
+
data_info: BasicDataInfo,
|
|
174
|
+
loaded_my_data: Any = None,
|
|
175
|
+
loaded_golden_data: Any = None,
|
|
176
|
+
):
|
|
177
|
+
golden_data_path, my_data_path = data_info.golden_data_path, data_info.my_data_path
|
|
178
|
+
row_data = data_info.to_dict()
|
|
179
|
+
if loaded_golden_data is None and not os.path.isfile(golden_data_path):
|
|
180
|
+
row_data[CMP_FAIL_REASON] = f"golden_data_path: {golden_data_path} is not a file."
|
|
181
|
+
return row_data
|
|
182
|
+
if loaded_my_data is None and not os.path.isfile(my_data_path):
|
|
183
|
+
row_data[CMP_FAIL_REASON] = f"my_data_path: {my_data_path} is not a file."
|
|
184
|
+
return row_data
|
|
185
|
+
golden_data = load_as_torch_tensor(golden_data_path, loaded_golden_data)
|
|
186
|
+
my_data = load_as_torch_tensor(my_data_path, loaded_my_data)
|
|
187
|
+
|
|
188
|
+
compare_metrics_dict = compare_data(golden_data, my_data)
|
|
189
|
+
tensor_basic_info_dict = set_tensor_basic_info_in_row_data(golden_data, my_data)
|
|
190
|
+
row_data.update(compare_metrics_dict)
|
|
191
|
+
row_data.update(tensor_basic_info_dict)
|
|
192
|
+
|
|
193
|
+
return row_data
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def load_as_torch_tensor(data_path, loaded_data=None):
|
|
197
|
+
torch = _lazy_import_torch()
|
|
198
|
+
if loaded_data is not None:
|
|
199
|
+
if str(loaded_data.dtype) in BasicDataInfo.TORCH_UNSUPPORTED_D_TYPE_MAP:
|
|
200
|
+
mapped = BasicDataInfo.TORCH_UNSUPPORTED_D_TYPE_MAP.get(str(loaded_data.dtype))
|
|
201
|
+
loaded_data = loaded_data.astype(mapped)
|
|
202
|
+
return loaded_data if isinstance(loaded_data, torch.Tensor) else torch.from_numpy(loaded_data)
|
|
203
|
+
return read_data(data_path)
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def get_tensor_basic_info(data: Any) -> Dict[str, Any]:
|
|
207
|
+
tensor_info: Dict[str, Any] = {}
|
|
208
|
+
tensor_info[DTYPE] = str(data.dtype)
|
|
209
|
+
tensor_info[SHAPE] = str(list(data.shape))
|
|
210
|
+
if 0 not in data.shape:
|
|
211
|
+
data = data.float()
|
|
212
|
+
tensor_info[MAX_VALUE] = data.max().item()
|
|
213
|
+
tensor_info[MIN_VALUE] = data.min().item()
|
|
214
|
+
tensor_info[MEAN_VALUE] = data.mean().item()
|
|
215
|
+
return tensor_info
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def set_tensor_basic_info_in_row_data(golden_data, my_data):
|
|
219
|
+
row_data: Dict[str, Any] = {}
|
|
220
|
+
golden_info = get_tensor_basic_info(golden_data)
|
|
221
|
+
row_data.update({f"golden_{key}": value for key, value in golden_info.items()})
|
|
222
|
+
|
|
223
|
+
my_info = get_tensor_basic_info(my_data)
|
|
224
|
+
row_data.update({f"my_{key}": value for key, value in my_info.items()})
|
|
225
|
+
return row_data
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def save_compare_result_to_csv(gathered_row_data, output_path=".", columns=None, rank_id=-1):
|
|
229
|
+
create_directory(output_path)
|
|
230
|
+
cur_time = datetime.datetime.now(datetime.timezone.utc).strftime("%Y%m%d%H%M%S")
|
|
231
|
+
columns = columns or _build_csv_golden_header()
|
|
232
|
+
if rank_id != -1:
|
|
233
|
+
csv_save_path = os.path.join(output_path, f"msit_cmp_report_rank{rank_id}_{cur_time}.csv")
|
|
234
|
+
else:
|
|
235
|
+
csv_save_path = os.path.join(output_path, f"msit_cmp_report_{cur_time}.csv")
|
|
236
|
+
gathered_row_data = list(
|
|
237
|
+
filter(
|
|
238
|
+
lambda item: not (CMP_FAIL_REASON in item and item[CMP_FAIL_REASON] == "data shape doesn't match."),
|
|
239
|
+
gathered_row_data,
|
|
240
|
+
)
|
|
241
|
+
)
|
|
242
|
+
for row_data in gathered_row_data[:]:
|
|
243
|
+
if GOLDEN_DTYPE in row_data and MY_DTYPE in row_data:
|
|
244
|
+
if (row_data[GOLDEN_DTYPE] == "torch.int8") ^ (row_data[MY_DTYPE] == "torch.int8"):
|
|
245
|
+
gathered_row_data.remove(row_data)
|
|
246
|
+
|
|
247
|
+
data_frame = pd.DataFrame(gathered_row_data, columns=columns)
|
|
248
|
+
data_frame.fillna(value="", inplace=True)
|
|
249
|
+
data_frame.dropna(axis=0, how="all", inplace=True)
|
|
250
|
+
write_df_to_csv(data_frame, csv_save_path)
|
|
251
|
+
logger.info(f"Saved comparing results: {csv_save_path}")
|
|
252
|
+
return csv_save_path
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
def compare_data(golden_data, my_data):
|
|
256
|
+
torch = _lazy_import_torch()
|
|
257
|
+
if not hasattr(compare_data, "index"):
|
|
258
|
+
compare_data.index = 0
|
|
259
|
+
|
|
260
|
+
golden_data_dtype = golden_data.dtype
|
|
261
|
+
my_data_dtype = my_data.dtype
|
|
262
|
+
if golden_data_dtype != torch.float32:
|
|
263
|
+
logger.debug(
|
|
264
|
+
f"The dtype of golden_data with index {compare_data.index} is {golden_data_dtype}, convert it to fp32"
|
|
265
|
+
)
|
|
266
|
+
if my_data_dtype != torch.float32:
|
|
267
|
+
logger.debug(f"The dtype of my_data with index {compare_data.index} is {my_data_dtype}, convert it to fp32")
|
|
268
|
+
golden_data_fp32 = golden_data.reshape(-1).float()
|
|
269
|
+
my_data_fp32 = my_data.reshape(-1).float()
|
|
270
|
+
compare_data.index += 1
|
|
271
|
+
compare_metrics_dict = compare_tensor(golden_data_fp32, my_data_fp32)
|
|
272
|
+
return compare_metrics_dict
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
def read_data(data_path):
|
|
276
|
+
torch = _lazy_import_torch()
|
|
277
|
+
data_path = os.path.realpath(data_path)
|
|
278
|
+
Rule.input_file().check(data_path, will_raise=True)
|
|
279
|
+
if data_path.endswith(".npy"):
|
|
280
|
+
data = torch.as_tensor(np.load(data_path, allow_pickle=False))
|
|
281
|
+
elif data_path.endswith((".pth", ".pt")):
|
|
282
|
+
data = safe_torch_load(data_path, map_location=torch.device("cpu"))
|
|
283
|
+
else:
|
|
284
|
+
logger.error(f"Unsupported data format {data_path}")
|
|
285
|
+
raise TypeError("Unsupported data format.")
|
|
286
|
+
|
|
287
|
+
if isinstance(data, torch.Tensor):
|
|
288
|
+
return data.cpu()
|
|
289
|
+
if isinstance(data, np.ndarray):
|
|
290
|
+
return torch.from_numpy(data)
|
|
291
|
+
if isinstance(data, (list, tuple)):
|
|
292
|
+
return torch.as_tensor(data)
|
|
293
|
+
logger.error(f"Unsupported tensor content type {type(data)} from {data_path}")
|
|
294
|
+
raise TypeError("Unsupported tensor content type.")
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
def compare_tensor(golden_data_fp32, my_data_fp32):
|
|
298
|
+
row_data: Dict[str, Any] = {}
|
|
299
|
+
fail_messages: List[str] = []
|
|
300
|
+
|
|
301
|
+
tensor_pass, message = check_tensor(golden_data_fp32, my_data_fp32)
|
|
302
|
+
if not tensor_pass:
|
|
303
|
+
logger.debug(f"check_tensor failed: {message}")
|
|
304
|
+
row_data[CMP_FAIL_REASON] = message
|
|
305
|
+
return row_data
|
|
306
|
+
|
|
307
|
+
cmp_alg_map, custom_alg_map = _lazy_cmp_alg_maps()
|
|
308
|
+
for name, cmp_func in list(cmp_alg_map.items()) + list(custom_alg_map.items()):
|
|
309
|
+
result, message = cmp_func(golden_data_fp32, my_data_fp32)
|
|
310
|
+
row_data[name] = result
|
|
311
|
+
if message:
|
|
312
|
+
fail_messages.append(message)
|
|
313
|
+
row_data[CMP_FAIL_REASON] = " ".join(fail_messages)
|
|
314
|
+
return row_data
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
def check_tensor(golden_data_fp32, my_data_fp32):
|
|
318
|
+
torch = _lazy_import_torch()
|
|
319
|
+
tensor_pass = True
|
|
320
|
+
fail_reasons = []
|
|
321
|
+
|
|
322
|
+
if len(golden_data_fp32) != len(my_data_fp32):
|
|
323
|
+
fail_reasons.append("data shape doesn't match.")
|
|
324
|
+
tensor_pass = False
|
|
325
|
+
if not torch.all(torch.isfinite(golden_data_fp32)):
|
|
326
|
+
fail_reasons.append("golden_data includes NAN or inf.")
|
|
327
|
+
tensor_pass = False
|
|
328
|
+
if not torch.all(torch.isfinite(my_data_fp32)):
|
|
329
|
+
fail_reasons.append("my_data includes NAN or inf.")
|
|
330
|
+
tensor_pass = False
|
|
331
|
+
return tensor_pass, " ".join(fail_reasons)
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
__all__ = [
|
|
335
|
+
"BasicDataInfo",
|
|
336
|
+
"fill_row_data",
|
|
337
|
+
"save_compare_result_to_csv",
|
|
338
|
+
]
|
msprobe/core/compare/utils.py
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
1
|
+
# -------------------------------------------------------------------------
|
|
2
|
+
# This file is part of the MindStudio project.
|
|
3
|
+
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
|
|
3
4
|
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# You may obtain a copy of
|
|
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:
|
|
7
8
|
#
|
|
8
|
-
#
|
|
9
|
+
# http://license.coscl.org.cn/MulanPSL2
|
|
9
10
|
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
# See the
|
|
14
|
-
#
|
|
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
|
+
# -------------------------------------------------------------------------
|
|
15
16
|
|
|
16
17
|
import os
|
|
17
18
|
import re
|
|
@@ -24,7 +25,8 @@ import numpy as np
|
|
|
24
25
|
import pandas as pd
|
|
25
26
|
|
|
26
27
|
from msprobe.core.common.const import Const, CompareConst, FileCheckConst
|
|
27
|
-
from msprobe.core.common.utils import CompareException, check_regex_prefix_format_valid, logger,
|
|
28
|
+
from msprobe.core.common.utils import CompareException, check_regex_prefix_format_valid, logger, \
|
|
29
|
+
safe_get_value, is_module_available
|
|
28
30
|
from msprobe.core.common.file_utils import check_file_or_directory_path, load_json
|
|
29
31
|
|
|
30
32
|
json_file_mapping = {
|
|
@@ -58,10 +60,10 @@ def extract_json(dirname, json_file_type):
|
|
|
58
60
|
|
|
59
61
|
|
|
60
62
|
def set_stack_json_path(input_param):
|
|
61
|
-
npu_data_dir = os.path.dirname(input_param.get("
|
|
63
|
+
npu_data_dir = os.path.dirname(input_param.get("npu_path"))
|
|
62
64
|
stack_path = extract_json(npu_data_dir, json_file_type=Const.STACK_JSON_FILE)
|
|
63
|
-
input_param["
|
|
64
|
-
return bool(stack_path)
|
|
65
|
+
input_param["stack_path"] = stack_path if stack_path else None
|
|
66
|
+
return bool(stack_path), input_param
|
|
65
67
|
|
|
66
68
|
|
|
67
69
|
def check_and_return_dir_contents(dump_dir, prefix):
|
|
@@ -101,7 +103,8 @@ def read_op(op_data, op_name):
|
|
|
101
103
|
split_name = op_name.split(Const.SEP)
|
|
102
104
|
if split_name[-1] == Const.DEBUG:
|
|
103
105
|
op_parsed_list = op_item_parse(op_data, op_name, Const.DEBUG)
|
|
104
|
-
|
|
106
|
+
# 倒序校验parameters_grad,先倒数1,再倒数2,排除因为parameters_grad在模块名中而误判的风险。-1适配老版,-2适配新版。
|
|
107
|
+
elif split_name[-1] == Const.PARAMS_GRAD or (len(split_name) >= 2 and split_name[-2] == Const.PARAMS_GRAD):
|
|
105
108
|
op_parsed_list = op_item_parse(op_data, op_name, Const.PARAMS_GRAD)
|
|
106
109
|
else:
|
|
107
110
|
op_parsed_list = []
|
|
@@ -571,15 +574,23 @@ def get_accuracy(result, n_dict, b_dict, dump_mode):
|
|
|
571
574
|
n_requires_grad, CompareConst.NAN,
|
|
572
575
|
n_struct[2], CompareConst.NAN,
|
|
573
576
|
False,
|
|
574
|
-
CompareConst.NAN
|
|
577
|
+
CompareConst.NAN,
|
|
578
|
+
None
|
|
575
579
|
]
|
|
576
580
|
result.append(result_item)
|
|
577
581
|
continue
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
582
|
+
if dump_mode == Const.ALL:
|
|
583
|
+
result_item = [
|
|
584
|
+
n_name, CompareConst.NAN, n_struct[0], CompareConst.NAN, n_struct[1], CompareConst.NAN,
|
|
585
|
+
n_requires_grad, CompareConst.NAN,
|
|
586
|
+
" ", " ", " ", " ", " ", " "
|
|
587
|
+
]
|
|
588
|
+
else:
|
|
589
|
+
result_item = [
|
|
590
|
+
n_name, CompareConst.NAN, n_struct[0], CompareConst.NAN, n_struct[1], CompareConst.NAN,
|
|
591
|
+
n_requires_grad, CompareConst.NAN,
|
|
592
|
+
" ", " ", " ", " ", " ", " ", " ", " "
|
|
593
|
+
]
|
|
583
594
|
summary_data = n_dict.get(CompareConst.SUMMARY)[n_start + index]
|
|
584
595
|
result_item.extend(summary_data)
|
|
585
596
|
summary_data = [CompareConst.NAN for _ in range(len(n_dict.get(CompareConst.SUMMARY)[0]))]
|
|
@@ -592,7 +603,7 @@ def get_accuracy(result, n_dict, b_dict, dump_mode):
|
|
|
592
603
|
raise CompareException(CompareException.INDEX_OUT_OF_BOUNDS_ERROR) from e
|
|
593
604
|
|
|
594
605
|
err_msg = ""
|
|
595
|
-
result_item.append(CompareConst.
|
|
606
|
+
result_item.append(CompareConst.PASS)
|
|
596
607
|
result_item.append(err_msg)
|
|
597
608
|
result_item = stack_column_process(result_item, has_stack, index, key, npu_stack_info)
|
|
598
609
|
if dump_mode == Const.ALL:
|
|
@@ -605,11 +616,12 @@ def get_accuracy(result, n_dict, b_dict, dump_mode):
|
|
|
605
616
|
_, b_num_input, b_num_output, b_num_params, b_num_params_grad = count_struct(b_dict)
|
|
606
617
|
|
|
607
618
|
get_accuracy_core(0, n_num_input, 0, b_num_input, CompareConst.INPUT_STRUCT)
|
|
608
|
-
get_accuracy_core(n_num_input
|
|
619
|
+
get_accuracy_core(n_num_input, n_num_params, b_num_input, b_num_params,
|
|
609
620
|
CompareConst.PARAMS_STRUCT)
|
|
610
|
-
get_accuracy_core(n_num_input, n_num_output, b_num_input, b_num_output,
|
|
611
|
-
|
|
612
|
-
|
|
621
|
+
get_accuracy_core(n_num_input + n_num_params, n_num_output, b_num_input + b_num_params, b_num_output,
|
|
622
|
+
CompareConst.OUTPUT_STRUCT)
|
|
623
|
+
get_accuracy_core(n_num_input + n_num_params + n_num_output, n_num_params_grad,
|
|
624
|
+
b_num_input + b_num_params + b_num_output, b_num_params_grad,
|
|
613
625
|
CompareConst.PARAMS_GRAD_STRUCT)
|
|
614
626
|
|
|
615
627
|
|
|
@@ -650,19 +662,18 @@ def get_paired_dirs(npu_path, bench_path):
|
|
|
650
662
|
|
|
651
663
|
|
|
652
664
|
def _compare_parser(parser):
|
|
653
|
-
parser.add_argument("-
|
|
654
|
-
help="<
|
|
665
|
+
parser.add_argument("-m", "--mode", dest="mode", type=str, default="auto",
|
|
666
|
+
help="<optional> Comparison mode: 'auto' (default) or 'torchair' for torchair accuracy compare",
|
|
667
|
+
required=False)
|
|
668
|
+
parser.add_argument("-tp", "--target_path", dest="target_path", type=str,
|
|
669
|
+
help="<Required> The compare target device path", required=True)
|
|
670
|
+
parser.add_argument("-gp", "--golden_path", dest="golden_path", type=str,
|
|
671
|
+
help="<Required> The compare golden device path", required=True)
|
|
655
672
|
parser.add_argument("-o", "--output_path", dest="output_path", type=str,
|
|
656
673
|
help="<Required> The compare task result out path. Default path: ./output",
|
|
657
674
|
required=False, default="./output", nargs="?", const="./output")
|
|
658
|
-
parser.add_argument("-
|
|
659
|
-
help="<optional> Whether to save stack info.", required=False)
|
|
660
|
-
parser.add_argument("-c", "--compare_only", dest="compare_only", action="store_true",
|
|
661
|
-
help="<optional> Whether to give advisor.", required=False)
|
|
662
|
-
parser.add_argument("-f", "--fuzzy_match", dest="fuzzy_match", action="store_true",
|
|
675
|
+
parser.add_argument("-fm", "--fuzzy_match", dest="fuzzy_match", action="store_true",
|
|
663
676
|
help="<optional> Whether to perform a fuzzy match on the api name.", required=False)
|
|
664
|
-
parser.add_argument("-hl", "--highlight", dest="highlight", action="store_true",
|
|
665
|
-
help="<optional> Whether to set result highlighting.", required=False)
|
|
666
677
|
parser.add_argument("-cm", "--cell_mapping", dest="cell_mapping", type=str, nargs='?', const=True,
|
|
667
678
|
help="<optional> The cell mapping file path.", required=False)
|
|
668
679
|
parser.add_argument("-am", "--api_mapping", dest="api_mapping", type=str, nargs='?', const=True,
|
|
@@ -673,12 +684,41 @@ def _compare_parser(parser):
|
|
|
673
684
|
help="<optional> The layer mapping file path.", required=False)
|
|
674
685
|
parser.add_argument("-da", "--diff_analyze", dest="diff_analyze", action="store_true",
|
|
675
686
|
help="<optional> Whether to perform a diff analyze on the api name.", required=False)
|
|
687
|
+
parser.add_argument("-tensor_log", "--is_print_compare_log", dest="is_print_compare_log", action="store_true",
|
|
688
|
+
help="<Optional> whether print compare log for compare auto mode task.", required=False)
|
|
689
|
+
parser.add_argument("-fr", "--fusion_rule_file", dest="fusion_rule_file", type=str, default="",
|
|
690
|
+
help="<Optional> The fusion rule file path.", required=False)
|
|
691
|
+
parser.add_argument("-qfr", "--quant_fusion_rule_file", dest="quant_fusion_rule_file", type=str, default="",
|
|
692
|
+
help="<Optional> The quant fusion rule file path.", required=False)
|
|
693
|
+
parser.add_argument("-cfr", "--close_fusion_rule_file", dest="close_fusion_rule_file", type=str, default="",
|
|
694
|
+
help="<Optional> The close fusion rule file path.", required=False)
|
|
695
|
+
# rank:ms静态图比对、推理离线模型一键式比对
|
|
696
|
+
parser.add_argument("--rank", dest="rank", type=str, required=False,
|
|
697
|
+
help="<optional> Ranks to compare when compare kernel of MindSpore for <compare auto>. "
|
|
698
|
+
"Ranks to compare for <torchair dumps>. "
|
|
699
|
+
"Input rank ID [0, 255] for <compare offline_model>.")
|
|
700
|
+
parser.add_argument("--step", dest="step", type=str, required=False,
|
|
701
|
+
help="<optional> Steps to compare when compare kernel of MindSpore.")
|
|
702
|
+
parser.add_argument('--input_data', dest="input_data", default='',
|
|
703
|
+
help='The input data path of the model. Separate multiple inputs with commas(,).'
|
|
704
|
+
' E.g: input_0.bin,input_1.bin')
|
|
705
|
+
parser.add_argument('--input_shape', dest="input_shape", default='',
|
|
706
|
+
help="Shape of input shape. Separate multiple nodes with semicolons(;)."
|
|
707
|
+
" E.g: \"input_name1:1,224,224,3;input_name2:3,300\"")
|
|
708
|
+
parser.add_argument('--output_size', dest="output_size", default='',
|
|
709
|
+
help='The size of output. Separate multiple sizes with commas(,). E.g: 10200,34000')
|
|
710
|
+
parser.add_argument('--dym_shape_range', dest="dym_shape_range", default='',
|
|
711
|
+
help="Dynamic shape range using in dynamic model, using this means ignore input_shape."
|
|
712
|
+
" E.g: \"input_name1:1,3,200\~224,224-230;input_name2:1,300\"")
|
|
713
|
+
parser.add_argument('-ofs', '--onnx_fusion_switch', dest="onnx_fusion_switch", default=True,
|
|
714
|
+
help='Onnxruntime fusion switch, set False for dump complete onnx data when necessary. '
|
|
715
|
+
'Usage: -ofs False')
|
|
676
716
|
|
|
677
717
|
|
|
678
718
|
def get_sorted_ranks(npu_dump_dir, bench_dump_dir):
|
|
679
719
|
"""
|
|
680
720
|
get the ranks and match by order
|
|
681
|
-
"""
|
|
721
|
+
"""
|
|
682
722
|
unsorted_npu_ranks = check_and_return_dir_contents(npu_dump_dir, 'rank')
|
|
683
723
|
unsorted_bench_ranks = check_and_return_dir_contents(bench_dump_dir, 'rank')
|
|
684
724
|
# 正则匹配已经校验rank后面必是数字,或者无数字的rank
|
|
@@ -738,6 +778,7 @@ def mp_logger_init(ranks_str):
|
|
|
738
778
|
def wrap_logger(fn):
|
|
739
779
|
def inner(msg, *args, **kwargs):
|
|
740
780
|
return fn(ranks_str + msg, *args, **kwargs)
|
|
781
|
+
|
|
741
782
|
return inner
|
|
742
783
|
|
|
743
784
|
logger.info = wrap_logger(logger.info)
|
|
@@ -767,7 +808,7 @@ def compare_entry(compare_func, input_param, output_path, nr, kwargs):
|
|
|
767
808
|
logger.error(f"Invalid or missing 'task' in dump.json. Skipping {nr} comparison.")
|
|
768
809
|
|
|
769
810
|
|
|
770
|
-
def compare_distributed_inner(npu_dump_dir, bench_dump_dir, output_path,
|
|
811
|
+
def compare_distributed_inner(npu_dump_dir, bench_dump_dir, output_path, **kwargs):
|
|
771
812
|
def extract_compare_param(_file_type):
|
|
772
813
|
npu_data_dir = os.path.join(npu_dump_dir, nr)
|
|
773
814
|
bench_data_dir = os.path.join(bench_dump_dir, br)
|
|
@@ -777,9 +818,9 @@ def compare_distributed_inner(npu_dump_dir, bench_dump_dir, output_path, compare
|
|
|
777
818
|
logger.debug(f'Did not find paired {_file_type} in {nr} and {br}, skip comparing.')
|
|
778
819
|
return {}, True
|
|
779
820
|
_input_param = {
|
|
780
|
-
'
|
|
781
|
-
'
|
|
782
|
-
'is_print_compare_log': kwargs.get('is_print_compare_log',
|
|
821
|
+
'npu_path': npu_path,
|
|
822
|
+
'bench_path': bench_path,
|
|
823
|
+
'is_print_compare_log': kwargs.get('is_print_compare_log', False)
|
|
783
824
|
}
|
|
784
825
|
return _input_param, False
|
|
785
826
|
|
|
@@ -812,22 +853,72 @@ def compare_distributed_inner(npu_dump_dir, bench_dump_dir, output_path, compare
|
|
|
812
853
|
|
|
813
854
|
dump_data = load_json(pre_check_dump_path)
|
|
814
855
|
|
|
856
|
+
compare_framework = dump_data.get("framework", None)
|
|
857
|
+
if compare_framework == Const.PT_FRAMEWORK:
|
|
858
|
+
from msprobe.pytorch.compare.pt_compare import pt_compare
|
|
859
|
+
compare_func = pt_compare
|
|
860
|
+
elif compare_framework == Const.MS_FRAMEWORK:
|
|
861
|
+
from msprobe.mindspore.compare.ms_compare import ms_compare
|
|
862
|
+
compare_func = ms_compare
|
|
863
|
+
else:
|
|
864
|
+
logger.error(f"Unrecognized framework, now is {compare_framework}, please check dump.json.")
|
|
865
|
+
raise CompareException(CompareException.INVALID_TASK_ERROR)
|
|
866
|
+
|
|
867
|
+
compare_json_file_type = Const.DUMP_JSON_FILE
|
|
868
|
+
if dump_data.get('level') == Const.LEVEL_DEBUG:
|
|
869
|
+
compare_json_file_type = Const.DEBUG_JSON_FILE
|
|
815
870
|
# ------------------统计量、md5比对------------------
|
|
816
871
|
if dump_data.get('task') == Const.STATISTICS:
|
|
817
872
|
# dump数据为统计量或md5时,多进程加速比对
|
|
818
873
|
input_param_nr_list = []
|
|
819
874
|
for nr, br in zip(npu_ranks, bench_ranks):
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
input_param_nr_list.append((input_param, nr))
|
|
875
|
+
input_param, skip = extract_compare_param(compare_json_file_type)
|
|
876
|
+
if not skip:
|
|
877
|
+
input_param_nr_list.append((input_param, nr))
|
|
824
878
|
func_args = (compare_func, input_param_nr_list, output_path, kwargs)
|
|
825
879
|
multi_statistics_compare(multi_ranks_compare, func_args)
|
|
826
880
|
return
|
|
827
881
|
|
|
828
882
|
# ------------------真实数据比对------------------
|
|
829
883
|
for nr, br in zip(npu_ranks, bench_ranks):
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
884
|
+
input_param, skip = extract_compare_param(compare_json_file_type)
|
|
885
|
+
if not skip:
|
|
886
|
+
compare_entry(compare_func, input_param, output_path, nr, kwargs)
|
|
887
|
+
|
|
888
|
+
|
|
889
|
+
def check_input_param_path(input_param):
|
|
890
|
+
npu_path = input_param.get("npu_path", None)
|
|
891
|
+
bench_path = input_param.get("bench_path", None)
|
|
892
|
+
check_file_or_directory_path(npu_path)
|
|
893
|
+
check_file_or_directory_path(bench_path)
|
|
894
|
+
|
|
895
|
+
|
|
896
|
+
def get_compare_framework(target_path, golden_path):
|
|
897
|
+
target_dump_json_content = load_json(target_path)
|
|
898
|
+
golden_dump_json_content = load_json(golden_path)
|
|
899
|
+
target_framework = target_dump_json_content.get("framework", None)
|
|
900
|
+
golden_framework = golden_dump_json_content.get("framework", None)
|
|
901
|
+
if target_framework == Const.PT_FRAMEWORK and golden_framework == Const.PT_FRAMEWORK:
|
|
902
|
+
frame_name = Const.PT_FRAMEWORK
|
|
903
|
+
elif (target_framework in [Const.MS_FRAMEWORK, Const.MT_FRAMEWORK] and
|
|
904
|
+
golden_framework in [Const.PT_FRAMEWORK, Const.MS_FRAMEWORK]):
|
|
905
|
+
frame_name = Const.MS_FRAMEWORK
|
|
906
|
+
else:
|
|
907
|
+
logger.error(f"Unrecognized framework, target now is {target_framework}, golden now is {golden_framework},"
|
|
908
|
+
f" please check dump.json.")
|
|
909
|
+
raise CompareException(CompareException.INVALID_TASK_ERROR)
|
|
910
|
+
return frame_name
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
def check_input_param_path_and_framework(args, target_framework):
|
|
914
|
+
compare_framework = get_compare_framework(args.target_path, args.golden_path)
|
|
915
|
+
if compare_framework != target_framework:
|
|
916
|
+
logger.error(f"Expected frame to be {target_framework}, actual is {compare_framework}, please check dump.json.")
|
|
917
|
+
raise CompareException(CompareException.INVALID_TASK_ERROR)
|
|
918
|
+
|
|
919
|
+
if target_framework == Const.PT_FRAMEWORK and not is_module_available("torch"):
|
|
920
|
+
logger.error("PyTorch does not exist, please install PyTorch library")
|
|
921
|
+
raise Exception("PyTorch does not exist, please install PyTorch library")
|
|
922
|
+
if target_framework == Const.MS_FRAMEWORK and not is_module_available("mindspore"):
|
|
923
|
+
logger.error("MindSpore does not exist, please install MindSpore library")
|
|
924
|
+
raise Exception("MindSpore does not exist, please install MindSpore library")
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
1
|
+
# -------------------------------------------------------------------------
|
|
2
|
+
# This file is part of the MindStudio project.
|
|
3
|
+
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
|
|
3
4
|
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# You may obtain a copy of
|
|
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:
|
|
7
8
|
#
|
|
8
|
-
#
|
|
9
|
+
# http://license.coscl.org.cn/MulanPSL2
|
|
9
10
|
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
# See the
|
|
14
|
-
#
|
|
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
|
+
# -------------------------------------------------------------------------
|
|
15
16
|
|
|
16
17
|
import msprobe.core.config_check.checkers
|
|
17
18
|
from msprobe.core.config_check.config_checker import ConfigChecker
|