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
@@ -1,17 +1,18 @@
1
- # Copyright (c) 2024-2025, Huawei Technologies Co., Ltd.
2
- # All rights reserved.
1
+ # -------------------------------------------------------------------------
2
+ # This file is part of the MindStudio project.
3
+ # Copyright (c) 2025 Huawei Technologies Co.,Ltd.
3
4
  #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
5
+ # MindStudio is licensed under Mulan PSL v2.
6
+ # You can use this software according to the terms and conditions of the Mulan PSL v2.
7
+ # You may obtain a copy of Mulan PSL v2 at:
7
8
  #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
+ # http://license.coscl.org.cn/MulanPSL2
9
10
  #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
11
+ # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
12
+ # EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
13
+ # MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
14
+ # See the Mulan PSL v2 for more details.
15
+ # -------------------------------------------------------------------------
15
16
 
16
17
  import os
17
18
  import re
@@ -22,7 +23,6 @@ import numpy as np
22
23
  import pandas as pd
23
24
  from tqdm import tqdm
24
25
 
25
- from msprobe.core.advisor.advisor import Advisor
26
26
  from msprobe.core.common.const import CompareConst, Const
27
27
  from msprobe.core.common.exceptions import FileCheckException
28
28
  from msprobe.core.common.file_utils import load_json, remove_path, create_directory, save_excel, save_json
@@ -31,21 +31,19 @@ from msprobe.core.common.utils import CompareException, add_time_with_xlsx, chec
31
31
  set_dump_path, get_dump_mode, check_compare_param, load_stack_json, get_file_type, add_time_with_json
32
32
  from msprobe.core.compare.check import check_dump_json_str, check_stack_json_str, cross_dtype_mapping, \
33
33
  check_configuration_param
34
- from msprobe.core.compare.utils import merge_tensor, print_compare_ends_info, read_op, set_stack_json_path, \
35
- reorder_index
34
+ from msprobe.core.compare.utils import print_compare_ends_info, read_op, set_stack_json_path, reorder_index
36
35
  from msprobe.core.compare.config import ModeConfig, MappingConfig, MappingDict
37
36
  from msprobe.core.compare.multiprocessing_compute import CompareRealData
38
- from msprobe.core.compare.highlight import HighLight
39
37
  from msprobe.core.compare.diff_analyze.first_diff_analyze import FirstDiffAnalyze
38
+ from msprobe.core.compare.indicator_analysis.calculator import calculate_excel_result_df
39
+ from msprobe.core.compare.stats_diff_calc import ValType, ALL_TYPES
40
40
 
41
41
 
42
42
  @dataclass
43
43
  class ComparisonConfig:
44
44
  dump_mode: str
45
45
  stack_mode: bool
46
- auto_analyze: bool
47
46
  fuzzy_match: bool
48
- highlight: bool
49
47
  data_mapping: dict
50
48
  suffix: str
51
49
  cell_mapping: dict
@@ -107,13 +105,16 @@ class Comparator:
107
105
  file_path = self.process_output_file(output_path, suffix, self.mode_config.compared_file_type)
108
106
 
109
107
  # initialize the compare result table and compare general data(name, dtype, shape, statistics/md5, etc.)
110
- npu_json = input_param.get("npu_json_path")
111
- bench_json = input_param.get("bench_json_path")
112
- stack_json = input_param.get("stack_json_path")
108
+ npu_json = input_param.get("npu_path")
109
+ bench_json = input_param.get("bench_path")
110
+ stack_json = input_param.get("stack_path")
113
111
  parse_data = ParseData(self.mode_config, rank) # load and parse json data
114
112
  npu_df, bench_df = parse_data.parse([npu_json, bench_json, stack_json])
113
+
114
+ logger.info("Matching APIs/Modules in progress...")
115
115
  result_df = self.compare_statistics(npu_df, bench_df)
116
- if not result_df.values.tolist():
116
+ logger.info("APIs/Modules match done.")
117
+ if result_df.empty:
117
118
  logger.warning("Can`t match any op. No compare result file generated.")
118
119
  return
119
120
 
@@ -132,28 +133,21 @@ class Comparator:
132
133
 
133
134
  # compare real data
134
135
  if self.mode_config.dump_mode == Const.ALL:
136
+ logger.info("Compare real data in progress...")
135
137
  compare_real_data = CompareRealData(self.file_reader, self.mode_config, self.cross_frame)
136
138
  result_df = compare_real_data.do_multi_process(input_param, result_df)
139
+ logger.info("Compare real data done.")
137
140
 
