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,112 @@
|
|
|
1
|
+
# -------------------------------------------------------------------------
|
|
2
|
+
# This file is part of the MindStudio project.
|
|
3
|
+
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
|
|
4
|
+
#
|
|
5
|
+
# MindStudio is licensed under Mulan PSL v2.
|
|
6
|
+
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
7
|
+
# You may obtain a copy of Mulan PSL v2 at:
|
|
8
|
+
#
|
|
9
|
+
# http://license.coscl.org.cn/MulanPSL2
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
12
|
+
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
13
|
+
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
14
|
+
# See the Mulan PSL v2 for more details.
|
|
15
|
+
# -------------------------------------------------------------------------
|
|
16
|
+
|
|
17
|
+
import re
|
|
18
|
+
|
|
19
|
+
PATH_WHITE_LIST_REGEX = re.compile(r"[^_A-Za-z0-9/.-]")
|
|
20
|
+
|
|
21
|
+
CONFIG_FILE_MAX_SIZE = 1 * 1024 * 1024 # work for .ini config file
|
|
22
|
+
TEXT_FILE_MAX_SIZE = 100 * 1024 * 1024 # work for txt, py
|
|
23
|
+
CSV_FILE_MAX_SIZE = 1024 * 1024 * 1024
|
|
24
|
+
JSON_FILE_MAX_SIZE = 1024 * 1024 * 1024
|
|
25
|
+
ONNX_MODEL_MAX_SIZE = 2 * 1024 * 1024 * 1024
|
|
26
|
+
TENSOR_MAX_SIZE = 10 * 1024 * 1024 * 1024
|
|
27
|
+
MODEL_WEIGHT_MAX_SIZE = 300 * 1024 * 1024 * 1024
|
|
28
|
+
INPUT_FILE_MAX_SIZE = 5 * 1024 * 1024 * 1024
|
|
29
|
+
LOG_FILE_MAX_SIZE = 100 * 1024 * 1024
|
|
30
|
+
|
|
31
|
+
EXT_SIZE_MAPPING = {
|
|
32
|
+
".ini": CONFIG_FILE_MAX_SIZE,
|
|
33
|
+
'.csv': CSV_FILE_MAX_SIZE,
|
|
34
|
+
'.json': JSON_FILE_MAX_SIZE,
|
|
35
|
+
'.txt': TEXT_FILE_MAX_SIZE,
|
|
36
|
+
'.py': TEXT_FILE_MAX_SIZE,
|
|
37
|
+
'.pth': MODEL_WEIGHT_MAX_SIZE,
|
|
38
|
+
'.bin': MODEL_WEIGHT_MAX_SIZE,
|
|
39
|
+
'.onnx': ONNX_MODEL_MAX_SIZE,
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
MAX_RECUR_DEPTH = 998
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class FileCheckConst:
|
|
46
|
+
"""
|
|
47
|
+
Class for file check const
|
|
48
|
+
"""
|
|
49
|
+
READ_ABLE = "r"
|
|
50
|
+
WRITE_ABLE = "w"
|
|
51
|
+
EXECUTE_ABLE = "x"
|
|
52
|
+
READ_WRITE_ABLE = "rw"
|
|
53
|
+
READ_EXECUTE_ABLE = "rx"
|
|
54
|
+
WRITE_EXECUTE_ABLE = "wx"
|
|
55
|
+
READ_WRITE_EXECUTE_ABLE = "rwx"
|
|
56
|
+
PERM_OPTIONS = [READ_ABLE, WRITE_ABLE, EXECUTE_ABLE, READ_WRITE_ABLE, READ_EXECUTE_ABLE, READ_WRITE_EXECUTE_ABLE]
|
|
57
|
+
|
|
58
|
+
DIRECTORY_LENGTH = 4096
|
|
59
|
+
FILE_NAME_LENGTH = 255
|
|
60
|
+
FILE_VALID_PATTERN = r"^[a-zA-Z0-9_.:/-]+$"
|
|
61
|
+
FILE_PATTERN = r'^[a-zA-Z0-9_./-]+$'
|
|
62
|
+
PKL_SUFFIX = ".pkl"
|
|
63
|
+
NUMPY_SUFFIX = ".npy"
|
|
64
|
+
JSON_SUFFIX = ".json"
|
|
65
|
+
PT_SUFFIX = ".pt"
|
|
66
|
+
BIN_SUFFIX = ".bin"
|
|
67
|
+
CSV_SUFFIX = ".csv"
|
|
68
|
+
XLSX_SUFFIX = ".xlsx"
|
|
69
|
+
YAML_SUFFIX = ".yaml"
|
|
70
|
+
IR_SUFFIX = ".ir"
|
|
71
|
+
ZIP_SUFFIX = ".zip"
|
|
72
|
+
SHELL_SUFFIX = ".sh"
|
|
73
|
+
LOG_SUFFIX = ".log"
|
|
74
|
+
ONNX_SUFFIX = '.onnx'
|
|
75
|
+
OM_SUFFIX = '.om'
|
|
76
|
+
MAX_PKL_SIZE = 1073741824 # 1 * 1024 * 1024 * 1024
|
|
77
|
+
MAX_NUMPY_SIZE = 10737418240 # 10 * 1024 * 1024 * 1024
|
|
78
|
+
MAX_JSON_SIZE = 1073741824 # 1 * 1024 * 1024 * 1024
|
|
79
|
+
MAX_PT_SIZE = 10737418240 # 10 * 1024 * 1024 * 1024
|
|
80
|
+
MAX_BIN_SIZE = 10737418240 # 10 * 1024 * 1024 * 1024
|
|
81
|
+
MAX_CSV_SIZE = 1073741824 # 1 * 1024 * 1024 * 1024
|
|
82
|
+
MAX_XLSX_SIZE = 1073741824 # 1 * 1024 * 1024 * 1024
|
|
83
|
+
MAX_YAML_SIZE = 1073741824 # 1 * 1024 * 1024 * 1024
|
|
84
|
+
MAX_IR_SIZE = 1073741824 # 1 * 1024 * 1024 * 1024
|
|
85
|
+
MAX_ZIP_SIZE = 10737418240 # 10 * 1024 * 1024 * 1024
|
|
86
|
+
MAX_FILE_IN_ZIP_SIZE = 1073741824 # 1 * 1024 * 1024 * 1024
|
|
87
|
+
MAX_FILE_SIZE = 1073741824 # 1 * 1024 * 1024 * 1024
|
|
88
|
+
COMMON_FILE_SIZE = 1073741824 # 1 * 1024 * 1024 * 1024
|
|
89
|
+
MAX_LOG_SIZE = 10737418240 # 1 * 1024 * 1024 * 1024
|
|
90
|
+
MAX_COMMON_FILE_SIZE = 10 * 1024 * 1024 * 1024 # 10GB
|
|
91
|
+
MAX_ONNX_SIZE = 10737418240 # 1 * 1024 * 1024 * 1024
|
|
92
|
+
MAX_OM_SIZE = 10737418240 # 10 * 1024 * 1024 * 1024
|
|
93
|
+
DIR = "dir"
|
|
94
|
+
FILE = "file"
|
|
95
|
+
DATA_DIR_AUTHORITY = 0o750
|
|
96
|
+
DATA_FILE_AUTHORITY = 0o640
|
|
97
|
+
FILE_SIZE_DICT = {
|
|
98
|
+
PKL_SUFFIX: MAX_PKL_SIZE,
|
|
99
|
+
NUMPY_SUFFIX: MAX_NUMPY_SIZE,
|
|
100
|
+
JSON_SUFFIX: MAX_JSON_SIZE,
|
|
101
|
+
PT_SUFFIX: MAX_PT_SIZE,
|
|
102
|
+
BIN_SUFFIX: MAX_BIN_SIZE,
|
|
103
|
+
CSV_SUFFIX: MAX_CSV_SIZE,
|
|
104
|
+
XLSX_SUFFIX: MAX_XLSX_SIZE,
|
|
105
|
+
YAML_SUFFIX: MAX_YAML_SIZE,
|
|
106
|
+
IR_SUFFIX: MAX_IR_SIZE,
|
|
107
|
+
ZIP_SUFFIX: MAX_ZIP_SIZE,
|
|
108
|
+
LOG_SUFFIX: MAX_LOG_SIZE,
|
|
109
|
+
ONNX_SUFFIX: MAX_ONNX_SIZE,
|
|
110
|
+
OM_SUFFIX: MAX_OM_SIZE
|
|
111
|
+
}
|
|
112
|
+
CSV_BLACK_LIST = r'^[+-=%@\+\-=%@]|;[+-=%@\+\-=%@]'
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
# -------------------------------------------------------------------------
|
|
2
|
+
# This file is part of the MindStudio project.
|
|
3
|
+
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
|
|
4
|
+
#
|
|
5
|
+
# MindStudio is licensed under Mulan PSL v2.
|
|
6
|
+
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
7
|
+
# You may obtain a copy of Mulan PSL v2 at:
|
|
8
|
+
#
|
|
9
|
+
# http://license.coscl.org.cn/MulanPSL2
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
12
|
+
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
13
|
+
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
14
|
+
# See the Mulan PSL v2 for more details.
|
|
15
|
+
# -------------------------------------------------------------------------
|
|
16
|
+
|
|
17
|
+
import os
|
|
18
|
+
import sys
|
|
19
|
+
import stat
|
|
20
|
+
import re
|
|
21
|
+
import logging
|
|
22
|
+
from enum import Enum
|
|
23
|
+
|
|
24
|
+
from msprobe.core.common.log import logger
|
|
25
|
+
from msprobe.infer.utils.constants import PATH_WHITE_LIST_REGEX
|
|
26
|
+
from msprobe.infer.utils.check import Rule
|
|
27
|
+
from msprobe.infer.utils.constants import CONFIG_FILE_MAX_SIZE
|
|
28
|
+
|
|
29
|
+
MAX_SIZE_UNLIMITE = -1 # 不限制,必须显式表示不限制,读取必须传入
|
|
30
|
+
MAX_SIZE_LIMITE_CONFIG_FILE = 10 * 1024 * 1024 # 10M 普通配置文件,可以根据实际要求变更
|
|
31
|
+
MAX_SIZE_LIMITE_NORMAL_FILE = 4 * 1024 * 1024 * 1024 # 4G 普通模型文件,可以根据实际要求变更
|
|
32
|
+
MAX_SIZE_LIMITE_MODEL_FILE = 100 * 1024 * 1024 * 1024 # 100G 超大模型文件,需要确定能处理大文件,可以根据实际要求变更
|
|
33
|
+
|
|
34
|
+
PATH_WHITE_LIST_REGEX_WIN = re.compile(r"[^_:\\A-Za-z0-9/.-]")
|
|
35
|
+
|
|
36
|
+
PERMISSION_NORMAL = 0o640 # 普通文件
|
|
37
|
+
PERMISSION_KEY = 0o600 # 密钥文件
|
|
38
|
+
READ_FILE_NOT_PERMITTED_STAT = stat.S_IWGRP | stat.S_IWOTH
|
|
39
|
+
WRITE_FILE_NOT_PERMITTED_STAT = stat.S_IWGRP | stat.S_IWOTH
|
|
40
|
+
|
|
41
|
+
SOLUTION_LEVEL = 35
|
|
42
|
+
SOLUTION_LEVEL_WIN = 45
|
|
43
|
+
logging.addLevelName(SOLUTION_LEVEL, "\033[1;32m" + "SOLUTION" + "\033[0m") # green [SOLUTION]
|
|
44
|
+
logging.addLevelName(SOLUTION_LEVEL_WIN, "SOLUTION_WIN")
|
|
45
|
+
|
|
46
|
+
RAW_INPUT_PATH = "RAW_INPUT_PATH"
|
|
47
|
+
|
|
48
|
+
MALICIOUS_CSV_PATTERN = re.compile(r'^[=+-+-=%@];[=+-+-=%@]')
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def is_legal_path_length(path):
|
|
52
|
+
if len(path) > 4096 and not sys.platform.startswith("win"): # linux total path length limit
|
|
53
|
+
logger.error(f"file total path {path} length out of range (4096), please check the file(or directory) path")
|
|
54
|
+
return False
|
|
55
|
+
|
|
56
|
+
if len(path) > 260 and sys.platform.startswith("win"): # windows total path length limit
|
|
57
|
+
logger.error(f"file total path {path} length out of range (260), please check the file(or directory) path")
|
|
58
|
+
return False
|
|
59
|
+
|
|
60
|
+
dirnames = path.split("/")
|
|
61
|
+
for dirname in dirnames:
|
|
62
|
+
if len(dirname) > 255: # linux single file path length limit
|
|
63
|
+
logger.error(f"file name {dirname} length out of range (255), please check the file(or directory) path")
|
|
64
|
+
return False
|
|
65
|
+
return True
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def is_match_path_white_list(path):
|
|
69
|
+
if PATH_WHITE_LIST_REGEX.search(path) and not sys.platform.startswith("win"):
|
|
70
|
+
logger.error(f"path: {path} contains illegal char, legal chars include A-Z a-z 0-9 _ - / .")
|
|
71
|
+
return False
|
|
72
|
+
if PATH_WHITE_LIST_REGEX_WIN.search(path) and sys.platform.startswith("win"):
|
|
73
|
+
logger.error(f"path: {path} contains illegal char, legal chars include A-Z a-z 0-9 _ - / . : \\")
|
|
74
|
+
return False
|
|
75
|
+
return True
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def is_legal_args_path_string(path):
|
|
79
|
+
# only check path string
|
|
80
|
+
if not path:
|
|
81
|
+
return True
|
|
82
|
+
if not is_legal_path_length(path):
|
|
83
|
+
return False
|
|
84
|
+
if not is_match_path_white_list(path):
|
|
85
|
+
return False
|
|
86
|
+
return True
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class SanitizeErrorType(Enum):
|
|
90
|
+
"""
|
|
91
|
+
The errors parameter Enum of the function sanitize_csv_value
|
|
92
|
+
"""
|
|
93
|
+
strict = "strict"
|
|
94
|
+
ignore = "ignore"
|
|
95
|
+
replace = "replace"
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def sanitize_csv_value(value: str, errors=SanitizeErrorType.strict.value):
|
|
99
|
+
if errors == SanitizeErrorType.ignore.value or not isinstance(value, str):
|
|
100
|
+
return value
|
|
101
|
+
|
|
102
|
+
sanitized_value = value
|
|
103
|
+
try:
|
|
104
|
+
float(value) # in case value is a digit but in str format
|
|
105
|
+
except ValueError as e: # not digit
|
|
106
|
+
if not MALICIOUS_CSV_PATTERN.search(value):
|
|
107
|
+
pass
|
|
108
|
+
elif errors == SanitizeErrorType.replace.value:
|
|
109
|
+
sanitized_value = ' ' + value
|
|
110
|
+
else:
|
|
111
|
+
msg = f'Malicious value is not allowed to be written to the csv {value}'
|
|
112
|
+
logger.error("Please check the value written to the csv")
|
|
113
|
+
raise ValueError(msg) from e
|
|
114
|
+
|
|
115
|
+
return sanitized_value
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class OpenException(Exception):
|
|
119
|
+
pass
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class FileStat:
|
|
123
|
+
def __init__(self, file) -> None:
|
|
124
|
+
if not is_legal_path_length(file) or not is_match_path_white_list(file):
|
|
125
|
+
raise OpenException("Path name is too long or contains invalid characters.")
|
|
126
|
+
self.file = file
|
|
127
|
+
self.is_file_exist = os.path.exists(file)
|
|
128
|
+
if self.is_file_exist:
|
|
129
|
+
self.file_stat = os.stat(file)
|
|
130
|
+
self.realpath = os.path.realpath(file)
|
|
131
|
+
else:
|
|
132
|
+
self.file_stat = None
|
|
133
|
+
|
|
134
|
+
@property
|
|
135
|
+
def is_exists(self):
|
|
136
|
+
return self.is_file_exist
|
|
137
|
+
|
|
138
|
+
@property
|
|
139
|
+
def is_softlink(self):
|
|
140
|
+
return os.path.islink(self.file) if self.file_stat else False
|
|
141
|
+
|
|
142
|
+
@property
|
|
143
|
+
def is_file(self):
|
|
144
|
+
return stat.S_ISREG(self.file_stat.st_mode) if self.file_stat else False
|
|
145
|
+
|
|
146
|
+
@property
|
|
147
|
+
def is_dir(self):
|
|
148
|
+
return stat.S_ISDIR(self.file_stat.st_mode) if self.file_stat else False
|
|
149
|
+
|
|
150
|
+
@property
|
|
151
|
+
def file_size(self):
|
|
152
|
+
return self.file_stat.st_size if self.file_stat else 0
|
|
153
|
+
|
|
154
|
+
@property
|
|
155
|
+
def permission(self):
|
|
156
|
+
return stat.S_IMODE(self.file_stat.st_mode) if self.file_stat else 0o777
|
|
157
|
+
|
|
158
|
+
@property
|
|
159
|
+
def owner(self):
|
|
160
|
+
return self.file_stat.st_uid if self.file_stat else -1
|
|
161
|
+
|
|
162
|
+
@property
|
|
163
|
+
def group_owner(self):
|
|
164
|
+
return self.file_stat.st_gid if self.file_stat else -1
|
|
165
|
+
|
|
166
|
+
@property
|
|
167
|
+
def is_owner(self):
|
|
168
|
+
return self.owner == (os.geteuid() if hasattr(os, "geteuid") else 0)
|
|
169
|
+
|
|
170
|
+
@property
|
|
171
|
+
def is_group_owner(self):
|
|
172
|
+
return self.group_owner in (os.getgroups() if hasattr(os, "getgroups") else [0])
|
|
173
|
+
|
|
174
|
+
@property
|
|
175
|
+
def is_user_or_group_owner(self):
|
|
176
|
+
return self.is_owner or self.is_group_owner
|
|
177
|
+
|
|
178
|
+
@property
|
|
179
|
+
def is_user_and_group_owner(self):
|
|
180
|
+
return self.is_owner and self.is_group_owner
|
|
181
|
+
|
|
182
|
+
def check_owner_or_root(self):
|
|
183
|
+
if os.getuid() == self.file_stat.st_uid:
|
|
184
|
+
return True
|
|
185
|
+
elif os.getuid() == 0:
|
|
186
|
+
logger.warning("You are currently operating this tool using the root user. "
|
|
187
|
+
"Please be aware of the risk of privilege escalation.")
|
|
188
|
+
return True
|
|
189
|
+
else:
|
|
190
|
+
logging.error("The file owner is not consistent with the current user.")
|
|
191
|
+
return False
|
|
192
|
+
|
|
193
|
+
def is_basically_legal(self, perm='none', strict_permission=True):
|
|
194
|
+
if sys.platform.startswith("win"):
|
|
195
|
+
return self.check_windows_permission(perm)
|
|
196
|
+
else:
|
|
197
|
+
return self.check_linux_permission(perm, strict_permission=strict_permission)
|
|
198
|
+
|
|
199
|
+
def check_basic_permission(self, perm='none'):
|
|
200
|
+
if not self.is_exists and perm != 'write':
|
|
201
|
+
logger.error(f"path: {self.file} not exist, please check if file or dir is exist")
|
|
202
|
+
return False
|
|
203
|
+
if self.is_softlink:
|
|
204
|
+
whitelist_path = os.environ.get(RAW_INPUT_PATH, "")
|
|
205
|
+
if whitelist_path == "":
|
|
206
|
+
logger.error(f"path : {self.file} is a soft link, not supported, "
|
|
207
|
+
f"please import file(or directory) directly")
|
|
208
|
+
return False
|
|
209
|
+
target = os.readlink(self.file)
|
|
210
|
+
target_path = os.path.abspath(os.path.normpath(target)) # normpath更加规范
|
|
211
|
+
file_path = os.path.abspath(os.path.normpath(self.file))
|
|
212
|
+
sub_paths = whitelist_path.split("|")
|
|
213
|
+
illegal_softlink = True
|
|
214
|
+
for sub_path in sub_paths:
|
|
215
|
+
sub_path_abs = os.path.abspath(os.path.normpath(sub_path))
|
|
216
|
+
# 检查子路径本身是否是软链接
|
|
217
|
+
if os.path.islink(sub_path_abs):
|
|
218
|
+
continue
|
|
219
|
+
# 使用 os.path.commonpath 来比较路径
|
|
220
|
+
common_path_target = os.path.commonpath([sub_path_abs, target_path])
|
|
221
|
+
common_path_file = os.path.commonpath([sub_path_abs, file_path])
|
|
222
|
+
# 确保公共路径与子路径相同,表示目标路径和文件路径都在子路径内
|
|
223
|
+
if common_path_target == sub_path_abs and common_path_file == sub_path_abs:
|
|
224
|
+
illegal_softlink = False
|
|
225
|
+
break # 已找到合法路径,退出循环
|
|
226
|
+
if illegal_softlink:
|
|
227
|
+
logger.error(f"path : {self.file} is a soft link, not supported, "
|
|
228
|
+
f"please import file(or directory) directly")
|
|
229
|
+
return False
|
|
230
|
+
return True
|
|
231
|
+
|
|
232
|
+
def check_linux_permission(self, perm='none', strict_permission=True):
|
|
233
|
+
if not self.check_basic_permission(perm=perm):
|
|
234
|
+
return False
|
|
235
|
+
if not self.is_user_or_group_owner and self.is_exists:
|
|
236
|
+
logger.error(f"current user isn't path: {self.file}'s owner or ownergroup")
|
|
237
|
+
return False
|
|
238
|
+
if self.is_exists and not self.check_owner_or_root():
|
|
239
|
+
return False
|
|
240
|
+
if perm == 'read':
|
|
241
|
+
if strict_permission and self.permission & READ_FILE_NOT_PERMITTED_STAT > 0:
|
|
242
|
+
logger.error(f"The file {self.file} is group writable, or is others writable, "
|
|
243
|
+
"as import file(or directory) permission should not be over 0o755(rwxr-xr-x)")
|
|
244
|
+
return False
|
|
245
|
+
if not os.access(self.realpath, os.R_OK) or self.permission & stat.S_IRUSR == 0:
|
|
246
|
+
logger.error(f"Current user doesn't have read permission to the file {self.file}, "
|
|
247
|
+
"as import file(or directory) permission should be at least 0o400(r--------)")
|
|
248
|
+
return False
|
|
249
|
+
elif perm == 'write' and self.is_exists:
|
|
250
|
+
if (strict_permission or self.is_file) and self.permission & WRITE_FILE_NOT_PERMITTED_STAT > 0:
|
|
251
|
+
logger.error(f"The file {self.file} is group writable, or is others writable, "
|
|
252
|
+
"as export file(or directory) permission should not be over 0o755(rwxr-xr-x)")
|
|
253
|
+
return False
|
|
254
|
+
if not os.access(self.realpath, os.W_OK):
|
|
255
|
+
logger.error(f"Current user doesn't have write permission to the file {self.file}, "
|
|
256
|
+
"as export file(or directory) permission should be at least 0o200(-w-------)")
|
|
257
|
+
return False
|
|
258
|
+
return True
|
|
259
|
+
|
|
260
|
+
def check_windows_permission(self, perm='none'):
|
|
261
|
+
if not self.check_basic_permission(perm=perm):
|
|
262
|
+
return False
|
|
263
|
+
return True
|
|
264
|
+
|
|
265
|
+
def is_legal_file_size(self, max_size):
|
|
266
|
+
if not self.is_file:
|
|
267
|
+
logger.error(f"path: {self.file} is not a file")
|
|
268
|
+
return False
|
|
269
|
+
if self.file_size > max_size:
|
|
270
|
+
logger.error(f"file_size: {self.file_size} byte out of max limit {max_size} byte")
|
|
271
|
+
return False
|
|
272
|
+
else:
|
|
273
|
+
return True
|
|
274
|
+
|
|
275
|
+
def is_legal_file_type(self, file_types: list):
|
|
276
|
+
if not self.is_file and self.is_exists:
|
|
277
|
+
logger.error(f"path: {self.file} is not a file")
|
|
278
|
+
return False
|
|
279
|
+
for file_type in file_types:
|
|
280
|
+
if os.path.splitext(self.file)[1] == f".{file_type}":
|
|
281
|
+
return True
|
|
282
|
+
logger.error(f"path: {self.file}, file type not in {file_types}")
|
|
283
|
+
return False
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
def ms_open(file, mode="r", max_size=CONFIG_FILE_MAX_SIZE, softlink=False,
|
|
287
|
+
write_permission=PERMISSION_NORMAL, **kwargs):
|
|
288
|
+
file_stat = FileStat(file)
|
|
289
|
+
|
|
290
|
+
if file_stat.is_exists and file_stat.is_dir:
|
|
291
|
+
raise OpenException(f"Expecting a file, but it's a folder. {file}")
|
|
292
|
+
|
|
293
|
+
if file_stat.is_exists and not file_stat.check_owner_or_root():
|
|
294
|
+
raise OpenException(f"There is a problem with the owner of the file. Please check it.")
|
|
295
|
+
|
|
296
|
+
if "r" in mode:
|
|
297
|
+
if not file_stat.is_exists:
|
|
298
|
+
raise OpenException(f"No such file or directory {file}")
|
|
299
|
+
if max_size is None:
|
|
300
|
+
raise OpenException(f"Reading files must have a size limit control. {file}")
|
|
301
|
+
if max_size != MAX_SIZE_UNLIMITE and max_size < file_stat.file_size:
|
|
302
|
+
raise OpenException(f"The file size has exceeded the specifications and cannot be read. {file}")
|
|
303
|
+
|
|
304
|
+
if "w" in mode and file_stat.is_exists:
|
|
305
|
+
if not file_stat.is_owner:
|
|
306
|
+
raise OpenException(
|
|
307
|
+
f"The file owner is inconsistent with the current process user and is not allowed to write. {file}"
|
|
308
|
+
)
|
|
309
|
+
os.remove(file)
|
|
310
|
+
|
|
311
|
+
if not softlink and file_stat.is_softlink:
|
|
312
|
+
raise OpenException(f"Softlink is not allowed to be opened. {file}")
|
|
313
|
+
|
|
314
|
+
if "a" in mode and file_stat.is_exists:
|
|
315
|
+
if not file_stat.is_owner:
|
|
316
|
+
raise OpenException(
|
|
317
|
+
f"The file owner is inconsistent with the current process user and is not allowed to write. {file}"
|
|
318
|
+
)
|
|
319
|
+
if file_stat.permission != (file_stat.permission & write_permission):
|
|
320
|
+
os.chmod(file, file_stat.permission & write_permission)
|
|
321
|
+
|
|
322
|
+
safe_parent_msg = Rule.path().is_safe_parent_dir().check(file)
|
|
323
|
+
if not safe_parent_msg:
|
|
324
|
+
logger.warning(f"parent dir of {os.path.realpath(file)} is not safe. {str(safe_parent_msg)}")
|
|
325
|
+
|
|
326
|
+
if "+" in mode:
|
|
327
|
+
flags = os.O_RDONLY | os.O_RDWR
|
|
328
|
+
elif "w" in mode or "a" in mode or "x" in mode:
|
|
329
|
+
flags = os.O_RDONLY | os.O_WRONLY
|
|
330
|
+
else:
|
|
331
|
+
flags = os.O_RDONLY
|
|
332
|
+
|
|
333
|
+
if "w" in mode or "x" in mode:
|
|
334
|
+
flags = flags | os.O_TRUNC | os.O_CREAT
|
|
335
|
+
if "a" in mode:
|
|
336
|
+
flags = flags | os.O_APPEND | os.O_CREAT
|
|
337
|
+
return os.fdopen(os.open(file, flags, mode=write_permission), mode, **kwargs)
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# -------------------------------------------------------------------------
|
|
2
|
+
# This file is part of the MindStudio project.
|
|
3
|
+
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
|
|
4
|
+
#
|
|
5
|
+
# MindStudio is licensed under Mulan PSL v2.
|
|
6
|
+
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
7
|
+
# You may obtain a copy of Mulan PSL v2 at:
|
|
8
|
+
#
|
|
9
|
+
# http://license.coscl.org.cn/MulanPSL2
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
12
|
+
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
13
|
+
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
14
|
+
# See the Mulan PSL v2 for more details.
|
|
15
|
+
# -------------------------------------------------------------------------
|
|
16
|
+
|
|
17
|
+
import argparse
|
|
18
|
+
from collections import defaultdict
|
|
19
|
+
from functools import wraps
|
|
20
|
+
import os
|
|
21
|
+
import pickle
|
|
22
|
+
import re
|
|
23
|
+
|
|
24
|
+
from msprobe.infer.utils.constants import TENSOR_MAX_SIZE, EXT_SIZE_MAPPING, PATH_WHITE_LIST_REGEX, MAX_RECUR_DEPTH
|
|
25
|
+
from msprobe.core.common.log import logger
|
|
26
|
+
from msprobe.infer.utils.file_open_check import is_legal_path_length
|
|
27
|
+
|
|
28
|
+
# 记录工具函数递归的深度
|
|
29
|
+
recursion_depth = defaultdict(int)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def confirmation_interaction(prompt):
|
|
33
|
+
confirm_pattern = re.compile(r'y(?:es)?', re.IGNORECASE)
|
|
34
|
+
|
|
35
|
+
try:
|
|
36
|
+
user_action = input(prompt)
|
|
37
|
+
except Exception:
|
|
38
|
+
return False
|
|
39
|
+
|
|
40
|
+
return bool(confirm_pattern.match(user_action))
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def check_file_ext(path, ext: str):
|
|
44
|
+
if not isinstance(path, str):
|
|
45
|
+
raise TypeError(f"Expected first positional argument type 'str', got {type(path)} instead")
|
|
46
|
+
|
|
47
|
+
if not isinstance(ext, str):
|
|
48
|
+
raise TypeError(f"Expected second positional argument type 'str', got {type(ext)} instead")
|
|
49
|
+
|
|
50
|
+
path_ext = os.path.splitext(path)[1]
|
|
51
|
+
|
|
52
|
+
if path_ext != ext:
|
|
53
|
+
return False
|
|
54
|
+
|
|
55
|
+
return True
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def check_file_size_based_on_ext(path, ext=None):
|
|
59
|
+
"""Check the file size based on extension. This function uses `os.stat` to get file size may lead to OSError"""
|
|
60
|
+
|
|
61
|
+
if not isinstance(path, str):
|
|
62
|
+
raise TypeError(f"Expected path to be 'str', got {type(path)} instead")
|
|
63
|
+
|
|
64
|
+
ext = ext or os.path.splitext(path)[1]
|
|
65
|
+
size = os.path.getsize(path) # may lead to errors
|
|
66
|
+
|
|
67
|
+
if ext in EXT_SIZE_MAPPING:
|
|
68
|
+
if size > EXT_SIZE_MAPPING[ext]:
|
|
69
|
+
return False
|
|
70
|
+
else:
|
|
71
|
+
if size > TENSOR_MAX_SIZE:
|
|
72
|
+
confirmation_prompt = "The file %r is larger than expected. " \
|
|
73
|
+
"Attempting to read such a file could potentially impact system performance.\n" \
|
|
74
|
+
"Please confirm your awareness of the risks associated with this action (y/n): " % path
|
|
75
|
+
return confirmation_interaction(confirmation_prompt)
|
|
76
|
+
|
|
77
|
+
return True
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def safe_torch_load(path, **kwargs):
|
|
81
|
+
import torch # Do not move it !!! it may caused Import Error
|
|
82
|
+
kwargs['weights_only'] = True
|
|
83
|
+
tensor = None
|
|
84
|
+
|
|
85
|
+
while True:
|
|
86
|
+
try:
|
|
87
|
+
tensor = torch.load(path, **kwargs)
|
|
88
|
+
except pickle.UnpicklingError:
|
|
89
|
+
confirmation_prompt = "Weights only load failed. Re-running `torch.load` with `weights_only` " \
|
|
90
|
+
"set to `False` will likely succeed, but it can result in arbitrary code " \
|
|
91
|
+
"execution. Do it only if you get the file from a trusted source.\n" \
|
|
92
|
+
"Please confirm your awareness of the risks associated with this action ([y]/n): "
|
|
93
|
+
if not confirmation_interaction(confirmation_prompt):
|
|
94
|
+
raise
|
|
95
|
+
kwargs['weights_only'] = False
|
|
96
|
+
else:
|
|
97
|
+
break
|
|
98
|
+
|
|
99
|
+
return tensor
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def load_file_to_read_common_check(path: str, exts=None):
|
|
103
|
+
if not isinstance(path, str):
|
|
104
|
+
raise TypeError("'path' should be 'str'")
|
|
105
|
+
|
|
106
|
+
if isinstance(exts, (tuple, list)):
|
|
107
|
+
if not any(check_file_ext(path, ext) for ext in exts):
|
|
108
|
+
logger.error(f"Expected extension to be one of {exts}")
|
|
109
|
+
raise ValueError
|
|
110
|
+
|
|
111
|
+
elif exts is not None:
|
|
112
|
+
logger.error(f"Expected 'exts' to be 'List[str]', got {type(exts)} instead")
|
|
113
|
+
raise TypeError
|
|
114
|
+
|
|
115
|
+
if re.search(PATH_WHITE_LIST_REGEX, path):
|
|
116
|
+
logger.error(f"Invalid character: {path}")
|
|
117
|
+
raise ValueError
|
|
118
|
+
|
|
119
|
+
if not is_legal_path_length(path):
|
|
120
|
+
logger.error("Invalid path length.")
|
|
121
|
+
raise ValueError
|
|
122
|
+
|
|
123
|
+
path = os.path.realpath(path)
|
|
124
|
+
|
|
125
|
+
try:
|
|
126
|
+
file_status = os.stat(path)
|
|
127
|
+
except OSError as e:
|
|
128
|
+
logger.error(f"{e.strerror}: {path}")
|
|
129
|
+
raise
|
|
130
|
+
|
|
131
|
+
if not os.st.S_ISREG(file_status.st_mode):
|
|
132
|
+
logger.error(f"Not a regular file: {path}")
|
|
133
|
+
raise ValueError
|
|
134
|
+
|
|
135
|
+
if not check_file_size_based_on_ext(path):
|
|
136
|
+
logger.error(f"File too large: {path}")
|
|
137
|
+
raise ValueError
|
|
138
|
+
|
|
139
|
+
if (os.st.S_IWOTH & file_status.st_mode) == os.st.S_IWOTH:
|
|
140
|
+
logger.error(f"Vulnerable path: {path} should not be other writeable")
|
|
141
|
+
raise PermissionError
|
|
142
|
+
|
|
143
|
+
cur_euid = os.geteuid()
|
|
144
|
+
if file_status.st_uid != cur_euid:
|
|
145
|
+
# not root
|
|
146
|
+
if cur_euid != 0:
|
|
147
|
+
logger.error(f"File owner and current user are inconsistent: {path}")
|
|
148
|
+
raise PermissionError
|
|
149
|
+
|
|
150
|
+
# root but reading a other writeable file
|
|
151
|
+
elif (os.st.S_IWGRP & file_status.st_mode) == os.st.S_IWGRP or \
|
|
152
|
+
(os.st.S_IWUSR & file_status.st_mode) == os.st.S_IWUSR:
|
|
153
|
+
logger.warning("Privilege escalation risk detected. Trying to read a file that belongs to"
|
|
154
|
+
" a normal user and is writeable to the user or the user group")
|
|
155
|
+
|
|
156
|
+
return path
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def is_valid_command(arg_str, index):
|
|
160
|
+
first_whitelist_pattern = re.compile(r"^[a-zA-Z0-9_\-./=:,\[\] ]+$")
|
|
161
|
+
whitelist_pattern = re.compile(r"^[a-zA-Z0-9_\-./=:,\[\] ;]+$")
|
|
162
|
+
|
|
163
|
+
if index == 0:
|
|
164
|
+
return re.fullmatch(first_whitelist_pattern, arg_str), first_whitelist_pattern
|
|
165
|
+
else:
|
|
166
|
+
return re.fullmatch(whitelist_pattern, arg_str), whitelist_pattern
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def filter_cmd(paras):
|
|
170
|
+
filtered = []
|
|
171
|
+
for index, arg in enumerate(paras):
|
|
172
|
+
arg_str = str(arg)
|
|
173
|
+
valid, pattern = is_valid_command(arg_str, index)
|
|
174
|
+
if not valid:
|
|
175
|
+
raise ValueError(f"The command contains invalid characters. Only the '{pattern}' pattern is allowed.")
|
|
176
|
+
filtered.append(arg_str)
|
|
177
|
+
return filtered
|
msprobe/mindspore/__init__.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
|
|
|
@@ -22,7 +23,7 @@ except ImportError:
|
|
|
22
23
|
from .common.log import logger
|
|
23
24
|
logger.info("Module _msprobe_c has not been installed. L2-Dump may not work normally.")
|
|
24
25
|
|
|
25
|
-
from msprobe.mindspore.debugger.precision_debugger import PrecisionDebugger
|
|
26
|
+
from msprobe.mindspore.dump.debugger.precision_debugger import PrecisionDebugger
|
|
26
27
|
from msprobe.mindspore.common.utils import seed_all, MsprobeStep, MsprobeInitStep
|
|
27
28
|
from msprobe.mindspore.monitor.module_hook import TrainerMon
|
|
28
|
-
from msprobe.mindspore.dump.graph_tensor_dump import save, save_grad, step
|
|
29
|
+
from msprobe.mindspore.dump.dump_processor.graph_tensor_dump import save, save_grad, step
|