mindstudio-probe 1.0.3__py3-none-any.whl → 1.1.0__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 (278) hide show
  1. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/LICENSE +201 -201
  2. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/METADATA +36 -34
  3. mindstudio_probe-1.1.0.dist-info/RECORD +287 -0
  4. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/WHEEL +1 -1
  5. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/entry_points.txt +1 -0
  6. msprobe/README.md +131 -237
  7. msprobe/__init__.py +16 -1
  8. msprobe/{config/config.json → config.json} +47 -49
  9. msprobe/core/advisor/advisor.py +124 -124
  10. msprobe/core/advisor/advisor_const.py +58 -59
  11. msprobe/core/advisor/advisor_result.py +58 -58
  12. msprobe/core/common/const.py +402 -318
  13. msprobe/core/common/exceptions.py +99 -99
  14. msprobe/core/common/{file_check.py → file_utils.py} +523 -283
  15. msprobe/core/common/inplace_op_checker.py +38 -0
  16. msprobe/core/common/inplace_ops.yaml +251 -0
  17. msprobe/core/common/log.py +86 -69
  18. msprobe/core/common/utils.py +371 -616
  19. msprobe/core/common_config.py +78 -71
  20. msprobe/core/compare/acc_compare.py +472 -298
  21. msprobe/core/compare/check.py +180 -95
  22. msprobe/core/compare/compare_cli.py +69 -49
  23. msprobe/core/compare/highlight.py +259 -222
  24. msprobe/core/compare/multiprocessing_compute.py +174 -149
  25. msprobe/core/compare/npy_compare.py +310 -295
  26. msprobe/core/compare/utils.py +464 -429
  27. msprobe/core/data_dump/data_collector.py +153 -144
  28. msprobe/core/data_dump/data_processor/base.py +337 -293
  29. msprobe/core/data_dump/data_processor/factory.py +76 -59
  30. msprobe/core/data_dump/data_processor/mindspore_processor.py +192 -198
  31. msprobe/core/data_dump/data_processor/pytorch_processor.py +383 -389
  32. msprobe/core/data_dump/json_writer.py +117 -116
  33. msprobe/core/data_dump/scope.py +194 -178
  34. msprobe/core/grad_probe/constant.py +74 -70
  35. msprobe/core/grad_probe/grad_compare.py +170 -175
  36. msprobe/core/grad_probe/utils.py +77 -52
  37. msprobe/docs/01.installation.md +99 -0
  38. msprobe/docs/02.config_introduction.md +137 -0
  39. msprobe/docs/03.config_examples.md +237 -0
  40. msprobe/docs/04.acl_config_examples.md +78 -0
  41. msprobe/docs/05.data_dump_PyTorch.md +326 -0
  42. msprobe/docs/06.data_dump_MindSpore.md +285 -0
  43. msprobe/docs/07.accuracy_checker_PyTorch.md +297 -0
  44. msprobe/docs/08.accuracy_checker_online_PyTorch.md +238 -0
  45. msprobe/docs/09.accuracy_checker_MindSpore.md +68 -0
  46. msprobe/docs/10.accuracy_compare_PyTorch.md +327 -0
  47. msprobe/docs/11.accuracy_compare_MindSpore.md +333 -0
  48. msprobe/docs/12.overflow_check_PyTorch.md +79 -0
  49. msprobe/docs/13.overflow_check_MindSpore.md +31 -0
  50. msprobe/{pytorch/doc/parse_tool.md → docs/14.data_parse_PyTorch.md} +283 -286
  51. msprobe/docs/15.free_benchmarking_PyTorch.md +170 -0
  52. msprobe/docs/16.free_benchmarking_MindSpore.md +140 -0
  53. msprobe/{doc/grad_probe/grad_probe.md → docs/17.grad_probe.md} +205 -207
  54. msprobe/{pytorch/doc//321/205/320/254/320/270/321/207/342/225/221/342/224/220/321/207/342/226/223/342/225/233/321/205/342/225/221/320/266/321/206/320/277/320/244/321/205/320/277/342/225/243.md → docs/18.online_dispatch.md} +89 -90
  55. msprobe/docs/FAQ.md +189 -0
  56. msprobe/docs/S02.report_free_benchmarking_validation_performance_baseline.md +146 -0
  57. msprobe/docs/img/free_benchmark_framework.png +0 -0
  58. msprobe/docs/img/ms_dump.png +0 -0
  59. msprobe/docs/img/ms_layer.png +0 -0
  60. msprobe/docs/img/pt_dump.png +0 -0
  61. msprobe/mindspore/__init__.py +2 -1
  62. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +278 -245
  63. msprobe/mindspore/api_accuracy_checker/api_info.py +76 -69
  64. msprobe/mindspore/api_accuracy_checker/api_runner.py +155 -151
  65. msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +196 -196
  66. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +6 -0
  67. msprobe/mindspore/api_accuracy_checker/compute_element.py +238 -223
  68. msprobe/mindspore/api_accuracy_checker/main.py +8 -15
  69. msprobe/mindspore/api_accuracy_checker/type_mapping.py +113 -113
  70. msprobe/mindspore/api_accuracy_checker/utils.py +79 -62
  71. msprobe/mindspore/cell_processor.py +58 -34
  72. msprobe/mindspore/common/const.py +108 -87
  73. msprobe/mindspore/common/log.py +37 -37
  74. msprobe/mindspore/common/utils.py +97 -57
  75. msprobe/mindspore/compare/distributed_compare.py +62 -75
  76. msprobe/mindspore/compare/layer_mapping.py +146 -0
  77. msprobe/mindspore/compare/modify_mapping.py +107 -0
  78. msprobe/mindspore/compare/ms_compare.py +357 -117
  79. msprobe/mindspore/compare/ms_graph_compare.py +364 -317
  80. msprobe/mindspore/compare/ms_to_pt_api.yaml +399 -399
  81. msprobe/mindspore/debugger/debugger_config.py +69 -74
  82. msprobe/mindspore/debugger/precision_debugger.py +150 -107
  83. msprobe/mindspore/dump/dump_tool_factory.py +50 -35
  84. msprobe/mindspore/dump/hook_cell/api_registry.py +128 -104
  85. msprobe/mindspore/dump/hook_cell/hook_cell.py +55 -53
  86. msprobe/mindspore/dump/hook_cell/primitive_hooks.py +206 -0
  87. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +994 -925
  88. msprobe/mindspore/dump/hook_cell/wrap_api.py +121 -0
  89. msprobe/mindspore/dump/jit_dump.py +96 -56
  90. msprobe/mindspore/dump/kernel_graph_dump.py +75 -60
  91. msprobe/mindspore/dump/kernel_kbyk_dump.py +79 -65
  92. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +131 -116
  93. msprobe/mindspore/free_benchmark/common/config.py +27 -12
  94. msprobe/mindspore/free_benchmark/common/handler_params.py +32 -17
  95. msprobe/mindspore/free_benchmark/common/utils.py +85 -71
  96. msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +842 -842
  97. msprobe/mindspore/free_benchmark/decorator/dec_forward.py +57 -42
  98. msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +122 -107
  99. msprobe/mindspore/free_benchmark/handler/base_handler.py +105 -90
  100. msprobe/mindspore/free_benchmark/handler/check_handler.py +56 -41
  101. msprobe/mindspore/free_benchmark/handler/fix_handler.py +51 -36
  102. msprobe/mindspore/free_benchmark/handler/handler_factory.py +36 -21
  103. msprobe/mindspore/free_benchmark/perturbation/add_noise.py +82 -67
  104. msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +36 -21
  105. msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +78 -63
  106. msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +77 -0
  107. msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +49 -34
  108. msprobe/mindspore/free_benchmark/perturbation/no_change.py +27 -12
  109. msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +44 -27
  110. msprobe/mindspore/free_benchmark/self_check_tool_factory.py +48 -33
  111. msprobe/mindspore/grad_probe/global_context.py +100 -91
  112. msprobe/mindspore/grad_probe/grad_analyzer.py +231 -231
  113. msprobe/mindspore/grad_probe/grad_monitor.py +27 -27
  114. msprobe/mindspore/grad_probe/grad_stat_csv.py +131 -131
  115. msprobe/mindspore/grad_probe/hook.py +94 -92
  116. msprobe/mindspore/grad_probe/utils.py +29 -28
  117. msprobe/mindspore/ms_config.py +128 -126
  118. msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +60 -45
  119. msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +49 -34
  120. msprobe/mindspore/runtime.py +4 -4
  121. msprobe/mindspore/service.py +297 -354
  122. msprobe/mindspore/task_handler_factory.py +24 -24
  123. msprobe/msprobe.py +105 -107
  124. msprobe/pytorch/__init__.py +23 -4
  125. msprobe/pytorch/api_accuracy_checker/common/config.py +70 -55
  126. msprobe/pytorch/api_accuracy_checker/common/utils.py +246 -165
  127. msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +230 -213
  128. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +632 -581
  129. msprobe/pytorch/api_accuracy_checker/compare/api_precision_standard.yaml +132 -132
  130. msprobe/pytorch/api_accuracy_checker/compare/api_precision_threshold.yaml +390 -390
  131. msprobe/pytorch/api_accuracy_checker/compare/compare.py +416 -381
  132. msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +90 -73
  133. msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +265 -244
  134. msprobe/pytorch/api_accuracy_checker/config.yaml +10 -10
  135. msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +370 -332
  136. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +221 -199
  137. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +150 -134
  138. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +518 -581
  139. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +213 -74
  140. msprobe/pytorch/api_accuracy_checker/run_ut/torch_ut_setting.json +7 -4
  141. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +218 -202
  142. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +370 -324
  143. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +227 -204
  144. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/dump_dispatch.py +110 -0
  145. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +244 -218
  146. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/torch_ops_config.yaml +63 -0
  147. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/utils.py +44 -0
  148. msprobe/pytorch/bench_functions/__init__.py +30 -15
  149. msprobe/pytorch/bench_functions/apply_adam_w.py +43 -28
  150. msprobe/pytorch/bench_functions/confusion_transpose.py +34 -19
  151. msprobe/pytorch/bench_functions/fast_gelu.py +70 -55
  152. msprobe/pytorch/bench_functions/layer_norm_eval.py +21 -6
  153. msprobe/pytorch/bench_functions/linear.py +27 -12
  154. msprobe/pytorch/bench_functions/matmul_backward.py +63 -48
  155. msprobe/pytorch/bench_functions/npu_fusion_attention.py +538 -421
  156. msprobe/pytorch/bench_functions/rms_norm.py +30 -15
  157. msprobe/pytorch/bench_functions/rotary_mul.py +71 -52
  158. msprobe/pytorch/bench_functions/scaled_mask_softmax.py +41 -26
  159. msprobe/pytorch/bench_functions/swiglu.py +70 -55
  160. msprobe/pytorch/common/__init__.py +17 -2
  161. msprobe/pytorch/common/compare_script.template +14 -14
  162. msprobe/pytorch/common/log.py +33 -32
  163. msprobe/pytorch/common/parse_json.py +54 -39
  164. msprobe/pytorch/common/utils.py +310 -300
  165. msprobe/pytorch/compare/distributed_compare.py +66 -66
  166. msprobe/pytorch/compare/mapping.yaml +607 -607
  167. msprobe/pytorch/compare/match.py +49 -33
  168. msprobe/pytorch/compare/pt_compare.py +82 -40
  169. msprobe/pytorch/debugger/debugger_config.py +108 -95
  170. msprobe/pytorch/debugger/precision_debugger.py +173 -125
  171. msprobe/pytorch/free_benchmark/__init__.py +23 -8
  172. msprobe/pytorch/free_benchmark/common/constant.py +70 -70
  173. msprobe/pytorch/free_benchmark/common/counter.py +71 -71
  174. msprobe/pytorch/free_benchmark/common/enums.py +65 -37
  175. msprobe/pytorch/free_benchmark/common/params.py +144 -129
  176. msprobe/pytorch/free_benchmark/common/utils.py +118 -102
  177. msprobe/pytorch/free_benchmark/compare/grad_saver.py +200 -179
  178. msprobe/pytorch/free_benchmark/compare/single_benchmark.py +119 -104
  179. msprobe/pytorch/free_benchmark/main.py +120 -105
  180. msprobe/pytorch/free_benchmark/perturbed_layers/base_layer.py +28 -13
  181. msprobe/pytorch/free_benchmark/perturbed_layers/layer_factory.py +56 -41
  182. msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +105 -90
  183. msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +119 -104
  184. msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +87 -63
  185. msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +83 -68
  186. msprobe/pytorch/free_benchmark/perturbed_layers/npu/no_change.py +43 -28
  187. msprobe/pytorch/free_benchmark/perturbed_layers/npu/npu_base_layser.py +60 -45
  188. msprobe/pytorch/free_benchmark/perturbed_layers/run_cpu.py +34 -19
  189. msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +256 -217
  190. msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +54 -39
  191. msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +38 -23
  192. msprobe/pytorch/free_benchmark/result_handlers/handler_factory.py +45 -30
  193. msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +185 -170
  194. msprobe/pytorch/function_factory.py +91 -75
  195. msprobe/pytorch/functional/module_dump.py +84 -0
  196. msprobe/pytorch/grad_probe/grad_monitor.py +91 -90
  197. msprobe/pytorch/grad_probe/grad_stat_csv.py +128 -128
  198. msprobe/pytorch/hook_module/__init__.py +16 -1
  199. msprobe/pytorch/hook_module/api_registry.py +166 -161
  200. msprobe/pytorch/hook_module/hook_module.py +118 -120
  201. msprobe/pytorch/hook_module/support_wrap_ops.yaml +1879 -1877
  202. msprobe/pytorch/hook_module/utils.py +28 -29
  203. msprobe/pytorch/hook_module/wrap_aten.py +111 -110
  204. msprobe/pytorch/hook_module/wrap_distributed.py +77 -78
  205. msprobe/pytorch/hook_module/wrap_functional.py +104 -105
  206. msprobe/pytorch/hook_module/wrap_npu_custom.py +85 -84
  207. msprobe/pytorch/hook_module/wrap_tensor.py +69 -71
  208. msprobe/pytorch/hook_module/wrap_torch.py +84 -86
  209. msprobe/pytorch/hook_module/wrap_vf.py +60 -62
  210. msprobe/pytorch/module_processer.py +153 -138
  211. msprobe/pytorch/online_dispatch/__init__.py +20 -20
  212. msprobe/pytorch/online_dispatch/compare.py +235 -236
  213. msprobe/pytorch/online_dispatch/dispatch.py +271 -271
  214. msprobe/pytorch/online_dispatch/dump_compare.py +155 -156
  215. msprobe/pytorch/online_dispatch/single_compare.py +391 -391
  216. msprobe/pytorch/online_dispatch/torch_ops_config.yaml +57 -49
  217. msprobe/pytorch/online_dispatch/utils.py +127 -146
  218. msprobe/pytorch/parse.py +19 -4
  219. msprobe/pytorch/parse_tool/cli.py +31 -32
  220. msprobe/pytorch/parse_tool/lib/compare.py +259 -271
  221. msprobe/pytorch/parse_tool/lib/config.py +52 -52
  222. msprobe/pytorch/parse_tool/lib/file_desc.py +31 -31
  223. msprobe/pytorch/parse_tool/lib/interactive_cli.py +102 -102
  224. msprobe/pytorch/parse_tool/lib/parse_exception.py +54 -54
  225. msprobe/pytorch/parse_tool/lib/parse_tool.py +161 -158
  226. msprobe/pytorch/parse_tool/lib/utils.py +320 -321
  227. msprobe/pytorch/parse_tool/lib/visualization.py +85 -91
  228. msprobe/pytorch/pt_config.py +317 -187
  229. msprobe/pytorch/service.py +311 -252
  230. mindstudio_probe-1.0.3.dist-info/RECORD +0 -272
  231. msprobe/config/README.md +0 -539
  232. msprobe/mindspore/doc/compare.md +0 -58
  233. msprobe/mindspore/doc/dump.md +0 -217
  234. msprobe/mindspore/dump/hook_cell/wrap_functional.py +0 -91
  235. msprobe/mindspore/dump/hook_cell/wrap_tensor.py +0 -63
  236. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/ssl_config.py +0 -10
  237. msprobe/pytorch/doc/FAQ.md +0 -193
  238. msprobe/pytorch/doc/api_accuracy_checker.md +0 -313
  239. msprobe/pytorch/doc/api_accuracy_checker_online.md +0 -187
  240. msprobe/pytorch/doc/dump.md +0 -260
  241. msprobe/pytorch/doc/msprobe/321/207/342/226/223/342/225/233/321/205/342/225/221/320/266/321/205/342/225/226/320/265/321/205/320/225/342/225/226/321/206/320/245/342/226/221/321/206/320/235/320/276dump/321/206/320/260/320/227/321/205/320/227/320/226/321/206/320/220/320/267/321/210/320/223/342/225/234/321/205/320/257/342/225/221/321/207/342/225/221/342/224/220/321/206/320/232/320/265/321/205/320/241/320/232.md +0 -182
  242. msprobe/pytorch/doc/ptdbg_ascend_compare.md +0 -240
  243. msprobe/pytorch/doc/ptdbg_ascend_overview.md +0 -68
  244. msprobe/pytorch/doc/ptdbg_ascend_quickstart.md +0 -381
  245. msprobe/pytorch/doc/run_overflow_check.md +0 -25
  246. msprobe/pytorch/doc//321/206/320/247/320/260/321/206/320/260/320/227/321/206/320/255/320/226/321/205/342/225/226/320/265/321/205/320/225/342/225/226/321/205/320/254/342/225/221/321/206/320/251/320/277/321/211/320/272/320/234/321/210/320/277/320/221/321/205/320/242/320/234/321/206/320/220/320/267/321/210/320/223/342/225/234/321/205/320/257/342/225/221/321/207/342/225/221/342/224/220/321/206/320/232/320/265/321/205/320/241/320/232.md +0 -151
  247. msprobe/pytorch/functional/data_processor.py +0 -0
  248. msprobe/pytorch/functional/dump_module.py +0 -39
  249. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.1.0.dist-info}/top_level.txt +0 -0
  250. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_1.png +0 -0
  251. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_2.png +0 -0
  252. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_3.png +0 -0
  253. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_4.png +0 -0
  254. /msprobe/{pytorch/doc → docs}/img/GPT-3_1.png +0 -0
  255. /msprobe/{pytorch/doc → docs}/img/GPT-3_2.png +0 -0
  256. /msprobe/{pytorch/doc → docs}/img/GPT-3_3.png +0 -0
  257. /msprobe/{pytorch/doc → docs}/img/GPT-3_4.png +0 -0
  258. /msprobe/{pytorch/doc → docs}/img/GPT-3_5.png +0 -0
  259. /msprobe/{pytorch/doc → docs}/img/GPT-3_6.png +0 -0
  260. /msprobe/{pytorch/doc → docs}/img/GPT-3_7.png +0 -0
  261. /msprobe/{pytorch/doc → docs}/img/GPT-3_8.png +0 -0
  262. /msprobe/{pytorch/doc → docs}/img/YOLOV5S_1.png +0 -0
  263. /msprobe/{pytorch/doc → docs}/img/YOLOV5S_2.png +0 -0
  264. /msprobe/{pytorch/doc → docs}/img/accuracy_checking_details.png +0 -0
  265. /msprobe/{pytorch/doc → docs}/img/accuracy_checking_result.png +0 -0
  266. /msprobe/{pytorch/doc → docs}/img/api_precision_compare_details.png +0 -0
  267. /msprobe/{pytorch/doc → docs}/img/api_precision_compare_result.png +0 -0
  268. /msprobe/{pytorch/doc → docs}/img/auto_analyze_log.png +0 -0
  269. /msprobe/{pytorch/doc → docs}/img/compare_result_pkl.png +0 -0
  270. /msprobe/{pytorch/doc → docs}/img/compare_result_pkl_md5.png.png +0 -0
  271. /msprobe/{pytorch/doc → docs}/img/cpu_info.png +0 -0
  272. /msprobe/{config → docs}/img/free_benchmark.png +0 -0
  273. /msprobe/{doc/grad_probe/img/image-1.png → docs/img/grad_probe_image-1.png} +0 -0
  274. /msprobe/{doc/grad_probe/img/image-2.png → docs/img/grad_probe_image-2.png} +0 -0
  275. /msprobe/{doc/grad_probe/img/image-3.png → docs/img/grad_probe_image-3.png} +0 -0
  276. /msprobe/{doc/grad_probe/img/image-4.png → docs/img/grad_probe_image-4.png} +0 -0
  277. /msprobe/{doc/grad_probe/img/image.png → docs/img/grad_probe_image.png} +0 -0
  278. /msprobe/{pytorch/doc → docs}/img/module_compare.png +0 -0