138
- # save result excel file
139
- logger.info(f'Saving result excel file in progress. The file path is: {file_path}.')
140
- if self.mode_config.highlight and len(result_df) <= CompareConst.MAX_EXCEL_LENGTH:
141
- # highlight if not too long
142
- highlight_dict = {"red_rows": set(), "yellow_rows": set(), "red_lines": [], "yellow_lines": []}
143
- highlight = HighLight(self.mode_config, rank)
144
- if self.mode_config.compared_file_type == Const.DUMP_JSON_FILE:
145
- highlight.find_compare_result_error_rows(result_df, highlight_dict)
146
- result_df.drop(columns=['state', 'api_origin_name'], inplace=True) # 删除中间数据,两列不落盘
147
- highlight.highlight_rows_xlsx(result_df, highlight_dict, file_path)
148
- else:
149
- # fallback to simple save without highlight
150
- result_df.drop(columns=['state', 'api_origin_name'], inplace=True) # 删除中间数据,两列不落盘
151
- save_excel(file_path, result_df)
141
+ # calculate Indicators
142
+ logger.info("Calculating comparison indicators in progress...")
143
+ calculate_excel_result_df(result_df, self.mode_config.dump_mode)
144
+ result_df.drop(columns=['state', 'api_origin_name'], inplace=True) # 删除中间数据,两列不落盘
145
+ logger.info("Comparison indicators calculation done.")
152
146
 
153
- # output compare analysis suggestions
154
- if self.mode_config.auto_analyze:
155
- advisor = Advisor(result_df, output_path, suffix)
156
- advisor.analysis()
147
+ # save result excel file
148
+ logger.info("Saving result excel file in progress...")
149
+ logger.info(f"The result excel file path is: {file_path}.")
150
+ save_excel(file_path, result_df)
157
151
 
158
152
  print_compare_ends_info()
159
153
 
@@ -164,6 +158,10 @@ class Comparator:
164
158
  # create new columns for compare op_name and shape
165
159
  # process npu_df's COMPARE_KEY whether same or different framework
166
160
  process_df = ProcessDf(self.mode_config, self.mapping_config, self.mapping_dict)
161
+ # 处理重计算对应的backward的序号。反向重计算序号调整属于精确匹配,与模糊匹配互斥。
162
+ if not self.mode_config.fuzzy_match:
163
+ npu_df = process_df.update_backward_call(npu_df)
164
+ bench_df = process_df.update_backward_call(bench_df)
167
165
  npu_df, bench_df = process_df.process_compare_key_and_shape(npu_df, bench_df)
168
166
 
169
167
  # match npu and bench, match_result contains both npu_info and bench_info
@@ -190,6 +188,33 @@ class ParseData:
190
188
  self.mode_config = mode_config
191
189
  self.rank = rank
192
190
 
191
+ @staticmethod
192
+ def get_direction_and_call_direction(data_name):
193
+ parts = data_name.split(Const.SEP)
194
+ if len(parts) < 2:
195
+ return None, None
196
+
197
+ last = parts[-1]
198
+ second_last = parts[-2]
199
+
200
+ # direction 判断
201
+ if Const.BACKWARD in (last, second_last):
202
+ direction = Const.BACKWARD
203
+ elif Const.FORWARD in (last, second_last):
204
+ direction = Const.FORWARD
205
+ else:
206
+ return None, None
207
+
208
+ # call_direction 永远取最后两个
209
+ call_direction = Const.SEP.join((second_last, last))
210
+
211
+ return direction, call_direction
212
+
213
+ @staticmethod
214
+ def get_op_no_number(data_name):
215
+ parts = data_name.split(Const.SEP)
216
+ return Const.SEP.join(parts[:-2]) if len(parts) > 2 else ''
217
+
193
218
  def parse(self, file_list):
194
219
  npu_json_path, bench_json_path, stack_json_path = file_list
195
220
  npu_json_data = load_json(npu_json_path)
@@ -202,7 +227,7 @@ class ParseData:
202
227
 
203
228
  return npu_df, bench_df
204
229
 
205
- def gen_data_df(self, data_json, stack_json_data, device: str):
230
+ def init_result(self):
206
231
  result = {
207
232
  CompareConst.OP_NAME: [],
208
233
  Const.DTYPE: [],
@@ -211,57 +236,90 @@ class ParseData:
211
236
  Const.STACK_INFO: [],
212
237
  Const.STATE: [],
213
238
  Const.API_ORIGIN_NAME: [],
214
- Const.REQ_GRAD: []
239
+ Const.REQ_GRAD: [],
240
+ Const.DIRECTION: [], # 目前三种选择:'forward', 'backward', None
241
+ Const.CALL_DIRECTION: [],
242
+ Const.OP_NO_NUMBER: [], # 删除调用序号
243
+ Const.BACKWARD_CALL_ORDER: [], # 计算op反向调用顺序,初始化为0
244
+ Const.SUFFIX: []
215
245
  }
