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,635 @@
|
|
|
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
|
+
FusionRuleParser class.
|
|
21
|
+
This class mainly involves the analysis_fusion_rule function.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
import uuid
|
|
25
|
+
|
|
26
|
+
from msprobe.msaccucmp.cmp_utils import utils, utils_type
|
|
27
|
+
from msprobe.msaccucmp.cmp_utils import log
|
|
28
|
+
from msprobe.msaccucmp.cmp_utils.constant.const_manager import ConstManager
|
|
29
|
+
from msprobe.msaccucmp.cmp_utils.file_utils import FileUtils
|
|
30
|
+
from msprobe.msaccucmp.cmp_utils.constant.compare_error import CompareError
|
|
31
|
+
from msprobe.msaccucmp.vector_cmp.fusion_manager.quant_filter import QuantFilter
|
|
32
|
+
from msprobe.msaccucmp.vector_cmp.fusion_manager.fusion_op import OpAttr, FusionOp, OutputDesc
|
|
33
|
+
from msprobe.msaccucmp.dump_parse import dump
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def make_left_and_right_string(ground_truth_to_my_output_map: dict) -> (str, str):
|
|
37
|
+
"""
|
|
38
|
+
Convert my output ops and ground truth ops to string, split by ","
|
|
39
|
+
:param ground_truth_to_my_output_map: the map for ground truth op to my output op list
|
|
40
|
+
:return my output op names, ground truth op names
|
|
41
|
+
"""
|
|
42
|
+
ground_truth_ops_str = ",".join(ground_truth_to_my_output_map.keys())
|
|
43
|
+
my_output_op_name_list = []
|
|
44
|
+
for op_list in ground_truth_to_my_output_map.values():
|
|
45
|
+
for fusion_op in op_list:
|
|
46
|
+
my_output_op_name_list.append(fusion_op.op_name)
|
|
47
|
+
my_output_ops_str = ",".join(my_output_op_name_list)
|
|
48
|
+
return my_output_ops_str, ground_truth_ops_str
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def get_relation_for_fusion(fusion_op_list: list) -> utils_type.FusionRelation:
|
|
52
|
+
"""
|
|
53
|
+
Get the relation for fusion op list
|
|
54
|
+
:param fusion_op_list: the fusion op list
|
|
55
|
+
:return FusionRelation
|
|
56
|
+
"""
|
|
57
|
+
if len(fusion_op_list) == 1:
|
|
58
|
+
if len(fusion_op_list[0].attr.original_op_names) > 1:
|
|
59
|
+
return utils_type.FusionRelation.MultiToOne
|
|
60
|
+
return utils_type.FusionRelation.OneToOne
|
|
61
|
+
if len(fusion_op_list) > 1:
|
|
62
|
+
if fusion_op_list[0].attr.l1_fusion_no != "":
|
|
63
|
+
return utils_type.FusionRelation.L1Fusion
|
|
64
|
+
if len(fusion_op_list[0].attr.original_op_names) == 1:
|
|
65
|
+
return utils_type.FusionRelation.OneToMulti
|
|
66
|
+
return utils_type.FusionRelation.MultiToMulti
|
|
67
|
+
return utils_type.FusionRelation.OneToOne
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def make_right_to_left_multi_map(fusion_op_list: list) -> dict:
|
|
71
|
+
"""
|
|
72
|
+
make map {original_op_name_string, op_list} for any to multi
|
|
73
|
+
:param fusion_op_list: the fusion op list
|
|
74
|
+
:return the map {original_op_name_string, op_list}
|
|
75
|
+
"""
|
|
76
|
+
# if multi to multi, the map is{'C,D,F': ['A', 'B']}
|
|
77
|
+
# if one to multi, {'G': ['H', 'I']}
|
|
78
|
+
# if splitter, the value of return is like {A: [A_1, A_2], B: [B_1, B_2]}
|
|
79
|
+
ground_truth_to_my_output_map = {}
|
|
80
|
+
for operator in fusion_op_list:
|
|
81
|
+
original_names = ','.join(operator.attr.original_op_names)
|
|
82
|
+
if original_names in ground_truth_to_my_output_map:
|
|
83
|
+
ground_truth_to_my_output_map.get(original_names).append(operator)
|
|
84
|
+
else:
|
|
85
|
+
ground_truth_to_my_output_map[original_names] = [operator]
|
|
86
|
+
return ground_truth_to_my_output_map
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def _get_original_op_names_by_op_list(op_list: list, tmp_original_op_names: list) -> None:
|
|
90
|
+
for fusion_op in op_list:
|
|
91
|
+
for original_op_name in fusion_op.attr.original_op_names:
|
|
92
|
+
if original_op_name not in tmp_original_op_names:
|
|
93
|
+
tmp_original_op_names.append(original_op_name)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def _get_original_op_names_before_quant(fusion_op_info: FusionOp, quant_fusion_rule: any) -> list:
|
|
97
|
+
tmp_original_op_names = []
|
|
98
|
+
for op_name in fusion_op_info.attr.original_op_names:
|
|
99
|
+
if op_name in quant_fusion_rule.op_name_to_fusion_op_name_map:
|
|
100
|
+
op_list = quant_fusion_rule.fusion_op_name_to_op_map.get(
|
|
101
|
+
quant_fusion_rule.op_name_to_fusion_op_name_map.get(op_name))
|
|
102
|
+
_get_original_op_names_by_op_list(op_list, tmp_original_op_names)
|
|
103
|
+
return tmp_original_op_names
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def _make_new_output_desc(desc: OutputDesc, origin_format: str, origin_shape: list) -> None:
|
|
107
|
+
if origin_format != '':
|
|
108
|
+
desc.origin_format = origin_format
|
|
109
|
+
desc.origin_shape = origin_shape
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def _make_output_desc_by_index(output_desc: OutputDesc, op_list: list, tmp_output_desc: list) -> None:
|
|
113
|
+
for operator in op_list:
|
|
114
|
+
if operator.op_name != output_desc.origin_name:
|
|
115
|
+
continue
|
|
116
|
+
if output_desc.origin_output_index >= len(operator.output_desc):
|
|
117
|
+
tmp_output_desc.append(OutputDesc("", None, "", []))
|
|
118
|
+
else:
|
|
119
|
+
desc = operator.output_desc[output_desc.origin_output_index]
|
|
120
|
+
_make_new_output_desc(desc, output_desc.origin_format, output_desc.origin_shape)
|
|
121
|
+
tmp_output_desc.append(desc)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def _make_output_desc_by_op_list(output_desc: OutputDesc, op_list: list, tmp_output_desc: list) -> None:
|
|
125
|
+
origin_output_index = output_desc.origin_output_index
|
|
126
|
+
# get origin output desc
|
|
127
|
+
if origin_output_index is None:
|
|
128
|
+
for item in op_list:
|
|
129
|
+
for desc in item.output_desc:
|
|
130
|
+
_make_new_output_desc(desc, output_desc.origin_format, output_desc.origin_shape)
|
|
131
|
+
tmp_output_desc.append(desc)
|
|
132
|
+
else:
|
|
133
|
+
_make_output_desc_by_index(output_desc, op_list, tmp_output_desc)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def _get_output_desc_before_quant(fusion_op_info: FusionOp, quant_fusion_rule: any) -> list:
|
|
137
|
+
tmp_output_desc = []
|
|
138
|
+
for output_desc in fusion_op_info.output_desc:
|
|
139
|
+
origin_name = output_desc.origin_name
|
|
140
|
+
# skip empty origin name
|
|
141
|
+
if origin_name == "":
|
|
142
|
+
continue
|
|
143
|
+
# skip origin name not in quant
|
|
144
|
+
if origin_name not in quant_fusion_rule.op_name_to_fusion_op_name_map:
|
|
145
|
+
log.print_warn_log('The name "%s" is not in quant fusion rule.' % origin_name)
|
|
146
|
+
continue
|
|
147
|
+
op_list = quant_fusion_rule.fusion_op_name_to_op_map.get(
|
|
148
|
+
quant_fusion_rule.op_name_to_fusion_op_name_map.get(origin_name))
|
|
149
|
+
_make_output_desc_by_op_list(output_desc, op_list, tmp_output_desc)
|
|
150
|
+
return tmp_output_desc
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def merge_fusion_rule(offline_fusion_rule: any, quant_fusion_rule: any) -> any:
|
|
154
|
+
"""
|
|
155
|
+
Merge offline fusion rule and quant fusion rule
|
|
156
|
+
:param offline_fusion_rule: the offline fusion rule
|
|
157
|
+
:param quant_fusion_rule: the quant fusion rule
|
|
158
|
+
:return the merged fusion rule
|
|
159
|
+
"""
|
|
160
|
+
merge_map = {}
|
|
161
|
+
for (_, fusion_op_list) in list(
|
|
162
|
+
offline_fusion_rule.fusion_op_name_to_op_map.items()):
|
|
163
|
+
for fusion_op in fusion_op_list:
|
|
164
|
+
# get the quant fusion rule original op names, and deduplication
|
|
165
|
+
tmp_original_op_names = _get_original_op_names_before_quant(
|
|
166
|
+
fusion_op, quant_fusion_rule)
|
|
167
|
+
# replace original op names
|
|
168
|
+
if len(tmp_original_op_names) > 0:
|
|
169
|
+
fusion_op.attr.original_op_names = list(tmp_original_op_names)
|
|
170
|
+
|
|
171
|
+
# replace output desc
|
|
172
|
+
tmp_output_desc = _get_output_desc_before_quant(fusion_op, quant_fusion_rule)
|
|
173
|
+
if len(tmp_output_desc) > 0:
|
|
174
|
+
fusion_op.output_desc = tmp_output_desc
|
|
175
|
+
|
|
176
|
+
# replace fusion op name by original_op_names
|
|
177
|
+
offline_fusion_rule.make_fusion_op_name(fusion_op.op_name, "", fusion_op.attr.original_op_names)
|
|
178
|
+
fusion_op_name = offline_fusion_rule.op_name_to_fusion_op_name_map.get(fusion_op.op_name)
|
|
179
|
+
if fusion_op_name in merge_map:
|
|
180
|
+
fusion_op.op_id = merge_map.get(fusion_op_name)[0].op_id
|
|
181
|
+
merge_map.get(fusion_op_name).append(fusion_op)
|
|
182
|
+
else:
|
|
183
|
+
fusion_op.op_id = len(merge_map)
|
|
184
|
+
merge_map[fusion_op_name] = [fusion_op]
|
|
185
|
+
offline_fusion_rule.fusion_op_name_to_op_map = merge_map
|
|
186
|
+
return offline_fusion_rule
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def _make_open_fusion_original_op_names(fusion_op: FusionOp, close_fusion_origin_to_op_map: dict) -> list:
|
|
190
|
+
if len(fusion_op.attr.original_op_names) == 1 and fusion_op.attr.original_op_names[0] == '':
|
|
191
|
+
return ['']
|
|
192
|
+
original_op_names = []
|
|
193
|
+
for origin_op_name in fusion_op.attr.original_op_names:
|
|
194
|
+
if origin_op_name in close_fusion_origin_to_op_map:
|
|
195
|
+
op_name = close_fusion_origin_to_op_map.get(origin_op_name)
|
|
196
|
+
if op_name not in original_op_names:
|
|
197
|
+
original_op_names.append(op_name)
|
|
198
|
+
else:
|
|
199
|
+
log.print_warn_log('There is no original operator associated with the operator "%s" '
|
|
200
|
+
'in original op names.' % origin_op_name)
|
|
201
|
+
return original_op_names
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def _get_close_fusion_origin_output_index(op_list: list, output_desc: OutputDesc) -> bool:
|
|
205
|
+
for close_op in op_list:
|
|
206
|
+
for index, close_output_desc in enumerate(close_op.output_desc):
|
|
207
|
+
if output_desc.origin_name == close_output_desc.origin_name \
|
|
208
|
+
and output_desc.origin_output_index == close_output_desc.origin_output_index:
|
|
209
|
+
output_desc.origin_output_index = index
|
|
210
|
+
return True
|
|
211
|
+
return False
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def _make_open_fusion_output_desc(fusion_op: FusionOp, close_fusion_origin_to_op_map: dict,
|
|
215
|
+
close_fusion_rule: any) -> None:
|
|
216
|
+
for output_index, output_desc in enumerate(fusion_op.output_desc):
|
|
217
|
+
if not output_desc.origin_name:
|
|
218
|
+
continue
|
|
219
|
+
if output_desc.origin_name in close_fusion_origin_to_op_map:
|
|
220
|
+
op_name = close_fusion_origin_to_op_map.get(output_desc.origin_name)
|
|
221
|
+
op_list = close_fusion_rule.fusion_op_name_to_op_map.get(
|
|
222
|
+
close_fusion_rule.op_name_to_fusion_op_name_map.get(op_name))
|
|
223
|
+
if not _get_close_fusion_origin_output_index(op_list, output_desc):
|
|
224
|
+
log.print_warn_log('There is no valid output desc associated with "%s:output:%d".'
|
|
225
|
+
% (fusion_op.op_name, output_index))
|
|
226
|
+
output_desc.origin_name = op_name
|
|
227
|
+
else:
|
|
228
|
+
log.print_warn_log('There is no valid output desc associated with "%s:output:%d".'
|
|
229
|
+
% (fusion_op.op_name, output_index))
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
def _check_unity_onnx_op(delete_open_fusion_op_name_to_op_name: list, delete_close_fusion_op_name_to_op_name: list,
|
|
233
|
+
fusion_op: FusionOp, close_fusion_origin_to_op_map: list) -> bool:
|
|
234
|
+
if fusion_op.attr.original_op_names[0] in delete_open_fusion_op_name_to_op_name:
|
|
235
|
+
return False
|
|
236
|
+
delete_open_fusion_op_name_to_op_name.append(fusion_op.attr.original_op_names[0])
|
|
237
|
+
if fusion_op.attr.original_op_names[0] not in close_fusion_origin_to_op_map:
|
|
238
|
+
return True
|
|
239
|
+
if close_fusion_origin_to_op_map.get(fusion_op.attr.original_op_names[0]) in delete_close_fusion_op_name_to_op_name:
|
|
240
|
+
return False
|
|
241
|
+
delete_close_fusion_op_name_to_op_name.append(close_fusion_origin_to_op_map.get(
|
|
242
|
+
fusion_op.attr.original_op_names[0]))
|
|
243
|
+
return True
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def merge_close_and_open_fusion_rule(open_fusion_rule: any, close_fusion_rule: any) -> any:
|
|
249
|
+
"""
|
|
250
|
+
Merge close fusion rule and open fusion rule
|
|
251
|
+
:param open_fusion_rule: the open fusion rule
|
|
252
|
+
:param close_fusion_rule: the close fusion rule
|
|
253
|
+
:return the merged fusion rule
|
|
254
|
+
"""
|
|
255
|
+
merged_fusion_rule = FusionRuleParser('')
|
|
256
|
+
delete_fusion_op_name_list = []
|
|
257
|
+
delete_open_fusion_op_name_to_op_name = []
|
|
258
|
+
delete_close_fusion_op_name_to_op_name = []
|
|
259
|
+
close_fusion_origin_to_op_map = close_fusion_rule.get_origin_name_to_op_name_map()
|
|
260
|
+
for key, value in reversed(list(open_fusion_rule.op_name_to_fusion_op_name_map.items())):
|
|
261
|
+
if value in delete_fusion_op_name_list:
|
|
262
|
+
continue
|
|
263
|
+
delete_fusion_op_name_list.append(value)
|
|
264
|
+
merged_fusion_rule.op_name_to_fusion_op_name_map[key] = value
|
|
265
|
+
for fusion_op in open_fusion_rule.fusion_op_name_to_op_map.get(value):
|
|
266
|
+
if not _check_unity_onnx_op(delete_open_fusion_op_name_to_op_name, delete_close_fusion_op_name_to_op_name,
|
|
267
|
+
fusion_op, close_fusion_origin_to_op_map):
|
|
268
|
+
continue
|
|
269
|
+
# make new original op names
|
|
270
|
+
fusion_op.attr.original_op_names = _make_open_fusion_original_op_names(fusion_op,
|
|
271
|
+
close_fusion_origin_to_op_map)
|
|
272
|
+
# make new output desc
|
|
273
|
+
_make_open_fusion_output_desc(fusion_op, close_fusion_origin_to_op_map, close_fusion_rule)
|
|
274
|
+
if value in merged_fusion_rule.fusion_op_name_to_op_map:
|
|
275
|
+
merged_fusion_rule.fusion_op_name_to_op_map.get(value).append(fusion_op)
|
|
276
|
+
else:
|
|
277
|
+
merged_fusion_rule.fusion_op_name_to_op_map[value] = [fusion_op]
|
|
278
|
+
merged_fusion_rule.op_list.insert(0, fusion_op)
|
|
279
|
+
return merged_fusion_rule
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
class FusionRuleParser:
|
|
283
|
+
"""
|
|
284
|
+
the class for parse fusion rule.
|
|
285
|
+
"""
|
|
286
|
+
|
|
287
|
+
def __init__(self: any, path: str) -> None:
|
|
288
|
+
self.json_path = path
|
|
289
|
+
self.json_object = None
|
|
290
|
+
self.fusion_op_name_to_op_map = {}
|
|
291
|
+
self.op_name_to_fusion_op_name_map = {}
|
|
292
|
+
self.op_list = []
|
|
293
|
+
self.input_nodes = []
|
|
294
|
+
|
|
295
|
+
@staticmethod
|
|
296
|
+
def _check_key_exist(json_object: any, key: str) -> None:
|
|
297
|
+
if key not in json_object:
|
|
298
|
+
log.print_warn_log('There is no "%s" element in fusion rule file.' % key)
|
|
299
|
+
raise CompareError(CompareError.MSACCUCMP_PARSER_JSON_FILE_ERROR)
|
|
300
|
+
|
|
301
|
+
@staticmethod
|
|
302
|
+
def _make_output_desc(output_desc_list: list, name: str) -> None:
|
|
303
|
+
if len(output_desc_list) == 0:
|
|
304
|
+
output_desc = OutputDesc(name, None, "", [])
|
|
305
|
+
output_desc_list.append(output_desc)
|
|
306
|
+
else:
|
|
307
|
+
for (index, _) in enumerate(output_desc_list):
|
|
308
|
+
if output_desc_list[index].origin_name == "":
|
|
309
|
+
output_desc_list[index].origin_name = name
|
|
310
|
+
|
|
311
|
+
@staticmethod
|
|
312
|
+
def _process_ffts_op_name(item):
|
|
313
|
+
if ConstManager.FFTS_MANUAL_MODE_FIELD in item:
|
|
314
|
+
item = dump.process_op_name(item)
|
|
315
|
+
return item
|
|
316
|
+
|
|
317
|
+
def analysis_fusion_rule(self: any) -> None:
|
|
318
|
+
"""
|
|
319
|
+
Analysis fusion json file
|
|
320
|
+
"""
|
|
321
|
+
self.json_object = FileUtils.load_json_file(self.json_path)
|
|
322
|
+
self._parse_fusion_op_json_object()
|
|
323
|
+
# analysis and filter the parsed op list
|
|
324
|
+
filtering = QuantFilter(self.op_list)
|
|
325
|
+
filtering.process_filtering()
|
|
326
|
+
|
|
327
|
+
def make_fusion_op_name(self: any, name: str, l1_fusion_no: str, original_op_names: list) -> None:
|
|
328
|
+
"""
|
|
329
|
+
Make fusion op name by group op name and original op names
|
|
330
|
+
:return the fusion op name
|
|
331
|
+
"""
|
|
332
|
+
# the fusion op name priority:
|
|
333
|
+
# l1_fusion_no -> original_op_names -> name
|
|
334
|
+
if l1_fusion_no != "":
|
|
335
|
+
# the l1_fusion_no is not empty,
|
|
336
|
+
# the fusion op name is the l1_fusion_no
|
|
337
|
+
self.op_name_to_fusion_op_name_map[name] = l1_fusion_no
|
|
338
|
+
return
|
|
339
|
+
|
|
340
|
+
if original_op_names:
|
|
341
|
+
if len(original_op_names) == 1:
|
|
342
|
+
# There is one original op name
|
|
343
|
+
if original_op_names[0] == '':
|
|
344
|
+
# the original name is empty, the fusion op name is op name
|
|
345
|
+
self.op_name_to_fusion_op_name_map[name] = name
|
|
346
|
+
else:
|
|
347
|
+
# the original name is not empty,
|
|
348
|
+
# the fusion op name is original op name
|
|
349
|
+
self.op_name_to_fusion_op_name_map[name] = original_op_names[0]
|
|
350
|
+
else:
|
|
351
|
+
# The original op name more than one,
|
|
352
|
+
# the fusion op name is uuid names
|
|
353
|
+
self.op_name_to_fusion_op_name_map[name] = uuid.uuid3(uuid.NAMESPACE_DNS, ''.join(original_op_names))
|
|
354
|
+
else:
|
|
355
|
+
self.op_name_to_fusion_op_name_map[name] = name
|
|
356
|
+
|
|
357
|
+
def get_origin_name_to_op_name_map(self: any) -> dict:
|
|
358
|
+
"""
|
|
359
|
+
Get origin name to op name map
|
|
360
|
+
:return: the map
|
|
361
|
+
"""
|
|
362
|
+
origin_name_to_op_name_map = {}
|
|
363
|
+
for fusion_op in self.op_list:
|
|
364
|
+
for origin_name in fusion_op.attr.original_op_names:
|
|
365
|
+
origin_name_to_op_name_map[origin_name] = fusion_op.op_name
|
|
366
|
+
return origin_name_to_op_name_map
|
|
367
|
+
|
|
368
|
+
def check_array_object_valid(self: any, json_object: any, key: str) -> None:
|
|
369
|
+
"""
|
|
370
|
+
Check array object valid
|
|
371
|
+
:param json_object:the json object
|
|
372
|
+
:param key : key in json
|
|
373
|
+
"""
|
|
374
|
+
self._check_key_exist(json_object, key)
|
|
375
|
+
if not isinstance(json_object[key], list):
|
|
376
|
+
log.print_error_log('The content of the json file "%r" is invalid. The "%s" element is not an array.'
|
|
377
|
+
% (self.json_path, key))
|
|
378
|
+
raise CompareError(CompareError.MSACCUCMP_PARSER_JSON_FILE_ERROR)
|
|
379
|
+
|
|
380
|
+
def check_string_object_valid(self: any, json_object: any, key: str) -> None:
|
|
381
|
+
"""
|
|
382
|
+
Check string object valid
|
|
383
|
+
:param json_object:the json object
|
|
384
|
+
:param key : key in json
|
|
385
|
+
"""
|
|
386
|
+
self._check_key_exist(json_object, key)
|
|
387
|
+
if not isinstance(json_object[key], str):
|
|
388
|
+
log.print_error_log('The content of the json file "%r" is invalid. The "%s" element is not a string.'
|
|
389
|
+
% (self.json_path, key))
|
|
390
|
+
raise CompareError(CompareError.MSACCUCMP_PARSER_JSON_FILE_ERROR)
|
|
391
|
+
|
|
392
|
+
def get_fusion_op_list(self: any, op_name: str) -> (list, FusionOp):
|
|
393
|
+
"""
|
|
394
|
+
Get the fusion op list by op name
|
|
395
|
+
:param op_name: the op name
|
|
396
|
+
:return :the fusion op list, the fusion op by name
|
|
397
|
+
"""
|
|
398
|
+
if op_name not in self.op_name_to_fusion_op_name_map:
|
|
399
|
+
message = 'There is no "%s" in the fusion rule file.' % op_name
|
|
400
|
+
log.print_warn_log(message)
|
|
401
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR, message)
|
|
402
|
+
fusion_op_name = self.op_name_to_fusion_op_name_map.get(op_name)
|
|
403
|
+
fusion_op_list = self.fusion_op_name_to_op_map.get(fusion_op_name, [])
|
|
404
|
+
|
|
405
|
+
# get fusion op in list by op name
|
|
406
|
+
fusion_op_info = None
|
|
407
|
+
for operator in fusion_op_list:
|
|
408
|
+
if operator.op_name == op_name:
|
|
409
|
+
fusion_op_info = operator
|
|
410
|
+
break
|
|
411
|
+
if fusion_op_info is None:
|
|
412
|
+
message = 'There is no "%s" in the fusion rule file.' % op_name
|
|
413
|
+
log.print_warn_log(message)
|
|
414
|
+
raise CompareError(CompareError.MSACCUCMP_INVALID_PARAM_ERROR, message)
|
|
415
|
+
return fusion_op_list, fusion_op_info
|
|
416
|
+
|
|
417
|
+
def _adjust_rename_node(self: any) -> None:
|
|
418
|
+
for _, fusion_op_list in self.fusion_op_name_to_op_map.items():
|
|
419
|
+
if len(fusion_op_list) == 1 and self._is_rename_node(fusion_op_list[0]):
|
|
420
|
+
self._make_output_desc(fusion_op_list[0].output_desc, fusion_op_list[0].attr.original_op_names[0])
|
|
421
|
+
|
|
422
|
+
def _parse_fusion_op_json_object(self: any) -> None:
|
|
423
|
+
# check graph element in json file
|
|
424
|
+
self.check_array_object_valid(self.json_object, ConstManager.GRAPH_OBJECT)
|
|
425
|
+
for graph in self.json_object[ConstManager.GRAPH_OBJECT]:
|
|
426
|
+
# check op element in graph value
|
|
427
|
+
self.check_array_object_valid(graph, ConstManager.OP_OBJECT)
|
|
428
|
+
for operator in graph[ConstManager.OP_OBJECT]:
|
|
429
|
+
self._parse_op_object(operator)
|
|
430
|
+
|
|
431
|
+
# adjust the output desc for the rename node
|
|
432
|
+
self._adjust_rename_node()
|
|
433
|
+
|
|
434
|
+
self.op_list.sort(key=lambda x: x.attr.get_op_sequence())
|
|
435
|
+
|
|
436
|
+
def _parse_input_nodes(self, op_object):
|
|
437
|
+
if ConstManager.DATA_OBJECT == op_object.get(ConstManager.TYPE_OBJECT):
|
|
438
|
+
if op_object.get(ConstManager.NAME_OBJECT):
|
|
439
|
+
self.input_nodes.append(op_object.get(ConstManager.NAME_OBJECT))
|
|
440
|
+
|
|
441
|
+
def _parse_input(self: any, op_object: any) -> list:
|
|
442
|
+
input_list = []
|
|
443
|
+
# data layer has no input layer
|
|
444
|
+
if ConstManager.INPUT_OBJECT in op_object:
|
|
445
|
+
if not isinstance(op_object[ConstManager.INPUT_OBJECT], list):
|
|
446
|
+
log.print_error_log('The content of the json file "%r" is invalid. The "%s" element is not '
|
|
447
|
+
'an array.' % (self.json_path, ConstManager.INPUT_OBJECT))
|
|
448
|
+
raise CompareError(CompareError.MSACCUCMP_PARSER_JSON_FILE_ERROR)
|
|
449
|
+
for item in op_object[ConstManager.INPUT_OBJECT]:
|
|
450
|
+
if item == "" and len(op_object[ConstManager.INPUT_OBJECT]) == 1:
|
|
451
|
+
break
|
|
452
|
+
# skip control edge
|
|
453
|
+
if not item.endswith(':-1') and item != "":
|
|
454
|
+
item = self._process_ffts_op_name(item)
|
|
455
|
+
input_list.append(item)
|
|
456
|
+
return input_list
|
|
457
|
+
|
|
458
|
+
def _parse_output_desc_in_attr(self: any, output_desc_attr: any, default_index: int) -> OutputDesc:
|
|
459
|
+
origin_name = self._get_string_value_in_attr(output_desc_attr, ConstManager.ORIGIN_NAME_OBJECT)
|
|
460
|
+
origin_output_index = self._get_int_value_in_attr(output_desc_attr, ConstManager.ORIGIN_OUTPUT_INDEX_OBJECT)
|
|
461
|
+
if origin_output_index is None:
|
|
462
|
+
origin_output_index = default_index
|
|
463
|
+
origin_output_format = self._get_string_value_in_attr(output_desc_attr, ConstManager.ORIGIN_FORMAT_OBJECT)
|
|
464
|
+
if origin_output_format == '':
|
|
465
|
+
origin_output_format = self._get_string_value_in_attr(
|
|
466
|
+
output_desc_attr, ConstManager.GE_ORIGIN_FORMAT_OBJECT)
|
|
467
|
+
origin_output_shape = self._get_origin_shape_in_attr(output_desc_attr)
|
|
468
|
+
return OutputDesc(origin_name, origin_output_index, origin_output_format, origin_output_shape)
|
|
469
|
+
|
|
470
|
+
def _parse_output_desc(self: any, op_object: any) -> list:
|
|
471
|
+
output_desc_list = []
|
|
472
|
+
# get output desc
|
|
473
|
+
if ConstManager.OUTPUT_DESC_OBJECT in op_object:
|
|
474
|
+
default_index = 0
|
|
475
|
+
for output_desc_object in op_object[ConstManager.OUTPUT_DESC_OBJECT]:
|
|
476
|
+
|
|
477
|
+
d_type = ""
|
|
478
|
+
if ConstManager.D_TYPE in output_desc_object:
|
|
479
|
+
d_type = output_desc_object.get(ConstManager.D_TYPE)
|
|
480
|
+
|
|
481
|
+
if ConstManager.ATTR_OBJECT in output_desc_object:
|
|
482
|
+
output_desc = self._parse_output_desc_in_attr(
|
|
483
|
+
output_desc_object[ConstManager.ATTR_OBJECT], default_index)
|
|
484
|
+
output_desc.set_data_type(d_type)
|
|
485
|
+
output_desc_list.append(output_desc)
|
|
486
|
+
default_index += 1
|
|
487
|
+
return output_desc_list
|
|
488
|
+
|
|
489
|
+
def _is_rename_node(self: any, fusion_op: FusionOp) -> bool:
|
|
490
|
+
return len(fusion_op.attr.original_op_names) == 1 and \
|
|
491
|
+
self.op_name_to_fusion_op_name_map.get(fusion_op.op_name) == fusion_op.attr.original_op_names[0]
|
|
492
|
+
|
|
493
|
+
def _parse_attr(self: any, op_object: any, op_name: str) -> (OpAttr, bool):
|
|
494
|
+
# check attr element is valid
|
|
495
|
+
if ConstManager.ATTR_OBJECT not in op_object:
|
|
496
|
+
attr_array = []
|
|
497
|
+
else:
|
|
498
|
+
self.check_array_object_valid(op_object, ConstManager.ATTR_OBJECT)
|
|
499
|
+
attr_array = op_object[ConstManager.ATTR_OBJECT]
|
|
500
|
+
is_multi_op = self._get_bool_value_in_attr(attr_array, ConstManager.IS_MULTI_OP)
|
|
501
|
+
# get l1_fusion_sub_graph_no
|
|
502
|
+
l1_fusion_no = self._get_string_value_in_attr(attr_array, ConstManager.L1_FUSION_SUB_GRAPH_NO_OBJECT)
|
|
503
|
+
# get original op names
|
|
504
|
+
original_op_names, have_origin = self._get_original_op_names_in_attr(attr_array, op_name)
|
|
505
|
+
op_sequence = self._parse_id_object(op_object)
|
|
506
|
+
return OpAttr(original_op_names, l1_fusion_no, is_multi_op, op_sequence), have_origin
|
|
507
|
+
|
|
508
|
+
def _parse_id_object(self: any, op_object: any) -> int:
|
|
509
|
+
op_sequence = 0
|
|
510
|
+
if ConstManager.ID_OBJECT in op_object:
|
|
511
|
+
self._check_int_object_valid(op_object, ConstManager.ID_OBJECT)
|
|
512
|
+
op_sequence = op_object[ConstManager.ID_OBJECT]
|
|
513
|
+
return op_sequence
|
|
514
|
+
|
|
515
|
+
def _parse_op_object(self: any, op_object: dict) -> None:
|
|
516
|
+
# check name element is valid
|
|
517
|
+
self.check_string_object_valid(op_object, ConstManager.NAME_OBJECT)
|
|
518
|
+
name = op_object[ConstManager.NAME_OBJECT]
|
|
519
|
+
if ConstManager.FFTS_MANUAL_MODE_FIELD in name:
|
|
520
|
+
name = dump.process_op_name(name)
|
|
521
|
+
# check type element is valid
|
|
522
|
+
self.check_string_object_valid(op_object, ConstManager.TYPE_OBJECT)
|
|
523
|
+
self._parse_input_nodes(op_object)
|
|
524
|
+
|
|
525
|
+
input_list = self._parse_input(op_object)
|
|
526
|
+
|
|
527
|
+
output_desc_list = self._parse_output_desc(op_object)
|
|
528
|
+
attr, have_origin = self._parse_attr(op_object, name)
|
|
529
|
+
if not have_origin:
|
|
530
|
+
self._make_output_desc(output_desc_list, name)
|
|
531
|
+
|
|
532
|
+
self.make_fusion_op_name(name, attr.l1_fusion_no, attr.original_op_names)
|
|
533
|
+
fusion_op_name = self.op_name_to_fusion_op_name_map.get(name)
|
|
534
|
+
fusion_op = FusionOp(0, name, input_list, op_object[ConstManager.TYPE_OBJECT], output_desc_list, attr)
|
|
535
|
+
if fusion_op_name in self.fusion_op_name_to_op_map:
|
|
536
|
+
fusion_op.op_id = self.fusion_op_name_to_op_map.get(fusion_op_name)[0].op_id
|
|
537
|
+
fusion_op_name_list = \
|
|
538
|
+
[_fusion_op.op_name for _fusion_op in self.fusion_op_name_to_op_map.get(fusion_op_name)]
|
|
539
|
+
if name not in fusion_op_name_list:
|
|
540
|
+
self.fusion_op_name_to_op_map.get(fusion_op_name).append(fusion_op)
|
|
541
|
+
self.op_list.append(fusion_op)
|
|
542
|
+
else:
|
|
543
|
+
fusion_op.op_id = len(self.fusion_op_name_to_op_map)
|
|
544
|
+
self.fusion_op_name_to_op_map[fusion_op_name] = [fusion_op]
|
|
545
|
+
self.op_list.append(fusion_op)
|
|
546
|
+
|
|
547
|
+
def _get_string_value_in_attr(self: any, attr_array: list, key: str) -> str:
|
|
548
|
+
value = ""
|
|
549
|
+
for attr in attr_array:
|
|
550
|
+
self.check_string_object_valid(attr, ConstManager.KEY_OBJECT)
|
|
551
|
+
key_value = attr[ConstManager.KEY_OBJECT]
|
|
552
|
+
if key_value == key:
|
|
553
|
+
self._check_key_exist(attr, ConstManager.VALUE_OBJECT)
|
|
554
|
+
value_value = attr[ConstManager.VALUE_OBJECT]
|
|
555
|
+
self.check_string_object_valid(value_value, ConstManager.STRING_TYPE_OBJECT)
|
|
556
|
+
value = value_value[ConstManager.STRING_TYPE_OBJECT]
|
|
557
|
+
break
|
|
558
|
+
return value
|
|
559
|
+
|
|
560
|
+
def _get_int_value_in_attr(self: any, attr_array: list, key: str) -> int:
|
|
561
|
+
value = None
|
|
562
|
+
for attr in attr_array:
|
|
563
|
+
self.check_string_object_valid(attr, ConstManager.KEY_OBJECT)
|
|
564
|
+
key_value = attr[ConstManager.KEY_OBJECT]
|
|
565
|
+
if key_value == key:
|
|
566
|
+
self._check_key_exist(attr, ConstManager.VALUE_OBJECT)
|
|
567
|
+
value_value = attr[ConstManager.VALUE_OBJECT]
|
|
568
|
+
self._check_int_object_valid(value_value, ConstManager.INT_TYPE_OBJECT)
|
|
569
|
+
value = value_value[ConstManager.INT_TYPE_OBJECT]
|
|
570
|
+
break
|
|
571
|
+
return value
|
|
572
|
+
|
|
573
|
+
def _get_origin_shape_in_attr(self: any, attr_array: list) -> list:
|
|
574
|
+
value = []
|
|
575
|
+
for attr in attr_array:
|
|
576
|
+
self.check_string_object_valid(attr, ConstManager.KEY_OBJECT)
|
|
577
|
+
key_value = attr[ConstManager.KEY_OBJECT]
|
|
578
|
+
if key_value == ConstManager.GE_ORIGIN_SHAPE_OBJECT:
|
|
579
|
+
self._check_key_exist(attr, ConstManager.VALUE_OBJECT)
|
|
580
|
+
value_value = attr[ConstManager.VALUE_OBJECT]
|
|
581
|
+
self._check_key_exist(value_value, ConstManager.LIST_TYPE_OBJECT)
|
|
582
|
+
if ConstManager.INT_TYPE_OBJECT in value_value[ConstManager.LIST_TYPE_OBJECT]:
|
|
583
|
+
self.check_array_object_valid(
|
|
584
|
+
value_value[ConstManager.LIST_TYPE_OBJECT], ConstManager.INT_TYPE_OBJECT)
|
|
585
|
+
value = value_value[ConstManager.LIST_TYPE_OBJECT][ConstManager.INT_TYPE_OBJECT]
|
|
586
|
+
break
|
|
587
|
+
return value
|
|
588
|
+
|
|
589
|
+
def _get_bool_value_in_attr(self: any, attr_array: list, key: str) -> bool:
|
|
590
|
+
value = False
|
|
591
|
+
for attr in attr_array:
|
|
592
|
+
self.check_string_object_valid(attr, ConstManager.KEY_OBJECT)
|
|
593
|
+
key_value = attr[ConstManager.KEY_OBJECT]
|
|
594
|
+
if key_value == key:
|
|
595
|
+
self._check_key_exist(attr, ConstManager.VALUE_OBJECT)
|
|
596
|
+
value_value = attr[ConstManager.VALUE_OBJECT]
|
|
597
|
+
self._check_bool_object_valid(value_value, ConstManager.BOOL_TYPE_OBJECT)
|
|
598
|
+
value = value_value[ConstManager.BOOL_TYPE_OBJECT]
|
|
599
|
+
break
|
|
600
|
+
return value
|
|
601
|
+
|
|
602
|
+
def _get_original_op_names_in_attr(self: any, attr_array: list, op_name: str) -> (list, bool):
|
|
603
|
+
array = []
|
|
604
|
+
match = False
|
|
605
|
+
for attr in attr_array:
|
|
606
|
+
self.check_string_object_valid(attr, ConstManager.KEY_OBJECT)
|
|
607
|
+
key_value = attr[ConstManager.KEY_OBJECT]
|
|
608
|
+
if key_value == ConstManager.ORIGINAL_OP_NAMES_OBJECT:
|
|
609
|
+
self._check_key_exist(attr, ConstManager.VALUE_OBJECT)
|
|
610
|
+
value = attr[ConstManager.VALUE_OBJECT]
|
|
611
|
+
self._check_key_exist(value, ConstManager.LIST_TYPE_OBJECT)
|
|
612
|
+
if ConstManager.STRING_TYPE_OBJECT not in value[ConstManager.LIST_TYPE_OBJECT]:
|
|
613
|
+
array = ['']
|
|
614
|
+
else:
|
|
615
|
+
self.check_array_object_valid(value[ConstManager.LIST_TYPE_OBJECT], ConstManager.STRING_TYPE_OBJECT)
|
|
616
|
+
array = value[ConstManager.LIST_TYPE_OBJECT][ConstManager.STRING_TYPE_OBJECT]
|
|
617
|
+
match = True
|
|
618
|
+
break
|
|
619
|
+
if not match:
|
|
620
|
+
array.append(op_name)
|
|
621
|
+
return array, match
|
|
622
|
+
|
|
623
|
+
def _check_int_object_valid(self: any, json_object: any, key: str) -> None:
|
|
624
|
+
self._check_key_exist(json_object, key)
|
|
625
|
+
if not isinstance(json_object[key], int):
|
|
626
|
+
log.print_error_log('The content of the json file "%r" is invalid. The "%s" element is not a integer.'
|
|
627
|
+
% (self.json_path, key))
|
|
628
|
+
raise CompareError(CompareError.MSACCUCMP_PARSER_JSON_FILE_ERROR)
|
|
629
|
+
|
|
630
|
+
def _check_bool_object_valid(self: any, json_object: any, key: str) -> None:
|
|
631
|
+
self._check_key_exist(json_object, key)
|
|
632
|
+
if not isinstance(json_object[key], bool):
|
|
633
|
+
log.print_error_log('The content of the json file "%r" is invalid. The "%s" element is not a bool.'
|
|
634
|
+
% (self.json_path, key))
|
|
635
|
+
raise CompareError(CompareError.MSACCUCMP_PARSER_JSON_FILE_ERROR)
|