mindstudio-probe 1.0.3__py3-none-any.whl → 1.0.4__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 (262) hide show
  1. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/LICENSE +201 -201
  2. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/METADATA +36 -34
  3. mindstudio_probe-1.0.4.dist-info/RECORD +276 -0
  4. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/WHEEL +1 -1
  5. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/entry_points.txt +1 -0
  6. msprobe/README.md +101 -237
  7. msprobe/{config/config.json → config.json} +49 -49
  8. msprobe/core/advisor/advisor.py +124 -124
  9. msprobe/core/advisor/advisor_const.py +59 -59
  10. msprobe/core/advisor/advisor_result.py +58 -58
  11. msprobe/core/common/const.py +341 -318
  12. msprobe/core/common/exceptions.py +99 -99
  13. msprobe/core/common/{file_check.py → file_utils.py} +478 -283
  14. msprobe/core/common/log.py +76 -69
  15. msprobe/core/common/utils.py +385 -616
  16. msprobe/core/common_config.py +85 -71
  17. msprobe/core/compare/acc_compare.py +299 -298
  18. msprobe/core/compare/check.py +95 -95
  19. msprobe/core/compare/compare_cli.py +49 -49
  20. msprobe/core/compare/highlight.py +223 -222
  21. msprobe/core/compare/multiprocessing_compute.py +149 -149
  22. msprobe/core/compare/npy_compare.py +295 -295
  23. msprobe/core/compare/utils.py +430 -429
  24. msprobe/core/data_dump/data_collector.py +154 -144
  25. msprobe/core/data_dump/data_processor/base.py +314 -293
  26. msprobe/core/data_dump/data_processor/factory.py +59 -59
  27. msprobe/core/data_dump/data_processor/mindspore_processor.py +186 -198
  28. msprobe/core/data_dump/data_processor/pytorch_processor.py +366 -389
  29. msprobe/core/data_dump/json_writer.py +96 -116
  30. msprobe/core/data_dump/scope.py +178 -178
  31. msprobe/core/grad_probe/constant.py +70 -70
  32. msprobe/core/grad_probe/grad_compare.py +171 -175
  33. msprobe/core/grad_probe/utils.py +64 -52
  34. msprobe/docs/01.installation.md +89 -0
  35. msprobe/docs/02.config_introduction.md +165 -0
  36. msprobe/docs/03.config_examples.md +247 -0
  37. msprobe/docs/04.acl_config_examples.md +76 -0
  38. msprobe/docs/05.data_dump_PyTorch.md +198 -0
  39. msprobe/docs/06.data_dump_MindSpore.md +243 -0
  40. msprobe/docs/07.accuracy_checker_PyTorch.md +274 -0
  41. msprobe/docs/08.accuracy_checker_online_PyTorch.md +198 -0
  42. msprobe/docs/09.accuracy_checker_MindSpore.md +68 -0
  43. msprobe/docs/10.accuracy_compare_PyTorch.md +245 -0
  44. msprobe/docs/11.accuracy_compare_MindSpore.md +202 -0
  45. msprobe/docs/12.overflow_check_PyTorch.md +79 -0
  46. msprobe/docs/13.overflow_check_MindSpore.md +31 -0
  47. msprobe/{pytorch/doc/parse_tool.md → docs/14.data_parse_PyTorch.md} +283 -286
  48. msprobe/docs/15.free_benchmarking_PyTorch.md +164 -0
  49. msprobe/{doc/grad_probe/grad_probe.md → docs/17.grad_probe.md} +207 -207
  50. msprobe/docs/FAQ_PyTorch.md +177 -0
  51. msprobe/docs/S02.report_free_benchmarking_validation_performance_baseline.md +146 -0
  52. msprobe/docs/img/free_benchmark_framework.png +0 -0
  53. msprobe/mindspore/__init__.py +1 -1
  54. msprobe/mindspore/api_accuracy_checker/api_accuracy_checker.py +254 -245
  55. msprobe/mindspore/api_accuracy_checker/api_info.py +69 -69
  56. msprobe/mindspore/api_accuracy_checker/api_runner.py +155 -151
  57. msprobe/mindspore/api_accuracy_checker/base_compare_algorithm.py +196 -196
  58. msprobe/mindspore/api_accuracy_checker/cmd_parser.py +6 -0
  59. msprobe/mindspore/api_accuracy_checker/compute_element.py +238 -223
  60. msprobe/mindspore/api_accuracy_checker/main.py +8 -15
  61. msprobe/mindspore/api_accuracy_checker/type_mapping.py +113 -113
  62. msprobe/mindspore/api_accuracy_checker/utils.py +79 -62
  63. msprobe/mindspore/cell_processor.py +34 -34
  64. msprobe/mindspore/common/const.py +106 -87
  65. msprobe/mindspore/common/log.py +37 -37
  66. msprobe/mindspore/common/utils.py +81 -57
  67. msprobe/mindspore/compare/distributed_compare.py +75 -75
  68. msprobe/mindspore/compare/ms_compare.py +219 -117
  69. msprobe/mindspore/compare/ms_graph_compare.py +348 -317
  70. msprobe/mindspore/compare/ms_to_pt_api.yaml +399 -399
  71. msprobe/mindspore/debugger/debugger_config.py +66 -74
  72. msprobe/mindspore/debugger/precision_debugger.py +126 -107
  73. msprobe/mindspore/dump/dump_tool_factory.py +35 -35
  74. msprobe/mindspore/dump/hook_cell/api_registry.py +118 -104
  75. msprobe/mindspore/dump/hook_cell/hook_cell.py +55 -53
  76. msprobe/mindspore/dump/hook_cell/support_wrap_ops.yaml +922 -925
  77. msprobe/mindspore/dump/hook_cell/wrap_api.py +113 -0
  78. msprobe/mindspore/dump/jit_dump.py +72 -56
  79. msprobe/mindspore/dump/kernel_graph_dump.py +59 -60
  80. msprobe/mindspore/dump/kernel_kbyk_dump.py +64 -65
  81. msprobe/mindspore/free_benchmark/api_pynative_self_check.py +116 -116
  82. msprobe/mindspore/free_benchmark/common/config.py +12 -12
  83. msprobe/mindspore/free_benchmark/common/handler_params.py +17 -17
  84. msprobe/mindspore/free_benchmark/common/utils.py +71 -71
  85. msprobe/mindspore/free_benchmark/data/support_wrap_ops.yaml +842 -842
  86. msprobe/mindspore/free_benchmark/decorator/dec_forward.py +43 -42
  87. msprobe/mindspore/free_benchmark/decorator/decorator_factory.py +107 -107
  88. msprobe/mindspore/free_benchmark/handler/base_handler.py +90 -90
  89. msprobe/mindspore/free_benchmark/handler/check_handler.py +41 -41
  90. msprobe/mindspore/free_benchmark/handler/fix_handler.py +36 -36
  91. msprobe/mindspore/free_benchmark/handler/handler_factory.py +21 -21
  92. msprobe/mindspore/free_benchmark/perturbation/add_noise.py +67 -67
  93. msprobe/mindspore/free_benchmark/perturbation/base_perturbation.py +21 -21
  94. msprobe/mindspore/free_benchmark/perturbation/bit_noise.py +63 -63
  95. msprobe/mindspore/free_benchmark/perturbation/exchange_value.py +51 -0
  96. msprobe/mindspore/free_benchmark/perturbation/improve_precision.py +35 -34
  97. msprobe/mindspore/free_benchmark/perturbation/no_change.py +12 -12
  98. msprobe/mindspore/free_benchmark/perturbation/perturbation_factory.py +29 -27
  99. msprobe/mindspore/free_benchmark/self_check_tool_factory.py +33 -33
  100. msprobe/mindspore/grad_probe/global_context.py +90 -91
  101. msprobe/mindspore/grad_probe/grad_analyzer.py +231 -231
  102. msprobe/mindspore/grad_probe/grad_monitor.py +27 -27
  103. msprobe/mindspore/grad_probe/grad_stat_csv.py +131 -131
  104. msprobe/mindspore/grad_probe/hook.py +94 -92
  105. msprobe/mindspore/grad_probe/utils.py +29 -28
  106. msprobe/mindspore/ms_config.py +128 -126
  107. msprobe/mindspore/overflow_check/kernel_graph_overflow_check.py +44 -45
  108. msprobe/mindspore/overflow_check/overflow_check_tool_factory.py +34 -34
  109. msprobe/mindspore/runtime.py +4 -4
  110. msprobe/mindspore/service.py +378 -354
  111. msprobe/mindspore/task_handler_factory.py +24 -24
  112. msprobe/msprobe.py +105 -107
  113. msprobe/pytorch/__init__.py +3 -3
  114. msprobe/pytorch/api_accuracy_checker/common/config.py +53 -55
  115. msprobe/pytorch/api_accuracy_checker/common/utils.py +214 -165
  116. msprobe/pytorch/api_accuracy_checker/compare/algorithm.py +213 -213
  117. msprobe/pytorch/api_accuracy_checker/compare/api_precision_compare.py +606 -581
  118. msprobe/pytorch/api_accuracy_checker/compare/api_precision_standard.yaml +132 -132
  119. msprobe/pytorch/api_accuracy_checker/compare/api_precision_threshold.yaml +390 -390
  120. msprobe/pytorch/api_accuracy_checker/compare/compare.py +386 -381
  121. msprobe/pytorch/api_accuracy_checker/compare/compare_column.py +73 -73
  122. msprobe/pytorch/api_accuracy_checker/compare/compare_utils.py +245 -244
  123. msprobe/pytorch/api_accuracy_checker/config.yaml +10 -10
  124. msprobe/pytorch/api_accuracy_checker/run_ut/data_generate.py +335 -332
  125. msprobe/pytorch/api_accuracy_checker/run_ut/multi_run_ut.py +200 -199
  126. msprobe/pytorch/api_accuracy_checker/run_ut/run_overflow_check.py +133 -134
  127. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut.py +592 -581
  128. msprobe/pytorch/api_accuracy_checker/run_ut/run_ut_utils.py +70 -74
  129. msprobe/pytorch/api_accuracy_checker/run_ut/torch_ut_setting.json +7 -4
  130. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/attl.py +197 -202
  131. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/client.py +325 -324
  132. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/device_dispatch.py +204 -204
  133. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/server.py +219 -218
  134. msprobe/pytorch/api_accuracy_checker/tensor_transport_layer/ssl_config.py +10 -10
  135. msprobe/pytorch/bench_functions/__init__.py +15 -15
  136. msprobe/pytorch/bench_functions/apply_adam_w.py +28 -28
  137. msprobe/pytorch/bench_functions/confusion_transpose.py +19 -19
  138. msprobe/pytorch/bench_functions/fast_gelu.py +55 -55
  139. msprobe/pytorch/bench_functions/layer_norm_eval.py +6 -6
  140. msprobe/pytorch/bench_functions/linear.py +12 -12
  141. msprobe/pytorch/bench_functions/matmul_backward.py +48 -48
  142. msprobe/pytorch/bench_functions/npu_fusion_attention.py +509 -421
  143. msprobe/pytorch/bench_functions/rms_norm.py +15 -15
  144. msprobe/pytorch/bench_functions/rotary_mul.py +52 -52
  145. msprobe/pytorch/bench_functions/scaled_mask_softmax.py +26 -26
  146. msprobe/pytorch/bench_functions/swiglu.py +55 -55
  147. msprobe/pytorch/common/__init__.py +2 -2
  148. msprobe/pytorch/common/compare_script.template +14 -14
  149. msprobe/pytorch/common/log.py +20 -31
  150. msprobe/pytorch/common/parse_json.py +39 -39
  151. msprobe/pytorch/common/utils.py +305 -300
  152. msprobe/pytorch/compare/distributed_compare.py +66 -66
  153. msprobe/pytorch/compare/mapping.yaml +607 -607
  154. msprobe/pytorch/compare/match.py +34 -33
  155. msprobe/pytorch/compare/pt_compare.py +50 -40
  156. msprobe/pytorch/debugger/debugger_config.py +95 -95
  157. msprobe/pytorch/debugger/precision_debugger.py +125 -125
  158. msprobe/pytorch/free_benchmark/__init__.py +8 -8
  159. msprobe/pytorch/free_benchmark/common/constant.py +70 -70
  160. msprobe/pytorch/free_benchmark/common/counter.py +71 -71
  161. msprobe/pytorch/free_benchmark/common/enums.py +37 -37
  162. msprobe/pytorch/free_benchmark/common/params.py +129 -129
  163. msprobe/pytorch/free_benchmark/common/utils.py +102 -102
  164. msprobe/pytorch/free_benchmark/compare/grad_saver.py +179 -179
  165. msprobe/pytorch/free_benchmark/compare/single_benchmark.py +104 -104
  166. msprobe/pytorch/free_benchmark/main.py +105 -105
  167. msprobe/pytorch/free_benchmark/perturbed_layers/base_layer.py +13 -13
  168. msprobe/pytorch/free_benchmark/perturbed_layers/layer_factory.py +41 -41
  169. msprobe/pytorch/free_benchmark/perturbed_layers/npu/add_noise.py +90 -90
  170. msprobe/pytorch/free_benchmark/perturbed_layers/npu/bit_noise.py +104 -104
  171. msprobe/pytorch/free_benchmark/perturbed_layers/npu/change_value.py +63 -63
  172. msprobe/pytorch/free_benchmark/perturbed_layers/npu/improve_precision.py +68 -68
  173. msprobe/pytorch/free_benchmark/perturbed_layers/npu/no_change.py +28 -28
  174. msprobe/pytorch/free_benchmark/perturbed_layers/npu/npu_base_layser.py +45 -45
  175. msprobe/pytorch/free_benchmark/perturbed_layers/run_cpu.py +19 -19
  176. msprobe/pytorch/free_benchmark/result_handlers/base_handler.py +217 -217
  177. msprobe/pytorch/free_benchmark/result_handlers/check_handler.py +39 -39
  178. msprobe/pytorch/free_benchmark/result_handlers/fix_handler.py +23 -23
  179. msprobe/pytorch/free_benchmark/result_handlers/handler_factory.py +30 -30
  180. msprobe/pytorch/free_benchmark/result_handlers/preheat_handler.py +170 -170
  181. msprobe/pytorch/function_factory.py +76 -75
  182. msprobe/pytorch/functional/dump_module.py +39 -39
  183. msprobe/pytorch/grad_probe/grad_monitor.py +91 -90
  184. msprobe/pytorch/grad_probe/grad_stat_csv.py +128 -128
  185. msprobe/pytorch/hook_module/api_registry.py +161 -161
  186. msprobe/pytorch/hook_module/hook_module.py +120 -120
  187. msprobe/pytorch/hook_module/support_wrap_ops.yaml +1879 -1877
  188. msprobe/pytorch/hook_module/utils.py +30 -29
  189. msprobe/pytorch/hook_module/wrap_aten.py +110 -110
  190. msprobe/pytorch/hook_module/wrap_distributed.py +78 -78
  191. msprobe/pytorch/hook_module/wrap_functional.py +105 -105
  192. msprobe/pytorch/hook_module/wrap_npu_custom.py +93 -84
  193. msprobe/pytorch/hook_module/wrap_tensor.py +71 -71
  194. msprobe/pytorch/hook_module/wrap_torch.py +86 -86
  195. msprobe/pytorch/hook_module/wrap_vf.py +62 -62
  196. msprobe/pytorch/module_processer.py +138 -138
  197. msprobe/pytorch/online_dispatch/__init__.py +20 -20
  198. msprobe/pytorch/online_dispatch/compare.py +236 -236
  199. msprobe/pytorch/online_dispatch/dispatch.py +271 -271
  200. msprobe/pytorch/online_dispatch/dump_compare.py +155 -156
  201. msprobe/pytorch/online_dispatch/single_compare.py +391 -391
  202. msprobe/pytorch/online_dispatch/torch_ops_config.yaml +49 -49
  203. msprobe/pytorch/online_dispatch/utils.py +130 -146
  204. msprobe/pytorch/parse.py +4 -4
  205. msprobe/pytorch/parse_tool/cli.py +32 -32
  206. msprobe/pytorch/parse_tool/lib/compare.py +260 -271
  207. msprobe/pytorch/parse_tool/lib/config.py +52 -52
  208. msprobe/pytorch/parse_tool/lib/file_desc.py +31 -31
  209. msprobe/pytorch/parse_tool/lib/interactive_cli.py +102 -102
  210. msprobe/pytorch/parse_tool/lib/parse_exception.py +54 -54
  211. msprobe/pytorch/parse_tool/lib/parse_tool.py +158 -158
  212. msprobe/pytorch/parse_tool/lib/utils.py +316 -321
  213. msprobe/pytorch/parse_tool/lib/visualization.py +85 -91
  214. msprobe/pytorch/pt_config.py +188 -187
  215. msprobe/pytorch/service.py +246 -252
  216. mindstudio_probe-1.0.3.dist-info/RECORD +0 -272
  217. msprobe/config/README.md +0 -539
  218. msprobe/mindspore/doc/compare.md +0 -58
  219. msprobe/mindspore/doc/dump.md +0 -217
  220. msprobe/mindspore/dump/hook_cell/wrap_functional.py +0 -91
  221. msprobe/mindspore/dump/hook_cell/wrap_tensor.py +0 -63
  222. msprobe/pytorch/doc/FAQ.md +0 -193
  223. msprobe/pytorch/doc/api_accuracy_checker.md +0 -313
  224. msprobe/pytorch/doc/api_accuracy_checker_online.md +0 -187
  225. msprobe/pytorch/doc/dump.md +0 -260
  226. 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
  227. msprobe/pytorch/doc/ptdbg_ascend_compare.md +0 -240
  228. msprobe/pytorch/doc/ptdbg_ascend_overview.md +0 -68
  229. msprobe/pytorch/doc/ptdbg_ascend_quickstart.md +0 -381
  230. msprobe/pytorch/doc/run_overflow_check.md +0 -25
  231. 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 +0 -90
  232. 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
  233. {mindstudio_probe-1.0.3.dist-info → mindstudio_probe-1.0.4.dist-info}/top_level.txt +0 -0
  234. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_1.png +0 -0
  235. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_2.png +0 -0
  236. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_3.png +0 -0
  237. /msprobe/{pytorch/doc → docs}/img/BLOOM-7B_4.png +0 -0
  238. /msprobe/{pytorch/doc → docs}/img/GPT-3_1.png +0 -0
  239. /msprobe/{pytorch/doc → docs}/img/GPT-3_2.png +0 -0
  240. /msprobe/{pytorch/doc → docs}/img/GPT-3_3.png +0 -0
  241. /msprobe/{pytorch/doc → docs}/img/GPT-3_4.png +0 -0
  242. /msprobe/{pytorch/doc → docs}/img/GPT-3_5.png +0 -0
  243. /msprobe/{pytorch/doc → docs}/img/GPT-3_6.png +0 -0
  244. /msprobe/{pytorch/doc → docs}/img/GPT-3_7.png +0 -0
  245. /msprobe/{pytorch/doc → docs}/img/GPT-3_8.png +0 -0
  246. /msprobe/{pytorch/doc → docs}/img/YOLOV5S_1.png +0 -0
  247. /msprobe/{pytorch/doc → docs}/img/YOLOV5S_2.png +0 -0
  248. /msprobe/{pytorch/doc → docs}/img/accuracy_checking_details.png +0 -0
  249. /msprobe/{pytorch/doc → docs}/img/accuracy_checking_result.png +0 -0
  250. /msprobe/{pytorch/doc → docs}/img/api_precision_compare_details.png +0 -0
  251. /msprobe/{pytorch/doc → docs}/img/api_precision_compare_result.png +0 -0
  252. /msprobe/{pytorch/doc → docs}/img/auto_analyze_log.png +0 -0
  253. /msprobe/{pytorch/doc → docs}/img/compare_result_pkl.png +0 -0
  254. /msprobe/{pytorch/doc → docs}/img/compare_result_pkl_md5.png.png +0 -0
  255. /msprobe/{pytorch/doc → docs}/img/cpu_info.png +0 -0
  256. /msprobe/{config → docs}/img/free_benchmark.png +0 -0
  257. /msprobe/{doc/grad_probe/img/image-1.png → docs/img/grad_probe_image-1.png} +0 -0
  258. /msprobe/{doc/grad_probe/img/image-2.png → docs/img/grad_probe_image-2.png} +0 -0
  259. /msprobe/{doc/grad_probe/img/image-3.png → docs/img/grad_probe_image-3.png} +0 -0
  260. /msprobe/{doc/grad_probe/img/image-4.png → docs/img/grad_probe_image-4.png} +0 -0
  261. /msprobe/{doc/grad_probe/img/image.png → docs/img/grad_probe_image.png} +0 -0
  262. /msprobe/{pytorch/doc → docs}/img/module_compare.png +0 -0