216
246
  if self.mode_config.dump_mode == Const.ALL:
217
247
  result[Const.DATA_NAME] = []
218
248
  elif self.mode_config.dump_mode == Const.MD5:
219
249
  result[Const.MD5] = []
250
+ return result
251
+
252
+ def create_progress_bar(self, api_nums: int, device: str):
253
+ desc = f'{device} API/Module Read Progress'
254
+ if self.rank:
255
+ desc = f'[{self.rank}]' + desc
256
+ return tqdm(total=api_nums, desc=desc, unit="api/module", ncols=100)
257
+
258
+ def gen_data_df(self, data_json, stack_json_data, device: str):
259
+ result = self.init_result()
260
+ op_backward_count = defaultdict(int) # 记录backward调用次数,用于后续调用序更新
220
261
 
221
262
  apis_data = data_json.get('data', None)
222
263
  if not apis_data:
223
264
  logger.warning('No APIs found in dump.json.')
224
265
  return pd.DataFrame(result)
225
266
 
226
- api_nums = len(apis_data)
227
- default_bar_desc = f'{device} API/Module Read Progress'
228
- bar_desc_add_rank = f'[{self.rank}]' + default_bar_desc if self.rank else default_bar_desc
229
- progress_bar = tqdm(total=api_nums, desc=bar_desc_add_rank, unit="api/module", ncols=100)
267
+ progress_bar = self.create_progress_bar(len(apis_data), device)
230
268
 
231
269
  # 从json中循环解析API数据,遍历所有API
232
270
  for data_name in apis_data:
233
271
  check_op_str_pattern_valid(data_name)
272
+
234
273
  op_parsed_list = self.gen_merge_list(data_json, data_name, stack_json_data)
235
274
  if not op_parsed_list:
275
+ progress_bar.update(1)
276
+ continue
277
+
278
+ op_no_number = self.get_op_no_number(data_name)
279
+ if op_no_number == '':
280
+ progress_bar.update(1)
236
281
  continue
282
+
283
+ direction, call_direction = self.get_direction_and_call_direction(data_name)
284
+ backward_call_order = op_backward_count.get(op_no_number, 0)
285
+ if direction == Const.BACKWARD:
286
+ op_backward_count[op_no_number] += 1
287
+
237
288
  reordered_index_list = reorder_index(op_parsed_list)
289
+
290
+ stack_info = op_parsed_list[-1].get('full_info') if self.mode_config.stack_mode else None
291
+
238
292
  for i, index in enumerate(reordered_index_list):
239
293
  op_item = op_parsed_list[index]
294
+ summary_data = [
295
+ str(op_item.get(key)) if op_item.get(key) is None else op_item.get(key)
296
+ for key in Const.SUMMARY_METRICS_LIST
297
+ ]
298
+ full_op_name = op_item.get(Const.FULL_OP_NAME)
299
+ suffix = full_op_name.replace(data_name, '')
240
300
 
241
301
  # common key
242
- result[CompareConst.OP_NAME].append(op_item.get('full_op_name'))
302
+ result[CompareConst.OP_NAME].append(full_op_name)
243
303
  result[Const.DTYPE].append(op_item.get(Const.DTYPE))
244
304
  result[Const.SHAPE].append(op_item.get(Const.SHAPE))
245
305
  result[Const.STATE].append(op_item.get(Const.STATE))
246
306
  result[Const.REQ_GRAD].append(op_item.get(Const.REQ_GRAD))
247
307
  result[Const.API_ORIGIN_NAME].append(data_name)
248
- summary_data = [
249
- str(op_item.get(key)) if op_item.get(key) is None else op_item.get(key)
250
- for key in Const.SUMMARY_METRICS_LIST
251
- ]
252
308
  result[Const.SUMMARY].append(summary_data)
309
+ result[Const.DIRECTION].append(direction)
310
+ result[Const.CALL_DIRECTION].append(call_direction)
311
+ result[Const.OP_NO_NUMBER].append(op_no_number)
312
+ result[Const.BACKWARD_CALL_ORDER].append(backward_call_order)
313
+ result[Const.SUFFIX].append(suffix)
253
314
 
254
315
  # dump_mode differ key
255
316
  if self.mode_config.dump_mode == Const.MD5:
256
- result[Const.MD5].append(op_parsed_list[index].get(Const.MD5))
317
+ result[Const.MD5].append(op_item.get(Const.MD5))
257
318
  if self.mode_config.dump_mode == Const.ALL:
258
319
  result[Const.DATA_NAME].append(op_item.get(Const.DATA_NAME))
259
320
 
260
321
  # mode_config stack_mode addition key
