mindstudio-probe 8.3.3__py3-none-any.whl → 26.0.0a1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mindstudio_probe-8.3.3.dist-info → mindstudio_probe-26.0.0a1.dist-info}/METADATA +26 -14
- mindstudio_probe-26.0.0a1.dist-info/RECORD +498 -0
- {mindstudio_probe-8.3.3.dist-info → mindstudio_probe-26.0.0a1.dist-info}/WHEEL +1 -1
- mindstudio_probe-26.0.0a1.dist-info/entry_points.txt +5 -0
- mindstudio_probe-26.0.0a1.dist-info/licenses/LICENSE +124 -0
- mindstudio_probe-26.0.0a1.dist-info/top_level.txt +2 -0
- msprobe/__init__.py +12 -13
- msprobe/config.json +9 -31
- msprobe/core/__init__.py +12 -11
- msprobe/core/acc_check/acc_check_cli.py +145 -0
- msprobe/core/common/const.py +97 -38
- msprobe/core/common/db_manager.py +133 -12
- msprobe/core/common/decorator.py +12 -11
- msprobe/core/common/exceptions.py +12 -11
- msprobe/core/common/file_utils.py +101 -25
- msprobe/core/common/framework_adapter.py +36 -25
- msprobe/core/common/global_lock.py +12 -11
- msprobe/core/common/inplace_op_checker.py +12 -11
- msprobe/core/common/log.py +22 -11
- msprobe/core/common/megatron_utils.py +566 -11
- msprobe/core/common/parallel_state.py +12 -11
- msprobe/core/common/runtime.py +12 -11
- msprobe/core/common/utils.py +41 -41
- msprobe/core/compare/acc_compare.py +361 -104
- msprobe/core/compare/atb_data_compare.py +422 -0
- msprobe/core/compare/auto_compare.py +134 -0
- msprobe/core/compare/check.py +14 -17
- msprobe/core/compare/compare_cli.py +72 -149
- msprobe/core/compare/config.py +12 -13
- msprobe/core/compare/diff_analyze/first_diff_analyze.py +28 -15
- msprobe/core/compare/diff_analyze/ignore_op_list.yaml +3 -0
- msprobe/core/compare/find_first/analyzer.py +18 -18
- msprobe/core/compare/find_first/graph.py +12 -11
- msprobe/core/compare/find_first/utils.py +13 -12
- msprobe/core/compare/indicator_analysis/__init__.py +15 -0
- msprobe/core/compare/indicator_analysis/algorithm.py +363 -0
- msprobe/core/compare/indicator_analysis/api_data.py +141 -0
- msprobe/core/compare/indicator_analysis/calculator.py +181 -0
- msprobe/core/compare/indicator_analysis/utils.py +116 -0
- msprobe/core/compare/layer_mapping/__init__.py +12 -11
- msprobe/core/compare/layer_mapping/data_scope_parser.py +20 -11
- msprobe/core/compare/layer_mapping/layer_mapping.py +14 -13
- msprobe/core/compare/layer_mapping/postprocess_pass.py +13 -11
- msprobe/core/compare/merge_result/merge_result.py +12 -11
- msprobe/core/compare/merge_result/merge_result_cli.py +12 -11
- msprobe/core/compare/merge_result/utils.py +12 -11
- msprobe/core/compare/multiprocessing_compute.py +13 -14
- msprobe/core/compare/npy_compare.py +13 -11
- msprobe/core/compare/offline_data_compare.py +160 -0
- msprobe/core/compare/stats_diff_calc.py +39 -0
- msprobe/core/compare/torchair_acc_cmp.py +764 -0
- msprobe/core/compare/torchair_cmp_utils.py +338 -0
- msprobe/core/compare/utils.py +140 -49
- msprobe/core/config_check/__init__.py +12 -11
- msprobe/core/config_check/checkers/__init__.py +12 -11
- msprobe/core/config_check/checkers/base_checker.py +15 -14
- msprobe/core/config_check/checkers/dataset_checker.py +13 -12
- msprobe/core/config_check/checkers/env_args_checker.py +13 -12
- msprobe/core/config_check/checkers/hyperparameter_checker.py +16 -15
- msprobe/core/config_check/checkers/pip_checker.py +15 -15
- msprobe/core/config_check/checkers/random_checker.py +13 -12
- msprobe/core/config_check/checkers/weights_checker.py +14 -12
- msprobe/core/config_check/ckpt_compare/ckpt_comparator.py +13 -17
- msprobe/core/config_check/ckpt_compare/megatron_loader.py +13 -12
- msprobe/core/config_check/ckpt_compare/metrics.py +12 -11
- msprobe/core/config_check/config_check_cli.py +18 -17
- msprobe/core/config_check/config_checker.py +16 -14
- msprobe/core/config_check/resource/dependency.yaml +15 -12
- msprobe/core/config_check/resource/env.yaml +12 -11
- msprobe/core/config_check/utils/hyperparameter_parser.py +12 -11
- msprobe/core/config_check/utils/utils.py +12 -11
- msprobe/core/{data_dump → dump/api_dump}/api_registry.py +12 -11
- msprobe/core/{common_config.py → dump/common_config.py} +13 -24
- msprobe/core/dump/data_dump/data_collector.py +257 -0
- msprobe/core/{data_dump → dump/data_dump}/data_processor/base.py +45 -36
- msprobe/core/{data_dump → dump/data_dump}/data_processor/factory.py +33 -25
- msprobe/core/{data_dump → dump/data_dump}/data_processor/mindspore_processor.py +37 -113
- msprobe/core/{data_dump → dump/data_dump}/data_processor/pytorch_processor.py +364 -131
- msprobe/core/{data_dump → dump/data_dump}/json_writer.py +24 -31
- msprobe/core/{data_dump → dump/data_dump}/scope.py +12 -13
- msprobe/core/{debugger → dump/debugger}/precision_debugger.py +15 -23
- msprobe/core/dump/dump2db/db_utils.py +215 -0
- msprobe/core/dump/dump2db/dump2db.py +409 -0
- msprobe/core/{hook_manager.py → dump/hook_manager.py} +38 -87
- msprobe/core/dump/kernel_dump/kernel_config.py +34 -0
- msprobe/core/{service.py → dump/service.py} +43 -27
- msprobe/core/install_deps/install_deps.py +51 -0
- msprobe/core/monitor/anomaly_processor.py +13 -11
- msprobe/core/monitor/csv2db.py +73 -93
- msprobe/core/monitor/db_utils.py +140 -205
- msprobe/core/monitor/utils.py +18 -17
- msprobe/core/monitor_v2/__init__.py +20 -0
- msprobe/core/monitor_v2/base.py +83 -0
- msprobe/core/monitor_v2/cc.py +287 -0
- msprobe/core/monitor_v2/factory.py +81 -0
- msprobe/core/monitor_v2/module.py +201 -0
- msprobe/core/monitor_v2/optimizer.py +245 -0
- msprobe/core/monitor_v2/param.py +154 -0
- msprobe/core/monitor_v2/trainer.py +326 -0
- msprobe/core/monitor_v2/utils.py +122 -0
- msprobe/core/monitor_v2/weight_grad.py +419 -0
- msprobe/core/monitor_v2/writer.py +162 -0
- msprobe/core/overflow_check/abnormal_scene.py +12 -11
- msprobe/core/overflow_check/api_info.py +12 -11
- msprobe/core/overflow_check/checker.py +12 -11
- msprobe/core/overflow_check/filter.py +13 -11
- msprobe/core/overflow_check/level.py +12 -11
- msprobe/core/overflow_check/utils.py +12 -11
- msprobe/core/single_save/single_comparator.py +12 -11
- msprobe/core/single_save/single_saver.py +12 -11
- msprobe/infer/__init__.py +16 -0
- msprobe/infer/offline/__init__.py +16 -0
- msprobe/infer/offline/compare/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/adapter_cli/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/adapter_cli/args_adapter.py +46 -0
- msprobe/infer/offline/compare/msquickcmp/atc/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/atc/atc_utils.py +98 -0
- msprobe/infer/offline/compare/msquickcmp/cmp_process.py +328 -0
- msprobe/infer/offline/compare/msquickcmp/common/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/common/args_check.py +112 -0
- msprobe/infer/offline/compare/msquickcmp/common/convert.py +74 -0
- msprobe/infer/offline/compare/msquickcmp/common/dump_data.py +121 -0
- msprobe/infer/offline/compare/msquickcmp/common/dynamic_argument_bean.py +39 -0
- msprobe/infer/offline/compare/msquickcmp/common/utils.py +669 -0
- msprobe/infer/offline/compare/msquickcmp/config.ini +6 -0
- msprobe/infer/offline/compare/msquickcmp/dump/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/dump/args_adapter.py +50 -0
- msprobe/infer/offline/compare/msquickcmp/dump/dump_process.py +91 -0
- msprobe/infer/offline/compare/msquickcmp/install_aclruntime_aisbench.sh +180 -0
- msprobe/infer/offline/compare/msquickcmp/main.py +199 -0
- msprobe/infer/offline/compare/msquickcmp/net_compare/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/net_compare/net_compare.py +277 -0
- msprobe/infer/offline/compare/msquickcmp/npu/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/npu/npu_dump_data.py +558 -0
- msprobe/infer/offline/compare/msquickcmp/npu/om_parser.py +416 -0
- msprobe/infer/offline/compare/msquickcmp/onnx_model/__init__.py +16 -0
- msprobe/infer/offline/compare/msquickcmp/onnx_model/onnx_dump_data.py +374 -0
- msprobe/infer/utils/__init__.py +15 -0
- msprobe/infer/utils/acc_cmp.py +94 -0
- msprobe/infer/utils/check/__init__.py +37 -0
- msprobe/infer/utils/check/args_checker.py +35 -0
- msprobe/infer/utils/check/checker.py +227 -0
- msprobe/infer/utils/check/dict_checker.py +78 -0
- msprobe/infer/utils/check/func_wrapper.py +96 -0
- msprobe/infer/utils/check/list_checker.py +56 -0
- msprobe/infer/utils/check/number_checker.py +64 -0
- msprobe/infer/utils/check/obj_checker.py +41 -0
- msprobe/infer/utils/check/path_checker.py +249 -0
- msprobe/infer/utils/check/rule.py +126 -0
- msprobe/infer/utils/check/string_checker.py +66 -0
- msprobe/infer/utils/cmp_algorithm.py +261 -0
- msprobe/infer/utils/constants.py +112 -0
- msprobe/infer/utils/file_open_check.py +337 -0
- msprobe/infer/utils/util.py +177 -0
- msprobe/mindspore/__init__.py +14 -13
- msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +14 -13
- msprobe/mindspore/api_accuracy_checker/api_info.py +12 -11
- msprobe/mindspore/api_accuracy_checker/api_runner.py +12 -11
- msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +12 -11
- msprobe/mindspore/api_accuracy_checker/bench_functions/flash_attention_score.py +12 -11
- msprobe/mindspore/api_accuracy_checker/bench_functions/fusion_operator.py +12 -11
- msprobe/mindspore/api_accuracy_checker/checker_support_api.yaml +12 -11
- msprobe/mindspore/api_accuracy_checker/cmd_parser.py +15 -14
- msprobe/mindspore/api_accuracy_checker/compute_element.py +12 -11
- msprobe/mindspore/api_accuracy_checker/data_manager.py +13 -11
- msprobe/mindspore/api_accuracy_checker/main.py +12 -11
- msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +14 -12
- msprobe/mindspore/api_accuracy_checker/multi_data_manager.py +13 -11
- msprobe/mindspore/api_accuracy_checker/torch_mindtorch_importer.py +12 -11
- msprobe/mindspore/api_accuracy_checker/type_mapping.py +12 -11
- msprobe/mindspore/api_accuracy_checker/utils.py +12 -11
- msprobe/mindspore/common/const.py +15 -74
- msprobe/mindspore/common/log.py +12 -11
- msprobe/mindspore/common/utils.py +30 -15
- msprobe/mindspore/compare/common_dir_compare.py +21 -23
- msprobe/mindspore/compare/distributed_compare.py +18 -16
- msprobe/mindspore/compare/ms_compare.py +14 -14
- msprobe/mindspore/compare/ms_graph_compare.py +26 -20
- msprobe/mindspore/compare/utils.py +14 -12
- msprobe/mindspore/{cell_processor.py → dump/cell_processor.py} +15 -14
- msprobe/mindspore/{debugger → dump/debugger}/debugger_config.py +12 -30
- msprobe/mindspore/{debugger → dump/debugger}/precision_debugger.py +43 -45
- msprobe/mindspore/dump/{cell_dump_process.py → dump_processor/cell_dump_process.py} +31 -17
- msprobe/mindspore/dump/{cell_dump_with_insert_gradient.py → dump_processor/cell_dump_with_insert_gradient.py} +18 -14
- msprobe/mindspore/dump/{dump_tool_factory.py → dump_processor/dump_tool_factory.py} +16 -15
- msprobe/mindspore/dump/{graph_mode_cell_dump.py → dump_processor/graph_mode_cell_dump.py} +16 -15
- msprobe/mindspore/dump/{graph_tensor_dump.py → dump_processor/graph_tensor_dump.py} +134 -133
- msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/api_register.py +15 -14
- msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/hook_cell.py +12 -11
- msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/ms_hook_manager.py +47 -20
- msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/primitive_hooks.py +14 -13
- msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/support_wrap_ops.yaml +13 -11
- msprobe/mindspore/dump/{jit_dump.py → dump_processor/jit_dump.py} +14 -13
- msprobe/mindspore/dump/{kernel_graph_dump.py → dump_processor/kernel_graph_dump.py} +13 -12
- msprobe/mindspore/dump/{kernel_kbyk_dump.py → dump_processor/kernel_kbyk_dump.py} +13 -12
- msprobe/mindspore/{exception_dump → dump/exception_dump}/exception_dump_tool_factory.py +14 -13
- msprobe/mindspore/{exception_dump → dump/exception_dump}/kernel_graph_exception_dump.py +13 -12
- msprobe/mindspore/{mindspore_service.py → dump/mindspore_service.py} +18 -17
- msprobe/mindspore/dump/mindtorch/__init__.py +19 -0
- msprobe/mindspore/dump/ms_config.py +105 -0
- msprobe/mindspore/{overflow_check → dump/overflow_check}/kernel_graph_overflow_check.py +13 -12
- msprobe/mindspore/{overflow_check → dump/overflow_check}/overflow_check_tool_factory.py +14 -13
- msprobe/mindspore/dump/task_handler_factory.py +43 -0
- msprobe/mindspore/monitor/common_func.py +12 -11
- msprobe/mindspore/monitor/data_writers.py +12 -11
- msprobe/mindspore/monitor/distributed/wrap_distributed.py +93 -39
- msprobe/mindspore/monitor/features.py +12 -11
- msprobe/mindspore/monitor/module_hook.py +19 -22
- msprobe/mindspore/monitor/optimizer_collect.py +29 -25
- msprobe/mindspore/monitor/utils.py +13 -11
- msprobe/msaccucmp/advisor/__init__.py +16 -0
- msprobe/msaccucmp/advisor/advisor_const.py +65 -0
- msprobe/msaccucmp/advisor/advisor_result.py +73 -0
- msprobe/msaccucmp/advisor/compare_advisor.py +99 -0
- msprobe/msaccucmp/advisor/input_advisor.py +66 -0
- msprobe/msaccucmp/advisor/node_advisor.py +68 -0
- msprobe/msaccucmp/advisor/overflow_advisor.py +58 -0
- msprobe/msaccucmp/algorithm_manager/__init__.py +16 -0
- msprobe/msaccucmp/algorithm_manager/algorithm_manager.py +464 -0
- msprobe/msaccucmp/algorithm_manager/algorithm_parameter.py +42 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_AccumulatedRelativeError.py +46 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_CosineSimilarity.py +58 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_KullbackLeiblerDivergence.py +84 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_MaxAbsoluteError.py +41 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_MaxRelativeError.py +46 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_MeanAbsoluteError.py +41 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_MeanRelativeError.py +46 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_RelativeEuclideanDistance.py +46 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_RootMeanSquareError.py +40 -0
- msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_StandardDeviation.py +47 -0
- msprobe/msaccucmp/cmp_utils/__init__.py +16 -0
- msprobe/msaccucmp/cmp_utils/common.py +113 -0
- msprobe/msaccucmp/cmp_utils/constant/__init__.py +16 -0
- msprobe/msaccucmp/cmp_utils/constant/compare_error.py +81 -0
- msprobe/msaccucmp/cmp_utils/constant/const_manager.py +530 -0
- msprobe/msaccucmp/cmp_utils/file_utils.py +497 -0
- msprobe/msaccucmp/cmp_utils/log.py +257 -0
- msprobe/msaccucmp/cmp_utils/multi_process/__init__.py +16 -0
- msprobe/msaccucmp/cmp_utils/multi_process/multi_convert_process.py +140 -0
- msprobe/msaccucmp/cmp_utils/multi_process/progress.py +78 -0
- msprobe/msaccucmp/cmp_utils/path_check.py +274 -0
- msprobe/msaccucmp/cmp_utils/reg_manager.py +98 -0
- msprobe/msaccucmp/cmp_utils/tlv_parse.py +279 -0
- msprobe/msaccucmp/cmp_utils/utils.py +356 -0
- msprobe/msaccucmp/cmp_utils/utils_type.py +63 -0
- msprobe/msaccucmp/compare_vector.py +48 -0
- msprobe/msaccucmp/conversion/__init__.py +16 -0
- msprobe/msaccucmp/conversion/data_conversion.py +277 -0
- msprobe/msaccucmp/conversion/dtype_conversion.py +99 -0
- msprobe/msaccucmp/conversion/shape_format_conversion.py +477 -0
- msprobe/msaccucmp/conversion/tensor_conversion.py +369 -0
- msprobe/msaccucmp/dump_data_conversion.py +46 -0
- msprobe/msaccucmp/dump_parse/__init__.py +16 -0
- msprobe/msaccucmp/dump_parse/big_dump_data.py +317 -0
- msprobe/msaccucmp/dump_parse/dump.py +423 -0
- msprobe/msaccucmp/dump_parse/dump_data_object.py +322 -0
- msprobe/msaccucmp/dump_parse/dump_data_parser.py +436 -0
- msprobe/msaccucmp/dump_parse/dump_utils.py +246 -0
- msprobe/msaccucmp/dump_parse/ffts_parser.py +137 -0
- msprobe/msaccucmp/dump_parse/mapping.py +62 -0
- msprobe/msaccucmp/dump_parse/nano_dump_data.py +392 -0
- msprobe/msaccucmp/dump_parse/proto_dump_data.py +308 -0
- msprobe/msaccucmp/dump_parser.py +90 -0
- msprobe/msaccucmp/format_manager/__init__.py +16 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_NZ_to_NCHW.py +53 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_NZ_to_ND.py +52 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_NZ_to_NHWC.py +53 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_Z_to_HWCN.py +47 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_Z_to_NCHW.py +47 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_HWCN_to_FRACTAL_Z.py +89 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_HWCN_to_NCHW.py +37 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_HWCN_to_NHWC.py +37 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NC1HWC0_to_HWCN.py +43 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NC1HWC0_to_NCHW.py +48 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NC1HWC0_to_NHWC.py +43 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NCHW_to_FRACTAL_Z.py +87 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NCHW_to_NHWC.py +37 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NDC1HWC0_to_NCDHW.py +48 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NDC1HWC0_to_ND.py +44 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NHWC_to_FRACTAL_Z.py +87 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NHWC_to_HWCN.py +37 -0
- msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NHWC_to_NCHW.py +37 -0
- msprobe/msaccucmp/format_manager/format_manager.py +307 -0
- msprobe/msaccucmp/inplace_layer_process.py +186 -0
- msprobe/msaccucmp/msaccucmp.py +532 -0
- msprobe/msaccucmp/mscmp_advisor.py +128 -0
- msprobe/msaccucmp/overflow/__init__.py +16 -0
- msprobe/msaccucmp/overflow/overflow_analyse.py +305 -0
- msprobe/msaccucmp/overflow/overflow_detection.py +143 -0
- msprobe/msaccucmp/pytorch_cmp/__init__.py +16 -0
- msprobe/msaccucmp/pytorch_cmp/compare_pytorch.py +389 -0
- msprobe/msaccucmp/pytorch_cmp/hdf5_parser.py +377 -0
- msprobe/msaccucmp/pytorch_cmp/pytorch_dump_data.py +461 -0
- msprobe/msaccucmp/shape_conversion.py +41 -0
- msprobe/msaccucmp/vector_cmp/__init__.py +16 -0
- msprobe/msaccucmp/vector_cmp/batch_compare.py +197 -0
- msprobe/msaccucmp/vector_cmp/compare_detail/__init__.py +16 -0
- msprobe/msaccucmp/vector_cmp/compare_detail/compare_detail.py +245 -0
- msprobe/msaccucmp/vector_cmp/compare_detail/detail.py +182 -0
- msprobe/msaccucmp/vector_cmp/compare_detail/detail_writer.py +580 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/__init__.py +16 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/compare_fusion_op.py +588 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/compare_npu_vs_npu.py +339 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/compare_result.py +326 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/compare_rule.py +156 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/fusion_op.py +204 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/fusion_rule_parser.py +635 -0
- msprobe/msaccucmp/vector_cmp/fusion_manager/quant_filter.py +187 -0
- msprobe/msaccucmp/vector_cmp/range_manager/__init__.py +16 -0
- msprobe/msaccucmp/vector_cmp/range_manager/range_manager.py +100 -0
- msprobe/msaccucmp/vector_cmp/range_manager/range_mode.py +94 -0
- msprobe/msaccucmp/vector_cmp/range_manager/select_mode.py +86 -0
- msprobe/msaccucmp/vector_cmp/vector_comparison.py +535 -0
- msprobe/msprobe.py +101 -130
- msprobe/overflow_check/__init__.py +15 -0
- msprobe/{nan_analyze → overflow_check}/analyzer.py +38 -27
- msprobe/{nan_analyze → overflow_check}/graph.py +28 -27
- msprobe/{nan_analyze → overflow_check}/utils.py +15 -14
- msprobe/pytorch/__init__.py +20 -14
- msprobe/pytorch/aclgraph_dump/__init__.py +45 -0
- msprobe/pytorch/aclgraph_dump/_meta.py +26 -0
- msprobe/pytorch/api_accuracy_checker/{run_ut/run_ut.py → acc_check/acc_check.py} +50 -45
- msprobe/pytorch/api_accuracy_checker/{run_ut/run_ut_utils.py → acc_check/acc_check_utils.py} +201 -30
- msprobe/pytorch/api_accuracy_checker/{run_ut → acc_check}/data_generate.py +56 -16
- msprobe/pytorch/api_accuracy_checker/{run_ut/multi_run_ut.py → acc_check/multi_acc_check.py} +32 -47
- msprobe/pytorch/api_accuracy_checker/{run_ut → acc_check}/run_overflow_check.py +19 -18
- msprobe/pytorch/api_accuracy_checker/common/config.py +22 -20
- msprobe/pytorch/api_accuracy_checker/common/utils.py +72 -13
- msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +41 -11
- msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +23 -14
- msprobe/pytorch/api_accuracy_checker/compare/compare.py +45 -32
- msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +12 -11
- msprobe/pytorch/api_accuracy_checker/compare/compare_input.py +14 -12
- msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +14 -12
- msprobe/pytorch/api_accuracy_checker/precision_standard/absolute_threshold.py +12 -11
- msprobe/pytorch/api_accuracy_checker/precision_standard/accumulative_error_compare.py +12 -11
- msprobe/pytorch/api_accuracy_checker/precision_standard/base_standard.py +21 -19
- msprobe/pytorch/api_accuracy_checker/precision_standard/benchmark_compare.py +14 -13
- msprobe/pytorch/api_accuracy_checker/precision_standard/binary_consistency.py +12 -11
- msprobe/pytorch/api_accuracy_checker/precision_standard/standard_config.py +60 -11
- msprobe/pytorch/api_accuracy_checker/precision_standard/standard_register.py +27 -16
- msprobe/pytorch/api_accuracy_checker/precision_standard/thousandth_standard.py +13 -11
- msprobe/pytorch/api_accuracy_checker/precision_standard/ulp_compare.py +39 -18
- msprobe/pytorch/bench_functions/__init__.py +12 -11
- msprobe/pytorch/bench_functions/apply_adam.py +12 -11
- msprobe/pytorch/bench_functions/apply_adam_w.py +12 -11
- msprobe/pytorch/bench_functions/confusion_transpose.py +12 -11
- msprobe/pytorch/bench_functions/fast_gelu.py +12 -11
- msprobe/pytorch/bench_functions/group_norm_silu.py +12 -11
- msprobe/pytorch/bench_functions/layer_norm_eval.py +12 -11
- msprobe/pytorch/bench_functions/linear.py +12 -11
- msprobe/pytorch/bench_functions/matmul_backward.py +12 -11
- msprobe/pytorch/bench_functions/mish.py +12 -11
- msprobe/pytorch/bench_functions/moe_gating_top_k_softmax.py +12 -11
- msprobe/pytorch/bench_functions/npu_fusion_attention.py +12 -11
- msprobe/pytorch/bench_functions/rms_norm.py +12 -11
- msprobe/pytorch/bench_functions/rotary_mul.py +12 -11
- msprobe/pytorch/bench_functions/scaled_mask_softmax.py +12 -11
- msprobe/pytorch/bench_functions/sort_v2.py +12 -11
- msprobe/pytorch/bench_functions/swiglu.py +12 -11
- msprobe/pytorch/common/__init__.py +12 -11
- msprobe/pytorch/common/log.py +12 -11
- msprobe/pytorch/common/parse_json.py +12 -11
- msprobe/pytorch/common/utils.py +52 -19
- msprobe/pytorch/compare/distributed_compare.py +13 -13
- msprobe/pytorch/compare/match.py +12 -11
- msprobe/pytorch/compare/pt_compare.py +14 -20
- msprobe/pytorch/compare/pt_diff_analyze.py +12 -11
- msprobe/pytorch/compare/utils.py +12 -11
- msprobe/pytorch/{hook_module → dump/api_dump}/api_register.py +18 -16
- msprobe/pytorch/{hook_module → dump/api_dump}/hook_module.py +14 -13
- msprobe/pytorch/{hook_module → dump/api_dump}/pt_hook_manager.py +68 -23
- msprobe/pytorch/{hook_module → dump/api_dump}/register_optimizer_hook.py +13 -11
- msprobe/pytorch/{hook_module → dump/api_dump}/script_wrapper.py +17 -14
- msprobe/pytorch/{hook_module → dump/api_dump}/utils.py +12 -11
- msprobe/pytorch/{debugger → dump/debugger}/debugger_config.py +23 -38
- msprobe/pytorch/dump/debugger/precision_debugger.py +130 -0
- msprobe/pytorch/{function_factory.py → dump/function_factory.py} +12 -11
- msprobe/pytorch/dump/module_dump/hook_wrapper.py +17 -13
- msprobe/pytorch/dump/module_dump/module_dump.py +16 -15
- msprobe/pytorch/dump/module_dump/{module_processer.py → module_processor.py} +54 -42
- msprobe/pytorch/dump/pt_config.py +128 -0
- msprobe/pytorch/{pytorch_service.py → dump/pytorch_service.py} +22 -21
- msprobe/pytorch/monitor/csv2tb.py +13 -11
- msprobe/pytorch/monitor/data_writers.py +13 -11
- msprobe/pytorch/monitor/distributed/wrap_distributed.py +13 -11
- msprobe/pytorch/monitor/features.py +12 -11
- msprobe/pytorch/monitor/module_hook.py +67 -59
- msprobe/pytorch/monitor/module_metric.py +13 -11
- msprobe/pytorch/monitor/optimizer_collect.py +37 -35
- msprobe/pytorch/monitor/utils.py +13 -11
- msprobe/pytorch/monitor/visualizer.py +12 -11
- msprobe/pytorch/torchair_dump/__init__.py +17 -0
- msprobe/pytorch/torchair_dump/torchair_dump.py +114 -0
- msprobe/scripts/atb/config_example.json +10 -0
- msprobe/scripts/atb/load_atb_probe.sh +101 -0
- msprobe/scripts/atb/unload_atb_probe.sh +27 -0
- msprobe/scripts/build_msaccucmp.sh +186 -0
- msprobe/scripts/conf/help.info +6 -0
- msprobe/scripts/conf/version.info +3 -0
- msprobe/scripts/run_script/common.sh +538 -0
- msprobe/scripts/run_script/main_msaccucmp.sh +232 -0
- msprobe/visualization/__init__.py +12 -11
- msprobe/visualization/builder/__init__.py +12 -11
- msprobe/visualization/builder/graph_builder.py +45 -30
- msprobe/visualization/builder/graph_merger.py +53 -32
- msprobe/visualization/builder/msprobe_adapter.py +34 -44
- msprobe/visualization/compare/__init__.py +12 -11
- msprobe/visualization/compare/graph_comparator.py +63 -51
- msprobe/visualization/compare/mode_adapter.py +28 -113
- msprobe/visualization/db_utils.py +133 -22
- msprobe/visualization/graph/__init__.py +12 -11
- msprobe/visualization/graph/base_node.py +15 -27
- msprobe/visualization/graph/distributed_analyzer.py +97 -40
- msprobe/visualization/graph/graph.py +14 -16
- msprobe/visualization/graph/node_colors.py +34 -31
- msprobe/visualization/graph/node_op.py +12 -11
- msprobe/visualization/graph_service.py +580 -205
- msprobe/visualization/utils.py +278 -31
- tb_graph_ascend/secure_build.py +175 -0
- tb_graph_ascend/server/__init__.py +15 -0
- tb_graph_ascend/server/app/__init__.py +15 -0
- tb_graph_ascend/server/app/model/__init__.py +15 -0
- tb_graph_ascend/server/app/model/hierarchy.py +348 -0
- tb_graph_ascend/server/app/model/layout_hierarchy_model.py +69 -0
- tb_graph_ascend/server/app/model/match_nodes_model.py +573 -0
- tb_graph_ascend/server/app/repositories/__init__.py +15 -0
- tb_graph_ascend/server/app/repositories/graph_repo_base.py +32 -0
- tb_graph_ascend/server/app/repositories/graph_repo_db.py +879 -0
- tb_graph_ascend/server/app/repositories/graph_repo_vis.py +83 -0
- tb_graph_ascend/server/app/service/__init__.py +18 -0
- tb_graph_ascend/server/app/service/graph_service_base.py +158 -0
- tb_graph_ascend/server/app/service/graph_service_db.py +438 -0
- tb_graph_ascend/server/app/service/graph_service_factory.py +54 -0
- tb_graph_ascend/server/app/service/graph_service_vis.py +480 -0
- tb_graph_ascend/server/app/utils/__init__.py +15 -0
- tb_graph_ascend/server/app/utils/constant.py +80 -0
- tb_graph_ascend/server/app/utils/file_check_wrapper.py +46 -0
- tb_graph_ascend/server/app/utils/global_state.py +95 -0
- tb_graph_ascend/server/app/utils/graph_utils.py +661 -0
- tb_graph_ascend/server/app/utils/i18n.py +153 -0
- tb_graph_ascend/server/app/utils/request_method.py +46 -0
- tb_graph_ascend/server/app/views/__init__.py +15 -0
- tb_graph_ascend/server/app/views/graph_views.py +304 -0
- tb_graph_ascend/server/plugin.py +108 -0
- tb_graph_ascend/server/static/index.html +9250 -0
- tb_graph_ascend/server/static/index.js +21 -0
- tb_graph_ascend/setup.py +57 -0
- mindstudio_probe-8.3.3.dist-info/LICENSE +0 -201
- mindstudio_probe-8.3.3.dist-info/RECORD +0 -491
- mindstudio_probe-8.3.3.dist-info/entry_points.txt +0 -2
- mindstudio_probe-8.3.3.dist-info/top_level.txt +0 -1
- msprobe/CMakeLists.txt +0 -5
- msprobe/README.md +0 -203
- msprobe/core/advisor/advisor.py +0 -129
- msprobe/core/advisor/advisor_const.py +0 -58
- msprobe/core/advisor/advisor_result.py +0 -58
- msprobe/core/compare/find_first/data_processor.py +0 -35
- msprobe/core/compare/highlight.py +0 -390
- msprobe/core/data_dump/data_collector.py +0 -356
- msprobe/core/grad_probe/constant.py +0 -90
- msprobe/core/grad_probe/grad_compare.py +0 -187
- msprobe/core/grad_probe/utils.py +0 -105
- msprobe/core/kernel_dump/kernel_config.py +0 -33
- msprobe/docs/01.installation.md +0 -250
- msprobe/docs/02.config_introduction.md +0 -221
- msprobe/docs/03.config_examples.md +0 -281
- msprobe/docs/04.kernel_dump_PyTorch.md +0 -73
- msprobe/docs/05.data_dump_PyTorch.md +0 -518
- msprobe/docs/06.data_dump_MindSpore.md +0 -618
- msprobe/docs/07.accuracy_checker_PyTorch.md +0 -310
- msprobe/docs/09.accuracy_checker_MindSpore.md +0 -120
- msprobe/docs/10.accuracy_compare_PyTorch.md +0 -637
- msprobe/docs/11.accuracy_compare_MindSpore.md +0 -769
- msprobe/docs/12.overflow_check_PyTorch.md +0 -82
- msprobe/docs/13.overflow_check_MindSpore.md +0 -33
- msprobe/docs/14.data_parse_PyTorch.md +0 -282
- msprobe/docs/15.free_benchmarking_PyTorch.md +0 -169
- msprobe/docs/16.free_benchmarking_MindSpore.md +0 -159
- msprobe/docs/17.grad_probe.md +0 -205
- msprobe/docs/18.online_dispatch.md +0 -89
- msprobe/docs/19.monitor.md +0 -753
- msprobe/docs/20.monitor_performance_baseline.md +0 -52
- msprobe/docs/21.visualization_PyTorch.md +0 -519
- msprobe/docs/22.visualization_MindSpore.md +0 -515
- msprobe/docs/23.generate_operator_PyTorch.md +0 -107
- msprobe/docs/24.code_mapping_Mindspore.md +0 -29
- msprobe/docs/25.tool_function_introduction.md +0 -29
- msprobe/docs/26.data_dump_PyTorch_baseline.md +0 -48
- msprobe/docs/27.dump_json_instruction.md +0 -795
- msprobe/docs/28.debugger_save_instruction.md +0 -288
- msprobe/docs/28.kernel_dump_MindSpore.md +0 -69
- msprobe/docs/29.data_dump_MSAdapter.md +0 -235
- msprobe/docs/30.overflow_check_MSAdapter.md +0 -31
- msprobe/docs/31.config_check.md +0 -107
- msprobe/docs/32.ckpt_compare.md +0 -69
- msprobe/docs/33.generate_operator_MindSpore.md +0 -181
- msprobe/docs/34.RL_collect.md +0 -101
- msprobe/docs/35.nan_analyze.md +0 -73
- msprobe/docs/36.calculation_result_change.md +0 -75
- msprobe/docs/FAQ.md +0 -232
- msprobe/docs/S02.report_free_benchmarking_validation_performance_baseline.md +0 -146
- msprobe/docs/accuracy_checker_MindSpore/accuracy_checker_MindSpore_baseline.md +0 -14
- msprobe/docs/data_dump_MindSpore/data_dump_MindSpore_baseline.md +0 -33
- msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md +0 -217
- msprobe/docs/img/BLOOM-7B_1.png +0 -0
- msprobe/docs/img/BLOOM-7B_2.png +0 -0
- msprobe/docs/img/BLOOM-7B_3.png +0 -0
- msprobe/docs/img/BLOOM-7B_4.png +0 -0
- msprobe/docs/img/GPT-3_1.png +0 -0
- msprobe/docs/img/GPT-3_2.png +0 -0
- msprobe/docs/img/GPT-3_3.png +0 -0
- msprobe/docs/img/GPT-3_4.png +0 -0
- msprobe/docs/img/GPT-3_5.png +0 -0
- msprobe/docs/img/GPT-3_6.png +0 -0
- msprobe/docs/img/GPT-3_7.png +0 -0
- msprobe/docs/img/GPT-3_8.png +0 -0
- msprobe/docs/img/YOLOV5S_1.png +0 -0
- msprobe/docs/img/YOLOV5S_2.png +0 -0
- msprobe/docs/img/accuracy_checking_details.png +0 -0
- msprobe/docs/img/accuracy_checking_result.png +0 -0
- msprobe/docs/img/api_precision_compare_details.png +0 -0
- msprobe/docs/img/api_precision_compare_result.png +0 -0
- msprobe/docs/img/auto_analyze_log.png +0 -0
- msprobe/docs/img/compare_result.png +0 -0
- msprobe/docs/img/compare_result_pkl.png +0 -0
- msprobe/docs/img/compare_result_pkl_md5.png.png +0 -0
- msprobe/docs/img/cpu_info.png +0 -0
- msprobe/docs/img/free_benchmark.png +0 -0
- msprobe/docs/img/free_benchmark_framework.png +0 -0
- msprobe/docs/img/grad_probe_image-1.png +0 -0
- msprobe/docs/img/grad_probe_image-2.png +0 -0
- msprobe/docs/img/grad_probe_image-3.png +0 -0
- msprobe/docs/img/grad_probe_image-4.png +0 -0
- msprobe/docs/img/grad_probe_image.png +0 -0
- msprobe/docs/img/merge_result.png +0 -0
- msprobe/docs/img/module_compare.png +0 -0
- msprobe/docs/img/monitor/cpu_info.png +0 -0
- msprobe/docs/img/monitor/step_count_per_record.png +0 -0
- msprobe/docs/img/ms_dump.png +0 -0
- msprobe/docs/img/ms_layer.png +0 -0
- msprobe/docs/img/pt_dump.png +0 -0
- msprobe/docs/img/save_compare_result_sample.png +0 -0
- msprobe/docs/img/visualization/fuzzy_match_ms.png +0 -0
- msprobe/docs/img/visualization/fuzzy_match_pt.png +0 -0
- msprobe/docs/img/visualization/proxy.png +0 -0
- msprobe/docs/img/visualization/tensorboard_1.png +0 -0
- msprobe/docs/img/visualization/tensorboard_2.png +0 -0
- msprobe/docs/img/visualization/vis_browser_1.png +0 -0
- msprobe/docs/img/visualization/vis_browser_2.png +0 -0
- msprobe/docs/img/visualization/vis_match_info.png +0 -0
- msprobe/docs/img/visualization/vis_precision_info.png +0 -0
- msprobe/docs/img/visualization/vis_search_info.png +0 -0
- msprobe/docs/img/visualization/vis_show_info.png +0 -0
- msprobe/docs/img/visualization/vis_showcase.png +0 -0
- msprobe/docs/img/visualization/vis_unmatch_info.png +0 -0
- msprobe/docs/visualization/GPTModel.png +0 -0
- msprobe/docs/visualization/ParallelMLP.png +0 -0
- msprobe/docs/visualization/layer_mapping_example.md +0 -132
- msprobe/docs/visualization/mapping.png +0 -0
- msprobe/docs/visualization/mapping1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/3.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/4.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/5.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/6.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/7.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory-qwen25vl.txt +0 -59
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed-mm-qwen25vl.txt +0 -80
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed1.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed2.png +0 -0
- msprobe/docs/visualization/mindspeed_llamafactory_mapping.md +0 -330
- msprobe/docs/visualization/module_name.png +0 -0
- msprobe/docs/visualization/module_name1.png +0 -0
- msprobe/docs/visualization/no_mapping.png +0 -0
- msprobe/docs/visualization/no_mapping1.png +0 -0
- msprobe/docs/visualization/no_mapping_analyze.png +0 -0
- msprobe/docs/visualization/top_layer.png +0 -0
- msprobe/mindspore/api_accuracy_checker/generate_op_script/op_generator.py +0 -460
- msprobe/mindspore/api_accuracy_checker/generate_op_script/operator_replication.template +0 -2081
- msprobe/mindspore/code_mapping/bind.py +0 -283
- msprobe/mindspore/code_mapping/cmd_parser.py +0 -40
- msprobe/mindspore/code_mapping/graph.py +0 -49
- msprobe/mindspore/code_mapping/graph_parser.py +0 -211
- msprobe/mindspore/code_mapping/main.py +0 -24
- msprobe/mindspore/code_mapping/processor.py +0 -34
- msprobe/mindspore/dym_loader/hook_dynamic_loader.cpp +0 -111
- msprobe/mindspore/dym_loader/hook_dynamic_loader.h +0 -52
- msprobe/mindspore/free_benchmark/api_pynative_self_check.py +0 -257
- msprobe/mindspore/free_benchmark/common/config.py +0 -27
- msprobe/mindspore/free_benchmark/common/handler_params.py +0 -31
- msprobe/mindspore/free_benchmark/common/utils.py +0 -100
- msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +0 -638
- msprobe/mindspore/free_benchmark/handler/base_handler.py +0 -105
- msprobe/mindspore/free_benchmark/handler/check_handler.py +0 -55
- msprobe/mindspore/free_benchmark/handler/fix_handler.py +0 -51
- msprobe/mindspore/free_benchmark/handler/handler_factory.py +0 -36
- msprobe/mindspore/free_benchmark/perturbation/add_noise.py +0 -82
- msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +0 -45
- msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +0 -78
- msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +0 -77
- msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +0 -56
- msprobe/mindspore/free_benchmark/perturbation/no_change.py +0 -27
- msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +0 -46
- msprobe/mindspore/free_benchmark/self_check_tool_factory.py +0 -51
- msprobe/mindspore/grad_probe/global_context.py +0 -127
- msprobe/mindspore/grad_probe/grad_analyzer.py +0 -260
- msprobe/mindspore/grad_probe/grad_monitor.py +0 -42
- msprobe/mindspore/grad_probe/grad_stat_csv.py +0 -161
- msprobe/mindspore/grad_probe/hook.py +0 -115
- msprobe/mindspore/grad_probe/utils.py +0 -43
- msprobe/mindspore/mindtorch/__init__.py +0 -18
- msprobe/mindspore/ms_config.py +0 -153
- msprobe/mindspore/task_handler_factory.py +0 -44
- msprobe/nan_analyze/__init__.py +0 -14
- msprobe/pytorch/api_accuracy_checker/generate_op_script/config_op.json +0 -9
- msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +0 -480
- msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +0 -567
- msprobe/pytorch/debugger/precision_debugger.py +0 -181
- msprobe/pytorch/free_benchmark/__init__.py +0 -23
- msprobe/pytorch/free_benchmark/common/constant.py +0 -85
- msprobe/pytorch/free_benchmark/common/counter.py +0 -87
- msprobe/pytorch/free_benchmark/common/enums.py +0 -80
- msprobe/pytorch/free_benchmark/common/params.py +0 -152
- msprobe/pytorch/free_benchmark/common/utils.py +0 -143
- msprobe/pytorch/free_benchmark/compare/grad_saver.py +0 -215
- msprobe/pytorch/free_benchmark/compare/single_benchmark.py +0 -121
- msprobe/pytorch/free_benchmark/main.py +0 -123
- msprobe/pytorch/free_benchmark/perturbed_layers/base_layer.py +0 -28
- msprobe/pytorch/free_benchmark/perturbed_layers/layer_factory.py +0 -56
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +0 -107
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +0 -121
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +0 -89
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +0 -87
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/no_change.py +0 -43
- msprobe/pytorch/free_benchmark/perturbed_layers/npu/npu_base_layser.py +0 -60
- msprobe/pytorch/free_benchmark/perturbed_layers/run_cpu.py +0 -34
- msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +0 -252
- msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +0 -54
- msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +0 -40
- msprobe/pytorch/free_benchmark/result_handlers/handler_factory.py +0 -45
- msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +0 -181
- msprobe/pytorch/grad_probe/__init__.py +0 -0
- msprobe/pytorch/grad_probe/grad_monitor.py +0 -108
- msprobe/pytorch/grad_probe/grad_stat_csv.py +0 -160
- msprobe/pytorch/hook_module/__init__.py +0 -16
- msprobe/pytorch/hook_module/wrap_aten.py +0 -111
- msprobe/pytorch/online_dispatch/__init__.py +0 -19
- msprobe/pytorch/online_dispatch/compare.py +0 -224
- msprobe/pytorch/online_dispatch/dispatch.py +0 -332
- msprobe/pytorch/online_dispatch/dump_compare.py +0 -179
- msprobe/pytorch/online_dispatch/single_compare.py +0 -412
- msprobe/pytorch/online_dispatch/torch_ops_config.yaml +0 -58
- msprobe/pytorch/online_dispatch/utils.py +0 -158
- msprobe/pytorch/parse_tool/__init__.py +0 -0
- msprobe/pytorch/parse_tool/cli.py +0 -31
- msprobe/pytorch/parse_tool/lib/__init__.py +0 -0
- msprobe/pytorch/parse_tool/lib/compare.py +0 -253
- msprobe/pytorch/parse_tool/lib/config.py +0 -50
- msprobe/pytorch/parse_tool/lib/file_desc.py +0 -45
- msprobe/pytorch/parse_tool/lib/interactive_cli.py +0 -97
- msprobe/pytorch/parse_tool/lib/parse_exception.py +0 -54
- msprobe/pytorch/parse_tool/lib/parse_tool.py +0 -161
- msprobe/pytorch/parse_tool/lib/utils.py +0 -299
- msprobe/pytorch/parse_tool/lib/visualization.py +0 -85
- msprobe/pytorch/pt_config.py +0 -299
- /msprobe/core/{grad_probe → dump}/__init__.py +0 -0
- /msprobe/{mindspore/code_mapping → core/dump/api_dump}/__init__.py +0 -0
- /msprobe/{mindspore/debugger → core/dump/data_dump}/__init__.py +0 -0
- /msprobe/{mindspore/exception_dump → core/dump/data_dump/data_processor}/__init__.py +0 -0
- /msprobe/{mindspore/free_benchmark → core/dump/debugger}/__init__.py +0 -0
- /msprobe/{mindspore/free_benchmark/common → core/dump/kernel_dump}/__init__.py +0 -0
- /msprobe/mindspore/{free_benchmark/handler → dump/debugger}/__init__.py +0 -0
- /msprobe/mindspore/{grad_probe → dump/dump_processor}/__init__.py +0 -0
- /msprobe/mindspore/{overflow_check → dump/exception_dump}/__init__.py +0 -0
- /msprobe/mindspore/{mindtorch → dump/mindtorch}/mindtorch_adaptor.py +0 -0
- /msprobe/{pytorch/api_accuracy_checker/run_ut → mindspore/dump/overflow_check}/__init__.py +0 -0
- /msprobe/{pytorch/debugger → mindspore/monitor}/__init__.py +0 -0
- /msprobe/{pytorch/free_benchmark/common → msaccucmp}/__init__.py +0 -0
- /msprobe/pytorch/api_accuracy_checker/{run_ut → acc_check}/.keep +0 -0
- /msprobe/pytorch/{free_benchmark/perturbed_layers → api_accuracy_checker/acc_check}/__init__.py +0 -0
- /msprobe/pytorch/api_accuracy_checker/{run_ut → acc_check}/torch_ut_setting.json +0 -0
- /msprobe/pytorch/{free_benchmark/perturbed_layers/npu → dump/api_dump}/__init__.py +0 -0
- /msprobe/pytorch/{hook_module → dump/api_dump}/support_wrap_ops.yaml +0 -0
- /msprobe/pytorch/{free_benchmark/result_handlers → dump/debugger}/__init__.py +0 -0
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
# -------------------------------------------------------------------------
|
|
3
|
+
# This file is part of the MindStudio project.
|
|
4
|
+
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
|
|
5
|
+
#
|
|
6
|
+
# MindStudio is licensed under Mulan PSL v2.
|
|
7
|
+
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
8
|
+
# You may obtain a copy of Mulan PSL v2 at:
|
|
9
|
+
#
|
|
10
|
+
# http://license.coscl.org.cn/MulanPSL2
|
|
11
|
+
#
|
|
12
|
+
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
13
|
+
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
14
|
+
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
15
|
+
# See the Mulan PSL v2 for more details.
|
|
16
|
+
# -------------------------------------------------------------------------
|
|
17
|
+
|
|
18
|
+
"""
|
|
19
|
+
Function:
|
|
20
|
+
This class mainly involves the main function.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
import os
|
|
24
|
+
import re
|
|
25
|
+
import sys
|
|
26
|
+
import argparse
|
|
27
|
+
import time
|
|
28
|
+
|
|
29
|
+
from msprobe.msaccucmp.cmp_utils import log, path_check, file_utils
|
|
30
|
+
from msprobe.msaccucmp.cmp_utils.utils import safe_path_string, check_file_size
|
|
31
|
+
from msprobe.msaccucmp.cmp_utils.constant.const_manager import ConstManager
|
|
32
|
+
from msprobe.msaccucmp.cmp_utils.reg_manager import RegManager
|
|
33
|
+
from msprobe.msaccucmp.cmp_utils.constant.compare_error import CompareError
|
|
34
|
+
from msprobe.msaccucmp.cmp_utils.path_check import check_others_permission
|
|
35
|
+
from msprobe.msaccucmp.algorithm_manager.algorithm_manager import AlgorithmManagerMain
|
|
36
|
+
from msprobe.msaccucmp.compare_vector import VectorComparison
|
|
37
|
+
from msprobe.msaccucmp.conversion.shape_format_conversion import FormatConversionMain
|
|
38
|
+
from msprobe.msaccucmp.dump_parse.dump_data_parser import DumpDataParser
|
|
39
|
+
from msprobe.msaccucmp.overflow.overflow_analyse import OverflowAnalyse
|
|
40
|
+
from msprobe.msaccucmp.pytorch_cmp.compare_pytorch import PytorchComparison
|
|
41
|
+
from msprobe.msaccucmp.vector_cmp.batch_compare import BatchCompare
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
MIND_STUDIO_LOGO = "[Powered by MindStudio]"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _get_algorithm_help_info() -> str:
|
|
48
|
+
"""
|
|
49
|
+
get algorithm help info
|
|
50
|
+
:return: help info
|
|
51
|
+
"""
|
|
52
|
+
algorithm_help_info = ['<Optional> the algorithm selection, built-in algorithm where ']
|
|
53
|
+
for index, item in enumerate(ConstManager.BUILT_IN_ALGORITHM):
|
|
54
|
+
algorithm_help_info.append("".join([str(index), "=", item, ", "]))
|
|
55
|
+
algorithm_help_info.append('The custom algorithm uses the algorithm name. '
|
|
56
|
+
'The selection splits by ",", such as "0,MaxAbsoluteError,4,CustomAlg" or "all". '
|
|
57
|
+
'The default value is "all"')
|
|
58
|
+
return "".join(algorithm_help_info)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _get_algorithm_help_info_for_int(default_value_list: list) -> str:
|
|
62
|
+
"""
|
|
63
|
+
get algorithm help info for int
|
|
64
|
+
:param default_value_list:
|
|
65
|
+
:return:
|
|
66
|
+
"""
|
|
67
|
+
algorithm_help_info = ['<Optional> the algorithm selection, ']
|
|
68
|
+
for index, item in enumerate(ConstManager.BUILT_IN_ALGORITHM):
|
|
69
|
+
algorithm_help_info.append("".join([str(index), ":", item, ", "]))
|
|
70
|
+
default_info = "The default value is %s." % default_value_list
|
|
71
|
+
algorithm_help_info.append(default_info)
|
|
72
|
+
return "".join(algorithm_help_info)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _match_built_in_arg_value(alg_arg: str) -> bool:
|
|
76
|
+
# the alg value like -alg 1 2 3 --algorithm 1 4
|
|
77
|
+
if alg_arg in sys.argv:
|
|
78
|
+
alg_index = sys.argv.index(alg_arg)
|
|
79
|
+
re_pattern = re.compile(RegManager.BUILTIN_ALGORITHM_INDEX_PATTERN)
|
|
80
|
+
# check the second value after -alg match BUILTIN_ALGORITHM_INDEX_PATTERN
|
|
81
|
+
if alg_index + 2 < len(sys.argv):
|
|
82
|
+
if re_pattern.match(sys.argv[alg_index + 2]):
|
|
83
|
+
return True
|
|
84
|
+
return False
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def _add_alg_argument(compare_parser: argparse.ArgumentParser) -> None:
|
|
88
|
+
if _match_built_in_arg_value('-alg') or _match_built_in_arg_value('--algorithm'):
|
|
89
|
+
default_value_list = []
|
|
90
|
+
for index, _ in enumerate(ConstManager.BUILT_IN_ALGORITHM):
|
|
91
|
+
default_value_list.append(index)
|
|
92
|
+
compare_parser.add_argument(
|
|
93
|
+
'-alg', '--algorithm', dest='algorithm', type=int, nargs="+", choices=default_value_list,
|
|
94
|
+
default=default_value_list, help=_get_algorithm_help_info_for_int(default_value_list))
|
|
95
|
+
else:
|
|
96
|
+
compare_parser.add_argument(
|
|
97
|
+
'-alg', '--algorithm', dest='algorithm', default="all", type=safe_path_string,
|
|
98
|
+
help=_get_algorithm_help_info())
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _add_fusion_rule_argument(compare_parser: argparse.ArgumentParser) -> None:
|
|
102
|
+
compare_parser.add_argument(
|
|
103
|
+
'-f', '--fusion_rule_file', dest='fusion_rule_file', default='', type=safe_path_string,
|
|
104
|
+
help='<Optional> the fusion rule file path')
|
|
105
|
+
compare_parser.add_argument(
|
|
106
|
+
'-q', '--quant_fusion_rule_file', dest='quant_fusion_rule_file', type=safe_path_string,
|
|
107
|
+
default='', help='<Optional> the quant fusion rule file path')
|
|
108
|
+
compare_parser.add_argument(
|
|
109
|
+
'-cf', '--close_fusion_rule_file', dest='close_fusion_rule_file', type=safe_path_string,
|
|
110
|
+
default='', help='<Optional> the rule file path without fusion')
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def _compare_parser(compare_parser: argparse.ArgumentParser) -> None:
|
|
114
|
+
compare_parser.add_argument(
|
|
115
|
+
'-m', '--my_dump_path', dest='my_dump_path', default='', type=safe_path_string, required=True,
|
|
116
|
+
help='<Required> my dump path, the data compared with golden data')
|
|
117
|
+
compare_parser.add_argument(
|
|
118
|
+
'-g', '--golden_dump_path', dest='golden_dump_path', default='', type=safe_path_string,
|
|
119
|
+
help='<Required> the golden dump path', required=True)
|
|
120
|
+
_add_fusion_rule_argument(compare_parser)
|
|
121
|
+
compare_parser.add_argument(
|
|
122
|
+
'-out', '--output', dest='output_path', type=safe_path_string, default='', help='<Optional> the output path')
|
|
123
|
+
compare_parser.add_argument(
|
|
124
|
+
'-c', '--custom_script_path', dest='custom_script_path', default='', type=safe_path_string,
|
|
125
|
+
help='<Optional> the user-defined script path, including format conversion and algorithm')
|
|
126
|
+
compare_parser.add_argument(
|
|
127
|
+
'-a', '--algorithm_options', dest='algorithm_options', default='',
|
|
128
|
+
help='<Optional> the arguments for each algorithm. The format is "algorithm_name:param_name='
|
|
129
|
+
'param_value". The parameter splits by ",". The algorithm splits by ";". '
|
|
130
|
+
'Such as "CosineSimilarity:max=1,min=0;aa:max=1,min=0"')
|
|
131
|
+
_add_alg_argument(compare_parser)
|
|
132
|
+
compare_parser.add_argument(
|
|
133
|
+
'-map', '--mapping', dest="mapping", action="store_true", required=False,
|
|
134
|
+
help="<Optional> create mappings between my output operators and ground truth one")
|
|
135
|
+
compare_parser.add_argument(
|
|
136
|
+
"-overflow_detection", dest="overflow_detection", action="store_true", required=False,
|
|
137
|
+
help="<Optional> Operator overflow detection, only operators of the fp16 type are supported")
|
|
138
|
+
compare_parser.add_argument(
|
|
139
|
+
'-r', '--range', dest="range", default=None, required=False,
|
|
140
|
+
help='<Optional> compare network with the range. The format is "start,end,step". '
|
|
141
|
+
'`start` means the count starts position, limited to [1, op_count], default 1.'
|
|
142
|
+
'`end` means the count ends position, limited to [>=start, op_count] or -1, default -1'
|
|
143
|
+
'`step` limited to [1, op_count], default 1. -r command and -s command can not be used at the same time')
|
|
144
|
+
compare_parser.add_argument(
|
|
145
|
+
'-s', '--select', dest="select", default=None, required=False,
|
|
146
|
+
help='<Optional> compare network with the range. The format is "index_1, index_2,..." Every index should be'
|
|
147
|
+
'a number in the fusion operator list -r command and -s command can not be used at the same time')
|
|
148
|
+
compare_parser.add_argument(
|
|
149
|
+
'-p', '--post_process', dest='post_process', choices=[0, 1], type=int, default=None,
|
|
150
|
+
help='<Optional> whether to extract the compare result, only pytorch is supported.'
|
|
151
|
+
'0 indicates the comparison result is not extracted, 1 indicates the comparison result is extracted')
|
|
152
|
+
|
|
153
|
+
compare_parser.add_argument(
|
|
154
|
+
'-max', '--max_cmp_size', dest='max_cmp_size', type=int, default=0,
|
|
155
|
+
help='<Optional> max size of tensor array to compare')
|
|
156
|
+
|
|
157
|
+
_add_advisor_argument(compare_parser)
|
|
158
|
+
_add_version_argument(compare_parser)
|
|
159
|
+
_add_argument_for_single_op(compare_parser)
|
|
160
|
+
_add_ffts_argument(compare_parser)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def _add_advisor_argument(compare_parser: argparse.ArgumentParser) -> None:
|
|
164
|
+
compare_parser.add_argument(
|
|
165
|
+
'-advisor', dest="advisor", action="store_true", required=False, help="<optional> Enable advisor after compare"
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def _add_ffts_argument(compare_parser: argparse.ArgumentParser) -> None:
|
|
170
|
+
compare_parser.add_argument(
|
|
171
|
+
'-ffts', dest="ffts", action="store_true",
|
|
172
|
+
help="<optional> Enable the comparison between ffts+ and ffts+. "
|
|
173
|
+
"Direct comparison is performed without data combination")
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def _add_argument_for_single_op(compare_parser: argparse.ArgumentParser) -> None:
|
|
177
|
+
compare_parser.add_argument('-op', '--op_name', dest='op_name', default=None, help='<Optional> operator name')
|
|
178
|
+
group = compare_parser.add_mutually_exclusive_group()
|
|
179
|
+
group.add_argument(
|
|
180
|
+
'-o', '--output_tensor', dest='output', default=None,
|
|
181
|
+
help='<Optional> the index of output, takes effect only when the "-op" exists')
|
|
182
|
+
group.add_argument(
|
|
183
|
+
'-i', '--input_tensor', dest='input', default=None,
|
|
184
|
+
help='<Optional> the index for input, takes effect only when the "-op" exists')
|
|
185
|
+
compare_parser.add_argument(
|
|
186
|
+
'--ignore_single_op_result', dest="ignore_single_op_result", action="store_true", default=False, required=False,
|
|
187
|
+
help='<Optional> ignore the single operator detail result, takes effect only when the "-op" exists')
|
|
188
|
+
compare_parser.add_argument(
|
|
189
|
+
'-n', '--topn', dest='topn', type=int, default=ConstManager.DEFAULT_TOP_N,
|
|
190
|
+
help='<Optional> the TopN for the single operator detail result, takes effect '
|
|
191
|
+
'only when the "-op" exists. The value ranges from 1 to 10000. The default value is 20')
|
|
192
|
+
compare_parser.add_argument(
|
|
193
|
+
'-ml', '--max_line', dest='max_line', type=int, default=None,
|
|
194
|
+
help='<Optional> the max line count for the single operator detail result, takes effect '
|
|
195
|
+
'only when the "-op" exists. The default value is 1000000, and it should range '
|
|
196
|
+
'from {} to {}'.format(ConstManager.DETAIL_LINE_COUNT_RANGE_MIN, ConstManager.DETAIL_LINE_COUNT_RANGE_MAX))
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def _add_version_argument(parser: argparse.ArgumentParser) -> None:
|
|
200
|
+
parser.add_argument(
|
|
201
|
+
'-v', '--version', dest='dump_version', choices=[1, 2], type=int, default=2,
|
|
202
|
+
help='<Optional> the version of the dump file, '
|
|
203
|
+
'1 means the protobuf dump file, 2 means the binary dump file, the default value is 2')
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def _convert_parser(covert_parser: argparse.ArgumentParser) -> None:
|
|
207
|
+
group = covert_parser.add_mutually_exclusive_group()
|
|
208
|
+
covert_parser.add_argument(
|
|
209
|
+
'-d', '--dump_file', dest='dump_path', default='', type=safe_path_string, required=True,
|
|
210
|
+
help='<Required> the dump file path, supports one file, file list(splits by ",") and directory')
|
|
211
|
+
covert_parser.add_argument('-f', '--format', dest='format', default=None, help='<Optional> the format to transfer')
|
|
212
|
+
covert_parser.add_argument(
|
|
213
|
+
'-s', '--shape', dest='shape', default=None,
|
|
214
|
+
help='<Optional> the shape for format transfer, currently only used for FRACTAL_NZ conversion, '
|
|
215
|
+
'shape format is ([0-9]+,)+[0-9]+, such as 1,3,224,224')
|
|
216
|
+
group.add_argument(
|
|
217
|
+
'-o', '--output_tensor', dest='output', default=None,
|
|
218
|
+
help='<Optional> the index for output, takes effect only when the "-f" exists')
|
|
219
|
+
group.add_argument(
|
|
220
|
+
'-i', '--input_tensor', dest='input', default=None,
|
|
221
|
+
help='<Optional> the index for input, takes effect only when the "-f" exists')
|
|
222
|
+
covert_parser.add_argument(
|
|
223
|
+
'-c', '--custom_script_path', dest='custom_script_path', default=None, type=safe_path_string,
|
|
224
|
+
help='<Optional> the user-defined script path, including format conversion')
|
|
225
|
+
covert_parser.add_argument('-out', '--output', dest='output_path', default='', help='<Optional> the output path')
|
|
226
|
+
_add_version_argument(covert_parser)
|
|
227
|
+
covert_parser.add_argument(
|
|
228
|
+
'-t', '--type', dest='output_file_type', choices=['npy', 'bin', 'msnpy'],
|
|
229
|
+
default='npy',
|
|
230
|
+
help='<Optional> the type of the output file, '
|
|
231
|
+
'npy means the output is saved as numpy format, '
|
|
232
|
+
'bin means the output is saved as binary format, '
|
|
233
|
+
'msnpy means the output is saved as numpy format for MindSpore, '
|
|
234
|
+
'the default value is npy')
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def _overflow_parser(overflow_parser: argparse.ArgumentParser) -> None:
|
|
238
|
+
overflow_parser.add_argument(
|
|
239
|
+
'-d', '--dump_path', dest='dump_path', default='', type=safe_path_string, required=True,
|
|
240
|
+
help='<Required> the dump file path')
|
|
241
|
+
overflow_parser.add_argument(
|
|
242
|
+
'-out', '--output', dest='output_path', default='', type=safe_path_string, required=True,
|
|
243
|
+
help='<Optional> the output path')
|
|
244
|
+
overflow_parser.add_argument(
|
|
245
|
+
'-n', '--top_n', dest='top_num', choices=[1, 2, 3, 4, 5], type=int, default=1,
|
|
246
|
+
help='<Optional> the number of overflow ops, first n will be analyzed. the default value is 1')
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
def _file_compare_parser(file_compare_parser: argparse.ArgumentParser) -> None:
|
|
250
|
+
file_compare_parser.add_argument(
|
|
251
|
+
'-m', '--my_dump_path', dest='my_dump_path', default='', type=safe_path_string,
|
|
252
|
+
help='<Required> my dump path, the data compared with golden data',
|
|
253
|
+
required=True)
|
|
254
|
+
file_compare_parser.add_argument(
|
|
255
|
+
'-g', '--golden_dump_path', dest='golden_dump_path', default='', type=safe_path_string,
|
|
256
|
+
help='<Required> the golden dump path', required=True)
|
|
257
|
+
file_compare_parser.add_argument(
|
|
258
|
+
'-out', '--output', dest='output_path', default='', type=safe_path_string,
|
|
259
|
+
help='<Required> the output path', required=True)
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
def _check_argument_effect(required_arg: any, options_arg: any, options_arg_str: str, required_arg_str: str) -> None:
|
|
263
|
+
if required_arg is None and options_arg is not None:
|
|
264
|
+
log.print_error_log(
|
|
265
|
+
'The argument %r takes effect only when the "%r" exists.' % (options_arg_str, required_arg_str))
|
|
266
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def _check_single_op_argument(args: argparse.Namespace) -> None:
|
|
270
|
+
if args.op_name:
|
|
271
|
+
log.print_error_log('When --mapping or -map exists,the -op parameter is invalid.')
|
|
272
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
273
|
+
if args.output or args.input:
|
|
274
|
+
log.print_error_log('When --mapping or -map exists,the -i or -o parameter is invalid.')
|
|
275
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
276
|
+
if not args.fusion_rule_file and not args.quant_fusion_rule_file:
|
|
277
|
+
log.print_error_log('When --mapping or -map exists,there is need to enter the -f or -q parameter.')
|
|
278
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
def _check_dump_path_exist(dump_path_array: list) -> None:
|
|
282
|
+
for item_path in dump_path_array:
|
|
283
|
+
ret = path_check.check_path_valid(item_path, True)
|
|
284
|
+
if ret != CompareError.MSACCUCMP_NONE_ERROR:
|
|
285
|
+
raise CompareError(ret)
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
def _check_file_compare_file(args: argparse.Namespace, file_type) -> None:
|
|
289
|
+
for file in [args.my_dump_path, args.golden_dump_path]:
|
|
290
|
+
if not file.endswith(file_type):
|
|
291
|
+
log.print_error_log("[file_compare] The file %r is invalid.Only support %s file." % (file, file_type))
|
|
292
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_TYPE_ERROR)
|
|
293
|
+
ret = path_check.check_path_valid(file, True, False, path_type=path_check.PathType.File)
|
|
294
|
+
if ret != CompareError.MSACCUCMP_NONE_ERROR:
|
|
295
|
+
raise CompareError(ret)
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
def _check_file_compare_out(args: argparse.Namespace) -> None:
|
|
299
|
+
ret = path_check.check_output_path_valid(args.output_path, exist=True)
|
|
300
|
+
if ret != CompareError.MSACCUCMP_NONE_ERROR:
|
|
301
|
+
log.print_error_log('[file_compare] The -out parameter: "%r" is invalid!' % args.output_path)
|
|
302
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PATH_ERROR)
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
def _check_hdf5_file_valid(file_path: str) -> bool:
|
|
306
|
+
"""
|
|
307
|
+
Check file is hdf5
|
|
308
|
+
:param file_path: the file path
|
|
309
|
+
:return bool
|
|
310
|
+
"""
|
|
311
|
+
return os.path.isfile(os.path.realpath(file_path)) and file_path.endswith(".h5")
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
def start_compare(args: argparse.Namespace) -> int:
|
|
315
|
+
"""
|
|
316
|
+
compare entry.
|
|
317
|
+
"""
|
|
318
|
+
if _check_hdf5_file_valid(args.my_dump_path) and _check_hdf5_file_valid(args.golden_dump_path):
|
|
319
|
+
pytorch_compare = PytorchComparison(args)
|
|
320
|
+
pytorch_compare.check_arguments_valid(args)
|
|
321
|
+
check_file_size(args.my_dump_path, ConstManager.ONE_HUNDRED_MB)
|
|
322
|
+
check_file_size(args.golden_dump_path, ConstManager.ONE_HUNDRED_MB)
|
|
323
|
+
ret = check_others_permission(args.my_dump_path)
|
|
324
|
+
if ret != CompareError.MSACCUCMP_NONE_ERROR:
|
|
325
|
+
raise CompareError(ret)
|
|
326
|
+
ret = check_others_permission(args.golden_dump_path)
|
|
327
|
+
if ret != CompareError.MSACCUCMP_NONE_ERROR:
|
|
328
|
+
raise CompareError(ret)
|
|
329
|
+
ret = pytorch_compare.compare()
|
|
330
|
+
return ret
|
|
331
|
+
|
|
332
|
+
if args.post_process is not None:
|
|
333
|
+
log.print_error_log('param -p only used in pytorch session.')
|
|
334
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
335
|
+
|
|
336
|
+
if os.path.isfile(os.path.realpath(args.my_dump_path)) and os.path.isfile(os.path.realpath(args.golden_dump_path)):
|
|
337
|
+
ret = check_others_permission(args.my_dump_path)
|
|
338
|
+
if ret != CompareError.MSACCUCMP_NONE_ERROR:
|
|
339
|
+
raise CompareError(ret)
|
|
340
|
+
ret = check_others_permission(args.golden_dump_path)
|
|
341
|
+
if ret != CompareError.MSACCUCMP_NONE_ERROR:
|
|
342
|
+
raise CompareError(ret)
|
|
343
|
+
compare = AlgorithmManagerMain(args)
|
|
344
|
+
ret = compare.process()
|
|
345
|
+
elif args.fusion_rule_file != "" and BatchCompare().check_fusion_rule_json_dir(args.fusion_rule_file):
|
|
346
|
+
ret = BatchCompare().compare(args)
|
|
347
|
+
else:
|
|
348
|
+
args = _check_advisor_effect(args)
|
|
349
|
+
compare = VectorComparison(args)
|
|
350
|
+
ret = compare.compare()
|
|
351
|
+
return ret
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
def _do_cmd() -> int:
|
|
355
|
+
parser = argparse.ArgumentParser(description=MIND_STUDIO_LOGO)
|
|
356
|
+
subparsers = parser.add_subparsers(help='commands')
|
|
357
|
+
compare_parser = subparsers.add_parser(
|
|
358
|
+
'compare', help='Compare network or single op.', description=MIND_STUDIO_LOGO
|
|
359
|
+
)
|
|
360
|
+
covert_parser = subparsers.add_parser(
|
|
361
|
+
'convert', help='Convert my dump data to numpy data or bin data.', description=MIND_STUDIO_LOGO
|
|
362
|
+
)
|
|
363
|
+
overflow_parser = subparsers.add_parser(
|
|
364
|
+
'overflow', help='Analyze the information of the overflow operators.', description=MIND_STUDIO_LOGO
|
|
365
|
+
)
|
|
366
|
+
file_compare_parser = subparsers.add_parser(
|
|
367
|
+
'file_compare', help='Compare two single .npy file.', description=MIND_STUDIO_LOGO
|
|
368
|
+
)
|
|
369
|
+
|
|
370
|
+
_compare_parser(compare_parser)
|
|
371
|
+
_convert_parser(covert_parser)
|
|
372
|
+
_overflow_parser(overflow_parser)
|
|
373
|
+
_file_compare_parser(file_compare_parser)
|
|
374
|
+
|
|
375
|
+
args = parser.parse_args(sys.argv[1:])
|
|
376
|
+
if len(sys.argv) < 2:
|
|
377
|
+
parser.print_help()
|
|
378
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
379
|
+
|
|
380
|
+
if sys.argv[1] == 'compare':
|
|
381
|
+
ret = _do_compare(args)
|
|
382
|
+
elif sys.argv[1] == 'convert':
|
|
383
|
+
ret = _do_convert(args)
|
|
384
|
+
elif sys.argv[1] == 'file_compare':
|
|
385
|
+
ret = _do_file_compare(args)
|
|
386
|
+
else:
|
|
387
|
+
ret = _do_overflow(args)
|
|
388
|
+
|
|
389
|
+
return ret
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
def _check_advisor_effect(args):
|
|
393
|
+
if args.advisor and args.range is not None:
|
|
394
|
+
log.print_warn_log('The argument "-advisor" takes no effect when the "-r" or "--range" exists.')
|
|
395
|
+
args.advisor = False
|
|
396
|
+
if args.advisor and args.select is not None:
|
|
397
|
+
log.print_warn_log('The argument "-advisor" takes no effect when the "-s" or "--select" exists.')
|
|
398
|
+
args.advisor = False
|
|
399
|
+
if args.advisor and args.op_name is not None:
|
|
400
|
+
log.print_warn_log('The argument "-advisor" takes no effect when the "-op" exists.')
|
|
401
|
+
args.advisor = False
|
|
402
|
+
if args.advisor:
|
|
403
|
+
log.print_warn_log('The argument "-advisor" will automatically configure "-overflow_detection".')
|
|
404
|
+
args.overflow_detection = True
|
|
405
|
+
return args
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
def _check_range_effect(args: argparse.Namespace) -> None:
|
|
409
|
+
if not args.fusion_rule_file and args.range is not None:
|
|
410
|
+
log.print_error_log('The argument "-r" or "--range" takes effect only when the "-f" exists.')
|
|
411
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
412
|
+
if args.op_name and args.range is not None:
|
|
413
|
+
log.print_error_log('The argument "-r" or "--range" exists, the "-op" parameter is invalid.')
|
|
414
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
415
|
+
if not args.fusion_rule_file and args.select is not None:
|
|
416
|
+
log.print_error_log('The argument "-s" or "--select" takes effect only when the "-f" exists.')
|
|
417
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
418
|
+
if args.op_name and args.select is not None:
|
|
419
|
+
log.print_error_log('The argument "-s" or "--select" exists, the "-op" parameter is invalid.')
|
|
420
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
421
|
+
if args.range and args.select is not None:
|
|
422
|
+
log.print_error_log('The argument "-r" and "-s" can not be used at the same time')
|
|
423
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
424
|
+
if args.max_cmp_size < 0:
|
|
425
|
+
log.print_error_log(
|
|
426
|
+
"Please enter a valid number for max_cmp_size, the max_cmp_size should be"
|
|
427
|
+
" in [0, ∞), now is %s." % args.max_cmp_size)
|
|
428
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
def _do_compare(args: argparse.Namespace) -> int:
|
|
432
|
+
_check_range_effect(args)
|
|
433
|
+
if args.dump_version == 1:
|
|
434
|
+
log.print_warn_log(
|
|
435
|
+
"The -v argument will be deprecated. when the -v value is 1, it will be processed as 2."
|
|
436
|
+
)
|
|
437
|
+
if args.mapping:
|
|
438
|
+
_check_single_op_argument(args)
|
|
439
|
+
compare = VectorComparison(args)
|
|
440
|
+
ret = compare.compare()
|
|
441
|
+
else:
|
|
442
|
+
_check_argument_effect(args.op_name, args.output, '"-o" or "--output_tensor"', '-op')
|
|
443
|
+
_check_argument_effect(args.op_name, args.input, '"-i" or "--input_tensor"', '-op')
|
|
444
|
+
if '-n' in sys.argv or '--topn' in sys.argv:
|
|
445
|
+
_check_argument_effect(args.op_name, args.topn, '"-n" or "--topn"', '-op')
|
|
446
|
+
if '--ignore_single_op_result' in sys.argv:
|
|
447
|
+
_check_argument_effect(args.op_name, args.ignore_single_op_result, '"--ignore_single_op_result"', '-op')
|
|
448
|
+
if '-ml' in sys.argv or '--max_line' in sys.argv:
|
|
449
|
+
_check_argument_effect(args.op_name, args.max_line, '"-ml" or "--max_line"', '-op')
|
|
450
|
+
dump_path_array = [args.my_dump_path, args.golden_dump_path]
|
|
451
|
+
_check_dump_path_exist(dump_path_array)
|
|
452
|
+
ret = start_compare(args)
|
|
453
|
+
|
|
454
|
+
return ret
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
def _do_convert(args: argparse.Namespace) -> int:
|
|
458
|
+
_check_argument_effect(args.format, args.output, '"-o" or "--output_tensor"', '-f')
|
|
459
|
+
_check_argument_effect(args.format, args.input, '"-i" or "--input_tensor"', '-f')
|
|
460
|
+
_check_argument_effect(args.format, args.shape, '"-s" or "--shape"', '-f')
|
|
461
|
+
_check_argument_effect(args.format, args.custom_script_path, '"-c" or "--custom_script_path"', '-f')
|
|
462
|
+
if args.dump_version == 1:
|
|
463
|
+
log.print_warn_log(
|
|
464
|
+
"The -v argument will be deprecated. when the -v value is 1, it will be processed as 2."
|
|
465
|
+
)
|
|
466
|
+
abs_dump_path = os.path.abspath(args.dump_path)
|
|
467
|
+
if os.path.isdir(abs_dump_path) and not os.listdir(abs_dump_path):
|
|
468
|
+
log.print_error_log('The dump path is empty.')
|
|
469
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR)
|
|
470
|
+
if args.format:
|
|
471
|
+
if os.path.isdir(abs_dump_path):
|
|
472
|
+
log.print_warn_log(
|
|
473
|
+
'The dump path is a directory. If the -o, -i and -s arguments exist, these arguments will be ignored.'
|
|
474
|
+
)
|
|
475
|
+
conversion = FormatConversionMain(args)
|
|
476
|
+
ret = conversion.convert_format()
|
|
477
|
+
else:
|
|
478
|
+
ret = DumpDataParser(args).parse_dump_data()
|
|
479
|
+
|
|
480
|
+
return ret
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
def _do_file_compare(args: argparse.Namespace) -> int:
|
|
484
|
+
_check_file_compare_file(args, ConstManager.NPY_SUFFIX)
|
|
485
|
+
_check_file_compare_out(args)
|
|
486
|
+
args.custom_script_path = ""
|
|
487
|
+
args.algorithm = ConstManager.FILE_CMP_SUPPORTED_ALGORITHM
|
|
488
|
+
args.algorithm_options = ""
|
|
489
|
+
compare = AlgorithmManagerMain(args)
|
|
490
|
+
ret = compare.process(save_result=True)
|
|
491
|
+
|
|
492
|
+
return ret
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
def _do_overflow(args: argparse.Namespace) -> int:
|
|
496
|
+
overflow_analyse = OverflowAnalyse(args)
|
|
497
|
+
ret = overflow_analyse.check_argument(args)
|
|
498
|
+
if ret == CompareError.MSACCUCMP_NONE_ERROR:
|
|
499
|
+
return overflow_analyse.analyse()
|
|
500
|
+
return ret
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
def _root_privilege_warning():
|
|
504
|
+
if os.getuid() == 0:
|
|
505
|
+
log.print_warn_log(
|
|
506
|
+
"msaccucmp is being run as root. "
|
|
507
|
+
"To avoid security risks, it is recommended to switch to a regular user to run it."
|
|
508
|
+
)
|
|
509
|
+
|
|
510
|
+
|
|
511
|
+
def main() -> None:
|
|
512
|
+
"""
|
|
513
|
+
parse argument and run command
|
|
514
|
+
:return:
|
|
515
|
+
"""
|
|
516
|
+
start = time.time()
|
|
517
|
+
with file_utils.UmaskWrapper():
|
|
518
|
+
try:
|
|
519
|
+
_root_privilege_warning()
|
|
520
|
+
ret = _do_cmd()
|
|
521
|
+
except CompareError as err:
|
|
522
|
+
ret = err.code
|
|
523
|
+
except Exception as base_err:
|
|
524
|
+
log.print_error_log(f'Basic error running {sys.argv[0]}: {base_err}')
|
|
525
|
+
sys.exit(1)
|
|
526
|
+
end = time.time()
|
|
527
|
+
log.print_info_log('The command was completed and took %d seconds.' % (end - start))
|
|
528
|
+
sys.exit(ret)
|
|
529
|
+
|
|
530
|
+
|
|
531
|
+
if __name__ == '__main__':
|
|
532
|
+
main()
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
# -------------------------------------------------------------------------
|
|
3
|
+
# This file is part of the MindStudio project.
|
|
4
|
+
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
|
|
5
|
+
#
|
|
6
|
+
# MindStudio is licensed under Mulan PSL v2.
|
|
7
|
+
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
8
|
+
# You may obtain a copy of Mulan PSL v2 at:
|
|
9
|
+
#
|
|
10
|
+
# http://license.coscl.org.cn/MulanPSL2
|
|
11
|
+
#
|
|
12
|
+
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
13
|
+
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
14
|
+
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
15
|
+
# See the Mulan PSL v2 for more details.
|
|
16
|
+
# -------------------------------------------------------------------------
|
|
17
|
+
|
|
18
|
+
"""
|
|
19
|
+
Function:
|
|
20
|
+
Make advisor, perform comparative analysis, This class mainly involves the main function.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
import os
|
|
24
|
+
import sys
|
|
25
|
+
import argparse
|
|
26
|
+
import re
|
|
27
|
+
from msprobe.msaccucmp.cmp_utils import log, path_check, file_utils
|
|
28
|
+
from msprobe.msaccucmp.cmp_utils.utils import safe_path_string
|
|
29
|
+
from msprobe.msaccucmp.cmp_utils.constant.compare_error import CompareError
|
|
30
|
+
from msprobe.msaccucmp.cmp_utils.constant.const_manager import ConstManager
|
|
31
|
+
from msprobe.msaccucmp.advisor.compare_advisor import CompareAdvisor
|
|
32
|
+
MAX_STRING_LENGTH = 1024
|
|
33
|
+
NODE_WHITE_LIST_REGEX = re.compile(r"[^_A-Za-z0-9/.,;-]")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def parse_input_nodes(input_nodes):
|
|
37
|
+
"""
|
|
38
|
+
Convert input_nodes string to nodes list
|
|
39
|
+
:param input_nodes: string of input nodes
|
|
40
|
+
"""
|
|
41
|
+
if not input_nodes:
|
|
42
|
+
return []
|
|
43
|
+
else:
|
|
44
|
+
check_safe_string(input_nodes)
|
|
45
|
+
check_string_length(input_nodes)
|
|
46
|
+
return [node.strip() for node in input_nodes.strip().split(";") if node.strip()]
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _compare_advisor_parser(parser):
|
|
50
|
+
parser.add_argument("-i", "--input_file", dest="input_file", default="", type=safe_path_string,
|
|
51
|
+
help="<Required> The compare result file: generate from msaccucmp compare command, a csv file.",
|
|
52
|
+
required=True)
|
|
53
|
+
parser.add_argument('-input_nodes', dest="input_nodes", default="",
|
|
54
|
+
help="<optional> Input nodes designated by user. Separate multiple nodes with semicolons(;)."
|
|
55
|
+
" E.g: \"node_name1;node_name2;node_name3\"", required=False)
|
|
56
|
+
parser.add_argument("-o", "--out_path", dest="out_path", default="", type=safe_path_string,
|
|
57
|
+
help="<optional> The compare advice out path.",
|
|
58
|
+
required=False)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _do_advisor():
|
|
62
|
+
parser = argparse.ArgumentParser()
|
|
63
|
+
_compare_advisor_parser(parser)
|
|
64
|
+
args = parser.parse_args(sys.argv[1:])
|
|
65
|
+
input_file = os.path.realpath(args.input_file)
|
|
66
|
+
check_file_size(input_file)
|
|
67
|
+
_check_input_file(input_file, ConstManager.CSV_SUFFIX)
|
|
68
|
+
input_nodes = parse_input_nodes(args.input_nodes)
|
|
69
|
+
if args.out_path:
|
|
70
|
+
if os.path.islink(os.path.abspath(args.out_path)):
|
|
71
|
+
log.print_error_log('The path "%r" is a softlink, not permitted.' % args.out_path)
|
|
72
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PATH_ERROR)
|
|
73
|
+
out_path = os.path.realpath(args.out_path)
|
|
74
|
+
else:
|
|
75
|
+
out_path = ""
|
|
76
|
+
compare_advisor = CompareAdvisor(input_file, input_nodes, out_path)
|
|
77
|
+
advisor_result = compare_advisor.advisor()
|
|
78
|
+
message_list = advisor_result.print_advisor_log()
|
|
79
|
+
if out_path:
|
|
80
|
+
path_check.check_output_path_valid(out_path, exist=True)
|
|
81
|
+
advisor_result.gen_summary_file(out_path, message_list)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def check_file_size(input_file):
|
|
85
|
+
try:
|
|
86
|
+
file_size = os.path.getsize(input_file)
|
|
87
|
+
except OSError as os_error:
|
|
88
|
+
log.print_error_log('Failed to open "%r". %s' % (input_file, str(os_error)))
|
|
89
|
+
raise CompareError(CompareError.MSACCUCMP_OPEN_FILE_ERROR) from os_error
|
|
90
|
+
if file_size > ConstManager.ONE_HUNDRED_MB:
|
|
91
|
+
log.print_error_log('The size (%d) of %r exceeds 100MB, tools not support.' % (file_size, input_file))
|
|
92
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_FILE_ERROR)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def check_string_length(s):
|
|
96
|
+
byte_length = len(s.encode('utf-8'))
|
|
97
|
+
if byte_length > MAX_STRING_LENGTH:
|
|
98
|
+
log.print_error_log('The length (%d) of %s exceeds 1024, tools not support.' % (byte_length, s))
|
|
99
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_FILE_ERROR)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def check_safe_string(s):
|
|
103
|
+
if re.search(NODE_WHITE_LIST_REGEX, s):
|
|
104
|
+
log.print_error_log("String parameter contains invalid characters.")
|
|
105
|
+
raise ValueError
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def _check_input_file(input_file: str, file_type: str) -> None:
|
|
109
|
+
if not input_file.endswith(file_type):
|
|
110
|
+
log.print_error_log("[file_compare] The file %r is invalid.Only support %r file." % (input_file, file_type))
|
|
111
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_TYPE_ERROR)
|
|
112
|
+
ret = path_check.check_exec_file_valid(input_file)
|
|
113
|
+
if ret != CompareError.MSACCUCMP_NONE_ERROR:
|
|
114
|
+
raise CompareError(ret)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
if __name__ == '__main__':
|
|
118
|
+
with file_utils.UmaskWrapper():
|
|
119
|
+
try:
|
|
120
|
+
_do_advisor()
|
|
121
|
+
except CompareError as err:
|
|
122
|
+
sys.exit(err.code)
|
|
123
|
+
except Exception as base_err:
|
|
124
|
+
log.print_error_log(f'Basic error running {sys.argv[0]}: {base_err}')
|
|
125
|
+
sys.exit(1)
|
|
126
|
+
|
|
127
|
+
log.print_info_log("Advisor completed.")
|
|
128
|
+
sys.exit(CompareError.MSACCUCMP_NONE_ERROR)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# -------------------------------------------------------------------------
|
|
2
|
+
# This file is part of the MindStudio project.
|
|
3
|
+
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
|
|
4
|
+
#
|
|
5
|
+
# MindStudio is licensed under Mulan PSL v2.
|
|
6
|
+
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
7
|
+
# You may obtain a copy of Mulan PSL v2 at:
|
|
8
|
+
#
|
|
9
|
+
# http://license.coscl.org.cn/MulanPSL2
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
12
|
+
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
13
|
+
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
14
|
+
# See the Mulan PSL v2 for more details.
|
|
15
|
+
# -------------------------------------------------------------------------
|
|
16
|
+
|