@@ -1,91 +1,85 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- """
4
- # Copyright (C) 2022-2024. Huawei Technologies Co., Ltd. All rights reserved.
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- """
17
- import json
18
- import numpy as np
19
-
20
- from msprobe.pytorch.parse_tool.lib.config import Const
21
- from msprobe.pytorch.parse_tool.lib.utils import Util
22
- from msprobe.pytorch.parse_tool.lib.parse_exception import ParseException
23
- from msprobe.core.common.file_check import FileOpen
24
- from msprobe.core.common.utils import save_npy_to_txt
25
-
26
-
27
- class Visualization:
28
- def __init__(self):
29
- self.util = Util()
30
-
31
- def print_npy_summary(self, target_file):
32
- try:
33
- np_data = np.load(target_file, allow_pickle=True)
34
- except UnicodeError as e:
35
- self.util.log.error("%s %s" % ("UnicodeError", str(e)))
36
- self.util.log.warning("Please check the npy file")
37
- raise ParseException(ParseException.PARSE_UNICODE_ERROR) from e
38
- table = self.util.create_table('', ['Index', 'Data'])
39
- flatten_data = np_data.flatten()
40
- tablesize = 8
41
- for i in range(min(16, int(np.ceil(flatten_data.size / tablesize)))):
42
- last_idx = min(flatten_data.size, i * tablesize + tablesize)
43
- table.add_row(str(i * tablesize), ' '.join(flatten_data[i * tablesize: last_idx].astype('str').tolist()))
44
- summary = ['[yellow]%s[/yellow]' % self.util.gen_npy_info_txt(np_data), 'Path: %s' % target_file,
45
- "TextFile: %s.txt" % target_file]
46
- self.util.print_panel(self.util.create_columns([table, "\n".join(summary)]), target_file)
47
- save_npy_to_txt(np_data, target_file + ".txt")
48
-
49
- def print_npy_data(self, file_name):
50
- file_name = self.util.path_strip(file_name)
51
- self.util.check_path_valid(file_name)
52
- self.util.check_file_path_format(file_name, Const.NPY_SUFFIX)
53
- return self.print_npy_summary(file_name)
54
-
55
- def parse_pkl(self, path, api_name):
56
- path = self.util.path_strip(path)
57
- self.util.check_path_valid(path)
58
- self.util.check_file_path_format(path, Const.PKL_SUFFIX)
59
- self.util.check_str_param(api_name)
60
- with FileOpen(path, "r") as pkl_handle:
61
- title_printed = False
62
- while True:
63
- pkl_line = pkl_handle.readline()
64
- if pkl_line == '\n':
65
- continue
66
- if len(pkl_line) == 0:
67
- break
68
- try:
69
- msg = json.loads(pkl_line)
70
- except json.JSONDecodeError as e:
71
- self.util.log.error("%s %s in line %s" % ("JSONDecodeError", str(e), pkl_line))
72
- self.util.log.warning("Please check the pkl file")
73
- raise ParseException(ParseException.PARSE_JSONDECODE_ERROR) from e
74
- info_prefix = msg[0]
75
- if not info_prefix.startswith(api_name):
76
- continue
77
- if info_prefix.find("stack_info") != -1 and len(msg) == 2:
78
- self.util.log.info("\nTrace back({}):".format(msg[0]))
79
- if msg[1] and len(msg[1]) > 4:
80
- for item in reversed(msg[1]):
81
- self.util.log.info(" File \"{}\", line {}, in {}".format(item[0], item[1], item[2]))
82
- self.util.log.info(" {}".format(item[3]))
83
- continue
84
- if len(msg) > 5 and len(msg[5]) >= 3:
85
- summery_info = " [{}][dtype: {}][shape: {}][max: {}][min: {}][mean: {}]" \
86
- .format(msg[0], msg[3], msg[4], msg[5][0], msg[5][1], msg[5][2])
87
- if not title_printed:
88
- self.util.log.info("\nStatistic Info:")
89
- title_printed = True
90
- self.util.log.info(summery_info)
91
- pkl_handle.close()
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ # Copyright (C) 2022-2024. Huawei Technologies Co., Ltd. All rights reserved.
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ """
17
+ import json
18
+ import numpy as np
19
+
20
+ from msprobe.pytorch.parse_tool.lib.config import Const
21
+ from msprobe.pytorch.parse_tool.lib.utils import Util
22
+ from msprobe.pytorch.parse_tool.lib.parse_exception import ParseException
23
+ from msprobe.core.common.file_utils import FileOpen, load_npy, save_npy_to_txt
24
+
25
+
26
+ class Visualization:
27
+ def __init__(self):
28
+ self.util = Util()
29
+
30
+ def print_npy_summary(self, target_file):
31
+ np_data = load_npy(target_file, enable_pickle=True)
32
+ table = self.util.create_table('', ['Index', 'Data'])
33
+ flatten_data = np_data.flatten()
34
+ tablesize = 8
35
+ for i in range(min(16, int(np.ceil(flatten_data.size / tablesize)))):
36
+ last_idx = min(flatten_data.size, i * tablesize + tablesize)
37
+ table.add_row(str(i * tablesize), ' '.join(flatten_data[i * tablesize: last_idx].astype('str').tolist()))
38
+ summary = ['[yellow]%s[/yellow]' % self.util.gen_npy_info_txt(np_data), 'Path: %s' % target_file,
39
+ "TextFile: %s.txt" % target_file]
40
+ self.util.print_panel(self.util.create_columns([table, "\n".join(summary)]), target_file)
41
+ save_npy_to_txt(np_data, target_file + ".txt")
42
+
43
+ def print_npy_data(self, file_name):
44
+ file_name = self.util.path_strip(file_name)
45
+ self.util.check_path_valid(file_name)
46
+ self.util.check_file_path_format(file_name, Const.NPY_SUFFIX)
47
+ return self.print_npy_summary(file_name)
48
+
49
+ def parse_pkl(self, path, api_name):
50
+ path = self.util.path_strip(path)
51
+ self.util.check_path_valid(path)
52
+ self.util.check_file_path_format(path, Const.PKL_SUFFIX)
53
+ self.util.check_str_param(api_name)
54
+ with FileOpen(path, "r") as pkl_handle:
55
+ title_printed = False
56
+ while True:
57
+ pkl_line = pkl_handle.readline()
58
+ if pkl_line == '\n':
59
+ continue
60
+ if len(pkl_line) == 0:
61
+ break
62
+ try:
63
+ msg = json.loads(pkl_line)
64
+ except json.JSONDecodeError as e:
65
+ self.util.log.error("%s %s in line %s" % ("JSONDecodeError", str(e), pkl_line))
66
+ self.util.log.warning("Please check the pkl file")
67
+ raise ParseException(ParseException.PARSE_JSONDECODE_ERROR) from e
68
+ info_prefix = msg[0]
69
+ if not info_prefix.startswith(api_name):
70
+ continue
71
+ if info_prefix.find("stack_info") != -1 and len(msg) == 2:
72
+ self.util.log.info("\nTrace back({}):".format(msg[0]))
73
+ if msg[1] and len(msg[1]) > 4:
74
+ for item in reversed(msg[1]):
75
+ self.util.log.info(" File \"{}\", line {}, in {}".format(item[0], item[1], item[2]))
76
+ self.util.log.info(" {}".format(item[3]))
77
+ continue
78
+ if len(msg) > 5 and len(msg[5]) >= 3:
79
+ summery_info = " [{}][dtype: {}][shape: {}][max: {}][min: {}][mean: {}]" \
80
+ .format(msg[0], msg[3], msg[4], msg[5][0], msg[5][1], msg[5][2])
81
+ if not title_printed:
82
+ self.util.log.info("\nStatistic Info:")
83
+ title_printed = True
84
+ self.util.log.info(summery_info)
85
+ pkl_handle.close()
@@ -1,187 +1,188 @@
1
- import json
2
- import os
3
-
4
- from msprobe.core.common_config import CommonConfig, BaseConfig
5
- from msprobe.core.common.file_check import FileOpen
6
- from msprobe.core.common.const import Const
7
- from msprobe.pytorch.hook_module.utils import get_ops
8
- from msprobe.core.grad_probe.constant import level_adp
9
- from msprobe.core.grad_probe.utils import check_numeral_list_ascend
10
-
11
-
12
- class TensorConfig(BaseConfig):
13
- def __init__(self, json_config):
14
- super().__init__(json_config)
15
- self.online_run_ut = json_config.get("online_run_ut", False)
16
- self.nfs_path = json_config.get("nfs_path", "")
17
- self.host = json_config.get("host", "")
18
- self.port = json_config.get("port", -1)
19
- self.tls_path = json_config.get("tls_path", "")
20
- self.check_config()
21
- self._check_file_format()
22
- self._check_tls_path_config()
23
-
24
- def _check_file_format(self):
25
- if self.file_format is not None and self.file_format not in ["npy", "bin"]:
26
- raise Exception("file_format is invalid")
27
-
28
- def _check_tls_path_config(self):
29
- if self.tls_path:
30
- if not os.path.exists(self.tls_path):
31
- raise Exception("tls_path: %s does not exist" % self.tls_path)
32
- if not os.path.exists(os.path.join(self.tls_path, "client.key")):
33
- raise Exception("tls_path does not contain client.key")
34
- if not os.path.exists(os.path.join(self.tls_path, "client.crt")):
35
- raise Exception("tls_path does not contain client.crt")
36
-
37
-
38
- class StatisticsConfig(BaseConfig):
39
- def __init__(self, json_config):
40
- super().__init__(json_config)
41
- self.check_config()
42
- self._check_summary_mode()
43
-
44
- def _check_summary_mode(self):
45
- if self.summary_mode and self.summary_mode not in ["statistics", "md5"]:
46
- raise Exception("summary_mode is invalid")
47
-
48
-
49
- class OverflowCheckConfig(BaseConfig):
50
- def __init__(self, json_config):
51
- super().__init__(json_config)
52
- self.overflow_nums = json_config.get("overflow_nums")
53
- self.check_mode = json_config.get("check_mode")
54
- self.check_overflow_config()
55
-
56
- def check_overflow_config(self):
57
- if self.overflow_nums is not None and not isinstance(self.overflow_nums, int):
58
- raise Exception("overflow_num is invalid")
59
- if self.check_mode is not None and self.check_mode not in ["all", "aicore", "atomic"]:
60
- raise Exception("check_mode is invalid")
61
-
62
-
63
- class FreeBenchmarkCheckConfig(BaseConfig):
64
- def __init__(self, json_config):
65
- super().__init__(json_config)
66
- self.fuzz_device = json_config.get("fuzz_device")
67
- self.pert_mode = json_config.get("pert_mode")
68
- self.handler_type = json_config.get("handler_type")
69
- self.fuzz_level = json_config.get("fuzz_level")
70
- self.fuzz_stage = json_config.get("fuzz_stage")
71
- self.if_preheat = json_config.get("if_preheat")
72
- self.preheat_step = json_config.get("preheat_step")
73
- self.max_sample = json_config.get("max_sample")
74
- self.check_freebenchmark_config()
75
-
76
- def check_freebenchmark_config(self):
77
- if self.if_preheat and self.handler_type == "fix":
78
- raise Exception("Preheating is not supported in fix handler type")
79
- if self.preheat_step and self.preheat_step == 0:
80
- raise Exception("preheat_step cannot be 0")
81
-
82
-
83
- class RunUTConfig(BaseConfig):
84
- WrapApi = get_ops()
85
-
86
- def __init__(self, json_config):
87
- super().__init__(json_config)
88
- self.white_list = json_config.get("white_list", Const.DEFAULT_LIST)
89
- self.black_list = json_config.get("black_list", Const.DEFAULT_LIST)
90
- self.error_data_path = json_config.get("error_data_path", Const.DEFAULT_PATH)
91
- self.is_online = json_config.get("is_online", False)
92
- self.nfs_path = json_config.get("nfs_path", "")
93
- self.host = json_config.get("host", "")
94
- self.port = json_config.get("port", -1)
95
- self.rank_list = json_config.get("rank_list", Const.DEFAULT_LIST)
96
- self.tls_path = json_config.get("tls_path", "")
97
- self.check_run_ut_config()
98
-
99
- @classmethod
100
- def check_filter_list_config(cls, key, filter_list):
101
- if not isinstance(filter_list, list):
102
- raise Exception("%s must be a list type" % key)
103
- if not all(isinstance(item, str) for item in filter_list):
104
- raise Exception("All elements in %s must be string type" % key)
105
- invalid_api = [item for item in filter_list if item not in cls.WrapApi]
106
- if invalid_api:
107
- raise Exception("Invalid api in %s: %s" % (key, invalid_api))
108
-
109
- @classmethod
110
- def check_error_data_path_config(cls, error_data_path):
111
- if not os.path.exists(error_data_path):
112
- raise Exception("error_data_path: %s does not exist" % error_data_path)
113
-
114
- @classmethod
115
- def check_nfs_path_config(cls, nfs_path):
116
- if nfs_path and not os.path.exists(nfs_path):
117
- raise Exception("nfs_path: %s does not exist" % nfs_path)
118
-
119
- @classmethod
120
- def check_tls_path_config(cls, tls_path):
121
- if tls_path:
122
- if not os.path.exists(tls_path):
123
- raise Exception("tls_path: %s does not exist" % tls_path)
124
- if not os.path.exists(os.path.join(tls_path, "server.key")):
125
- raise Exception("tls_path does not contain server.key")
126
- if not os.path.exists(os.path.join(tls_path, "server.crt")):
127
- raise Exception("tls_path does not contain server.crt")
128
-
129
- def check_run_ut_config(self):
130
- RunUTConfig.check_filter_list_config(Const.WHITE_LIST, self.white_list)
131
- RunUTConfig.check_filter_list_config(Const.BLACK_LIST, self.black_list)
132
- RunUTConfig.check_error_data_path_config(self.error_data_path)
133
- RunUTConfig.check_nfs_path_config(self.nfs_path)
134
- RunUTConfig.check_tls_path_config(self.tls_path)
135
-
136
-
137
- class GradToolConfig(BaseConfig):
138
- def __init__(self, json_config):
139
- super().__init__(json_config)
140
- self.grad_level = json_config.get("grad_level", "L1")
141
- self.param_list = json_config.get("param_list", [])
142
- self.bounds = json_config.get("bounds", [])
143
-
144
- def _check_config(self):
145
- if self.grad_level not in level_adp.keys():
146
- raise Exception(f"grad_level must be one of {level_adp.keys()}")
147
- if not isinstance(self.param_list, list):
148
- raise Exception(f"param_list must be a list")
149
- check_numeral_list_ascend(self.bounds)
150
-
151
-
152
- def parse_task_config(task, json_config):
153
- default_dic = {}
154
- if task == Const.TENSOR:
155
- config_dic = json_config.get(Const.TENSOR, default_dic)
156
- return TensorConfig(config_dic)
157
- elif task == Const.STATISTICS:
158
- config_dic = json_config.get(Const.STATISTICS, default_dic)
159
- return StatisticsConfig(config_dic)
160
- elif task == Const.OVERFLOW_CHECK:
161
- config_dic = json_config.get(Const.OVERFLOW_CHECK, default_dic)
162
- return OverflowCheckConfig(config_dic)
163
- elif task == Const.FREE_BENCHMARK:
164
- config_dic = json_config.get(Const.FREE_BENCHMARK, default_dic)
165
- return FreeBenchmarkCheckConfig(config_dic)
166
- elif task == Const.RUN_UT:
167
- config_dic = json_config.get(Const.RUN_UT, default_dic)
168
- return RunUTConfig(config_dic)
169
- elif task == Const.GRAD_PROBE:
170
- config_dic = json_config.get(Const.GRAD_PROBE, default_dic)
171
- return GradToolConfig(config_dic)
172
- else:
173
- return StatisticsConfig(default_dic)
174
-
175
-
176
- def parse_json_config(json_file_path, task):
177
- if not json_file_path:
178
- config_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
179
- json_file_path = os.path.join(os.path.join(config_dir, "config"), "config.json")
180
- with FileOpen(json_file_path, 'r') as file:
181
- json_config = json.load(file)
182
- common_config = CommonConfig(json_config)
183
- if task and task in Const.TASK_LIST:
184
- task_config = parse_task_config(task, json_config)
185
- else:
186
- task_config = parse_task_config(common_config.task, json_config)
187
- return common_config, task_config
1
+ import json
2
+ import os
3
+
4
+ from msprobe.core.common_config import CommonConfig, BaseConfig
5
+ from msprobe.core.common.file_utils import FileOpen
6
+ from msprobe.core.common.const import Const
7
+ from msprobe.pytorch.hook_module.utils import get_ops
8
+ from msprobe.core.grad_probe.constant import level_adp
9
+ from msprobe.core.grad_probe.utils import check_numeral_list_ascend
10
+
11
+
12
+ class TensorConfig(BaseConfig):
13
+ def __init__(self, json_config):
14
+ super().__init__(json_config)
15
+ self.online_run_ut = json_config.get("online_run_ut", False)
16
+ self.nfs_path = json_config.get("nfs_path", "")
17
+ self.host = json_config.get("host", "")
18
+ self.port = json_config.get("port", -1)
19
+ self.tls_path = json_config.get("tls_path", "")
20
+ self.check_config()
21
+ self._check_file_format()
22
+ self._check_tls_path_config()
23
+
24
+ def _check_file_format(self):
25
+ if self.file_format is not None and self.file_format not in ["npy", "bin"]:
26
+ raise Exception("file_format is invalid")
27
+
28
+ def _check_tls_path_config(self):
29
+ if self.tls_path:
30
+ if not os.path.exists(self.tls_path):
31
+ raise Exception("tls_path: %s does not exist" % self.tls_path)
32
+ if not os.path.exists(os.path.join(self.tls_path, "client.key")):
33
+ raise Exception("tls_path does not contain client.key")
34
+ if not os.path.exists(os.path.join(self.tls_path, "client.crt")):
35
+ raise Exception("tls_path does not contain client.crt")
36
+
37
+
38
+ class StatisticsConfig(BaseConfig):
39
+ def __init__(self, json_config):
40
+ super().__init__(json_config)
41
+ self.check_config()
42
+ self._check_summary_mode()
43
+
44
+ def _check_summary_mode(self):
45
+ if self.summary_mode and self.summary_mode not in ["statistics", "md5"]:
46
+ raise Exception("summary_mode is invalid")
47
+
48
+
49
+ class OverflowCheckConfig(BaseConfig):
50
+ def __init__(self, json_config):
51
+ super().__init__(json_config)
52
+ self.overflow_nums = json_config.get("overflow_nums")
53
+ self.check_mode = json_config.get("check_mode")
54
+ self.check_overflow_config()
55
+
56
+ def check_overflow_config(self):
57
+ if self.overflow_nums is not None and not isinstance(self.overflow_nums, int):
58
+ raise Exception("overflow_num is invalid")
59
+ if self.check_mode is not None and self.check_mode not in ["all", "aicore", "atomic"]:
60
+ raise Exception("check_mode is invalid")
61
+
62
+
63
+ class FreeBenchmarkCheckConfig(BaseConfig):
64
+ def __init__(self, json_config):
65
+ super().__init__(json_config)
66
+ self.fuzz_device = json_config.get("fuzz_device")
67
+ self.pert_mode = json_config.get("pert_mode")
68
+ self.handler_type = json_config.get("handler_type")
69
+ self.fuzz_level = json_config.get("fuzz_level")
70
+ self.fuzz_stage = json_config.get("fuzz_stage")
71
+ self.if_preheat = json_config.get("if_preheat")
72
+ self.preheat_step = json_config.get("preheat_step")
73
+ self.max_sample = json_config.get("max_sample")
74
+ self.check_freebenchmark_config()
75
+
76
+ def check_freebenchmark_config(self):
77
+ if self.if_preheat and self.handler_type == "fix":
78
+ raise Exception("Preheating is not supported in fix handler type")
79
+ if self.preheat_step and self.preheat_step == 0:
80
+ raise Exception("preheat_step cannot be 0")
81
+
82
+
83
+ class RunUTConfig(BaseConfig):
84
+ WrapApi = get_ops()
85
+
86
+ def __init__(self, json_config):
87
+ super().__init__(json_config)
88
+ self.white_list = json_config.get("white_list", Const.DEFAULT_LIST)
89
+ self.black_list = json_config.get("black_list", Const.DEFAULT_LIST)
90
+ self.error_data_path = json_config.get("error_data_path", Const.DEFAULT_PATH)
91
+ self.is_online = json_config.get("is_online", False)
92
+ self.nfs_path = json_config.get("nfs_path", "")
93
+ self.host = json_config.get("host", "")
94
+ self.port = json_config.get("port", -1)
95
+ self.rank_list = json_config.get("rank_list", Const.DEFAULT_LIST)
96
+ self.tls_path = json_config.get("tls_path", "")
97
+ self.check_run_ut_config()
98
+
99
+ @classmethod
100
+ def check_filter_list_config(cls, key, filter_list):
101
+ if not isinstance(filter_list, list):
102
+ raise Exception("%s must be a list type" % key)
103
+ if not all(isinstance(item, str) for item in filter_list):
104
+ raise Exception("All elements in %s must be string type" % key)
105
+ invalid_api = [item for item in filter_list if item not in cls.WrapApi]
106
+ if invalid_api:
107
+ raise Exception("Invalid api in %s: %s" % (key, invalid_api))
108
+
109
+ @classmethod
110
+ def check_error_data_path_config(cls, error_data_path):
111
+ if not os.path.exists(error_data_path):
112
+ raise Exception("error_data_path: %s does not exist" % error_data_path)
113
+
114
+ @classmethod
115
+ def check_nfs_path_config(cls, nfs_path):
116
+ if nfs_path and not os.path.exists(nfs_path):
117
+ raise Exception("nfs_path: %s does not exist" % nfs_path)
118
+
119
+ @classmethod
120
+ def check_tls_path_config(cls, tls_path):
121
+ if tls_path:
122
+ if not os.path.exists(tls_path):
123
+ raise Exception("tls_path: %s does not exist" % tls_path)
124
+ if not os.path.exists(os.path.join(tls_path, "server.key")):
125
+ raise Exception("tls_path does not contain server.key")
126
+ if not os.path.exists(os.path.join(tls_path, "server.crt")):
127
+ raise Exception("tls_path does not contain server.crt")
128
+
129
+ def check_run_ut_config(self):
130
+ RunUTConfig.check_filter_list_config(Const.WHITE_LIST, self.white_list)
131
+ RunUTConfig.check_filter_list_config(Const.BLACK_LIST, self.black_list)
132
+ RunUTConfig.check_error_data_path_config(self.error_data_path)
133
+ RunUTConfig.check_nfs_path_config(self.nfs_path)
134
+ RunUTConfig.check_tls_path_config(self.tls_path)
135
+
136
+
137
+ class GradToolConfig(BaseConfig):
138
+ def __init__(self, json_config):
139
+ super().__init__(json_config)
140
+ self.grad_level = json_config.get("grad_level", "L1")
141
+ self.param_list = json_config.get("param_list", [])
142
+ self.bounds = json_config.get("bounds", [-1, 0, 1])
143
+ self._check_config()
144
+
145
+ def _check_config(self):
146
+ if self.grad_level not in level_adp.keys():
147
+ raise Exception(f"grad_level must be one of {level_adp.keys()}")
148
+ if not isinstance(self.param_list, list):
149
+ raise Exception(f"param_list must be a list")
150
+ check_numeral_list_ascend(self.bounds)
151
+
152
+
153
+ def parse_task_config(task, json_config):
154
+ default_dic = {}
155
+ if task == Const.TENSOR:
156
+ config_dic = json_config.get(Const.TENSOR, default_dic)
157
+ return TensorConfig(config_dic)
158
+ elif task == Const.STATISTICS:
159
+ config_dic = json_config.get(Const.STATISTICS, default_dic)
160
+ return StatisticsConfig(config_dic)
161
+ elif task == Const.OVERFLOW_CHECK:
162
+ config_dic = json_config.get(Const.OVERFLOW_CHECK, default_dic)
163
+ return OverflowCheckConfig(config_dic)
164
+ elif task == Const.FREE_BENCHMARK:
165
+ config_dic = json_config.get(Const.FREE_BENCHMARK, default_dic)
166
+ return FreeBenchmarkCheckConfig(config_dic)
167
+ elif task == Const.RUN_UT:
168
+ config_dic = json_config.get(Const.RUN_UT, default_dic)
169
+ return RunUTConfig(config_dic)
170
+ elif task == Const.GRAD_PROBE:
171
+ config_dic = json_config.get(Const.GRAD_PROBE, default_dic)
172
+ return GradToolConfig(config_dic)
173
+ else:
174
+ return StatisticsConfig(default_dic)
175
+
176
+
177
+ def parse_json_config(json_file_path, task):
178
+ if not json_file_path:
179
+ config_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
180
+ json_file_path = os.path.join(config_dir, "config.json")
181
+ with FileOpen(json_file_path, 'r') as file:
182
+ json_config = json.load(file)
183
+ common_config = CommonConfig(json_config)
184
+ if task and task in Const.TASK_LIST:
185
+ task_config = parse_task_config(task, json_config)
186
+ else:
187
+ task_config = parse_task_config(common_config.task, json_config)
188
+ return common_config, task_config