261
- if i == 0 and self.mode_config.stack_mode:
262
- result[Const.STACK_INFO].append(op_parsed_list[-1].get('full_info'))
263
- else:
264
- result[Const.STACK_INFO].append(None)
322
+ result[Const.STACK_INFO].append(stack_info if i == 0 else None)
265
323
 
266
324
  # mode_config first_diff_analyze addition key
267
325
  if self.mode_config.first_diff_analyze:
@@ -307,10 +365,64 @@ class ProcessDf:
307
365
  raise CompareException(CompareException.INDEX_OUT_OF_BOUNDS_ERROR) from error
308
366
  return api_name
309
367
 
368
+ @staticmethod
369
+ def update_backward_call(cmp_df):
370
+ # ===============================
371
+ # Step 1: 拆 call_direction 的两部分
372
+ # ===============================
373
+ cd_parts = cmp_df[Const.CALL_DIRECTION].str.rsplit(Const.SEP, n=1, expand=True)
374
+ cd_parts.columns = ["cd_head", "cd_tail"]
375
+
376
+ head_is_digit = cd_parts["cd_head"].str.isdigit()
377
+ tail_is_digit = cd_parts["cd_tail"].str.isdigit()
378
+ is_backward = cmp_df[Const.DIRECTION] == Const.BACKWARD
379
+
380
+ # ===============================
381
+ # Step 2: 矢量化替换 backward_call_order
382
+ # ===============================
383
+ mask_head = is_backward & head_is_digit
384
+ mask_tail = is_backward & tail_is_digit
385
+ update_mask = mask_head | mask_tail
386
+
387
+ cd_parts.loc[mask_head, "cd_head"] = (
388
+ cmp_df.loc[mask_head, Const.BACKWARD_CALL_ORDER].astype(str)
389
+ )
390
+ cd_parts.loc[mask_tail, "cd_tail"] = (
391
+ cmp_df.loc[mask_tail, Const.BACKWARD_CALL_ORDER].astype(str)
392
+ )
393
+
394
+ # 只更新需要更新的 call_direction
395
+ cmp_df.loc[update_mask, Const.CALL_DIRECTION] = (
396
+ cd_parts.loc[update_mask, "cd_head"]
397
+ + Const.SEP
398
+ + cd_parts.loc[update_mask, "cd_tail"]
399
+ )
400
+
401
+ # ===============================
402
+ # Step 3: 初始化 + 局部更新 OP_NAME_UPDATE
403
+ # ===============================
404
+ # 默认保持原值
405
+ cmp_df[CompareConst.OP_NAME_UPDATE] = cmp_df[CompareConst.OP_NAME]
406
+
407
+ # 只更新命中的行
408
+ cmp_df.loc[update_mask, CompareConst.OP_NAME_UPDATE] = (
409
+ cmp_df.loc[update_mask, Const.OP_NO_NUMBER]
410
+ + Const.SEP
411
+ + cmp_df.loc[update_mask, Const.CALL_DIRECTION]
412
+ + cmp_df.loc[update_mask, Const.SUFFIX]
413
+ )
414
+
415
+ return cmp_df
416
+
310
417
  def process_compare_key_and_shape(self, npu_df, bench_df):
311
418
  npu_df = self.assign_npu_df_compare_key(npu_df, bench_df)
312
419
  npu_df[CompareConst.CMP_SHAPE] = npu_df[Const.SHAPE]
313
- bench_df[CompareConst.CMP_KEY] = bench_df[CompareConst.OP_NAME]
420
+ bench_cmp_key = (
421
+ bench_df[CompareConst.OP_NAME_UPDATE]
422
+ if not self.mode_config.fuzzy_match
423
+ else bench_df[CompareConst.OP_NAME]
424
+ )
425
+ bench_df[CompareConst.CMP_KEY] = bench_cmp_key
314
426
  bench_df[CompareConst.CMP_SHAPE] = bench_df[Const.SHAPE]
315
427
  return npu_df, bench_df
316
428
 
@@ -336,7 +448,12 @@ class ProcessDf:
336
448
  elif self.mapping_config.data_mapping:
337
449
  npu_df[CompareConst.CMP_KEY] = npu_df[CompareConst.OP_NAME].apply(self.process_data_mapping)
338
450
  else:
339
- npu_df[CompareConst.CMP_KEY] = npu_df[CompareConst.OP_NAME]
451
+ cmp_key = (
452
+ npu_df[CompareConst.OP_NAME_UPDATE]
453
+ if not self.mode_config.fuzzy_match
454
+ else npu_df[CompareConst.OP_NAME]
455
+ )
456
+ npu_df[CompareConst.CMP_KEY] = cmp_key
340
457
  return npu_df
341
458
 
342
459
  def process_internal_api_mapping(self, npu_op_name):