@@ -1,293 +1,337 @@
1
- import os
2
- import inspect
3
- from dataclasses import dataclass
4
- from typing import Tuple, Dict, Optional, Any
5
- import numpy as np
6
- from msprobe.core.common.log import logger
7
- from msprobe.core.common.utils import convert_tuple
8
- from msprobe.core.common.const import Const
9
-
10
-
11
- @dataclass
12
- class ModuleForwardInputsOutputs:
13
- args: Optional[Tuple]
14
- kwargs: Optional[Dict]
15
- output: Any
16
-
17
- @property
18
- def args_tuple(self):
19
- return convert_tuple(self.args)
20
-
21
- @property
22
- def output_tuple(self):
23
- return convert_tuple(self.output)
24
-
25
- def concat_args_and_kwargs(self):
26
- args = self.args + tuple(self.kwargs.values())
27
- return args
28
-
29
-
30
- @dataclass
31
- class ModuleBackwardInputsOutputs:
32
- grad_output: Optional[Tuple]
33
- grad_input: Optional[Tuple]
34
-
35
- @property
36
- def grad_input_tuple(self):
37
- return convert_tuple(self.grad_input)
38
-
39
- @property
40
- def grad_output_tuple(self):
41
- return convert_tuple(self.grad_output)
42
-
43
-
44
- @dataclass
45
- class ModuleBackwardInputs:
46
- grad_input: Optional[Tuple]
47
-
48
- @property
49
- def grad_input_tuple(self):
50
- return convert_tuple(self.grad_input)
51
-
52
-
53
- @dataclass
54
- class ModuleBackwardOutputs:
55
- grad_output: Optional[Tuple]
56
-
57
- @property
58
- def grad_output_tuple(self):
59
- return convert_tuple(self.grad_output)
60
-
61
-
62
- class TensorStatInfo:
63
- def __init__(self, max_val=None, min_val=None, mean_val=None, norm_val=None):
64
- self.max = max_val
65
- self.min = min_val
66
- self.mean = mean_val
67
- self.norm = norm_val
68
-
69
-
70
- class BaseDataProcessor:
71
- _recursive_key_stack = []
72
- special_type = (np.integer, np.floating, np.bool_, np.complexfloating, np.str_, np.byte, np.unicode_,
73
- bool, int, float, str, slice)
74
-
75
- def __init__(self, config, data_writer):
76
- self.data_writer = data_writer
77
- self.config = config
78
- self.api_info_struct = {}
79
- self.stack_info_struct = {}
80
- self.current_api_or_module_name = None
81
- self.api_data_category = None
82
- self.has_overflow = False
83
- self.current_iter = 0
84
- self._return_forward_new_output = False
85
- self._forward_new_output = None
86
-
87
- @property
88
- def data_path(self):
89
- return self.data_writer.dump_tensor_data_dir
90
-
91
- @property
92
- def is_terminated(self):
93
- return False
94
-
95
- @staticmethod
96
- def analyze_api_call_stack(name):
97
- stack_str = []
98
- for (_, path, line, func, code, _) in inspect.stack()[5:]:
99
- if not code:
100
- continue
101
- stack_line = " ".join([
102
- "File", ", ".join([
103
- path,
104
- " ".join(["line", str(line)]),
105
- " ".join(["in", func]),
106
- " ".join(["\n", code[0].strip()])
107
- ])
108
- ])
109
- stack_str.append(stack_line)
110
- stack_info_struct = {name: stack_str}
111
- return stack_info_struct
112
-
113
- @staticmethod
114
- def transfer_type(data):
115
- dtype = str(type(data))
116
- if 'int' in dtype:
117
- return int(data)
118
- elif 'float' in dtype:
119
- return float(data)
120
- else:
121
- return data
122
-
123
- @staticmethod
124
- def _convert_numpy_to_builtin(arg):
125
- type_mapping = {
126
- np.integer: int,
127
- np.floating: float,
128
- np.bool_: bool,
129
- np.complexfloating: complex,
130
- np.str_: str,
131
- np.byte: bytes,
132
- np.unicode_: str
133
- }
134
- for numpy_type, builtin_type in type_mapping.items():
135
- if isinstance(arg, numpy_type):
136
- return builtin_type(arg), type(arg).__name__
137
- return arg, ''
138
-
139
- @staticmethod
140
- def _analyze_numpy(value, numpy_type):
141
- return {"type": numpy_type, "value": value}
142
-
143
- @classmethod
144
- def get_special_types(cls):
145
- return cls.special_type
146
-
147
- @classmethod
148
- def recursive_apply_transform(cls, args, transform):
149
- if isinstance(args, cls.get_special_types()):
150
- arg_transform = transform(args, cls._recursive_key_stack)
151
- return arg_transform
152
- elif isinstance(args, (list, tuple)):
153
- result_list = []
154
- for i, arg in enumerate(args):
155
- cls._recursive_key_stack.append(str(i))
156
- result_list.append(cls.recursive_apply_transform(arg, transform))
157
- cls._recursive_key_stack.pop()
158
- return type(args)(result_list)
159
- elif isinstance(args, dict):
160
- resutl_dict = {}
161
- for k, arg in args.items():
162
- cls._recursive_key_stack.append(str(k))
163
- resutl_dict[k] = cls.recursive_apply_transform(arg, transform)
164
- cls._recursive_key_stack.pop()
165
- return resutl_dict
166
- elif args is not None:
167
- logger.warning(f"Data type {type(args)} is not supported.")
168
- return None
169
- else:
170
- return None
171
-
172
- def if_return_forward_new_output(self):
173
- return self._return_forward_new_output
174
-
175
- def get_forward_new_output(self):
176
- self._return_forward_new_output = False
177
- return self._forward_new_output
178
-
179
- def update_iter(self, current_iter):
180
- self.current_iter = current_iter
181
-
182
- def visit_and_clear_overflow_status(self, api_or_module_name):
183
- if self.current_api_or_module_name != api_or_module_name:
184
- self.current_api_or_module_name = api_or_module_name
185
- self.has_overflow = False
186
-
187
- def is_dump_for_data_mode(self, forward_backward, input_output):
188
- """
189
- Compare the parameters with data_mode to determine whether to dump.
190
-
191
- Args:
192
- forward_backward(str): The forward or backward mode to check.
193
- input_output(str): The input or output mode to check.
194
-
195
- Return:
196
- bool: True if the parameters are in data_mode or data_mode is all, False otherwise.
197
- """
198
- return (Const.ALL in self.config.data_mode or
199
- forward_backward in self.config.data_mode or
200
- input_output in self.config.data_mode)
201
-
202
- def analyze_pre_forward(self, name, module, module_input_output: ModuleForwardInputsOutputs):
203
- pass
204
-
205
- def analyze_element(self, element):
206
- return self.recursive_apply_transform(element, self.analyze_single_element)
207
-
208
- def analyze_forward(self, name, module, module_input_output: ModuleForwardInputsOutputs):
209
- api_info_struct = {}
210
- # check whether data_mode contains forward or input
211
- if self.is_dump_for_data_mode(Const.FORWARD, Const.INPUT):
212
- api_info_struct[name] = {}
213
- self.api_data_category = Const.INPUT
214
- args_info_list = self.analyze_element(module_input_output.args_tuple)
215
- api_info_struct[name][Const.INPUT_ARGS] = args_info_list
216
- self.api_data_category = Const.KWARGS
217
- kwargs_info_list = self.analyze_element(module_input_output.kwargs)
218
- api_info_struct[name][Const.INPUT_KWARGS] = kwargs_info_list
219
-
220
- # check whether data_mode contains forward or output
221
- if self.is_dump_for_data_mode(Const.FORWARD, Const.OUTPUT):
222
- api_info_struct[name] = api_info_struct.get(name, {})
223
- self.api_data_category = Const.OUTPUT
224
- output_info_list = self.analyze_element(module_input_output.output_tuple)
225
- api_info_struct[name][Const.OUTPUT] = output_info_list
226
- return api_info_struct
227
-
228
- def analyze_pre_forward_inplace(self, name, module_input_output: ModuleForwardInputsOutputs):
229
- api_info_struct = {}
230
- if self.is_dump_for_data_mode(Const.FORWARD, Const.INPUT):
231
- api_info_struct[name] = {}
232
- self.api_data_category = Const.INPUT
233
- args_info_list = self.analyze_element(module_input_output.args_tuple)
234
- api_info_struct[name][Const.INPUT_ARGS] = args_info_list
235
- self.api_data_category = Const.KWARGS
236
- kwargs_info_list = self.analyze_element(module_input_output.kwargs)
237
- api_info_struct[name][Const.INPUT_KWARGS] = kwargs_info_list
238
- return api_info_struct
239
-
240
- def analyze_forward_inplace(self, name, module_input_output: ModuleForwardInputsOutputs):
241
- concat_args = module_input_output.concat_args_and_kwargs()
242
- api_info_struct = {}
243
- if self.is_dump_for_data_mode(Const.FORWARD, Const.OUTPUT):
244
- api_info_struct[name] = {}
245
- self.api_data_category = Const.OUTPUT
246
- output_info_list = self.analyze_element(concat_args)
247
- api_info_struct[name][Const.OUTPUT] = output_info_list
248
- return api_info_struct
249
-
250
- def analyze_backward(self, name, module, module_input_output: ModuleBackwardInputsOutputs):
251
- api_info_struct = {}
252
- if self.is_dump_for_data_mode(Const.BACKWARD, Const.INPUT):
253
- api_info_struct[name] = {}
254
- self.api_data_category = Const.INPUT
255
- input_info_list = self.analyze_element(module_input_output.grad_input_tuple)
256
- api_info_struct[name][Const.INPUT] = input_info_list
257
-
258
- if self.is_dump_for_data_mode(Const.BACKWARD, Const.OUTPUT):
259
- api_info_struct[name] = api_info_struct.get(name, {})
260
- self.api_data_category = Const.OUTPUT
261
- output_info_list = self.analyze_element(module_input_output.grad_output_tuple)
262
- api_info_struct[name][Const.OUTPUT] = output_info_list
263
-
264
- return api_info_struct
265
-
266
- def analyze_backward_input(self, name, module,
267
- module_input_output: ModuleBackwardInputs):
268
- api_info_struct = {}
269
- if self.is_dump_for_data_mode(Const.BACKWARD, Const.INPUT):
270
- api_info_struct[name] = {}
271
- self.api_data_category = Const.INPUT
272
-
273
- input_info_list = self.analyze_element(module_input_output.grad_input_tuple)
274
- api_info_struct[name][Const.INPUT] = input_info_list
275
- return api_info_struct
276
-
277
- def analyze_backward_output(self, name, module,
278
- module_input_output: ModuleBackwardOutputs):
279
- api_info_struct = {}
280
- if self.is_dump_for_data_mode(Const.BACKWARD, Const.OUTPUT):
281
- api_info_struct[name] = {}
282
- self.api_data_category = Const.OUTPUT
283
-
284
- output_info_list = self.analyze_element(module_input_output.grad_output_tuple)
285
- api_info_struct[name][Const.OUTPUT] = output_info_list
286
- return api_info_struct
287
-
288
- def get_save_file_path(self, suffix):
289
- file_format = Const.PT_SUFFIX if self.config.framework == Const.PT_FRAMEWORK else Const.NUMPY_SUFFIX
290
- dump_data_name = (self.current_api_or_module_name + Const.SEP + self.api_data_category + Const.SEP +
291
- suffix + file_format)
292
- file_path = os.path.join(self.data_writer.dump_tensor_data_dir, dump_data_name)
293
- return dump_data_name, file_path
1
+ # Copyright (c) 2024-2024, Huawei Technologies Co., Ltd.
2
+ # All rights reserved.
3
+ #
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
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
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.
15
+
16
+ import inspect
17
+ import os
18
+ from dataclasses import dataclass
19
+ from typing import Tuple, Dict, Optional, Any
20
+
21
+ import numpy as np
22
+ from msprobe.core.common.const import Const
23
+ from msprobe.core.common.log import logger
24
+ from msprobe.core.common.utils import convert_tuple, CompareException
25
+
26
+
27
+ @dataclass
28
+ class ModuleForwardInputsOutputs:
29
+ args: Optional[Tuple]
30
+ kwargs: Optional[Dict]
31
+ output: Any
32
+
33
+ @property
34
+ def args_tuple(self):
35
+ return convert_tuple(self.args)
36
+
37
+ @property
38
+ def output_tuple(self):
39
+ return convert_tuple(self.output)
40
+
41
+ def concat_args_and_kwargs(self):
42
+ args = self.args + tuple(self.kwargs.values())
43
+ return args
44
+
45
+
46
+ @dataclass
47
+ class ModuleBackwardInputsOutputs:
48
+ grad_output: Optional[Tuple]
49
+ grad_input: Optional[Tuple]
50
+
51
+ @property
52
+ def grad_input_tuple(self):
53
+ return convert_tuple(self.grad_input)
54
+
55
+ @property
56
+ def grad_output_tuple(self):
57
+ return convert_tuple(self.grad_output)
58
+
59
+
60
+ @dataclass
61
+ class ModuleBackwardInputs:
62
+ grad_input: Optional[Tuple]
63
+
64
+ @property
65
+ def grad_input_tuple(self):
66
+ return convert_tuple(self.grad_input)
67
+
68
+
69
+ @dataclass
70
+ class ModuleBackwardOutputs:
71
+ grad_output: Optional[Tuple]
72
+
73
+ @property
74
+ def grad_output_tuple(self):
75
+ return convert_tuple(self.grad_output)
76
+
77
+
78
+ class TensorStatInfo:
79
+ def __init__(self, max_val=None, min_val=None, mean_val=None, norm_val=None):
80
+ self.max = max_val
81
+ self.min = min_val
82
+ self.mean = mean_val
83
+ self.norm = norm_val
84
+
85
+
86
+ class BaseDataProcessor:
87
+ _recursive_key_stack = []
88
+ special_type = (
89
+ np.integer, np.floating, np.bool_, np.complexfloating, np.str_, np.byte, np.unicode_,
90
+ bool, int, float, str, slice,
91
+ type(Ellipsis)
92
+ )
93
+
94
+ def __init__(self, config, data_writer):
95
+ self.data_writer = data_writer
96
+ self.config = config
97
+ self.api_info_struct = {}
98
+ self.stack_info_struct = {}
99
+ self.current_api_or_module_name = None
100
+ self.api_data_category = None
101
+ self.current_iter = 0
102
+ self._return_forward_new_output = False
103
+ self._forward_new_output = None
104
+
105
+ @property
106
+ def data_path(self):
107
+ return self.data_writer.dump_tensor_data_dir
108
+
109
+ @property
110
+ def is_terminated(self):
111
+ return False
112
+
113
+ @staticmethod
114
+ def analyze_api_call_stack(name):
115
+ try:
116
+ api_stack = inspect.stack()[5:]
117
+ except Exception as e:
118
+ logger.warning(f"The call stack of <{name}> failed to retrieve, {e}.")
119
+ api_stack = None
120
+ stack_str = []
121
+ if api_stack:
122
+ for (_, path, line, func, code, _) in api_stack:
123
+ if not code:
124
+ continue
125
+ stack_line = f"File {path}, line {str(line)}, in {func}, \n {code[0].strip()}"
126
+ stack_str.append(stack_line)
127
+ else:
128
+ stack_str.append(Const.WITHOUT_CALL_STACK)
129
+ stack_info_struct = {name: stack_str}
130
+ return stack_info_struct
131
+
132
+ @staticmethod
133
+ def transfer_type(data):
134
+ dtype = str(type(data))
135
+ if 'int' in dtype:
136
+ return int(data)
137
+ elif 'float' in dtype:
138
+ return float(data)
139
+ else:
140
+ return data
141
+
142
+ @staticmethod
143
+ def _convert_numpy_to_builtin(arg):
144
+ type_mapping = {
145
+ np.integer: int,
146
+ np.floating: float,
147
+ np.bool_: bool,
148
+ np.complexfloating: complex,
149
+ np.str_: str,
150
+ np.byte: bytes,
151
+ np.unicode_: str
152
+ }
153
+ for numpy_type, builtin_type in type_mapping.items():
154
+ if isinstance(arg, numpy_type):
155
+ return builtin_type(arg), type(arg).__name__
156
+ return arg, ''
157
+
158
+ @staticmethod
159
+ def _analyze_builtin(arg):
160
+ single_arg = {}
161
+ if isinstance(arg, slice):
162
+ # The slice parameter may be of the tensor, numpy or other types.
163
+ # It needs to be converted to the Python value type before JSON serialization
164
+ single_arg.update({"type": "slice"})
165
+ values = []
166
+ for value in [arg.start, arg.stop, arg.step]:
167
+ if value is not None:
168
+ try:
169
+ value = int(value)
170
+ except ValueError:
171
+ logger.warning(f"The data type {type(value)} cannot be converted to int type.")
172
+ value = None
173
+ values.append(value)
174
+ single_arg.update({"value": values})
175
+ else:
176
+ single_arg.update({"type": type(arg).__name__})
177
+ # When arg is Ellipsis(...) type, it needs to be converted to str("...") type
178
+ single_arg.update({"value": arg if arg is not Ellipsis else "..."})
179
+ return single_arg
180
+
181
+ @staticmethod
182
+ def _analyze_numpy(value, numpy_type):
183
+ return {"type": numpy_type, "value": value}
184
+
185
+ @classmethod
186
+ def get_special_types(cls):
187
+ return cls.special_type
188
+
189
+ @classmethod
190
+ def recursive_apply_transform(cls, args, transform, depth=0):
191
+ if depth > Const.MAX_DEPTH:
192
+ logger.error(f"The maximum depth of recursive transform, {Const.MAX_DEPTH} is reached.")
193
+ raise CompareException(CompareException.RECURSION_LIMIT_ERROR)
194
+ if isinstance(args, cls.get_special_types()):
195
+ arg_transform = transform(args, cls._recursive_key_stack)
196
+ return arg_transform
197
+ elif isinstance(args, (list, tuple)):
198
+ result_list = []
199
+ for i, arg in enumerate(args):
200
+ cls._recursive_key_stack.append(str(i))
201
+ result_list.append(cls.recursive_apply_transform(arg, transform, depth=depth + 1))
202
+ cls._recursive_key_stack.pop()
203
+ return type(args)(result_list)
204
+ elif isinstance(args, dict):
205
+ result_dict = {}
206
+ for k, arg in args.items():
207
+ cls._recursive_key_stack.append(str(k))
208
+ result_dict[k] = cls.recursive_apply_transform(arg, transform, depth=depth + 1)
209
+ cls._recursive_key_stack.pop()
210
+ return result_dict
211
+ elif args is not None:
212
+ logger.warning(f"Data type {type(args)} is not supported.")
213
+ return None
214
+ else:
215
+ return None
216
+
217
+ def if_return_forward_new_output(self):
218
+ return self._return_forward_new_output
219
+
220
+ def get_forward_new_output(self):
221
+ self._return_forward_new_output = False
222
+ return self._forward_new_output
223
+
224
+ def update_iter(self, current_iter):
225
+ self.current_iter = current_iter
226
+
227
+ def update_api_or_module_name(self, api_or_module_name):
228
+ if self.current_api_or_module_name != api_or_module_name:
229
+ self.current_api_or_module_name = api_or_module_name
230
+
231
+ def is_dump_for_data_mode(self, forward_backward, input_output):
232
+ """
233
+ Compare the parameters with data_mode to determine whether to dump.
234
+
235
+ Args:
236
+ forward_backward(str): The forward or backward mode to check.
237
+ input_output(str): The input or output mode to check.
238
+
239
+ Return:
240
+ bool: True if the parameters are in data_mode or data_mode is all, False otherwise.
241
+ """
242
+ return (Const.ALL in self.config.data_mode or
243
+ forward_backward in self.config.data_mode or
244
+ input_output in self.config.data_mode)
245
+
246
+ def analyze_pre_forward(self, name, module, module_input_output: ModuleForwardInputsOutputs):
247
+ pass
248
+
249
+ def analyze_element(self, element):
250
+ return self.recursive_apply_transform(element, self.analyze_single_element)
251
+
252
+ def analyze_forward(self, name, module, module_input_output: ModuleForwardInputsOutputs):
253
+ api_info_struct = {}
254
+ # check whether data_mode contains forward or input
255
+ if self.is_dump_for_data_mode(Const.FORWARD, Const.INPUT):
256
+ api_info_struct[name] = {}
257
+ self.api_data_category = Const.INPUT
258
+ args_info_list = self.analyze_element(module_input_output.args_tuple)
259
+ api_info_struct[name][Const.INPUT_ARGS] = args_info_list
260
+ self.api_data_category = Const.KWARGS
261
+ kwargs_info_list = self.analyze_element(module_input_output.kwargs)
262
+ api_info_struct[name][Const.INPUT_KWARGS] = kwargs_info_list
263
+
264
+ # check whether data_mode contains forward or output
265
+ if self.is_dump_for_data_mode(Const.FORWARD, Const.OUTPUT):
266
+ api_info_struct[name] = api_info_struct.get(name, {})
267
+ self.api_data_category = Const.OUTPUT
268
+ output_info_list = self.analyze_element(module_input_output.output_tuple)
269
+ api_info_struct[name][Const.OUTPUT] = output_info_list
270
+ return api_info_struct
271
+
272
+ def analyze_pre_forward_inplace(self, name, module_input_output: ModuleForwardInputsOutputs):
273
+ api_info_struct = {}
274
+ if self.is_dump_for_data_mode(Const.FORWARD, Const.INPUT):
275
+ api_info_struct[name] = {}
276
+ self.api_data_category = Const.INPUT
277
+ args_info_list = self.analyze_element(module_input_output.args_tuple)
278
+ api_info_struct[name][Const.INPUT_ARGS] = args_info_list
279
+ self.api_data_category = Const.KWARGS
280
+ kwargs_info_list = self.analyze_element(module_input_output.kwargs)
281
+ api_info_struct[name][Const.INPUT_KWARGS] = kwargs_info_list
282
+ return api_info_struct
283
+
284
+ def analyze_forward_inplace(self, name, module_input_output: ModuleForwardInputsOutputs):
285
+ concat_args = module_input_output.concat_args_and_kwargs()
286
+ api_info_struct = {}
287
+ if self.is_dump_for_data_mode(Const.FORWARD, Const.OUTPUT):
288
+ api_info_struct[name] = {}
289
+ self.api_data_category = Const.OUTPUT
290
+ output_info_list = self.analyze_element(concat_args)
291
+ api_info_struct[name][Const.OUTPUT] = output_info_list
292
+ return api_info_struct
293
+
294
+ def analyze_backward(self, name, module, module_input_output: ModuleBackwardInputsOutputs):
295
+ api_info_struct = {}
296
+ if self.is_dump_for_data_mode(Const.BACKWARD, Const.INPUT):
297
+ api_info_struct[name] = {}
298
+ self.api_data_category = Const.INPUT
299
+ input_info_list = self.analyze_element(module_input_output.grad_input_tuple)
300
+ api_info_struct[name][Const.INPUT] = input_info_list
301
+
302
+ if self.is_dump_for_data_mode(Const.BACKWARD, Const.OUTPUT):
303
+ api_info_struct[name] = api_info_struct.get(name, {})
304
+ self.api_data_category = Const.OUTPUT
305
+ output_info_list = self.analyze_element(module_input_output.grad_output_tuple)
306
+ api_info_struct[name][Const.OUTPUT] = output_info_list
307
+
308
+ return api_info_struct
309
+
310
+ def analyze_backward_input(self, name, module,
311
+ module_input_output: ModuleBackwardInputs):
312
+ api_info_struct = {}
313
+ if self.is_dump_for_data_mode(Const.BACKWARD, Const.INPUT):
314
+ api_info_struct[name] = {}
315
+ self.api_data_category = Const.INPUT
316
+
317
+ input_info_list = self.analyze_element(module_input_output.grad_input_tuple)
318
+ api_info_struct[name][Const.INPUT] = input_info_list
319
+ return api_info_struct
320
+
321
+ def analyze_backward_output(self, name, module,
322
+ module_input_output: ModuleBackwardOutputs):
323
+ api_info_struct = {}
324
+ if self.is_dump_for_data_mode(Const.BACKWARD, Const.OUTPUT):
325
+ api_info_struct[name] = {}
326
+ self.api_data_category = Const.OUTPUT
327
+
328
+ output_info_list = self.analyze_element(module_input_output.grad_output_tuple)
329
+ api_info_struct[name][Const.OUTPUT] = output_info_list
330
+ return api_info_struct
331
+
332
+ def get_save_file_path(self, suffix):
333
+ file_format = Const.PT_SUFFIX if self.config.framework == Const.PT_FRAMEWORK else Const.NUMPY_SUFFIX
334
+ dump_data_name = (self.current_api_or_module_name + Const.SEP + self.api_data_category + Const.SEP +
335
+ suffix + file_format)
336
+ file_path = os.path.join(self.data_writer.dump_tensor_data_dir, dump_data_name)
337
+ return dump_data_name, file_path