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.
Files changed (689) hide show
  1. {mindstudio_probe-8.3.3.dist-info → mindstudio_probe-26.0.0a1.dist-info}/METADATA +26 -14
  2. mindstudio_probe-26.0.0a1.dist-info/RECORD +498 -0
  3. {mindstudio_probe-8.3.3.dist-info → mindstudio_probe-26.0.0a1.dist-info}/WHEEL +1 -1
  4. mindstudio_probe-26.0.0a1.dist-info/entry_points.txt +5 -0
  5. mindstudio_probe-26.0.0a1.dist-info/licenses/LICENSE +124 -0
  6. mindstudio_probe-26.0.0a1.dist-info/top_level.txt +2 -0
  7. msprobe/__init__.py +12 -13
  8. msprobe/config.json +9 -31
  9. msprobe/core/__init__.py +12 -11
  10. msprobe/core/acc_check/acc_check_cli.py +145 -0
  11. msprobe/core/common/const.py +97 -38
  12. msprobe/core/common/db_manager.py +133 -12
  13. msprobe/core/common/decorator.py +12 -11
  14. msprobe/core/common/exceptions.py +12 -11
  15. msprobe/core/common/file_utils.py +101 -25
  16. msprobe/core/common/framework_adapter.py +36 -25
  17. msprobe/core/common/global_lock.py +12 -11
  18. msprobe/core/common/inplace_op_checker.py +12 -11
  19. msprobe/core/common/log.py +22 -11
  20. msprobe/core/common/megatron_utils.py +566 -11
  21. msprobe/core/common/parallel_state.py +12 -11
  22. msprobe/core/common/runtime.py +12 -11
  23. msprobe/core/common/utils.py +41 -41
  24. msprobe/core/compare/acc_compare.py +361 -104
  25. msprobe/core/compare/atb_data_compare.py +422 -0
  26. msprobe/core/compare/auto_compare.py +134 -0
  27. msprobe/core/compare/check.py +14 -17
  28. msprobe/core/compare/compare_cli.py +72 -149
  29. msprobe/core/compare/config.py +12 -13
  30. msprobe/core/compare/diff_analyze/first_diff_analyze.py +28 -15
  31. msprobe/core/compare/diff_analyze/ignore_op_list.yaml +3 -0
  32. msprobe/core/compare/find_first/analyzer.py +18 -18
  33. msprobe/core/compare/find_first/graph.py +12 -11
  34. msprobe/core/compare/find_first/utils.py +13 -12
  35. msprobe/core/compare/indicator_analysis/__init__.py +15 -0
  36. msprobe/core/compare/indicator_analysis/algorithm.py +363 -0
  37. msprobe/core/compare/indicator_analysis/api_data.py +141 -0
  38. msprobe/core/compare/indicator_analysis/calculator.py +181 -0
  39. msprobe/core/compare/indicator_analysis/utils.py +116 -0
  40. msprobe/core/compare/layer_mapping/__init__.py +12 -11
  41. msprobe/core/compare/layer_mapping/data_scope_parser.py +20 -11
  42. msprobe/core/compare/layer_mapping/layer_mapping.py +14 -13
  43. msprobe/core/compare/layer_mapping/postprocess_pass.py +13 -11
  44. msprobe/core/compare/merge_result/merge_result.py +12 -11
  45. msprobe/core/compare/merge_result/merge_result_cli.py +12 -11
  46. msprobe/core/compare/merge_result/utils.py +12 -11
  47. msprobe/core/compare/multiprocessing_compute.py +13 -14
  48. msprobe/core/compare/npy_compare.py +13 -11
  49. msprobe/core/compare/offline_data_compare.py +160 -0
  50. msprobe/core/compare/stats_diff_calc.py +39 -0
  51. msprobe/core/compare/torchair_acc_cmp.py +764 -0
  52. msprobe/core/compare/torchair_cmp_utils.py +338 -0
  53. msprobe/core/compare/utils.py +140 -49
  54. msprobe/core/config_check/__init__.py +12 -11
  55. msprobe/core/config_check/checkers/__init__.py +12 -11
  56. msprobe/core/config_check/checkers/base_checker.py +15 -14
  57. msprobe/core/config_check/checkers/dataset_checker.py +13 -12
  58. msprobe/core/config_check/checkers/env_args_checker.py +13 -12
  59. msprobe/core/config_check/checkers/hyperparameter_checker.py +16 -15
  60. msprobe/core/config_check/checkers/pip_checker.py +15 -15
  61. msprobe/core/config_check/checkers/random_checker.py +13 -12
  62. msprobe/core/config_check/checkers/weights_checker.py +14 -12
  63. msprobe/core/config_check/ckpt_compare/ckpt_comparator.py +13 -17
  64. msprobe/core/config_check/ckpt_compare/megatron_loader.py +13 -12
  65. msprobe/core/config_check/ckpt_compare/metrics.py +12 -11
  66. msprobe/core/config_check/config_check_cli.py +18 -17
  67. msprobe/core/config_check/config_checker.py +16 -14
  68. msprobe/core/config_check/resource/dependency.yaml +15 -12
  69. msprobe/core/config_check/resource/env.yaml +12 -11
  70. msprobe/core/config_check/utils/hyperparameter_parser.py +12 -11
  71. msprobe/core/config_check/utils/utils.py +12 -11
  72. msprobe/core/{data_dump → dump/api_dump}/api_registry.py +12 -11
  73. msprobe/core/{common_config.py → dump/common_config.py} +13 -24
  74. msprobe/core/dump/data_dump/data_collector.py +257 -0
  75. msprobe/core/{data_dump → dump/data_dump}/data_processor/base.py +45 -36
  76. msprobe/core/{data_dump → dump/data_dump}/data_processor/factory.py +33 -25
  77. msprobe/core/{data_dump → dump/data_dump}/data_processor/mindspore_processor.py +37 -113
  78. msprobe/core/{data_dump → dump/data_dump}/data_processor/pytorch_processor.py +364 -131
  79. msprobe/core/{data_dump → dump/data_dump}/json_writer.py +24 -31
  80. msprobe/core/{data_dump → dump/data_dump}/scope.py +12 -13
  81. msprobe/core/{debugger → dump/debugger}/precision_debugger.py +15 -23
  82. msprobe/core/dump/dump2db/db_utils.py +215 -0
  83. msprobe/core/dump/dump2db/dump2db.py +409 -0
  84. msprobe/core/{hook_manager.py → dump/hook_manager.py} +38 -87
  85. msprobe/core/dump/kernel_dump/kernel_config.py +34 -0
  86. msprobe/core/{service.py → dump/service.py} +43 -27
  87. msprobe/core/install_deps/install_deps.py +51 -0
  88. msprobe/core/monitor/anomaly_processor.py +13 -11
  89. msprobe/core/monitor/csv2db.py +73 -93
  90. msprobe/core/monitor/db_utils.py +140 -205
  91. msprobe/core/monitor/utils.py +18 -17
  92. msprobe/core/monitor_v2/__init__.py +20 -0
  93. msprobe/core/monitor_v2/base.py +83 -0
  94. msprobe/core/monitor_v2/cc.py +287 -0
  95. msprobe/core/monitor_v2/factory.py +81 -0
  96. msprobe/core/monitor_v2/module.py +201 -0
  97. msprobe/core/monitor_v2/optimizer.py +245 -0
  98. msprobe/core/monitor_v2/param.py +154 -0
  99. msprobe/core/monitor_v2/trainer.py +326 -0
  100. msprobe/core/monitor_v2/utils.py +122 -0
  101. msprobe/core/monitor_v2/weight_grad.py +419 -0
  102. msprobe/core/monitor_v2/writer.py +162 -0
  103. msprobe/core/overflow_check/abnormal_scene.py +12 -11
  104. msprobe/core/overflow_check/api_info.py +12 -11
  105. msprobe/core/overflow_check/checker.py +12 -11
  106. msprobe/core/overflow_check/filter.py +13 -11
  107. msprobe/core/overflow_check/level.py +12 -11
  108. msprobe/core/overflow_check/utils.py +12 -11
  109. msprobe/core/single_save/single_comparator.py +12 -11
  110. msprobe/core/single_save/single_saver.py +12 -11
  111. msprobe/infer/__init__.py +16 -0
  112. msprobe/infer/offline/__init__.py +16 -0
  113. msprobe/infer/offline/compare/__init__.py +16 -0
  114. msprobe/infer/offline/compare/msquickcmp/__init__.py +16 -0
  115. msprobe/infer/offline/compare/msquickcmp/adapter_cli/__init__.py +16 -0
  116. msprobe/infer/offline/compare/msquickcmp/adapter_cli/args_adapter.py +46 -0
  117. msprobe/infer/offline/compare/msquickcmp/atc/__init__.py +16 -0
  118. msprobe/infer/offline/compare/msquickcmp/atc/atc_utils.py +98 -0
  119. msprobe/infer/offline/compare/msquickcmp/cmp_process.py +328 -0
  120. msprobe/infer/offline/compare/msquickcmp/common/__init__.py +16 -0
  121. msprobe/infer/offline/compare/msquickcmp/common/args_check.py +112 -0
  122. msprobe/infer/offline/compare/msquickcmp/common/convert.py +74 -0
  123. msprobe/infer/offline/compare/msquickcmp/common/dump_data.py +121 -0
  124. msprobe/infer/offline/compare/msquickcmp/common/dynamic_argument_bean.py +39 -0
  125. msprobe/infer/offline/compare/msquickcmp/common/utils.py +669 -0
  126. msprobe/infer/offline/compare/msquickcmp/config.ini +6 -0
  127. msprobe/infer/offline/compare/msquickcmp/dump/__init__.py +16 -0
  128. msprobe/infer/offline/compare/msquickcmp/dump/args_adapter.py +50 -0
  129. msprobe/infer/offline/compare/msquickcmp/dump/dump_process.py +91 -0
  130. msprobe/infer/offline/compare/msquickcmp/install_aclruntime_aisbench.sh +180 -0
  131. msprobe/infer/offline/compare/msquickcmp/main.py +199 -0
  132. msprobe/infer/offline/compare/msquickcmp/net_compare/__init__.py +16 -0
  133. msprobe/infer/offline/compare/msquickcmp/net_compare/net_compare.py +277 -0
  134. msprobe/infer/offline/compare/msquickcmp/npu/__init__.py +16 -0
  135. msprobe/infer/offline/compare/msquickcmp/npu/npu_dump_data.py +558 -0
  136. msprobe/infer/offline/compare/msquickcmp/npu/om_parser.py +416 -0
  137. msprobe/infer/offline/compare/msquickcmp/onnx_model/__init__.py +16 -0
  138. msprobe/infer/offline/compare/msquickcmp/onnx_model/onnx_dump_data.py +374 -0
  139. msprobe/infer/utils/__init__.py +15 -0
  140. msprobe/infer/utils/acc_cmp.py +94 -0
  141. msprobe/infer/utils/check/__init__.py +37 -0
  142. msprobe/infer/utils/check/args_checker.py +35 -0
  143. msprobe/infer/utils/check/checker.py +227 -0
  144. msprobe/infer/utils/check/dict_checker.py +78 -0
  145. msprobe/infer/utils/check/func_wrapper.py +96 -0
  146. msprobe/infer/utils/check/list_checker.py +56 -0
  147. msprobe/infer/utils/check/number_checker.py +64 -0
  148. msprobe/infer/utils/check/obj_checker.py +41 -0
  149. msprobe/infer/utils/check/path_checker.py +249 -0
  150. msprobe/infer/utils/check/rule.py +126 -0
  151. msprobe/infer/utils/check/string_checker.py +66 -0
  152. msprobe/infer/utils/cmp_algorithm.py +261 -0
  153. msprobe/infer/utils/constants.py +112 -0
  154. msprobe/infer/utils/file_open_check.py +337 -0
  155. msprobe/infer/utils/util.py +177 -0
  156. msprobe/mindspore/__init__.py +14 -13
  157. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +14 -13
  158. msprobe/mindspore/api_accuracy_checker/api_info.py +12 -11
  159. msprobe/mindspore/api_accuracy_checker/api_runner.py +12 -11
  160. msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +12 -11
  161. msprobe/mindspore/api_accuracy_checker/bench_functions/flash_attention_score.py +12 -11
  162. msprobe/mindspore/api_accuracy_checker/bench_functions/fusion_operator.py +12 -11
  163. msprobe/mindspore/api_accuracy_checker/checker_support_api.yaml +12 -11
  164. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +15 -14
  165. msprobe/mindspore/api_accuracy_checker/compute_element.py +12 -11
  166. msprobe/mindspore/api_accuracy_checker/data_manager.py +13 -11
  167. msprobe/mindspore/api_accuracy_checker/main.py +12 -11
  168. msprobe/mindspore/api_accuracy_checker/multi_api_accuracy_checker.py +14 -12
  169. msprobe/mindspore/api_accuracy_checker/multi_data_manager.py +13 -11
  170. msprobe/mindspore/api_accuracy_checker/torch_mindtorch_importer.py +12 -11
  171. msprobe/mindspore/api_accuracy_checker/type_mapping.py +12 -11
  172. msprobe/mindspore/api_accuracy_checker/utils.py +12 -11
  173. msprobe/mindspore/common/const.py +15 -74
  174. msprobe/mindspore/common/log.py +12 -11
  175. msprobe/mindspore/common/utils.py +30 -15
  176. msprobe/mindspore/compare/common_dir_compare.py +21 -23
  177. msprobe/mindspore/compare/distributed_compare.py +18 -16
  178. msprobe/mindspore/compare/ms_compare.py +14 -14
  179. msprobe/mindspore/compare/ms_graph_compare.py +26 -20
  180. msprobe/mindspore/compare/utils.py +14 -12
  181. msprobe/mindspore/{cell_processor.py → dump/cell_processor.py} +15 -14
  182. msprobe/mindspore/{debugger → dump/debugger}/debugger_config.py +12 -30
  183. msprobe/mindspore/{debugger → dump/debugger}/precision_debugger.py +43 -45
  184. msprobe/mindspore/dump/{cell_dump_process.py → dump_processor/cell_dump_process.py} +31 -17
  185. msprobe/mindspore/dump/{cell_dump_with_insert_gradient.py → dump_processor/cell_dump_with_insert_gradient.py} +18 -14
  186. msprobe/mindspore/dump/{dump_tool_factory.py → dump_processor/dump_tool_factory.py} +16 -15
  187. msprobe/mindspore/dump/{graph_mode_cell_dump.py → dump_processor/graph_mode_cell_dump.py} +16 -15
  188. msprobe/mindspore/dump/{graph_tensor_dump.py → dump_processor/graph_tensor_dump.py} +134 -133
  189. msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/api_register.py +15 -14
  190. msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/hook_cell.py +12 -11
  191. msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/ms_hook_manager.py +47 -20
  192. msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/primitive_hooks.py +14 -13
  193. msprobe/mindspore/dump/{hook_cell → dump_processor/hook_cell}/support_wrap_ops.yaml +13 -11
  194. msprobe/mindspore/dump/{jit_dump.py → dump_processor/jit_dump.py} +14 -13
  195. msprobe/mindspore/dump/{kernel_graph_dump.py → dump_processor/kernel_graph_dump.py} +13 -12
  196. msprobe/mindspore/dump/{kernel_kbyk_dump.py → dump_processor/kernel_kbyk_dump.py} +13 -12
  197. msprobe/mindspore/{exception_dump → dump/exception_dump}/exception_dump_tool_factory.py +14 -13
  198. msprobe/mindspore/{exception_dump → dump/exception_dump}/kernel_graph_exception_dump.py +13 -12
  199. msprobe/mindspore/{mindspore_service.py → dump/mindspore_service.py} +18 -17
  200. msprobe/mindspore/dump/mindtorch/__init__.py +19 -0
  201. msprobe/mindspore/dump/ms_config.py +105 -0
  202. msprobe/mindspore/{overflow_check → dump/overflow_check}/kernel_graph_overflow_check.py +13 -12
  203. msprobe/mindspore/{overflow_check → dump/overflow_check}/overflow_check_tool_factory.py +14 -13
  204. msprobe/mindspore/dump/task_handler_factory.py +43 -0
  205. msprobe/mindspore/monitor/common_func.py +12 -11
  206. msprobe/mindspore/monitor/data_writers.py +12 -11
  207. msprobe/mindspore/monitor/distributed/wrap_distributed.py +93 -39
  208. msprobe/mindspore/monitor/features.py +12 -11
  209. msprobe/mindspore/monitor/module_hook.py +19 -22
  210. msprobe/mindspore/monitor/optimizer_collect.py +29 -25
  211. msprobe/mindspore/monitor/utils.py +13 -11
  212. msprobe/msaccucmp/advisor/__init__.py +16 -0
  213. msprobe/msaccucmp/advisor/advisor_const.py +65 -0
  214. msprobe/msaccucmp/advisor/advisor_result.py +73 -0
  215. msprobe/msaccucmp/advisor/compare_advisor.py +99 -0
  216. msprobe/msaccucmp/advisor/input_advisor.py +66 -0
  217. msprobe/msaccucmp/advisor/node_advisor.py +68 -0
  218. msprobe/msaccucmp/advisor/overflow_advisor.py +58 -0
  219. msprobe/msaccucmp/algorithm_manager/__init__.py +16 -0
  220. msprobe/msaccucmp/algorithm_manager/algorithm_manager.py +464 -0
  221. msprobe/msaccucmp/algorithm_manager/algorithm_parameter.py +42 -0
  222. msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_AccumulatedRelativeError.py +46 -0
  223. msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_CosineSimilarity.py +58 -0
  224. msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_KullbackLeiblerDivergence.py +84 -0
  225. msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_MaxAbsoluteError.py +41 -0
  226. msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_MaxRelativeError.py +46 -0
  227. msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_MeanAbsoluteError.py +41 -0
  228. msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_MeanRelativeError.py +46 -0
  229. msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_RelativeEuclideanDistance.py +46 -0
  230. msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_RootMeanSquareError.py +40 -0
  231. msprobe/msaccucmp/algorithm_manager/builtin_algorithm/alg_StandardDeviation.py +47 -0
  232. msprobe/msaccucmp/cmp_utils/__init__.py +16 -0
  233. msprobe/msaccucmp/cmp_utils/common.py +113 -0
  234. msprobe/msaccucmp/cmp_utils/constant/__init__.py +16 -0
  235. msprobe/msaccucmp/cmp_utils/constant/compare_error.py +81 -0
  236. msprobe/msaccucmp/cmp_utils/constant/const_manager.py +530 -0
  237. msprobe/msaccucmp/cmp_utils/file_utils.py +497 -0
  238. msprobe/msaccucmp/cmp_utils/log.py +257 -0
  239. msprobe/msaccucmp/cmp_utils/multi_process/__init__.py +16 -0
  240. msprobe/msaccucmp/cmp_utils/multi_process/multi_convert_process.py +140 -0
  241. msprobe/msaccucmp/cmp_utils/multi_process/progress.py +78 -0
  242. msprobe/msaccucmp/cmp_utils/path_check.py +274 -0
  243. msprobe/msaccucmp/cmp_utils/reg_manager.py +98 -0
  244. msprobe/msaccucmp/cmp_utils/tlv_parse.py +279 -0
  245. msprobe/msaccucmp/cmp_utils/utils.py +356 -0
  246. msprobe/msaccucmp/cmp_utils/utils_type.py +63 -0
  247. msprobe/msaccucmp/compare_vector.py +48 -0
  248. msprobe/msaccucmp/conversion/__init__.py +16 -0
  249. msprobe/msaccucmp/conversion/data_conversion.py +277 -0
  250. msprobe/msaccucmp/conversion/dtype_conversion.py +99 -0
  251. msprobe/msaccucmp/conversion/shape_format_conversion.py +477 -0
  252. msprobe/msaccucmp/conversion/tensor_conversion.py +369 -0
  253. msprobe/msaccucmp/dump_data_conversion.py +46 -0
  254. msprobe/msaccucmp/dump_parse/__init__.py +16 -0
  255. msprobe/msaccucmp/dump_parse/big_dump_data.py +317 -0
  256. msprobe/msaccucmp/dump_parse/dump.py +423 -0
  257. msprobe/msaccucmp/dump_parse/dump_data_object.py +322 -0
  258. msprobe/msaccucmp/dump_parse/dump_data_parser.py +436 -0
  259. msprobe/msaccucmp/dump_parse/dump_utils.py +246 -0
  260. msprobe/msaccucmp/dump_parse/ffts_parser.py +137 -0
  261. msprobe/msaccucmp/dump_parse/mapping.py +62 -0
  262. msprobe/msaccucmp/dump_parse/nano_dump_data.py +392 -0
  263. msprobe/msaccucmp/dump_parse/proto_dump_data.py +308 -0
  264. msprobe/msaccucmp/dump_parser.py +90 -0
  265. msprobe/msaccucmp/format_manager/__init__.py +16 -0
  266. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_NZ_to_NCHW.py +53 -0
  267. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_NZ_to_ND.py +52 -0
  268. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_NZ_to_NHWC.py +53 -0
  269. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_Z_to_HWCN.py +47 -0
  270. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_FRACTAL_Z_to_NCHW.py +47 -0
  271. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_HWCN_to_FRACTAL_Z.py +89 -0
  272. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_HWCN_to_NCHW.py +37 -0
  273. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_HWCN_to_NHWC.py +37 -0
  274. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NC1HWC0_to_HWCN.py +43 -0
  275. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NC1HWC0_to_NCHW.py +48 -0
  276. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NC1HWC0_to_NHWC.py +43 -0
  277. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NCHW_to_FRACTAL_Z.py +87 -0
  278. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NCHW_to_NHWC.py +37 -0
  279. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NDC1HWC0_to_NCDHW.py +48 -0
  280. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NDC1HWC0_to_ND.py +44 -0
  281. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NHWC_to_FRACTAL_Z.py +87 -0
  282. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NHWC_to_HWCN.py +37 -0
  283. msprobe/msaccucmp/format_manager/builtin_format_convert/convert_NHWC_to_NCHW.py +37 -0
  284. msprobe/msaccucmp/format_manager/format_manager.py +307 -0
  285. msprobe/msaccucmp/inplace_layer_process.py +186 -0
  286. msprobe/msaccucmp/msaccucmp.py +532 -0
  287. msprobe/msaccucmp/mscmp_advisor.py +128 -0
  288. msprobe/msaccucmp/overflow/__init__.py +16 -0
  289. msprobe/msaccucmp/overflow/overflow_analyse.py +305 -0
  290. msprobe/msaccucmp/overflow/overflow_detection.py +143 -0
  291. msprobe/msaccucmp/pytorch_cmp/__init__.py +16 -0
  292. msprobe/msaccucmp/pytorch_cmp/compare_pytorch.py +389 -0
  293. msprobe/msaccucmp/pytorch_cmp/hdf5_parser.py +377 -0
  294. msprobe/msaccucmp/pytorch_cmp/pytorch_dump_data.py +461 -0
  295. msprobe/msaccucmp/shape_conversion.py +41 -0
  296. msprobe/msaccucmp/vector_cmp/__init__.py +16 -0
  297. msprobe/msaccucmp/vector_cmp/batch_compare.py +197 -0
  298. msprobe/msaccucmp/vector_cmp/compare_detail/__init__.py +16 -0
  299. msprobe/msaccucmp/vector_cmp/compare_detail/compare_detail.py +245 -0
  300. msprobe/msaccucmp/vector_cmp/compare_detail/detail.py +182 -0
  301. msprobe/msaccucmp/vector_cmp/compare_detail/detail_writer.py +580 -0
  302. msprobe/msaccucmp/vector_cmp/fusion_manager/__init__.py +16 -0
  303. msprobe/msaccucmp/vector_cmp/fusion_manager/compare_fusion_op.py +588 -0
  304. msprobe/msaccucmp/vector_cmp/fusion_manager/compare_npu_vs_npu.py +339 -0
  305. msprobe/msaccucmp/vector_cmp/fusion_manager/compare_result.py +326 -0
  306. msprobe/msaccucmp/vector_cmp/fusion_manager/compare_rule.py +156 -0
  307. msprobe/msaccucmp/vector_cmp/fusion_manager/fusion_op.py +204 -0
  308. msprobe/msaccucmp/vector_cmp/fusion_manager/fusion_rule_parser.py +635 -0
  309. msprobe/msaccucmp/vector_cmp/fusion_manager/quant_filter.py +187 -0
  310. msprobe/msaccucmp/vector_cmp/range_manager/__init__.py +16 -0
  311. msprobe/msaccucmp/vector_cmp/range_manager/range_manager.py +100 -0
  312. msprobe/msaccucmp/vector_cmp/range_manager/range_mode.py +94 -0
  313. msprobe/msaccucmp/vector_cmp/range_manager/select_mode.py +86 -0
  314. msprobe/msaccucmp/vector_cmp/vector_comparison.py +535 -0
  315. msprobe/msprobe.py +101 -130
  316. msprobe/overflow_check/__init__.py +15 -0
  317. msprobe/{nan_analyze → overflow_check}/analyzer.py +38 -27
  318. msprobe/{nan_analyze → overflow_check}/graph.py +28 -27
  319. msprobe/{nan_analyze → overflow_check}/utils.py +15 -14
  320. msprobe/pytorch/__init__.py +20 -14
  321. msprobe/pytorch/aclgraph_dump/__init__.py +45 -0
  322. msprobe/pytorch/aclgraph_dump/_meta.py +26 -0
  323. msprobe/pytorch/api_accuracy_checker/{run_ut/run_ut.py → acc_check/acc_check.py} +50 -45
  324. msprobe/pytorch/api_accuracy_checker/{run_ut/run_ut_utils.py → acc_check/acc_check_utils.py} +201 -30
  325. msprobe/pytorch/api_accuracy_checker/{run_ut → acc_check}/data_generate.py +56 -16
  326. msprobe/pytorch/api_accuracy_checker/{run_ut/multi_run_ut.py → acc_check/multi_acc_check.py} +32 -47
  327. msprobe/pytorch/api_accuracy_checker/{run_ut → acc_check}/run_overflow_check.py +19 -18
  328. msprobe/pytorch/api_accuracy_checker/common/config.py +22 -20
  329. msprobe/pytorch/api_accuracy_checker/common/utils.py +72 -13
  330. msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +41 -11
  331. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +23 -14
  332. msprobe/pytorch/api_accuracy_checker/compare/compare.py +45 -32
  333. msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +12 -11
  334. msprobe/pytorch/api_accuracy_checker/compare/compare_input.py +14 -12
  335. msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +14 -12
  336. msprobe/pytorch/api_accuracy_checker/precision_standard/absolute_threshold.py +12 -11
  337. msprobe/pytorch/api_accuracy_checker/precision_standard/accumulative_error_compare.py +12 -11
  338. msprobe/pytorch/api_accuracy_checker/precision_standard/base_standard.py +21 -19
  339. msprobe/pytorch/api_accuracy_checker/precision_standard/benchmark_compare.py +14 -13
  340. msprobe/pytorch/api_accuracy_checker/precision_standard/binary_consistency.py +12 -11
  341. msprobe/pytorch/api_accuracy_checker/precision_standard/standard_config.py +60 -11
  342. msprobe/pytorch/api_accuracy_checker/precision_standard/standard_register.py +27 -16
  343. msprobe/pytorch/api_accuracy_checker/precision_standard/thousandth_standard.py +13 -11
  344. msprobe/pytorch/api_accuracy_checker/precision_standard/ulp_compare.py +39 -18
  345. msprobe/pytorch/bench_functions/__init__.py +12 -11
  346. msprobe/pytorch/bench_functions/apply_adam.py +12 -11
  347. msprobe/pytorch/bench_functions/apply_adam_w.py +12 -11
  348. msprobe/pytorch/bench_functions/confusion_transpose.py +12 -11
  349. msprobe/pytorch/bench_functions/fast_gelu.py +12 -11
  350. msprobe/pytorch/bench_functions/group_norm_silu.py +12 -11
  351. msprobe/pytorch/bench_functions/layer_norm_eval.py +12 -11
  352. msprobe/pytorch/bench_functions/linear.py +12 -11
  353. msprobe/pytorch/bench_functions/matmul_backward.py +12 -11
  354. msprobe/pytorch/bench_functions/mish.py +12 -11
  355. msprobe/pytorch/bench_functions/moe_gating_top_k_softmax.py +12 -11
  356. msprobe/pytorch/bench_functions/npu_fusion_attention.py +12 -11
  357. msprobe/pytorch/bench_functions/rms_norm.py +12 -11
  358. msprobe/pytorch/bench_functions/rotary_mul.py +12 -11
  359. msprobe/pytorch/bench_functions/scaled_mask_softmax.py +12 -11
  360. msprobe/pytorch/bench_functions/sort_v2.py +12 -11
  361. msprobe/pytorch/bench_functions/swiglu.py +12 -11
  362. msprobe/pytorch/common/__init__.py +12 -11
  363. msprobe/pytorch/common/log.py +12 -11
  364. msprobe/pytorch/common/parse_json.py +12 -11
  365. msprobe/pytorch/common/utils.py +52 -19
  366. msprobe/pytorch/compare/distributed_compare.py +13 -13
  367. msprobe/pytorch/compare/match.py +12 -11
  368. msprobe/pytorch/compare/pt_compare.py +14 -20
  369. msprobe/pytorch/compare/pt_diff_analyze.py +12 -11
  370. msprobe/pytorch/compare/utils.py +12 -11
  371. msprobe/pytorch/{hook_module → dump/api_dump}/api_register.py +18 -16
  372. msprobe/pytorch/{hook_module → dump/api_dump}/hook_module.py +14 -13
  373. msprobe/pytorch/{hook_module → dump/api_dump}/pt_hook_manager.py +68 -23
  374. msprobe/pytorch/{hook_module → dump/api_dump}/register_optimizer_hook.py +13 -11
  375. msprobe/pytorch/{hook_module → dump/api_dump}/script_wrapper.py +17 -14
  376. msprobe/pytorch/{hook_module → dump/api_dump}/utils.py +12 -11
  377. msprobe/pytorch/{debugger → dump/debugger}/debugger_config.py +23 -38
  378. msprobe/pytorch/dump/debugger/precision_debugger.py +130 -0
  379. msprobe/pytorch/{function_factory.py → dump/function_factory.py} +12 -11
  380. msprobe/pytorch/dump/module_dump/hook_wrapper.py +17 -13
  381. msprobe/pytorch/dump/module_dump/module_dump.py +16 -15
  382. msprobe/pytorch/dump/module_dump/{module_processer.py → module_processor.py} +54 -42
  383. msprobe/pytorch/dump/pt_config.py +128 -0
  384. msprobe/pytorch/{pytorch_service.py → dump/pytorch_service.py} +22 -21
  385. msprobe/pytorch/monitor/csv2tb.py +13 -11
  386. msprobe/pytorch/monitor/data_writers.py +13 -11
  387. msprobe/pytorch/monitor/distributed/wrap_distributed.py +13 -11
  388. msprobe/pytorch/monitor/features.py +12 -11
  389. msprobe/pytorch/monitor/module_hook.py +67 -59
  390. msprobe/pytorch/monitor/module_metric.py +13 -11
  391. msprobe/pytorch/monitor/optimizer_collect.py +37 -35
  392. msprobe/pytorch/monitor/utils.py +13 -11
  393. msprobe/pytorch/monitor/visualizer.py +12 -11
  394. msprobe/pytorch/torchair_dump/__init__.py +17 -0
  395. msprobe/pytorch/torchair_dump/torchair_dump.py +114 -0
  396. msprobe/scripts/atb/config_example.json +10 -0
  397. msprobe/scripts/atb/load_atb_probe.sh +101 -0
  398. msprobe/scripts/atb/unload_atb_probe.sh +27 -0
  399. msprobe/scripts/build_msaccucmp.sh +186 -0
  400. msprobe/scripts/conf/help.info +6 -0
  401. msprobe/scripts/conf/version.info +3 -0
  402. msprobe/scripts/run_script/common.sh +538 -0
  403. msprobe/scripts/run_script/main_msaccucmp.sh +232 -0
  404. msprobe/visualization/__init__.py +12 -11
  405. msprobe/visualization/builder/__init__.py +12 -11
  406. msprobe/visualization/builder/graph_builder.py +45 -30
  407. msprobe/visualization/builder/graph_merger.py +53 -32
  408. msprobe/visualization/builder/msprobe_adapter.py +34 -44
  409. msprobe/visualization/compare/__init__.py +12 -11
  410. msprobe/visualization/compare/graph_comparator.py +63 -51
  411. msprobe/visualization/compare/mode_adapter.py +28 -113
  412. msprobe/visualization/db_utils.py +133 -22
  413. msprobe/visualization/graph/__init__.py +12 -11
  414. msprobe/visualization/graph/base_node.py +15 -27
  415. msprobe/visualization/graph/distributed_analyzer.py +97 -40
  416. msprobe/visualization/graph/graph.py +14 -16
  417. msprobe/visualization/graph/node_colors.py +34 -31
  418. msprobe/visualization/graph/node_op.py +12 -11
  419. msprobe/visualization/graph_service.py +580 -205
  420. msprobe/visualization/utils.py +278 -31
  421. tb_graph_ascend/secure_build.py +175 -0
  422. tb_graph_ascend/server/__init__.py +15 -0
  423. tb_graph_ascend/server/app/__init__.py +15 -0
  424. tb_graph_ascend/server/app/model/__init__.py +15 -0
  425. tb_graph_ascend/server/app/model/hierarchy.py +348 -0
  426. tb_graph_ascend/server/app/model/layout_hierarchy_model.py +69 -0
  427. tb_graph_ascend/server/app/model/match_nodes_model.py +573 -0
  428. tb_graph_ascend/server/app/repositories/__init__.py +15 -0
  429. tb_graph_ascend/server/app/repositories/graph_repo_base.py +32 -0
  430. tb_graph_ascend/server/app/repositories/graph_repo_db.py +879 -0
  431. tb_graph_ascend/server/app/repositories/graph_repo_vis.py +83 -0
  432. tb_graph_ascend/server/app/service/__init__.py +18 -0
  433. tb_graph_ascend/server/app/service/graph_service_base.py +158 -0
  434. tb_graph_ascend/server/app/service/graph_service_db.py +438 -0
  435. tb_graph_ascend/server/app/service/graph_service_factory.py +54 -0
  436. tb_graph_ascend/server/app/service/graph_service_vis.py +480 -0
  437. tb_graph_ascend/server/app/utils/__init__.py +15 -0
  438. tb_graph_ascend/server/app/utils/constant.py +80 -0
  439. tb_graph_ascend/server/app/utils/file_check_wrapper.py +46 -0
  440. tb_graph_ascend/server/app/utils/global_state.py +95 -0
  441. tb_graph_ascend/server/app/utils/graph_utils.py +661 -0
  442. tb_graph_ascend/server/app/utils/i18n.py +153 -0
  443. tb_graph_ascend/server/app/utils/request_method.py +46 -0
  444. tb_graph_ascend/server/app/views/__init__.py +15 -0
  445. tb_graph_ascend/server/app/views/graph_views.py +304 -0
  446. tb_graph_ascend/server/plugin.py +108 -0
  447. tb_graph_ascend/server/static/index.html +9250 -0
  448. tb_graph_ascend/server/static/index.js +21 -0
  449. tb_graph_ascend/setup.py +57 -0
  450. mindstudio_probe-8.3.3.dist-info/LICENSE +0 -201
  451. mindstudio_probe-8.3.3.dist-info/RECORD +0 -491
  452. mindstudio_probe-8.3.3.dist-info/entry_points.txt +0 -2
  453. mindstudio_probe-8.3.3.dist-info/top_level.txt +0 -1
  454. msprobe/CMakeLists.txt +0 -5
  455. msprobe/README.md +0 -203
  456. msprobe/core/advisor/advisor.py +0 -129
  457. msprobe/core/advisor/advisor_const.py +0 -58
  458. msprobe/core/advisor/advisor_result.py +0 -58
  459. msprobe/core/compare/find_first/data_processor.py +0 -35
  460. msprobe/core/compare/highlight.py +0 -390
  461. msprobe/core/data_dump/data_collector.py +0 -356
  462. msprobe/core/grad_probe/constant.py +0 -90
  463. msprobe/core/grad_probe/grad_compare.py +0 -187
  464. msprobe/core/grad_probe/utils.py +0 -105
  465. msprobe/core/kernel_dump/kernel_config.py +0 -33
  466. msprobe/docs/01.installation.md +0 -250
  467. msprobe/docs/02.config_introduction.md +0 -221
  468. msprobe/docs/03.config_examples.md +0 -281
  469. msprobe/docs/04.kernel_dump_PyTorch.md +0 -73
  470. msprobe/docs/05.data_dump_PyTorch.md +0 -518
  471. msprobe/docs/06.data_dump_MindSpore.md +0 -618
  472. msprobe/docs/07.accuracy_checker_PyTorch.md +0 -310
  473. msprobe/docs/09.accuracy_checker_MindSpore.md +0 -120
  474. msprobe/docs/10.accuracy_compare_PyTorch.md +0 -637
  475. msprobe/docs/11.accuracy_compare_MindSpore.md +0 -769
  476. msprobe/docs/12.overflow_check_PyTorch.md +0 -82
  477. msprobe/docs/13.overflow_check_MindSpore.md +0 -33
  478. msprobe/docs/14.data_parse_PyTorch.md +0 -282
  479. msprobe/docs/15.free_benchmarking_PyTorch.md +0 -169
  480. msprobe/docs/16.free_benchmarking_MindSpore.md +0 -159
  481. msprobe/docs/17.grad_probe.md +0 -205
  482. msprobe/docs/18.online_dispatch.md +0 -89
  483. msprobe/docs/19.monitor.md +0 -753
  484. msprobe/docs/20.monitor_performance_baseline.md +0 -52
  485. msprobe/docs/21.visualization_PyTorch.md +0 -519
  486. msprobe/docs/22.visualization_MindSpore.md +0 -515
  487. msprobe/docs/23.generate_operator_PyTorch.md +0 -107
  488. msprobe/docs/24.code_mapping_Mindspore.md +0 -29
  489. msprobe/docs/25.tool_function_introduction.md +0 -29
  490. msprobe/docs/26.data_dump_PyTorch_baseline.md +0 -48
  491. msprobe/docs/27.dump_json_instruction.md +0 -795
  492. msprobe/docs/28.debugger_save_instruction.md +0 -288
  493. msprobe/docs/28.kernel_dump_MindSpore.md +0 -69
  494. msprobe/docs/29.data_dump_MSAdapter.md +0 -235
  495. msprobe/docs/30.overflow_check_MSAdapter.md +0 -31
  496. msprobe/docs/31.config_check.md +0 -107
  497. msprobe/docs/32.ckpt_compare.md +0 -69
  498. msprobe/docs/33.generate_operator_MindSpore.md +0 -181
  499. msprobe/docs/34.RL_collect.md +0 -101
  500. msprobe/docs/35.nan_analyze.md +0 -73
  501. msprobe/docs/36.calculation_result_change.md +0 -75
  502. msprobe/docs/FAQ.md +0 -232
  503. msprobe/docs/S02.report_free_benchmarking_validation_performance_baseline.md +0 -146
  504. msprobe/docs/accuracy_checker_MindSpore/accuracy_checker_MindSpore_baseline.md +0 -14
  505. msprobe/docs/data_dump_MindSpore/data_dump_MindSpore_baseline.md +0 -33
  506. msprobe/docs/data_dump_MindSpore/dynamic_graph_quick_start_example.md +0 -217
  507. msprobe/docs/img/BLOOM-7B_1.png +0 -0
  508. msprobe/docs/img/BLOOM-7B_2.png +0 -0
  509. msprobe/docs/img/BLOOM-7B_3.png +0 -0
  510. msprobe/docs/img/BLOOM-7B_4.png +0 -0
  511. msprobe/docs/img/GPT-3_1.png +0 -0
  512. msprobe/docs/img/GPT-3_2.png +0 -0
  513. msprobe/docs/img/GPT-3_3.png +0 -0
  514. msprobe/docs/img/GPT-3_4.png +0 -0
  515. msprobe/docs/img/GPT-3_5.png +0 -0
  516. msprobe/docs/img/GPT-3_6.png +0 -0
  517. msprobe/docs/img/GPT-3_7.png +0 -0
  518. msprobe/docs/img/GPT-3_8.png +0 -0
  519. msprobe/docs/img/YOLOV5S_1.png +0 -0
  520. msprobe/docs/img/YOLOV5S_2.png +0 -0
  521. msprobe/docs/img/accuracy_checking_details.png +0 -0
  522. msprobe/docs/img/accuracy_checking_result.png +0 -0
  523. msprobe/docs/img/api_precision_compare_details.png +0 -0
  524. msprobe/docs/img/api_precision_compare_result.png +0 -0
  525. msprobe/docs/img/auto_analyze_log.png +0 -0
  526. msprobe/docs/img/compare_result.png +0 -0
  527. msprobe/docs/img/compare_result_pkl.png +0 -0
  528. msprobe/docs/img/compare_result_pkl_md5.png.png +0 -0
  529. msprobe/docs/img/cpu_info.png +0 -0
  530. msprobe/docs/img/free_benchmark.png +0 -0
  531. msprobe/docs/img/free_benchmark_framework.png +0 -0
  532. msprobe/docs/img/grad_probe_image-1.png +0 -0
  533. msprobe/docs/img/grad_probe_image-2.png +0 -0
  534. msprobe/docs/img/grad_probe_image-3.png +0 -0
  535. msprobe/docs/img/grad_probe_image-4.png +0 -0
  536. msprobe/docs/img/grad_probe_image.png +0 -0
  537. msprobe/docs/img/merge_result.png +0 -0
  538. msprobe/docs/img/module_compare.png +0 -0
  539. msprobe/docs/img/monitor/cpu_info.png +0 -0
  540. msprobe/docs/img/monitor/step_count_per_record.png +0 -0
  541. msprobe/docs/img/ms_dump.png +0 -0
  542. msprobe/docs/img/ms_layer.png +0 -0
  543. msprobe/docs/img/pt_dump.png +0 -0
  544. msprobe/docs/img/save_compare_result_sample.png +0 -0
  545. msprobe/docs/img/visualization/fuzzy_match_ms.png +0 -0
  546. msprobe/docs/img/visualization/fuzzy_match_pt.png +0 -0
  547. msprobe/docs/img/visualization/proxy.png +0 -0
  548. msprobe/docs/img/visualization/tensorboard_1.png +0 -0
  549. msprobe/docs/img/visualization/tensorboard_2.png +0 -0
  550. msprobe/docs/img/visualization/vis_browser_1.png +0 -0
  551. msprobe/docs/img/visualization/vis_browser_2.png +0 -0
  552. msprobe/docs/img/visualization/vis_match_info.png +0 -0
  553. msprobe/docs/img/visualization/vis_precision_info.png +0 -0
  554. msprobe/docs/img/visualization/vis_search_info.png +0 -0
  555. msprobe/docs/img/visualization/vis_show_info.png +0 -0
  556. msprobe/docs/img/visualization/vis_showcase.png +0 -0
  557. msprobe/docs/img/visualization/vis_unmatch_info.png +0 -0
  558. msprobe/docs/visualization/GPTModel.png +0 -0
  559. msprobe/docs/visualization/ParallelMLP.png +0 -0
  560. msprobe/docs/visualization/layer_mapping_example.md +0 -132
  561. msprobe/docs/visualization/mapping.png +0 -0
  562. msprobe/docs/visualization/mapping1.png +0 -0
  563. msprobe/docs/visualization/mindspeed_llamafactoary_img/1.png +0 -0
  564. msprobe/docs/visualization/mindspeed_llamafactoary_img/2.png +0 -0
  565. msprobe/docs/visualization/mindspeed_llamafactoary_img/3.png +0 -0
  566. msprobe/docs/visualization/mindspeed_llamafactoary_img/4.png +0 -0
  567. msprobe/docs/visualization/mindspeed_llamafactoary_img/5.png +0 -0
  568. msprobe/docs/visualization/mindspeed_llamafactoary_img/6.png +0 -0
  569. msprobe/docs/visualization/mindspeed_llamafactoary_img/7.png +0 -0
  570. msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory-qwen25vl.txt +0 -59
  571. msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory1.png +0 -0
  572. msprobe/docs/visualization/mindspeed_llamafactoary_img/llamafactory2.png +0 -0
  573. msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed-mm-qwen25vl.txt +0 -80
  574. msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed1.png +0 -0
  575. msprobe/docs/visualization/mindspeed_llamafactoary_img/mindspeed2.png +0 -0
  576. msprobe/docs/visualization/mindspeed_llamafactory_mapping.md +0 -330
  577. msprobe/docs/visualization/module_name.png +0 -0
  578. msprobe/docs/visualization/module_name1.png +0 -0
  579. msprobe/docs/visualization/no_mapping.png +0 -0
  580. msprobe/docs/visualization/no_mapping1.png +0 -0
  581. msprobe/docs/visualization/no_mapping_analyze.png +0 -0
  582. msprobe/docs/visualization/top_layer.png +0 -0
  583. msprobe/mindspore/api_accuracy_checker/generate_op_script/op_generator.py +0 -460
  584. msprobe/mindspore/api_accuracy_checker/generate_op_script/operator_replication.template +0 -2081
  585. msprobe/mindspore/code_mapping/bind.py +0 -283
  586. msprobe/mindspore/code_mapping/cmd_parser.py +0 -40
  587. msprobe/mindspore/code_mapping/graph.py +0 -49
  588. msprobe/mindspore/code_mapping/graph_parser.py +0 -211
  589. msprobe/mindspore/code_mapping/main.py +0 -24
  590. msprobe/mindspore/code_mapping/processor.py +0 -34
  591. msprobe/mindspore/dym_loader/hook_dynamic_loader.cpp +0 -111
  592. msprobe/mindspore/dym_loader/hook_dynamic_loader.h +0 -52
  593. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +0 -257
  594. msprobe/mindspore/free_benchmark/common/config.py +0 -27
  595. msprobe/mindspore/free_benchmark/common/handler_params.py +0 -31
  596. msprobe/mindspore/free_benchmark/common/utils.py +0 -100
  597. msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +0 -638
  598. msprobe/mindspore/free_benchmark/handler/base_handler.py +0 -105
  599. msprobe/mindspore/free_benchmark/handler/check_handler.py +0 -55
  600. msprobe/mindspore/free_benchmark/handler/fix_handler.py +0 -51
  601. msprobe/mindspore/free_benchmark/handler/handler_factory.py +0 -36
  602. msprobe/mindspore/free_benchmark/perturbation/add_noise.py +0 -82
  603. msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +0 -45
  604. msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +0 -78
  605. msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +0 -77
  606. msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +0 -56
  607. msprobe/mindspore/free_benchmark/perturbation/no_change.py +0 -27
  608. msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +0 -46
  609. msprobe/mindspore/free_benchmark/self_check_tool_factory.py +0 -51
  610. msprobe/mindspore/grad_probe/global_context.py +0 -127
  611. msprobe/mindspore/grad_probe/grad_analyzer.py +0 -260
  612. msprobe/mindspore/grad_probe/grad_monitor.py +0 -42
  613. msprobe/mindspore/grad_probe/grad_stat_csv.py +0 -161
  614. msprobe/mindspore/grad_probe/hook.py +0 -115
  615. msprobe/mindspore/grad_probe/utils.py +0 -43
  616. msprobe/mindspore/mindtorch/__init__.py +0 -18
  617. msprobe/mindspore/ms_config.py +0 -153
  618. msprobe/mindspore/task_handler_factory.py +0 -44
  619. msprobe/nan_analyze/__init__.py +0 -14
  620. msprobe/pytorch/api_accuracy_checker/generate_op_script/config_op.json +0 -9
  621. msprobe/pytorch/api_accuracy_checker/generate_op_script/op_generator.py +0 -480
  622. msprobe/pytorch/api_accuracy_checker/generate_op_script/operator_replication.template +0 -567
  623. msprobe/pytorch/debugger/precision_debugger.py +0 -181
  624. msprobe/pytorch/free_benchmark/__init__.py +0 -23
  625. msprobe/pytorch/free_benchmark/common/constant.py +0 -85
  626. msprobe/pytorch/free_benchmark/common/counter.py +0 -87
  627. msprobe/pytorch/free_benchmark/common/enums.py +0 -80
  628. msprobe/pytorch/free_benchmark/common/params.py +0 -152
  629. msprobe/pytorch/free_benchmark/common/utils.py +0 -143
  630. msprobe/pytorch/free_benchmark/compare/grad_saver.py +0 -215
  631. msprobe/pytorch/free_benchmark/compare/single_benchmark.py +0 -121
  632. msprobe/pytorch/free_benchmark/main.py +0 -123
  633. msprobe/pytorch/free_benchmark/perturbed_layers/base_layer.py +0 -28
  634. msprobe/pytorch/free_benchmark/perturbed_layers/layer_factory.py +0 -56
  635. msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +0 -107
  636. msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +0 -121
  637. msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +0 -89
  638. msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +0 -87
  639. msprobe/pytorch/free_benchmark/perturbed_layers/npu/no_change.py +0 -43
  640. msprobe/pytorch/free_benchmark/perturbed_layers/npu/npu_base_layser.py +0 -60
  641. msprobe/pytorch/free_benchmark/perturbed_layers/run_cpu.py +0 -34
  642. msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +0 -252
  643. msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +0 -54
  644. msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +0 -40
  645. msprobe/pytorch/free_benchmark/result_handlers/handler_factory.py +0 -45
  646. msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +0 -181
  647. msprobe/pytorch/grad_probe/__init__.py +0 -0
  648. msprobe/pytorch/grad_probe/grad_monitor.py +0 -108
  649. msprobe/pytorch/grad_probe/grad_stat_csv.py +0 -160
  650. msprobe/pytorch/hook_module/__init__.py +0 -16
  651. msprobe/pytorch/hook_module/wrap_aten.py +0 -111
  652. msprobe/pytorch/online_dispatch/__init__.py +0 -19
  653. msprobe/pytorch/online_dispatch/compare.py +0 -224
  654. msprobe/pytorch/online_dispatch/dispatch.py +0 -332
  655. msprobe/pytorch/online_dispatch/dump_compare.py +0 -179
  656. msprobe/pytorch/online_dispatch/single_compare.py +0 -412
  657. msprobe/pytorch/online_dispatch/torch_ops_config.yaml +0 -58
  658. msprobe/pytorch/online_dispatch/utils.py +0 -158
  659. msprobe/pytorch/parse_tool/__init__.py +0 -0
  660. msprobe/pytorch/parse_tool/cli.py +0 -31
  661. msprobe/pytorch/parse_tool/lib/__init__.py +0 -0
  662. msprobe/pytorch/parse_tool/lib/compare.py +0 -253
  663. msprobe/pytorch/parse_tool/lib/config.py +0 -50
  664. msprobe/pytorch/parse_tool/lib/file_desc.py +0 -45
  665. msprobe/pytorch/parse_tool/lib/interactive_cli.py +0 -97
  666. msprobe/pytorch/parse_tool/lib/parse_exception.py +0 -54
  667. msprobe/pytorch/parse_tool/lib/parse_tool.py +0 -161
  668. msprobe/pytorch/parse_tool/lib/utils.py +0 -299
  669. msprobe/pytorch/parse_tool/lib/visualization.py +0 -85
  670. msprobe/pytorch/pt_config.py +0 -299
  671. /msprobe/core/{grad_probe → dump}/__init__.py +0 -0
  672. /msprobe/{mindspore/code_mapping → core/dump/api_dump}/__init__.py +0 -0
  673. /msprobe/{mindspore/debugger → core/dump/data_dump}/__init__.py +0 -0
  674. /msprobe/{mindspore/exception_dump → core/dump/data_dump/data_processor}/__init__.py +0 -0
  675. /msprobe/{mindspore/free_benchmark → core/dump/debugger}/__init__.py +0 -0
  676. /msprobe/{mindspore/free_benchmark/common → core/dump/kernel_dump}/__init__.py +0 -0
  677. /msprobe/mindspore/{free_benchmark/handler → dump/debugger}/__init__.py +0 -0
  678. /msprobe/mindspore/{grad_probe → dump/dump_processor}/__init__.py +0 -0
  679. /msprobe/mindspore/{overflow_check → dump/exception_dump}/__init__.py +0 -0
  680. /msprobe/mindspore/{mindtorch → dump/mindtorch}/mindtorch_adaptor.py +0 -0
  681. /msprobe/{pytorch/api_accuracy_checker/run_ut → mindspore/dump/overflow_check}/__init__.py +0 -0
  682. /msprobe/{pytorch/debugger → mindspore/monitor}/__init__.py +0 -0
  683. /msprobe/{pytorch/free_benchmark/common → msaccucmp}/__init__.py +0 -0
  684. /msprobe/pytorch/api_accuracy_checker/{run_ut → acc_check}/.keep +0 -0
  685. /msprobe/pytorch/{free_benchmark/perturbed_layers → api_accuracy_checker/acc_check}/__init__.py +0 -0
  686. /msprobe/pytorch/api_accuracy_checker/{run_ut → acc_check}/torch_ut_setting.json +0 -0
  687. /msprobe/pytorch/{free_benchmark/perturbed_layers/npu → dump/api_dump}/__init__.py +0 -0
  688. /msprobe/pytorch/{hook_module → dump/api_dump}/support_wrap_ops.yaml +0 -0
  689. /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)