@@ -427,9 +544,22 @@ class ProcessDf:
427
544
  if self.mapping_dict.cell_mapping_dict:
428
545
  # get cell name & class name from op_name
429
546
  # Cell.fc1.Dense.forward.0.input.0
547
+ # npu_op_name.split(Const.SEP, 1)[-1] 表示Module或Cell字段后面的部分
430
548
  cell_name = re.split(r'\.(?:forward|backward|parameters_grad)\.', npu_op_name.split(Const.SEP, 1)[-1])[0]
549
+
550
+ # 1. 精确整段匹配(保持原行为)
431
551
  if cell_name in self.mapping_dict.cell_mapping_dict:
432
- npu_op_name = npu_op_name.replace(cell_name, self.mapping_dict.cell_mapping_dict[cell_name], 1)
552
+ new_cell_name = self.mapping_dict.cell_mapping_dict[cell_name]
553
+ # 2. 兜底:简单字符串替换(不做任何限制)
554
+ else:
555
+ new_cell_name = cell_name
556
+ for target_name, golden_name in self.mapping_dict.cell_mapping_dict.items():
557
+ if target_name in new_cell_name:
558
+ new_cell_name = new_cell_name.replace(target_name, golden_name, 1)
559
+ # 3. 应用替换
560
+ if new_cell_name != cell_name:
561
+ npu_op_name = npu_op_name.replace(cell_name, new_cell_name, 1)
562
+
433
563
  return npu_op_name
434
564
 
435
565
  def process_data_mapping(self, npu_op_name):
@@ -482,8 +612,7 @@ class Match:
482
612
  def check_op_item(self, npu_op_item, bench_op_item):
483
613
  name_match = self.rename_api(npu_op_item[CompareConst.CMP_KEY]) == self.rename_api(
484
614
  bench_op_item[CompareConst.CMP_KEY])
485
- shape_match = npu_op_item[CompareConst.CMP_SHAPE] == bench_op_item[CompareConst.CMP_SHAPE]
486
- if name_match and shape_match:
615
+ if name_match:
487
616
  return True
488
617
  else:
489
618
  npu_op_name = npu_op_item[CompareConst.OP_NAME]
@@ -507,9 +636,13 @@ class Match:
507
636
  match_result = match_result.sort_values(CompareConst.OP_NAME_X).reset_index(drop=True)
508
637
  match_result[CompareConst.OP_NAME_X] = match_result[CompareConst.OP_NAME_X].astype('object')
509
638
  elif not self.mode_config.fuzzy_match:
510
- match_result = pd.merge(npu_df, bench_df, on=[CompareConst.CMP_KEY, CompareConst.CMP_SHAPE],
639
+ match_result = pd.merge(npu_df, bench_df, on=[CompareConst.CMP_KEY],
511
640
  how='outer')
512
641
  else:
642
+ drop_list = [Const.DIRECTION, Const.CALL_DIRECTION, Const.OP_NO_NUMBER, Const.BACKWARD_CALL_ORDER,
643
+ Const.SUFFIX]
644
+ npu_df.drop(columns=drop_list, inplace=True)
645
+ bench_df.drop(columns=drop_list, inplace=True)
513
646
  match_result = self.process_fuzzy_match(npu_df, bench_df)
514
647
  return match_result
515
648
 
@@ -675,52 +808,187 @@ class CreateTable:
675
808
  class CalcStatsDiff:
676
809
  def __init__(self, mode_config: ModeConfig):
677
810
  self.mode_config = mode_config
811
+ self.rules = None
812
+ self.build_rules()
813
+ self.DEFAULT_RULE = self.static_diff(CompareConst.N_A)
678
814
 
679
815
  @staticmethod
680
- def type_check(val):
816
+ def is_same_value(a: pd.Series, b: pd.Series) -> pd.Series:
681
817
  """
682
- 检查是否为数值或字符串形式的nan, 如果是返回True
818
+ 检查是否相等
819
+ """
820
+ return a.astype(str).eq(b.astype(str))
821
+
822
+ @staticmethod
823
+ def is_number(val: pd.Series) -> pd.Series:
824
+ """
825
+ 检查是否为有效的数值,并排除布尔类型
683
826
  """
684
- check_series = pd.Series(False, index=val.index)
685
827
  val_str = val.astype(str)
686
- check_series[pd.to_numeric(val_str, errors='coerce').notna() | val_str.str.lower().eq('nan')] = True
687
- return check_series
828
+ mask_bool = val_str.str.lower().eq('true') | val_str.str.lower().eq('false')
829
+ mask_numeric = pd.to_numeric(val, errors='coerce').notna()
830
+ return mask_numeric & ~mask_bool
831
+
832
+ @staticmethod
833
+ def is_nan(val: pd.Series) -> pd.Series:
834
+ """
835
+ 检查是否为字符串形式的 'nan' (包括大小写) 或实际的 NaN
836
+ """
837
+ val_str = val.astype(str)
838
+ return val.isna() | val_str.str.lower().eq('nan')
839
+
840
+ @staticmethod
841
+ def is_inf(val: pd.Series) -> pd.Series:
842
+ """
843
+ 检查是否为正无穷 (inf)
844
+ """
845
+ val_str = val.astype(str)
846
+ return (val == np.inf) | val_str.str.lower().eq('inf')
847
+
848
+ @staticmethod
849
+ def is_neg_inf(val: pd.Series) -> pd.Series:
850
+ """
851
+ 检查是否为负无穷 (-inf)
852
+ """
853
+ val_str = val.astype(str)
854
+ return (val == -np.inf) | val_str.str.lower().eq('-inf')
855
+
856
+ @staticmethod
857
+ def is_device(val: pd.Series) -> pd.Series:
858
+ """
859
+ 检查是否包含 'npu', 'cpu' 或 'cuda' 字符串
860
+ """
861
+ return val.astype(str).str.contains('npu|cpu|cuda', case=False, na=False)
862
+
863
+ @staticmethod
864
+ def is_na(val: pd.Series) -> pd.Series:
865
+ """
866
+ 检查是否为 N/A
867
+ """
868
+ return val.astype(str).eq(CompareConst.N_A)
869
+
870
+ @staticmethod
871
+ def rule_num_num(npu_num: pd.Series, bench_num: pd.Series):
872
+ diff = npu_num - bench_num
873
+ rel = pd.Series(CompareConst.INF, index=diff.index)
874
+ mask_nonzero = bench_num != 0
875
+ rel.loc[mask_nonzero] = (diff[mask_nonzero] / bench_num[mask_nonzero] * 100).abs().astype(str) + "%"
876
+ return diff, rel
877
+
878
+ @staticmethod
879
+ def static_diff(diff: str, rel=None):
880
+ if rel is None:
881
+ rel = diff
882
+ return diff, rel
688
883
 
689
884
  @staticmethod
690
885
  def get_number(val):
691
886
  return pd.to_numeric(val.astype(str), errors='coerce')
692
887
 
693
- def calc_summary_diff(self, result_df, cond_no_bench, stats_index: str):
888
+ def build_rules(self):
889
+ """
890
+ 创建npu、bench不相等规则
891
+ """
892
+ # NUM × NUM
893
+ self.rules = {(ValType.NUM, ValType.NUM): self.rule_num_num}
894
+
895
+ # ---------- NAN 规则 ----------
896
+ nan_rule = self.static_diff(CompareConst.NAN)
897
+ nan_range = {ValType.NUM, ValType.NAN, ValType.INF, ValType.NEG_INF}
898
+ for t in nan_range:
899
+ self.rules[(ValType.NAN, t)] = nan_rule
900
+ self.rules[(t, ValType.NAN)] = nan_rule
901
+
902
+ # ---------- INF / -INF 规则 ----------
903
+ pos_inf = self.static_diff(CompareConst.INF)
904
+ neg_inf = self.static_diff(CompareConst.NEG_INF)
905
+ # INF / -INF 在左
906
+ for r in (ValType.NUM, ValType.NEG_INF):
907
+ self.rules[(ValType.INF, r)] = pos_inf
908
+ for r in (ValType.NUM, ValType.INF):
909
+ self.rules[(ValType.NEG_INF, r)] = neg_inf
910
+ # INF / -INF 在右
911
+ self.rules[(ValType.NUM, ValType.INF)] = neg_inf
912
+ self.rules[(ValType.NUM, ValType.NEG_INF)] = pos_inf
913
+
914
+ # ---------- N/A 规则 ----------
915
+ na_rule = self.static_diff(CompareConst.N_A)
916
+ na_range = {ValType.NUM, ValType.NAN, ValType.INF, ValType.NEG_INF, ValType.DEVICE, ValType.NA, ValType.OTHER}
917
+ for t in na_range:
918
+ self.rules[(ValType.NA, t)] = na_rule
919
+ self.rules[(t, ValType.NA)] = na_rule
920
+
921
+ # ---------- DEVICE / OTHER 规则 ----------
922
+ # 给diff,都是device给N/A
923
+ diff_rule = self.static_diff(CompareConst.DIFF_FLAG)
924
+ diff_range = {ValType.NUM, ValType.NAN, ValType.INF, ValType.NEG_INF, ValType.DEVICE, ValType.OTHER}
925
+ for t in diff_range:
926
+ self.rules[(ValType.DEVICE, t)] = diff_rule
927
+ self.rules[(t, ValType.DEVICE)] = diff_rule
928
+ self.rules[(ValType.OTHER, t)] = diff_rule
929
+ self.rules[(t, ValType.OTHER)] = diff_rule
930
+ self.rules[(ValType.DEVICE, ValType.DEVICE)] = na_rule
931
+
932
+ def classify(self, val: pd.Series) -> pd.Series:
933
+ result_values = np.select(
934
+ [
935
+ self.is_nan(val),
936
+ self.is_inf(val),
937
+ self.is_neg_inf(val),
938
+ self.is_number(val), # 'inf', '-inf'会被pandas认为是number,所以放在inf/-inf判断后面
939
+ self.is_device(val),
940
+ self.is_na(val),
941
+ ],
942
+ [
943
+ ValType.NAN.value,
944
+ ValType.INF.value,
945
+ ValType.NEG_INF.value,
946
+ ValType.NUM.value,
947
+ ValType.DEVICE.value,
948
+ ValType.NA.value,
949
+ ],
950
+ default=ValType.OTHER.value,
951
+ )
952
+ val_to_enum = {t.value: t for t in ValType}
953
+ result_series = pd.Series(result_values, index=val.index).map(val_to_enum)
954
+ return result_series
955
+
956
+ def calc_summary_diff(self, result_df, stats_index: str):
694
957
  npu_val = result_df['NPU ' + stats_index]
695
958
  bench_val = result_df['Bench ' + stats_index]
696
959
  diff_name = stats_index.capitalize() + ' diff'
697
960
  rel_err_name = ('norm' if stats_index == 'l2norm' else stats_index).capitalize() + 'RelativeErr'
698
961
 
699
- # npu、bench中统计量均为数字或nan
700
- cond_num_nan = self.type_check(npu_val) & self.type_check(bench_val)
962
+ # ---------------------- 初始化 ----------------------
963
+ result_df[[diff_name, rel_err_name]] = CompareConst.N_A
701
964
 
702
- # 如果统计量不是数字或nan,就赋值统计量差异为N/A
703
- result_df.loc[~cond_num_nan, [diff_name, rel_err_name]] = CompareConst.N_A
704
- cond_valid_stat = ~cond_no_bench & cond_num_nan # 有效统计条件:bench_name不是N/A,并且NPU和bench的统计量都是数字或nan
705
- result_df.loc[cond_valid_stat, diff_name] = self.get_number(npu_val) - self.get_number(bench_val)
965
+ # ---------------------- 基础 mask ----------------------
966
+ npu_num = self.get_number(npu_val)
967
+ bench_num = self.get_number(bench_val)
968
+ mask_equal = self.is_same_value(npu_val, bench_val)
969
+ mask_unequal = ~mask_equal
706
970
 
707
- cond_diff_nan = result_df[diff_name].isna() # 统计量差异是nan
708
- cond_nan_diff = cond_valid_stat & cond_diff_nan
709
- result_df.loc[cond_nan_diff, [diff_name, rel_err_name]] = CompareConst.NAN
971
+ # ---------------------- npu, bench统计量相等 ----------------------
972
+ result_df.loc[mask_equal, [diff_name, rel_err_name]] = 0
710
973
 
711
- cond_not_nan_diff = cond_valid_stat & ~cond_diff_nan
712
- condition_pt_zero = self.get_number(bench_val) == 0
713
- result_df.loc[cond_not_nan_diff & condition_pt_zero, rel_err_name] = CompareConst.N_A
974
+ # ---------------------- npu, bench统计量不相等 ----------------------
975
+ npu_type = self.classify(npu_val)
976
+ bench_type = self.classify(bench_val)
977
+ for t1 in ALL_TYPES:
978
+ for t2 in ALL_TYPES:
979
+ mask = mask_unequal & (npu_type == t1) & (bench_type == t2)
980
+ if not mask.any():
981
+ continue
714
982
 
715
- # 相对误差转成百分比字符串
716
- cond_ref_err = cond_not_nan_diff & ~condition_pt_zero
717
- result_df.loc[cond_ref_err, rel_err_name] = (
718
- result_df.loc[cond_ref_err, diff_name] / bench_val[cond_ref_err].astype(float) * 100)
719
- result_df.loc[cond_ref_err, rel_err_name] = (result_df.loc[cond_ref_err, rel_err_name].abs().astype(str) + '%')
983
+ rule = self.rules.get((t1, t2), self.DEFAULT_RULE)
720
984
 
721
- magnitude = self.get_number(result_df[diff_name]).abs() / (pd.Series(
722
- np.maximum(self.get_number(npu_val), self.get_number(bench_val))).abs() + CompareConst.EPSILON)
723
- return magnitude > CompareConst.MAGNITUDE
985
+ if callable(rule):
986
+ diff, rel = rule(npu_num[mask], bench_num[mask])
987
+ else:
988
+ diff, rel = rule
989
+
990
+ result_df.loc[mask, diff_name] = diff
991
+ result_df.loc[mask, rel_err_name] = rel
724
992
 
725
993
  def calc_accuracy(self, result_df, header):
726
994
  # bench name N/A represents no bench data, err_msg adds "No bench data matched."
@@ -734,14 +1002,9 @@ class CalcStatsDiff:
734
1002
  result_df.loc[condition_md5_equal, CompareConst.RESULT] = CompareConst.PASS
735
1003
  result_df.loc[~condition_md5_equal & ~condition_no_bench, CompareConst.RESULT] = CompareConst.DIFF
736
1004
  elif self.mode_config.first_diff_analyze or self.mode_config.dump_mode == Const.SUMMARY:
737
- warning_list = [
738
- self.calc_summary_diff(result_df, condition_no_bench, stats_index)
739
- for stats_index in ['max', 'min', 'mean', 'l2norm']
740
- ]
741
- warning_flag = pd.DataFrame(warning_list).any()
1005
+ for stats_index in ['max', 'min', 'mean', 'l2norm']:
1006
+ self.calc_summary_diff(result_df, stats_index)
742
1007
  result_df.loc[~condition_no_bench, [CompareConst.RESULT, CompareConst.ERROR_MESSAGE]] = ''
743
- result_df.loc[warning_flag, CompareConst.RESULT] = CompareConst.WARNING
744
- result_df.loc[warning_flag, CompareConst.ERROR_MESSAGE] = 'Need double check api accuracy. '
745
1008
  result_df.loc[~condition_req_grad_consist, CompareConst.ERROR_MESSAGE] += 'Requires_grad inconsistent. '
746
1009
  else:
747
1010
  fill_cols = [CompareConst.COSINE, CompareConst.EUC_DIST,
@@ -749,7 +1012,6 @@ class CalcStatsDiff:
749
1012
  CompareConst.ONE_THOUSANDTH_ERR_RATIO, CompareConst.FIVE_THOUSANDTHS_ERR_RATIO,
750
1013
  CompareConst.ERROR_MESSAGE]
751
1014
  result_df.loc[~condition_no_bench, fill_cols] = '' # 默认填充'', df默认省缺值为nan,不便后续处理,容易出现意外情况
752
- result_df.loc[~condition_no_bench, CompareConst.ACCURACY] = CompareConst.ACCURACY_CHECK_YES
753
1015
  result_df.loc[~condition_req_grad_consist, CompareConst.ERROR_MESSAGE] = 'Requires_grad inconsistent. '
754
1016
 
755
1017
  return result_df[header]
@@ -761,9 +1023,7 @@ def setup_comparison(input_param, output_path, **kwargs) -> ComparisonConfig:
761
1023
  config = ComparisonConfig(
762
1024
  dump_mode='',
763
1025
  stack_mode=False,
764
- auto_analyze=kwargs.get('auto_analyze', True),
765
1026
  fuzzy_match=kwargs.get('fuzzy_match', False),
766
- highlight=kwargs.get('highlight', False),
767
1027
  data_mapping=kwargs.get('data_mapping', {}),
768
1028
  suffix=kwargs.get('suffix', ''),
769
1029
  cell_mapping=kwargs.get('cell_mapping', {}),
@@ -771,18 +1031,15 @@ def setup_comparison(input_param, output_path, **kwargs) -> ComparisonConfig:
771
1031
  layer_mapping=kwargs.get('layer_mapping', {}),
772
1032
  first_diff_analyze=kwargs.get('first_diff_analyze', False),
773
1033
  compared_file_type='',
774
- is_print_compare_log=input_param.get('is_print_compare_log', True)
1034
+ is_print_compare_log=kwargs.get('is_print_compare_log', False)
775
1035
  )
776
1036
 
777
1037
  set_dump_path(input_param)
778
1038
  config.dump_mode = get_dump_mode(input_param)
779
- config.compared_file_type = get_file_type(input_param.get("npu_json_path", None))
1039
+ config.compared_file_type = get_file_type(input_param.get("npu_path", None))
780
1040
 
781
- # set stack_mode and set "stack_json_path" in input_param
782
- if 'stack_json_path' in input_param:
783
- config.stack_mode = kwargs.get('stack_mode', False)
784
- else:
785
- config.stack_mode = set_stack_json_path(input_param)
1041
+ # set stack_mode and set "stack_path" in input_param
1042
+ config.stack_mode, input_param = set_stack_json_path(input_param)
786
1043
 
787
1044
  check_configuration_param(config)
788
1045
  create_directory(output_path)