mindspore 2.4.1__cp311-cp311-win_amd64.whl → 2.5.0__cp311-cp311-win_amd64.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.

Potentially problematic release.


This version of mindspore might be problematic. Click here for more details.

Files changed (395) hide show
  1. mindspore/.commit_id +1 -1
  2. mindspore/Microsoft.VisualStudio.Telemetry.dll +0 -0
  3. mindspore/Newtonsoft.Json.dll +0 -0
  4. mindspore/__init__.py +8 -3
  5. mindspore/_c_dataengine.cp311-win_amd64.pyd +0 -0
  6. mindspore/_c_expression.cp311-win_amd64.pyd +0 -0
  7. mindspore/_c_mindrecord.cp311-win_amd64.pyd +0 -0
  8. mindspore/_checkparam.py +0 -5
  9. mindspore/_extends/parallel_compile/akg_compiler/gen_custom_op_files.py +1 -1
  10. mindspore/_extends/parse/compile_config.py +64 -0
  11. mindspore/_extends/parse/deprecated/__init__.py +0 -0
  12. mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +375 -0
  13. mindspore/_extends/parse/parser.py +23 -5
  14. mindspore/_extends/parse/standard_method.py +123 -27
  15. mindspore/_extends/pijit/pijit_func_white_list.py +1 -1
  16. mindspore/amp.py +7 -1
  17. mindspore/atlprov.dll +0 -0
  18. mindspore/avcodec-59.dll +0 -0
  19. mindspore/avdevice-59.dll +0 -0
  20. mindspore/avfilter-8.dll +0 -0
  21. mindspore/avformat-59.dll +0 -0
  22. mindspore/avutil-57.dll +0 -0
  23. mindspore/boost/boost_cell_wrapper.py +136 -41
  24. mindspore/c1.dll +0 -0
  25. mindspore/c1xx.dll +0 -0
  26. mindspore/c2.dll +0 -0
  27. mindspore/common/__init__.py +3 -1
  28. mindspore/common/_register_for_tensor.py +0 -1
  29. mindspore/common/_stub_tensor.py +25 -4
  30. mindspore/common/_tensor_cpp_method.py +17 -0
  31. mindspore/common/_tensor_docs.py +6132 -0
  32. mindspore/common/api.py +99 -25
  33. mindspore/common/dtype.py +34 -34
  34. mindspore/common/dump.py +2 -1
  35. mindspore/common/file_system.py +8 -1
  36. mindspore/common/generator.py +2 -0
  37. mindspore/common/hook_handle.py +3 -1
  38. mindspore/common/initializer.py +3 -4
  39. mindspore/common/lazy_inline.py +8 -2
  40. mindspore/common/mindir_util.py +10 -2
  41. mindspore/common/parameter.py +30 -27
  42. mindspore/common/tensor.py +713 -1337
  43. mindspore/communication/__init__.py +1 -1
  44. mindspore/communication/_comm_helper.py +10 -0
  45. mindspore/communication/comm_func.py +215 -173
  46. mindspore/communication/management.py +23 -20
  47. mindspore/context.py +292 -193
  48. mindspore/dataset/__init__.py +23 -19
  49. mindspore/dataset/callback/ds_callback.py +2 -1
  50. mindspore/dataset/core/config.py +84 -3
  51. mindspore/dataset/engine/cache_admin.py +3 -3
  52. mindspore/dataset/engine/cache_client.py +5 -4
  53. mindspore/dataset/engine/datasets.py +192 -149
  54. mindspore/dataset/engine/datasets_audio.py +14 -0
  55. mindspore/dataset/engine/datasets_standard_format.py +28 -11
  56. mindspore/dataset/engine/datasets_text.py +38 -1
  57. mindspore/dataset/engine/datasets_user_defined.py +125 -65
  58. mindspore/dataset/engine/datasets_vision.py +81 -8
  59. mindspore/dataset/engine/iterators.py +281 -63
  60. mindspore/dataset/engine/obs/util.py +8 -0
  61. mindspore/dataset/engine/queue.py +40 -0
  62. mindspore/dataset/engine/samplers.py +26 -2
  63. mindspore/dataset/engine/serializer_deserializer.py +1 -1
  64. mindspore/dataset/engine/validators.py +43 -11
  65. mindspore/dataset/transforms/py_transforms_util.py +17 -0
  66. mindspore/dataset/transforms/transforms.py +29 -12
  67. mindspore/dataset/vision/validators.py +1 -2
  68. mindspore/device_context/__init__.py +21 -0
  69. mindspore/device_context/ascend/__init__.py +25 -0
  70. mindspore/device_context/ascend/device.py +72 -0
  71. mindspore/device_context/ascend/op_debug.py +94 -0
  72. mindspore/device_context/ascend/op_precision.py +193 -0
  73. mindspore/device_context/ascend/op_tuning.py +127 -0
  74. mindspore/device_context/cpu/__init__.py +25 -0
  75. mindspore/device_context/cpu/device.py +62 -0
  76. mindspore/device_context/cpu/op_tuning.py +43 -0
  77. mindspore/device_context/gpu/__init__.py +21 -0
  78. mindspore/device_context/gpu/device.py +70 -0
  79. mindspore/device_context/gpu/op_precision.py +67 -0
  80. mindspore/device_context/gpu/op_tuning.py +175 -0
  81. mindspore/device_manager.py +134 -0
  82. mindspore/dnnl.dll +0 -0
  83. mindspore/dpcmi.dll +0 -0
  84. mindspore/experimental/llm_boost/__init__.py +3 -2
  85. mindspore/experimental/llm_boost/ascend_native/__init__.py +22 -0
  86. mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +211 -0
  87. mindspore/experimental/llm_boost/ascend_native/llm_boost.py +52 -0
  88. mindspore/experimental/llm_boost/atb/boost_base.py +239 -64
  89. mindspore/experimental/llm_boost/atb/llama_boost.py +52 -30
  90. mindspore/experimental/llm_boost/atb/qwen_boost.py +47 -24
  91. mindspore/experimental/llm_boost/register.py +1 -0
  92. mindspore/experimental/optim/adadelta.py +26 -22
  93. mindspore/experimental/optim/adam.py +3 -0
  94. mindspore/experimental/optim/lr_scheduler.py +33 -24
  95. mindspore/experimental/optim/radam.py +33 -30
  96. mindspore/hal/device.py +28 -0
  97. mindspore/hal/event.py +17 -0
  98. mindspore/hal/memory.py +94 -3
  99. mindspore/hal/stream.py +91 -6
  100. mindspore/include/api/context.h +1 -2
  101. mindspore/include/dataset/constants.h +2 -2
  102. mindspore/jpeg62.dll +0 -0
  103. mindspore/log.py +12 -0
  104. mindspore/mindrecord/__init__.py +1 -1
  105. mindspore/mindrecord/config.py +17 -316
  106. mindspore/mindrecord/filereader.py +1 -9
  107. mindspore/mindrecord/filewriter.py +5 -15
  108. mindspore/mindrecord/mindpage.py +1 -9
  109. mindspore/mindspore_backend.dll +0 -0
  110. mindspore/mindspore_common.dll +0 -0
  111. mindspore/mindspore_core.dll +0 -0
  112. mindspore/mindspore_glog.dll +0 -0
  113. mindspore/mindspore_ops.dll +0 -0
  114. mindspore/mint/__init__.py +824 -218
  115. mindspore/mint/distributed/__init__.py +66 -4
  116. mindspore/mint/distributed/distributed.py +2594 -44
  117. mindspore/mint/linalg/__init__.py +6 -0
  118. mindspore/mint/nn/__init__.py +473 -14
  119. mindspore/mint/nn/functional.py +486 -11
  120. mindspore/mint/nn/layer/__init__.py +17 -4
  121. mindspore/mint/nn/layer/_functions.py +330 -0
  122. mindspore/mint/nn/layer/activation.py +169 -1
  123. mindspore/mint/nn/layer/basic.py +123 -0
  124. mindspore/mint/nn/layer/conv.py +727 -0
  125. mindspore/mint/nn/layer/normalization.py +215 -19
  126. mindspore/mint/nn/layer/padding.py +797 -0
  127. mindspore/mint/nn/layer/pooling.py +170 -0
  128. mindspore/mint/optim/__init__.py +2 -1
  129. mindspore/mint/optim/adam.py +223 -0
  130. mindspore/mint/optim/adamw.py +26 -19
  131. mindspore/mint/special/__init__.py +2 -1
  132. mindspore/msobj140.dll +0 -0
  133. mindspore/mspdb140.dll +0 -0
  134. mindspore/mspdbcore.dll +0 -0
  135. mindspore/mspdbst.dll +0 -0
  136. mindspore/mspft140.dll +0 -0
  137. mindspore/msvcdis140.dll +0 -0
  138. mindspore/msvcp140_1.dll +0 -0
  139. mindspore/msvcp140_2.dll +0 -0
  140. mindspore/msvcp140_atomic_wait.dll +0 -0
  141. mindspore/msvcp140_codecvt_ids.dll +0 -0
  142. mindspore/multiprocessing/__init__.py +5 -0
  143. mindspore/nn/__init__.py +2 -0
  144. mindspore/nn/cell.py +142 -21
  145. mindspore/nn/dynamic_lr.py +2 -1
  146. mindspore/nn/layer/activation.py +6 -6
  147. mindspore/nn/layer/basic.py +35 -25
  148. mindspore/nn/layer/channel_shuffle.py +3 -3
  149. mindspore/nn/layer/conv.py +3 -0
  150. mindspore/nn/layer/embedding.py +3 -3
  151. mindspore/nn/layer/normalization.py +8 -7
  152. mindspore/nn/layer/padding.py +4 -3
  153. mindspore/nn/layer/pooling.py +55 -23
  154. mindspore/nn/layer/rnn_cells.py +1 -1
  155. mindspore/nn/layer/rnns.py +2 -1
  156. mindspore/nn/layer/timedistributed.py +5 -5
  157. mindspore/nn/layer/transformer.py +48 -26
  158. mindspore/nn/learning_rate_schedule.py +5 -3
  159. mindspore/nn/loss/loss.py +31 -36
  160. mindspore/nn/optim/ada_grad.py +1 -0
  161. mindspore/nn/optim/adadelta.py +2 -2
  162. mindspore/nn/optim/adam.py +1 -1
  163. mindspore/nn/optim/lars.py +1 -4
  164. mindspore/nn/optim/optimizer.py +1 -1
  165. mindspore/nn/optim/rprop.py +2 -2
  166. mindspore/nn/optim/thor.py +2 -1
  167. mindspore/nn/utils/__init__.py +22 -0
  168. mindspore/nn/utils/init.py +73 -0
  169. mindspore/nn/wrap/cell_wrapper.py +4 -6
  170. mindspore/nn/wrap/loss_scale.py +3 -4
  171. mindspore/numpy/array_creations.py +60 -62
  172. mindspore/numpy/array_ops.py +148 -143
  173. mindspore/numpy/logic_ops.py +41 -42
  174. mindspore/numpy/math_ops.py +361 -359
  175. mindspore/numpy/utils.py +16 -16
  176. mindspore/numpy/utils_const.py +4 -4
  177. mindspore/opencv_core452.dll +0 -0
  178. mindspore/opencv_imgcodecs452.dll +0 -0
  179. mindspore/opencv_imgproc452.dll +0 -0
  180. mindspore/ops/__init__.py +2 -1
  181. mindspore/ops/_grad_experimental/grad_comm_ops.py +107 -8
  182. mindspore/ops/_grad_experimental/grad_debug_ops.py +6 -1
  183. mindspore/ops/_grad_experimental/grad_inner_ops.py +9 -0
  184. mindspore/ops/_grad_experimental/grad_math_ops.py +2 -1
  185. mindspore/ops/_op_impl/cpu/__init__.py +1 -0
  186. mindspore/ops/_op_impl/cpu/raise_op.py +28 -0
  187. mindspore/ops/_vmap/vmap_array_ops.py +20 -19
  188. mindspore/ops/_vmap/vmap_base.py +0 -2
  189. mindspore/ops/_vmap/vmap_grad_nn_ops.py +19 -13
  190. mindspore/ops/_vmap/vmap_math_ops.py +11 -9
  191. mindspore/ops/_vmap/vmap_nn_ops.py +20 -34
  192. mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +149 -12
  193. mindspore/ops/auto_generate/gen_arg_handler.py +0 -61
  194. mindspore/ops/auto_generate/gen_extend_func.py +554 -60
  195. mindspore/ops/auto_generate/gen_ops_def.py +1621 -115
  196. mindspore/ops/auto_generate/gen_ops_prim.py +8027 -3411
  197. mindspore/ops/auto_generate/pyboost_inner_prim.py +183 -79
  198. mindspore/ops/composite/base.py +1 -1
  199. mindspore/ops/composite/multitype_ops/_compile_utils.py +229 -30
  200. mindspore/ops/composite/multitype_ops/pow_impl.py +0 -29
  201. mindspore/ops/function/__init__.py +12 -0
  202. mindspore/ops/function/array_func.py +561 -159
  203. mindspore/ops/function/clip_func.py +64 -0
  204. mindspore/ops/function/debug_func.py +28 -20
  205. mindspore/ops/function/image_func.py +1 -1
  206. mindspore/ops/function/linalg_func.py +5 -4
  207. mindspore/ops/function/math_func.py +1664 -294
  208. mindspore/ops/function/nn_func.py +988 -317
  209. mindspore/ops/function/parameter_func.py +3 -56
  210. mindspore/ops/function/random_func.py +243 -33
  211. mindspore/ops/function/sparse_unary_func.py +1 -1
  212. mindspore/ops/functional.py +18 -5
  213. mindspore/ops/functional_overload.py +897 -0
  214. mindspore/ops/operations/__init__.py +3 -2
  215. mindspore/ops/operations/_embedding_cache_ops.py +4 -4
  216. mindspore/ops/operations/_grad_ops.py +2 -34
  217. mindspore/ops/operations/_infer_ops.py +2 -1
  218. mindspore/ops/operations/_inner_ops.py +38 -8
  219. mindspore/ops/operations/array_ops.py +45 -303
  220. mindspore/ops/operations/comm_ops.py +23 -17
  221. mindspore/ops/operations/custom_ops.py +7 -49
  222. mindspore/ops/operations/debug_ops.py +42 -47
  223. mindspore/ops/operations/inner_ops.py +6 -4
  224. mindspore/ops/operations/linalg_ops.py +3 -2
  225. mindspore/ops/operations/manually_defined/ops_def.py +185 -104
  226. mindspore/ops/operations/math_ops.py +11 -216
  227. mindspore/ops/operations/nn_ops.py +153 -310
  228. mindspore/ops/primitive.py +23 -21
  229. mindspore/ops/tensor_method.py +1669 -0
  230. mindspore/ops_generate/aclnn_kernel_register_auto_cc_generator.py +110 -0
  231. mindspore/ops_generate/add_tensor_docs_generator.py +54 -0
  232. mindspore/ops_generate/arg_handler.py +0 -61
  233. mindspore/ops_generate/auto_grad_impl_cc_generator.py +135 -0
  234. mindspore/ops_generate/auto_grad_reg_cc_generator.py +93 -0
  235. mindspore/ops_generate/base_generator.py +11 -0
  236. mindspore/ops_generate/cpp_create_prim_instance_helper_generator.py +108 -0
  237. mindspore/ops_generate/functional_map_cpp_generator.py +491 -0
  238. mindspore/ops_generate/functional_overload_py_generator.py +110 -0
  239. mindspore/ops_generate/functions_cc_generator.py +233 -0
  240. mindspore/ops_generate/gen_aclnn_implement.py +110 -114
  241. mindspore/ops_generate/gen_constants.py +157 -3
  242. mindspore/ops_generate/gen_ops.py +245 -990
  243. mindspore/ops_generate/gen_pyboost_func.py +97 -998
  244. mindspore/ops_generate/gen_utils.py +119 -33
  245. mindspore/ops_generate/lite_ops_cpp_generator.py +155 -0
  246. mindspore/ops_generate/op_api_proto.py +206 -0
  247. mindspore/ops_generate/op_def_py_generator.py +131 -0
  248. mindspore/ops_generate/op_prim_py_generator.py +480 -0
  249. mindspore/ops_generate/op_proto.py +373 -108
  250. mindspore/ops_generate/op_template_parser.py +436 -0
  251. mindspore/ops_generate/ops_def_cc_generator.py +288 -0
  252. mindspore/ops_generate/ops_def_h_generator.py +74 -0
  253. mindspore/ops_generate/ops_name_h_generator.py +68 -0
  254. mindspore/ops_generate/ops_primitive_h_generator.py +81 -0
  255. mindspore/ops_generate/pyboost_functions_cpp_generator.py +370 -0
  256. mindspore/ops_generate/pyboost_functions_h_generator.py +68 -0
  257. mindspore/ops_generate/pyboost_functions_py_generator.py +148 -0
  258. mindspore/ops_generate/pyboost_grad_function_cpp_generator.py +154 -0
  259. mindspore/ops_generate/pyboost_inner_prim_generator.py +131 -0
  260. mindspore/ops_generate/pyboost_native_grad_functions_generator.py +268 -0
  261. mindspore/ops_generate/pyboost_op_cpp_code_generator.py +851 -0
  262. mindspore/ops_generate/pyboost_overload_functions_cpp_generator.py +344 -0
  263. mindspore/ops_generate/pyboost_utils.py +92 -33
  264. mindspore/ops_generate/template.py +294 -44
  265. mindspore/ops_generate/tensor_func_reg_cpp_generator.py +422 -0
  266. mindspore/parallel/__init__.py +3 -3
  267. mindspore/parallel/_auto_parallel_context.py +44 -34
  268. mindspore/parallel/_cell_wrapper.py +22 -3
  269. mindspore/parallel/_parallel_serialization.py +13 -2
  270. mindspore/parallel/_utils.py +4 -2
  271. mindspore/parallel/algo_parameter_config.py +1 -1
  272. mindspore/parallel/checkpoint_transform.py +44 -0
  273. mindspore/parallel/cluster/process_entity/_api.py +131 -37
  274. mindspore/parallel/cluster/process_entity/_utils.py +41 -6
  275. mindspore/parallel/cluster/run.py +20 -3
  276. mindspore/parallel/parameter_broadcast.py +1 -1
  277. mindspore/parallel/shard.py +3 -0
  278. mindspore/parallel/transform_safetensors.py +119 -253
  279. mindspore/pgodb140.dll +0 -0
  280. mindspore/pgort140.dll +0 -0
  281. mindspore/profiler/__init__.py +17 -4
  282. mindspore/profiler/analysis/__init__.py +0 -0
  283. mindspore/profiler/analysis/parser/__init__.py +0 -0
  284. mindspore/profiler/analysis/parser/ascend_cann_parser.py +166 -0
  285. mindspore/profiler/analysis/parser/base_parser.py +158 -0
  286. mindspore/profiler/analysis/parser/framework_cann_relation_parser.py +45 -0
  287. mindspore/profiler/analysis/parser/ms_framework_parser.py +142 -0
  288. mindspore/profiler/analysis/parser/ms_minddata_parser.py +145 -0
  289. mindspore/profiler/analysis/parser/timeline_assembly_factory/__init__.py +0 -0
  290. mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +261 -0
  291. mindspore/profiler/analysis/parser/timeline_assembly_factory/base_timeline_assembler.py +40 -0
  292. mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +84 -0
  293. mindspore/profiler/analysis/parser/timeline_creator/__init__.py +0 -0
  294. mindspore/profiler/analysis/parser/timeline_creator/base_timeline_creator.py +44 -0
  295. mindspore/profiler/analysis/parser/timeline_creator/cpu_op_timeline_creator.py +90 -0
  296. mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +76 -0
  297. mindspore/profiler/analysis/parser/timeline_creator/msprof_timeline_creator.py +103 -0
  298. mindspore/profiler/analysis/parser/timeline_creator/scope_layer_timeline_creator.py +134 -0
  299. mindspore/profiler/analysis/parser/timeline_event/__init__.py +0 -0
  300. mindspore/profiler/analysis/parser/timeline_event/base_event.py +233 -0
  301. mindspore/profiler/analysis/parser/timeline_event/cpu_op_event.py +47 -0
  302. mindspore/profiler/analysis/parser/timeline_event/flow_event.py +36 -0
  303. mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +260 -0
  304. mindspore/profiler/analysis/parser/timeline_event/msprof_event.py +73 -0
  305. mindspore/profiler/analysis/parser/timeline_event/scope_layer_event.py +53 -0
  306. mindspore/profiler/analysis/parser/timeline_event/timeline_event_pool.py +146 -0
  307. mindspore/profiler/analysis/task_manager.py +131 -0
  308. mindspore/profiler/analysis/time_converter.py +84 -0
  309. mindspore/profiler/analysis/viewer/__init__.py +0 -0
  310. mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +333 -0
  311. mindspore/profiler/analysis/viewer/ascend_integrate_viewer.py +87 -0
  312. mindspore/profiler/analysis/viewer/ascend_kernel_details_viewer.py +252 -0
  313. mindspore/profiler/analysis/viewer/ascend_memory_viewer.py +313 -0
  314. mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +322 -0
  315. mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +265 -0
  316. mindspore/profiler/analysis/viewer/ascend_timeline_viewer.py +58 -0
  317. mindspore/profiler/analysis/viewer/base_viewer.py +26 -0
  318. mindspore/profiler/analysis/viewer/ms_dataset_viewer.py +97 -0
  319. mindspore/profiler/analysis/viewer/ms_minddata_viewer.py +581 -0
  320. mindspore/profiler/analysis/work_flow.py +73 -0
  321. mindspore/profiler/common/ascend_msprof_exporter.py +138 -0
  322. mindspore/profiler/common/command_executor.py +90 -0
  323. mindspore/profiler/common/constant.py +174 -3
  324. mindspore/profiler/common/file_manager.py +208 -0
  325. mindspore/profiler/common/log.py +130 -0
  326. mindspore/profiler/common/msprof_cmd_tool.py +202 -0
  327. mindspore/profiler/common/path_manager.py +371 -0
  328. mindspore/profiler/common/process_bar.py +168 -0
  329. mindspore/profiler/common/process_pool.py +9 -3
  330. mindspore/profiler/common/profiler_context.py +476 -0
  331. mindspore/profiler/common/profiler_info.py +304 -0
  332. mindspore/profiler/common/profiler_output_path.py +284 -0
  333. mindspore/profiler/common/profiler_parameters.py +210 -0
  334. mindspore/profiler/common/profiler_path_manager.py +120 -0
  335. mindspore/profiler/common/record_function.py +76 -0
  336. mindspore/profiler/common/tlv_decoder.py +76 -0
  337. mindspore/profiler/common/util.py +75 -2
  338. mindspore/profiler/dynamic_profiler.py +270 -37
  339. mindspore/profiler/envprofiler.py +138 -0
  340. mindspore/profiler/mstx.py +199 -0
  341. mindspore/profiler/platform/__init__.py +21 -0
  342. mindspore/profiler/platform/base_profiler.py +40 -0
  343. mindspore/profiler/platform/cpu_profiler.py +124 -0
  344. mindspore/profiler/platform/gpu_profiler.py +74 -0
  345. mindspore/profiler/platform/npu_profiler.py +309 -0
  346. mindspore/profiler/profiler.py +580 -93
  347. mindspore/profiler/profiler_action_controller.py +187 -0
  348. mindspore/profiler/profiler_interface.py +114 -0
  349. mindspore/profiler/schedule.py +208 -0
  350. mindspore/rewrite/api/symbol_tree.py +1 -2
  351. mindspore/run_check/_check_version.py +18 -13
  352. mindspore/runtime/__init__.py +37 -0
  353. mindspore/runtime/device.py +27 -0
  354. mindspore/runtime/event.py +209 -0
  355. mindspore/runtime/executor.py +148 -0
  356. mindspore/runtime/memory.py +392 -0
  357. mindspore/runtime/stream.py +460 -0
  358. mindspore/runtime/thread_bind_core.py +401 -0
  359. mindspore/swresample-4.dll +0 -0
  360. mindspore/swscale-6.dll +0 -0
  361. mindspore/tbbmalloc.dll +0 -0
  362. mindspore/tinyxml2.dll +0 -0
  363. mindspore/train/__init__.py +2 -2
  364. mindspore/train/_utils.py +53 -18
  365. mindspore/train/amp.py +8 -4
  366. mindspore/train/callback/_checkpoint.py +32 -18
  367. mindspore/train/callback/_early_stop.py +1 -1
  368. mindspore/train/callback/_flops_collector.py +105 -69
  369. mindspore/train/callback/_history.py +1 -1
  370. mindspore/train/callback/_summary_collector.py +44 -6
  371. mindspore/train/callback/_tft_register.py +37 -15
  372. mindspore/train/dataset_helper.py +11 -11
  373. mindspore/train/metrics/precision.py +4 -5
  374. mindspore/train/mind_ir_pb2.py +167 -46
  375. mindspore/train/model.py +13 -14
  376. mindspore/train/serialization.py +461 -72
  377. mindspore/train/summary/summary_record.py +1 -2
  378. mindspore/train/train_thor/model_thor.py +1 -1
  379. mindspore/turbojpeg.dll +0 -0
  380. mindspore/utils/__init__.py +4 -2
  381. mindspore/utils/dryrun.py +138 -0
  382. mindspore/utils/runtime_execution_order_check.py +550 -0
  383. mindspore/vcmeta.dll +0 -0
  384. mindspore/vcruntime140.dll +0 -0
  385. mindspore/vcruntime140_1.dll +0 -0
  386. mindspore/version.py +1 -1
  387. {mindspore-2.4.1.dist-info → mindspore-2.5.0.dist-info}/METADATA +3 -4
  388. {mindspore-2.4.1.dist-info → mindspore-2.5.0.dist-info}/RECORD +391 -265
  389. {mindspore-2.4.1.dist-info → mindspore-2.5.0.dist-info}/entry_points.txt +1 -1
  390. mindspore/common/_tensor_overload.py +0 -139
  391. mindspore/mindspore_np_dtype.dll +0 -0
  392. mindspore/profiler/envprofiling.py +0 -254
  393. mindspore/profiler/profiling.py +0 -1926
  394. {mindspore-2.4.1.dist-info → mindspore-2.5.0.dist-info}/WHEEL +0 -0
  395. {mindspore-2.4.1.dist-info → mindspore-2.5.0.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,4 @@
1
- # Copyright 2023 Huawei Technologies Co., Ltd
1
+ # Copyright 2024 Huawei Technologies Co., Ltd
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -16,1037 +16,136 @@
16
16
  Generate pyboost function from pyboost_op.yaml
17
17
  """
18
18
 
19
- import os
20
- import re
21
- import pathlib
22
- from dataclasses import dataclass
23
- import pyboost_utils
24
- from pyboost_utils import get_convert_type_str, get_input_dtype, get_return_type, tuple_input_to_cpp_type, \
25
- number_input_to_cpp_type, get_const_number_convert, get_tuple_input_convert, get_pyboost_name, is_cube, \
26
- AclnnUtils, get_disable_flag, is_optional_param, get_value_convert_type_str, is_pyboost_enable
27
- import template
28
- from template import CppTemplate
29
- from op_proto import OpProto
30
- from gen_utils import check_change_and_replace_file, py_licence_str, write_file
31
- import gen_constants as K
32
-
33
-
34
- @dataclass
35
- class FuncHeaderData:
36
- work_path: str
37
- op_header_template_path: list
38
- code_generate_path: list
39
- op_name_str: str
40
- operator_name: str
41
- call_args_with_type: list
42
- cpp_func_return: str
43
-
44
-
45
- def generate_pyboost_base_op_header_code(work_path, op_name_str, operator_name, call_args_with_type, cpp_func_return):
46
- """ generate_pyboost_base_op_header_code """
47
- pyboost_op_header_str = template.PYBOOST_BASE_OP_DEFINE_TEMPLATE.replace(op_name=op_name_str,
48
- op_name_upper=op_name_str.upper(),
49
- call_args=call_args_with_type,
50
- return_type=cpp_func_return)
51
- op_header_dir_path = os.path.join(work_path, f"{K.MS_COMMON_PYBOOST_KERNEL_PATH}/auto_generate/")
52
- pathlib.Path(op_header_dir_path).mkdir(parents=True, exist_ok=True)
53
- tmp_op_file_path = os.path.join(op_header_dir_path, "tmp_" + operator_name + ".h")
54
- dst_op_file_path = os.path.join(op_header_dir_path, operator_name + ".h")
55
- write_file(tmp_op_file_path, pyboost_op_header_str)
56
- check_change_and_replace_file(dst_op_file_path, tmp_op_file_path)
57
-
58
-
59
- def generate_pyboost_op_header_code(header_data: FuncHeaderData):
60
- """ generate_pyboost_op_header_code """
61
-
62
- for tpl_path, gen_path in zip(header_data.op_header_template_path, header_data.code_generate_path):
63
- pyboost_op_str = tpl_path.replace(op_name=header_data.op_name_str,
64
- op_name_upper=header_data.op_name_str.upper(),
65
- operator_name=header_data.operator_name,
66
- call_args_with_type=header_data.call_args_with_type,
67
- return_type=header_data.cpp_func_return)
68
- op_header_dir_path = os.path.join(header_data.work_path, gen_path)
69
- pathlib.Path(op_header_dir_path).mkdir(parents=True, exist_ok=True)
70
- tmp_op_file_path = os.path.join(op_header_dir_path, "tmp_" + header_data.operator_name + ".h")
71
- dst_op_file_path = os.path.join(op_header_dir_path, header_data.operator_name + ".h")
72
- write_file(tmp_op_file_path, pyboost_op_str)
73
- check_change_and_replace_file(dst_op_file_path, tmp_op_file_path)
74
-
75
-
76
- class TemplatePaths:
77
- """
78
- template paths for code auto generation
79
- """
80
-
81
- def __init__(self, op_header_template_path, op_call_template_path, op_source_template_path, op_custom_template_path,
82
- op_view_template_path, code_generate_path):
83
- self.op_header_template_path = op_header_template_path
84
- self.op_call_template_path = op_call_template_path
85
- self.op_source_template_path = op_source_template_path
86
- self.op_custom_template_path = op_custom_template_path
87
- self.op_view_template_path = op_view_template_path
88
- self.code_generate_path = code_generate_path
89
-
90
-
91
- def generate_malloc_input(need_malloc_tensors):
92
- """
93
- generate malloc inputs
94
- :param need_malloc_tensors:
95
- :return:
96
- """
97
- malloc_inputs = ''
98
- args_list = ''
99
- for item in need_malloc_tensors:
100
- args_list += f'{item}, '
101
- args_list = args_list[:-2]
102
- if args_list:
103
- malloc_inputs += f'PyBoostUtils::MallocOpInputs(device_context, {args_list});\n'
104
- return malloc_inputs
105
-
106
-
107
- def generate_get_inputs_kernel_tensors(call_args):
108
- """
109
- generate get inputs kernel tensors
110
- :param call_args:
111
- :return:
112
- """
113
- inputs_kernel_tensors = ''
114
- args_list = ''
115
- for item in call_args:
116
- args_list += f'{item}, '
117
- args_list = args_list[:-2]
118
- if args_list:
119
- inputs_kernel_tensors += f'const auto &input_address_info = PyBoostUtils::GetAddressInfo(' \
120
- f'device_context, op->stream_id(), op->input_abs(), {args_list});\n'
121
- return inputs_kernel_tensors
122
-
123
-
124
- def generate_create_input_address(need_malloc_tensors):
125
- """create input address"""
126
- create_input_address = ''
127
- args_list = ''
128
- for item in need_malloc_tensors:
129
- args_list += f'{item}, '
130
- args_list = args_list[:-2]
131
- if args_list:
132
- create_input_address = f'PyBoostUtils::PrepareOpInputs(device_context_, op->stream_id(), {args_list});\n'
133
- return create_input_address
134
-
135
-
136
- def generate_tensor_cpu_cast_input_code(call_args_with_tensor, call_tensors):
137
- """ generate_tensor_cpu_cast_input_code """
138
- cast_input = ""
139
- real_call_args_tensor = call_args_with_tensor.copy()
140
- for i, tensor in enumerate(call_args_with_tensor):
141
- is_tuple_tensor = real_call_args_tensor[i].endswith("_vector")
142
- is_tensor = real_call_args_tensor[i] in call_tensors
143
- if is_tensor:
144
- cast_input += f'const auto &real_{tensor} = PyBoostUtils::CastTensor({tensor}, ' \
145
- f'select_kernel.input_type()[{i}].dtype, "CPU");\n'
146
- real_call_args_tensor[i] = "real_" + real_call_args_tensor[i]
147
- if is_tuple_tensor:
148
- cast_input += f'const auto &real_{tensor} = PyBoostUtils::CastTensor({tensor}, ' \
149
- f'select_kernel.input_type()[{i}].dtype, "CPU");\n'
150
- real_call_args_tensor[i] = "PyBoostUtils::ConvertTensorVectorToTuple(real_" + real_call_args_tensor[i] + ")"
151
- if cast_input != "":
152
- cast_input = "auto &select_kernel = kernel_attr_pair.second;\n" + cast_input
153
- return cast_input, real_call_args_tensor
154
-
155
-
156
- def generate_pyboost_op_source_code(work_path, op_proto, template_paths, converter):
157
- """ generate_pyboost_op_source_code """
158
- # PyBoost source generate
159
- operator_name = converter.functional_name
160
- call_args_tensor = []
161
- for type, arg_name in zip(converter.call_args_types, converter.call_args):
162
- if type in ("BaseTensorPtr", "std::optional<BaseTensorPtr>"):
163
- call_args_tensor.append(arg_name)
164
-
165
- for call_tpl, src_tpl, view_tpl, cus_tpl, gen_path in zip(template_paths.op_call_template_path,
166
- template_paths.op_source_template_path,
167
- template_paths.op_view_template_path,
168
- template_paths.op_custom_template_path,
169
- template_paths.code_generate_path):
170
- is_ascend = 'ascend' in gen_path
171
- is_cpu = 'cpu' in gen_path
172
- is_gpu = 'gpu' in gen_path
173
- malloc_inputs = generate_malloc_input(converter.need_malloc_tensors)
174
- create_input_address = generate_create_input_address(converter.need_malloc_tensors)
175
- get_inputs_kernel_tensors = generate_get_inputs_kernel_tensors(converter.call_args_with_tensor)
176
-
177
- # call_impl
178
- call_impl = ''
179
- customize_include = ''
180
- op_name_str = op_proto.class_name
181
- cube_math_type = ''
182
- get_cube_math_type = ''
183
- real_output = ', ' + converter.op_outputs
184
- proto_operator_name = op_proto.operator_name
185
- register_custom_kernel = ''
186
- if is_ascend and op_proto.ascend != 'default':
187
- call_impl = cus_tpl.replace(call_args=converter.call_args,
188
- return_values=converter.call_func_outputs,
189
- customize_func=op_proto.ascend + "Customize",
190
- )
191
- customize_include = f'#include "{K.MS_OPS_KERNEL_PATH}/ascend/pyboost/customize/{operator_name.lower()}.h"'
192
- elif is_cpu and op_proto.cpu != 'default':
193
- call_impl = cus_tpl.replace(call_args=converter.call_args,
194
- return_values=converter.call_func_outputs,
195
- customize_func=op_proto.cpu + "Customize",
196
- )
197
- customize_include = f'#include "{K.MS_OPS_KERNEL_PATH}/cpu/pyboost/customize/{operator_name.lower()}.h"'
198
- register_custom_kernel = "MS_REG_PYBOOST_CPU_CUSTOM_KERNEL({});".format(op_name_str)
199
- elif is_gpu and op_proto.gpu != 'default':
200
- call_impl = cus_tpl.replace(call_args=converter.call_args,
201
- return_values=converter.call_func_outputs,
202
- customize_func=op_proto.gpu + "Customize",
203
- )
204
- customize_include = f'#include "{K.MS_OPS_KERNEL_PATH}/gpu/pyboost/customize/{operator_name.lower()}.h"'
205
- register_custom_kernel = "MS_REG_PYBOOST_GPU_CUSTOM_KERNEL({});".format(op_name_str)
206
- elif op_proto.is_view:
207
- call_impl = view_tpl.replace(op_name=op_proto.class_name,
208
- call_args=converter.call_args,
209
- call_tensors=call_args_tensor,
210
- return_values=converter.call_func_outputs,
211
- input=converter.call_args[0])
212
- customize_include = f'#include "{K.MS_OPS_VIEW_PATH}/{proto_operator_name}_strides_calc.h"'
213
- else:
214
- cast_input_code, real_call_args_tensor = generate_tensor_cpu_cast_input_code(
215
- converter.call_args_with_tensor, call_args_tensor)
216
- if is_ascend and is_cube(op_proto.class_name):
217
- get_cube_math_type = f'// cubeMathType: 0 - KEEP_DTYPE, 1 - ALLOW_FP32_DOWN_PRECISION\n'
218
- get_cube_math_type += "auto cube_math_type = GetCubeMathType();"
219
- cube_math_type = ', cube_math_type'
220
- aclnn_name = AclnnUtils.get_aclnn_interface(op_name_str)
221
- if converter.inplace_process != '':
222
- real_output = ''
223
- customize_include = f'#include "{K.MS_OP_DEF_AUTO_GENERATE_PATH}/gen_ops_primitive.h"'
224
-
225
- call_impl = call_tpl.replace(aclnn_name=aclnn_name,
226
- call_args=converter.call_args,
227
- call_tensors=call_args_tensor,
228
- value_tuple_convert=converter.value_tuple_convert,
229
- const_number_convert=converter.const_number_convert,
230
- create_input_address=create_input_address,
231
- tensor_list_convert=converter.tensor_list_convert,
232
- call_args_with_tensor=converter.call_args_with_tensor,
233
- malloc_inputs=malloc_inputs,
234
- get_inputs_kernel_tensors=get_inputs_kernel_tensors,
235
- get_cube_math_type=get_cube_math_type,
236
- cube_math_type=cube_math_type,
237
- real_call_args=converter.call_args_after_convert,
238
- return_values=converter.call_func_outputs,
239
- outputs=real_output,
240
- inplace_process=converter.inplace_process,
241
- cast_input_code=cast_input_code,
242
- real_call_args_tensor=real_call_args_tensor,
243
- class_name=op_proto.class_name,
244
- op_name_str=op_name_str)
245
-
246
- pyboost_op_source_str = src_tpl.replace(op_name=op_name_str,
247
- operator_name=operator_name,
248
- call_args_with_type=converter.call_args_with_types,
249
- return_type=converter.cpp_func_return,
250
- customize_include=customize_include,
251
- call_impl=call_impl,
252
- register_custom_kernel=register_custom_kernel)
253
- op_header_dir_path = os.path.join(work_path, gen_path)
254
- tmp_op_source_file_path = os.path.join(op_header_dir_path, "tmp_" + operator_name.lower() + ".cc")
255
- dst_op_source_file_path = os.path.join(op_header_dir_path, operator_name.lower() + ".cc")
256
- write_file(tmp_op_source_file_path, pyboost_op_source_str)
257
- check_change_and_replace_file(dst_op_source_file_path, tmp_op_source_file_path)
258
-
259
-
260
- def generate_pyboost_op_register_source_code(work_path, all_ops, all_operator_names):
261
- """ generate_pyboost_op_register_source_code """
262
- include_str = ''
263
- factory_str = ''
264
- for op_name in all_ops:
265
- factory_str += "template class OpFactory<{0}>;\n".format(op_name)
266
- for operator_name in all_operator_names:
267
- include_str += f'#include "{K.MS_COMMON_PYBOOST_KERNEL_PATH}/auto_generate/{operator_name}.h"\n'
268
- op_register_file_str = template.PYBOOST_OP_REGISTER_TEMPLATE.replace(op_includes=include_str,
269
- op_factory_templates=factory_str)
270
- op_register_dir_path = os.path.join(work_path, f"{K.MS_COMMON_PYBOOST_KERNEL_PATH}/auto_generate/")
271
- pathlib.Path(op_register_dir_path).mkdir(parents=True, exist_ok=True)
272
- tmp_op_register_file_path = os.path.join(op_register_dir_path, "tmp_" + "op_register.cc")
273
- dst_op_register_file_path = os.path.join(op_register_dir_path, "op_register.cc")
274
- write_file(tmp_op_register_file_path, op_register_file_str)
275
- check_change_and_replace_file(dst_op_register_file_path, tmp_op_register_file_path)
276
-
277
-
278
- def generate_pyboost_op_return_code(op_proto):
279
- """ generate_pyboost_op_return_code """
280
- returns_type = []
281
- for return_obj in op_proto.returns:
282
- returns_type.append(get_return_type(return_obj.arg_dtype))
283
- if len(returns_type) == 1:
284
- cpp_func_return = returns_type[0]
285
- elif not returns_type:
286
- raise Exception("No return")
287
- else:
288
- cpp_func_return = "std::tuple("
289
- cpp_func_return += ','.join(s for s in returns_type)
290
- cpp_func_return += ")"
291
- return returns_type, cpp_func_return
292
-
293
-
294
- def generate_pyboost_op_func_return_type(op_proto):
295
- """ generate_pyboost_op_func_return_type """
296
- returns_type = []
297
- type_convert_to_base = {
298
- 'std::vector<tensor::TensorPtr>': 'std::vector<tensor::BaseTensorPtr>',
299
- 'tensor::TensorPtr': 'tensor::BaseTensorPtr'
300
- }
301
- for return_obj in op_proto.returns:
302
- temp_return = get_return_type(return_obj.arg_dtype)
303
- if temp_return in type_convert_to_base:
304
- returns_type.append(type_convert_to_base[temp_return])
305
- else:
306
- raise Exception("Not return found")
307
- if len(returns_type) == 1:
308
- cpp_func_return = returns_type[0]
309
- elif len(returns_type) > 1:
310
- cpp_func_return = "std::tuple<"
311
- cpp_func_return += ','.join(s for s in returns_type)
312
- cpp_func_return += ">"
313
- else:
314
- raise Exception("Not return found")
315
- return cpp_func_return
316
-
317
-
318
- def generate_pyboost_outputs(op_proto):
319
- """ generate_pyboost_outputs """
320
- op_outputs = ''
321
- call_outputs = ''
322
- returns_type = []
323
- for return_obj in op_proto.returns:
324
- returns_type.append(get_return_type(return_obj.arg_dtype))
325
-
326
- if len(returns_type) == 1:
327
- if returns_type[0] == 'tensor::TensorPtr':
328
- op_outputs = 'outputs[0]'
329
- call_outputs = 'outputs_[0]'
330
- elif returns_type[0] == "std::vector<tensor::TensorPtr>":
331
- op_outputs = 'outputs'
332
- call_outputs = 'outputs_'
333
- else:
334
- raise Exception("Not support return type {}".format(returns_type[0]))
335
- elif len(returns_type) > 1:
336
- outputs_str = ''
337
- for i in range(len(returns_type)):
338
- outputs_str += 'outputs[{}],'.format(i)
339
- op_outputs = outputs_str[:-1]
340
-
341
- outputs_str = ''
342
- for i in range(len(returns_type)):
343
- outputs_str += 'outputs_[{}],'.format(i)
344
- outputs_str = outputs_str[:-1]
345
- call_outputs = "std::make_tuple(" + outputs_str + ")"
346
-
347
- return op_outputs, call_outputs
348
-
349
-
350
- def generate_ops_header_files(work_path, yaml_data, extra_ops=None):
351
- """
352
- :param work_path:
353
- :param yaml_data:
354
- :prama extra_ops(default:None):
355
- :return: void
356
- """
357
- extern_str = ''
358
- extern_template = CppTemplate("OPS_API extern OpDef g${op_name};\n")
359
- for operator_name, operator_data in yaml_data.items():
360
- op_proto = OpProto.load_from_yaml(operator_name, operator_data)
361
- extern_str += extern_template.replace(op_name=op_proto.class_name)
362
- for class_name in extra_ops:
363
- extern_str += extern_template.replace(op_name=class_name)
364
- ops_header_file = template.GEN_OPS_DEF_HEADER_TEMPLATE.replace(extern_variable=extern_str)
365
- dir_path = os.path.join(work_path, K.MS_OP_DEF_AUTO_GENERATE_PATH)
366
- pathlib.Path(dir_path).mkdir(parents=True, exist_ok=True)
367
- dst_file_path = os.path.join(dir_path, "gen_ops_def.h")
368
- tmp_file_path = os.path.join(dir_path, "tmp_gen_ops_def.h")
369
- write_file(tmp_file_path, ops_header_file)
370
- check_change_and_replace_file(dst_file_path, tmp_file_path)
371
-
372
-
373
- def generate_parser_func(op_proto: OpProto) -> str:
374
- """
375
- Generate parser func
376
- :param op_proto:
377
- :return: str
378
- """
379
- convert_template = CppTemplate("auto $arg_name = converter.${convert_func}(args, $arg_index);\n")
380
- parser_func_str = ''
381
- for index, arg in enumerate(op_proto.op_args):
382
- is_optional = is_optional_param(arg)
383
- if arg.is_type_id:
384
- arg.arg_dtype = 'type'
385
- convert_type_str = get_convert_type_str(arg.arg_dtype, is_optional)
386
- parser_func_str += convert_template.replace(arg_name=arg.arg_name, convert_func=convert_type_str,
387
- arg_index=pyboost_utils.get_index(index))
388
- return parser_func_str
389
-
390
-
391
- def get_convert_tensor_template():
392
- """
393
- Get convert tensor template
394
- """
395
- convert_to_tensor_template = CppTemplate(
396
- 'auto ${output} = PyNativeAlgo::Common::ConvertStubNodeToTensor(${input}, ${need_contiguous}, ' \
397
- 'op_run_info->requires_grad);\n')
398
- convert_to_tensor_list_template = CppTemplate(
399
- 'auto ${output} = PyNativeAlgo::Common::ConvertStubNodeToValueTuple(${input}, ${need_contiguous}, ' \
400
- 'op_run_info->requires_grad);\n')
401
- return convert_to_tensor_template, convert_to_tensor_list_template
402
-
403
-
404
- def generate_pyboost_functions(work_path, yaml_data):
405
- """
406
- Generate pyboost functions file from yaml.
407
- """
408
- pyboost_func_str = ''
409
- pyboost_func_pybind_def = ''
410
- pyboost_func_include_headers_str = ''
411
- pyboost_func_include_header_template = CppTemplate(
412
- f'#include "{K.MS_COMMON_PYBOOST_KERNEL_PATH}/auto_generate/${{operator_name}}.h"\n')
413
- for operator_name, operator_data in yaml_data.items():
414
- op_proto = OpProto.load_from_yaml(operator_name, operator_data)
415
- if not op_proto.is_dispatch:
416
- continue
417
- op_def_name_str = f"g{op_proto.class_name}"
418
- operator_name = op_proto.operator_name
419
- op_name_str = op_proto.class_name
420
- op_args_str = [op_arg.arg_name for op_arg in op_proto.op_args]
421
- parser_body_str = generate_parser_func(op_proto)
422
- convert_to_tensor_template, convert_to_tensor_list_template = get_convert_tensor_template()
423
-
424
- grad_args_str = []
425
- call_args_str = []
426
- cast_args_str = []
427
- convert_stub_str = ''
428
- optional_to_value_str = ''
429
- need_contiguous = 'true'
430
- value_str = '_value'
431
- if op_proto.is_view:
432
- # view/aclnn op no need to contiguous tensor.
433
- need_contiguous = 'false'
434
- for op_arg in op_proto.op_args:
435
- cast_str = 'cast_'
436
- convert_optional_to_value_template = CppTemplate(
437
- "auto ${output} = PyNativeAlgo::PyBoost::OptionalToValue(${input});\n")
438
- if pyboost_utils.is_tensor(op_arg):
439
- if is_optional_param(op_arg):
440
- convert_stub_output_name = op_arg.arg_name + '_optional'
441
- convert_stub_str += convert_to_tensor_template.replace(output=convert_stub_output_name,
442
- input=op_arg.arg_name,
443
- need_contiguous=need_contiguous)
444
- cast_output = cast_str + convert_stub_output_name
445
-
446
- convert_optional_to_value_name = op_arg.arg_name + value_str
447
- optional_to_value_str += \
448
- convert_optional_to_value_template.replace(input=cast_output,
449
- output=convert_optional_to_value_name)
450
- call_arg = convert_stub_output_name
451
- grad_arg = convert_optional_to_value_name
452
- cast_arg = cast_output
453
- else:
454
- convert_stub_output_name = op_arg.arg_name + "_tensor"
455
- convert_stub_str += convert_to_tensor_template.replace(input=op_arg.arg_name,
456
- output=convert_stub_output_name,
457
- need_contiguous=need_contiguous)
458
- call_arg = convert_stub_output_name
459
- grad_arg = cast_str + convert_stub_output_name
460
- cast_arg = grad_arg
461
- elif pyboost_utils.is_tensor_list(op_arg):
462
- if is_optional_param(op_arg):
463
- # to adapt the cases that TensorList is optional.
464
- convert_stub_output_name = op_arg.arg_name + '_optional'
465
- convert_stub_str += convert_to_tensor_list_template.replace(output=convert_stub_output_name,
466
- input=op_arg.arg_name,
467
- need_contiguous=need_contiguous)
468
- cast_output = cast_str + convert_stub_output_name
469
-
470
- convert_optional_to_value_name = op_arg.arg_name + value_str
471
- optional_to_value_str += \
472
- convert_optional_to_value_template.replace(input=cast_output,
473
- output=convert_optional_to_value_name)
474
- call_arg = convert_stub_output_name
475
- grad_arg = convert_optional_to_value_name
476
- cast_arg = cast_output
477
- else:
478
- convert_stub_output_name = op_arg.arg_name + "_tensor_list"
479
- convert_stub_str += convert_to_tensor_list_template.replace(input=op_arg.arg_name,
480
- output=convert_stub_output_name,
481
- need_contiguous=need_contiguous)
482
- call_arg = convert_stub_output_name
483
- grad_arg = cast_str + convert_stub_output_name
484
- cast_arg = grad_arg
485
- else:
486
- call_arg = op_arg.arg_name
487
- grad_arg = cast_str + op_arg.arg_name
488
- cast_arg = grad_arg
489
- if is_optional_param(op_arg):
490
- convert_optional_to_value_name = op_arg.arg_name + value_str
491
- optional_to_value_str += \
492
- convert_optional_to_value_template.replace(input=call_arg,
493
- output=convert_optional_to_value_name)
494
- grad_arg = convert_optional_to_value_name
495
- grad_args_str.append(grad_arg)
496
- call_args_str.append(call_arg)
497
- cast_args_str.append(cast_arg)
498
- type_num, same_type = gen_signature_same_type_table(op_proto.indexes, operator_data)
499
-
500
- funcion_tpl = template.PYBOOS_COMM_FUNCTION_TEMPLATE \
501
- if op_proto.is_comm_op else template.PYBOOST_FUNCTION_TEMPLATE
502
- pyboost_func_str += funcion_tpl.replace(func_name=op_proto.pyboost_function_name,
503
- op_def_name=op_def_name_str, same_type=same_type,
504
- type_num=type_num, parser_body=parser_body_str,
505
- op_name=op_name_str,
506
- convert_stub=convert_stub_str,
507
- optional_to_value=optional_to_value_str,
508
- call_args=call_args_str, grad_args=grad_args_str,
509
- cast_args=cast_args_str, op_args=op_args_str,
510
- class_name=op_proto.class_name)
511
- pyboost_func_str = pyboost_func_str + template.NEW_LINE + template.NEW_LINE
512
- pyboost_func_pybind_def += template.REGISTER_DEFINE_TEMPLATE.replace(
513
- pyboost_op_name=get_pyboost_name(op_proto.operator_name),
514
- pyboost_cfunc_name=op_proto.pyboost_function_name, class_name=op_proto.class_name)
515
- pyboost_func_include_headers_str += pyboost_func_include_header_template.replace(operator_name=operator_name)
516
- register_func_str = template.REGISTER_TEMPLATE.replace(register_func=pyboost_func_pybind_def)
517
- pyboost_func_file = template.PYBOOST_HEADER_TEMPLATE.replace(include_op_header=pyboost_func_include_headers_str,
518
- function_body=pyboost_func_str,
519
- register_function_body=register_func_str)
520
- dir_path = os.path.join(work_path, "mindspore/ccsrc/pipeline/pynative/op_function/auto_generate")
521
- pathlib.Path(dir_path).mkdir(parents=True, exist_ok=True)
522
- tmp_file_path = os.path.join(dir_path, "tmp_pyboost_functions.cc")
523
- dst_file_path = os.path.join(dir_path, "pyboost_functions.cc")
524
- write_file(tmp_file_path, pyboost_func_file)
525
- check_change_and_replace_file(dst_file_path, tmp_file_path)
526
-
527
-
528
- def convert_value_type(op_proto: OpProto) -> str:
529
- """
530
- Generate parser func
531
- :param op_proto:
532
- :return: str
533
- """
534
- convert_template = CppTemplate(
535
- "auto convert_$arg_name = ValueConverter::${convert_func}(op_runner_info->inputs[$arg_index]);\n")
536
- parser_func_str = ''
537
- for index, arg in enumerate(op_proto.op_args):
538
- is_optional = is_optional_param(arg)
539
- convert_type_str = get_value_convert_type_str(arg.arg_dtype, is_optional)
540
- parser_func_str += convert_template.replace(arg_name=arg.arg_name, convert_func=convert_type_str,
541
- arg_index=pyboost_utils.get_index(index))
542
- return parser_func_str
543
-
544
-
545
- def convert_native_value_type(op_proto: OpProto) -> str:
546
- """
547
- Generate native convert func
548
- :param op_proto:
549
- :return: str
550
- """
551
- convert_template = CppTemplate(
552
- "auto convert_$arg_name = runtime::ValueConverter::${convert_func}(ConvertNode2Value($arg_name));\n")
553
- parser_func_str = ''
554
- for arg in op_proto.op_args:
555
- is_optional = is_optional_param(arg)
556
- convert_type_str = get_value_convert_type_str(arg.arg_dtype, is_optional)
557
- parser_func_str += convert_template.replace(arg_name=arg.arg_name, convert_func=convert_type_str)
558
- return parser_func_str
559
-
560
-
561
- def contiguous_tensor_value(op_proto: OpProto, device_target: str) -> str:
562
- """
563
- Generate parser func
564
- :param device_target:
565
- :param op_proto:
566
- :return: str
567
- """
568
- # Do nothing in view op
569
- if op_proto.is_view:
570
- return ''
571
- contiguous_template = CppTemplate(
572
- "convert_$arg_name = runtime::ValueConverter::ContiguousTensorValue($device_target, convert_$arg_name);\n")
573
- contiguous_func_str = ''
574
- need_contiguous_dtype = {'tensor', 'tuple[tensor]'}
575
- for arg in op_proto.op_args:
576
- if arg.arg_dtype not in need_contiguous_dtype:
577
- continue
578
- contiguous_func_str += contiguous_template.replace(arg_name=arg.arg_name, device_target=device_target)
579
- return contiguous_func_str
580
-
19
+ from pyboost_inner_prim_generator import PyboostInnerPrimGenerator
20
+ from pyboost_functions_py_generator import PyboostFunctionsPyGenerator
21
+ from pyboost_functions_h_generator import PyboostFunctionsHeaderGenerator
22
+ from pyboost_functions_cpp_generator import PyboostFunctionsGenerator
23
+ from pyboost_grad_function_cpp_generator import PyboostGradFunctionsGenerator
24
+ from pyboost_native_grad_functions_generator import (
25
+ PyboostGradFunctionsHeaderGenerator,
26
+ PyboostGradFunctionsCppGenerator,
27
+ )
28
+ from pyboost_op_cpp_code_generator import (
29
+ PyboostCommonOpHeaderGenerator,
30
+ PyboostOpFunctionGenerator,
31
+ PyboostOpHeaderGenerator,
32
+ delete_residual_files,
33
+ PyboostOpRegisterCppCodeGenerator,
34
+ )
35
+ from pyboost_overload_functions_cpp_generator import PyboostOverloadFunctionsGenerator
36
+ from auto_grad_impl_cc_generator import AutoGradImplGenerator
37
+ from auto_grad_reg_cc_generator import AutoGradRegHeaderGenerator
38
+ from functions_cc_generator import FunctionsGenerator, FunctionsHeaderGenerator
39
+
40
+
41
+ def gen_pyboost_code(work_path, op_protos, doc_yaml_data, tensor_method_protos, mint_func_protos, alias_func_mapping):
42
+ """ gen_pyboost_code """
43
+ call_pyboost_inner_prim_generator(work_path, op_protos)
44
+ call_pyboost_functions_py_generator(work_path, op_protos, doc_yaml_data)
45
+ call_pyboost_functions_h_generator(work_path, op_protos)
46
+ call_pyboost_functions_cpp_generator(work_path, op_protos, tensor_method_protos)
47
+ call_pyboost_overload_functions_cpp_generator(work_path, op_protos, mint_func_protos, alias_func_mapping)
48
+ call_pyboost_grad_functions_cpp_generator(work_path, op_protos)
49
+ call_pyboost_native_grad_functions_generator(work_path, op_protos)
50
+ call_pyboost_op_cpp_code_generator(work_path, op_protos)
51
+ # op splice
52
+ call_pyboost_auto_grad_cpp_code_generator(work_path, op_protos)
581
53
 
582
- def generate_pyboost_grad_functions(work_path, yaml_data):
583
- """
584
- Generate pyboostgrad functions file from yaml.
585
- """
586
- pyboost_func_str = ''
587
- pyboost_func_reg_def = ''
588
- pyboost_func_include_headers_str = ''
589
- pyboost_func_include_header_template = CppTemplate(
590
- f'#include "{K.MS_COMMON_PYBOOST_KERNEL_PATH}/auto_generate/${{operator_name}}.h"\n')
591
- for operator_name, operator_data in yaml_data.items():
592
- if not is_pyboost_enable(operator_data):
593
- continue
594
- op_proto = OpProto.load_from_yaml(operator_name, operator_data)
595
- if not op_proto.is_dispatch:
596
- continue
597
- operator_name = op_proto.operator_name
598
- op_name_str = op_proto.class_name
599
- op_args_str = [op_arg.arg_name for op_arg in op_proto.op_args]
600
- convert_value_type_str = convert_value_type(op_proto)
601
- device_target = "op_runner_info->device_target"
602
- convert_value_type_str += contiguous_tensor_value(op_proto, device_target)
603
54
 
604
- call_args_str = []
605
- for op_arg in op_proto.op_args:
606
- call_arg = 'convert_' + op_arg.arg_name
607
- call_args_str.append(call_arg)
608
- pyboost_func_str += template.PYBOOST_GRAD_FUNCTION_TEMPLATE.replace(func_name=op_proto.pyboost_function_name,
609
- op_name=op_name_str,
610
- op_args=op_args_str,
611
- convert_body=convert_value_type_str,
612
- call_args=call_args_str)
613
- pyboost_func_str = pyboost_func_str + template.NEW_LINE
614
- pyboost_func_reg_def += template.REGISTER_PYBOOST_GRAD_DEFINE_TEMPLATE.replace(
615
- pyboost_op_name=op_proto.class_name,
616
- pyboost_cfunc_name=op_proto.pyboost_function_name)
617
- pyboost_func_include_headers_str += pyboost_func_include_header_template.replace(operator_name=operator_name)
55
+ def call_pyboost_auto_grad_cpp_code_generator(work_path, op_protos):
56
+ call_auto_grad_impl_cc_generator(work_path, op_protos)
57
+ call_auto_grad_reg_header_generator(work_path, op_protos)
58
+ call_functions_header_generator(work_path, op_protos)
59
+ call_functions_cc_generator(work_path, op_protos)
618
60
 
619
- register_func_str = template.REGISTER_PYBOOST_GRAD_TEMPLATE.replace(register_func=pyboost_func_reg_def)
620
- pyboost_func_file = \
621
- template.PYBOOST_GRAD_HEADER_TEMPLATE.replace(include_op_header=pyboost_func_include_headers_str,
622
- function_body=pyboost_func_str,
623
- register_function_body=register_func_str)
624
- dir_path = os.path.join(work_path, "mindspore/ccsrc/runtime/pynative/op_function/auto_generate")
625
- pathlib.Path(dir_path).mkdir(parents=True, exist_ok=True)
626
- tmp_file_path = os.path.join(dir_path, "tmp_pyboost_grad_functions.cc")
627
- dst_file_path = os.path.join(dir_path, "pyboost_grad_functions.cc")
628
- write_file(tmp_file_path, pyboost_func_file)
629
- check_change_and_replace_file(dst_file_path, tmp_file_path)
630
61
 
62
+ def call_auto_grad_impl_cc_generator(work_path, op_protos):
63
+ generator = AutoGradImplGenerator()
64
+ generator.generate(work_path, op_protos)
631
65
 
632
- def generate_pyboost_native_grad_functions(work_path, yaml_data):
633
- """
634
- Generate pyboost native grad functions file from yaml.
635
- """
636
- pyboost_func_str = ''
637
- pyboost_func_include_headers_str = ''
638
- native_function_headers_str = ''
639
- native_include_header_template = CppTemplate(
640
- f'#include "{K.MS_COMMON_PYBOOST_KERNEL_PATH}/auto_generate/${{operator_name}}.h"\n')
641
- native_function_header_template = CppTemplate("static NodePtr $func_name(${call_args_with_type});\n")
642
- native_function_sigle_output_template = "const auto &output_value = op->outputs()[0];\n"
643
- native_function_multi_output_template = template.MULTI_OUTPUT_TEMPLATE
644
- for operator_name, operator_data in yaml_data.items():
645
- if not is_pyboost_enable(operator_data):
646
- continue
647
- op_proto = OpProto.load_from_yaml(operator_name, operator_data)
648
- if not op_proto.is_dispatch:
649
- continue
650
- operator_name = op_proto.operator_name
651
- op_name_str = op_proto.class_name
652
- op_args_str = [op_arg.arg_name for op_arg in op_proto.op_args]
653
- convert_value_type_str = convert_native_value_type(op_proto)
654
- convert_value_type_str += contiguous_tensor_value(op_proto, "device_target_")
655
- first_var_name = op_proto.op_args[0].arg_name
656
- call_args_str = []
657
- call_args_with_type = []
658
- output_expr = native_function_sigle_output_template
659
- if op_proto.is_multi_output:
660
- output_expr = native_function_multi_output_template
661
- for op_arg in op_proto.op_args:
662
- call_arg = 'convert_' + op_arg.arg_name
663
- call_args_str.append(call_arg)
664
- call_args_with_type.append('const NodePtr &' + op_arg.arg_name)
665
- pyboost_func_str += \
666
- template.PYBOOST_NATIVE_GRAD_FUNCTION_TEMPLATE.replace(func_name=op_name_str,
667
- op_name=op_name_str,
668
- op_args=op_args_str,
669
- convert_body=convert_value_type_str,
670
- call_args=call_args_str,
671
- call_args_with_type=call_args_with_type,
672
- first_var_name=first_var_name,
673
- output_expr=output_expr)
674
- pyboost_func_str = pyboost_func_str + template.NEW_LINE
675
- pyboost_func_include_headers_str += native_include_header_template.replace(operator_name=operator_name)
676
- func_header = native_function_header_template.replace(func_name=op_name_str,
677
- call_args_with_type=call_args_with_type)
678
- native_function_headers_str += func_header
679
- native_grad_func_file = \
680
- template.PYBOOST_NATIVE_GRAD_FUNCTIONS_TEMPLATE.replace(include_op_header=pyboost_func_include_headers_str,
681
- function_body=pyboost_func_str)
682
- native_grad_func_header_file = template.PYBOOST_NATIVE_GRAD_FUNCTIONS_HEADER_TEMPLATE.replace(
683
- native_grad_func_def=native_function_headers_str)
684
- dir_path = os.path.join(work_path, "mindspore/ccsrc/pipeline/pynative/grad/function/auto_generate")
685
- pathlib.Path(dir_path).mkdir(parents=True, exist_ok=True)
686
- tmp_file_path = os.path.join(dir_path, "tmp_pyboost_native_grad_functions.cc")
687
- dst_file_path = os.path.join(dir_path, "pyboost_native_grad_functions.cc")
688
- write_file(tmp_file_path, native_grad_func_file)
689
- check_change_and_replace_file(dst_file_path, tmp_file_path)
690
- tmp_file_path = os.path.join(dir_path, "tmp_pyboost_native_grad_functions.h")
691
- dst_file_path = os.path.join(dir_path, "pyboost_native_grad_functions.h")
692
- write_file(tmp_file_path, native_grad_func_header_file)
693
- check_change_and_replace_file(dst_file_path, tmp_file_path)
694
66
 
67
+ def call_auto_grad_reg_header_generator(work_path, op_protos):
68
+ generator = AutoGradRegHeaderGenerator()
69
+ generator.generate(work_path, op_protos)
695
70
 
696
- def generate_inplace_process_cpp_code(op_proto):
697
- """ generate_ref_process_cpp_code """
698
- inplace_process = f'// RefOps update output by input tensor\n'
699
- has_ref = False
700
- for index, return_obj in enumerate(op_proto.returns):
701
- if return_obj.inplace != '':
702
- inplace_process += f'outputs_[{index}]->set_device_address(' \
703
- f'{return_obj.inplace}_tensor->device_address()); '
704
- has_ref = True
705
- break
706
- if has_ref:
707
- return inplace_process
708
- return ''
709
71
 
72
+ def call_functions_header_generator(work_path, op_protos):
73
+ generator = FunctionsHeaderGenerator()
74
+ generator.generate(work_path, op_protos)
710
75
 
711
- def get_auto_generate_template():
712
- """
713
- get template collections
714
- :return: TemplatePaths
715
- """
716
- op_header_template_path = [template.PYBOOST_ASCEND_OP_HEADER_TEMPLATE, template.PYBOOST_GPU_OP_HEADER_TEMPLATE,
717
- template.PYBOOST_CPU_OP_HEADER_TEMPLATE]
718
- op_call_template_path = [template.PYBOOST_ASCEND_CALL_TEMPLATE, template.PYBOOST_GPU_CALL_TEMPLATE,
719
- template.PYBOOST_CPU_CALL_TEMPLATE]
720
- op_source_template_path = [template.PYBOOST_ASCEND_OP_SOURCE_TEMPLATE, template.PYBOOST_GPU_OP_SOURCE_TEMPLATE,
721
- template.PYBOOST_CPU_OP_SOURCE_TEMPLATE]
722
- op_custom_template_path = [template.PYBOOST_ASCEND_CUSTOMIZE_CALL_TEMPLATE,
723
- template.PYBOOST_GPU_CUSTOMIZE_CALL_TEMPLATE,
724
- template.PYBOOST_CPU_CUSTOMIZE_CALL_TEMPLATE]
725
- op_view_template_path = [template.PYBOOST_ASCEND_VIEW_CALL_TEMPLATE, template.PYBOOST_GPU_VIEW_CALL_TEMPLATE,
726
- template.PYBOOST_CPU_VIEW_CALL_TEMPLATE]
727
- code_generate_path = [f"{K.MS_OPS_KERNEL_PATH}/{device}/pyboost/auto_generate/" for device in
728
- ["ascend", "gpu", "cpu"]]
729
- return TemplatePaths(op_header_template_path, op_call_template_path, op_source_template_path,
730
- op_custom_template_path,
731
- op_view_template_path, code_generate_path)
732
76
 
77
+ def call_functions_cc_generator(work_path, op_protos):
78
+ generator = FunctionsGenerator()
79
+ generator.generate(work_path, op_protos)
733
80
 
734
- class OpTemplateConverter:
735
- """
736
- template converter
737
- """
738
81
 
739
- def __init__(self, op_proto):
740
- self.op_proto = op_proto
741
- self.op_name = op_proto.class_name
742
- self.functional_name = op_proto.operator_name
743
- self.call_args = self.parse_original_call_args(op_proto.op_args)
744
- self.call_args_types = self.parse_call_args_types(op_proto.op_args)
745
- self.call_args_with_types = self.parse_call_args_with_types(self.call_args, self.call_args_types)
746
- self.need_malloc_tensors, self.tensor_list_convert, self.call_args_with_tensor = \
747
- self.parse_need_malloc_tensors(op_proto.op_args, self.call_args)
748
- self.call_args_after_convert, self.value_tuple_convert, self.const_number_convert = \
749
- self.op_args_converter(op_proto.op_args, self.call_args)
750
- self.cpp_func_return = generate_pyboost_op_func_return_type(op_proto)
751
- self.op_outputs, self.call_func_outputs = generate_pyboost_outputs(op_proto)
752
- self.inplace_process = generate_inplace_process_cpp_code(op_proto)
82
+ def call_pyboost_inner_prim_generator(work_path, op_protos):
83
+ generator = PyboostInnerPrimGenerator()
84
+ generator.generate(work_path, op_protos)
753
85
 
754
- @staticmethod
755
- def parse_call_args_types(op_args):
756
- """
757
- :param op_args:
758
- :return: call_args_types
759
- """
760
- call_args_types = []
761
- for op_arg in op_args:
762
- is_optional = is_optional_param(op_arg)
763
- call_args_types.append(get_input_dtype(op_arg.arg_dtype, is_optional))
764
- return call_args_types
765
86
 
766
- @staticmethod
767
- def parse_call_args_with_types(call_args, call_args_types):
768
- """
769
- :param call_args:
770
- :param call_args_types:
771
- :return: call_args_with_types
772
- """
773
- call_args_with_types = []
774
- for type_name, arg_name in zip(call_args_types, call_args):
775
- call_args_with_types.append("const " + type_name + " &" + arg_name)
776
- return call_args_with_types
87
+ def call_pyboost_functions_py_generator(work_path, op_protos, doc_yaml_data):
88
+ generator = PyboostFunctionsPyGenerator()
89
+ generator.generate(work_path, op_protos, doc_yaml_data)
777
90
 
778
- @staticmethod
779
- def parse_need_malloc_tensors(op_args, call_args):
780
- """
781
- :param op_args:
782
- :param call_args:
783
- :return: need_malloc_tensors
784
- """
785
- need_malloc_tensors = []
786
- tensor_list_convert = []
787
- call_args_with_tensor = []
788
- for op_arg, call_arg in zip(op_args, call_args):
789
- if pyboost_utils.is_tensor(op_arg):
790
- call_arg = op_arg.arg_name + "_tensor"
791
- need_malloc_tensors.append(call_arg)
792
- call_args_with_tensor.append(call_arg)
793
- elif tuple_input_to_cpp_type(op_arg.arg_dtype) and pyboost_utils.is_tensor_list(op_arg):
794
- need_malloc_tensors.append(call_arg + "_vector")
795
- tensor_list_convert.append(get_tuple_input_convert(call_arg, op_arg.arg_dtype))
796
- call_args_with_tensor.append(call_arg + "_vector")
797
- else:
798
- call_args_with_tensor.append(call_arg)
799
- return need_malloc_tensors, tensor_list_convert, call_args_with_tensor
800
91
 
801
- @staticmethod
802
- def parse_original_call_args(op_args):
803
- """
804
- :param op_args:
805
- :return: call_args
806
- """
807
- call_args = []
808
- for op_arg in op_args:
809
- if pyboost_utils.is_tensor(op_arg):
810
- call_arg = op_arg.arg_name + "_tensor"
811
- elif pyboost_utils.is_tensor_list(op_arg):
812
- call_arg = op_arg.arg_name + "_tensor_list"
813
- else:
814
- call_arg = op_arg.arg_name
815
- call_args.append(call_arg)
816
- return call_args
92
+ def call_pyboost_functions_h_generator(work_path, op_protos):
93
+ generator = PyboostFunctionsHeaderGenerator()
94
+ generator.generate(work_path, op_protos)
817
95
 
818
- @staticmethod
819
- def op_args_converter(op_args, call_args):
820
- """Convert ValutePtr to cpp data type"""
821
- call_args_after_convert = []
822
- value_tuple_convert = []
823
- const_number_convert = []
824
- for op_arg, call_arg in zip(op_args, call_args):
825
- if number_input_to_cpp_type(op_arg.arg_dtype):
826
- call_args_after_convert.append(call_arg + "_imm")
827
- const_number_convert.append(get_const_number_convert(call_arg, op_arg))
828
- elif tuple_input_to_cpp_type(op_arg.arg_dtype):
829
- call_args_after_convert.append(call_arg + "_vector")
830
- value_tuple_convert.append(get_tuple_input_convert(call_arg, op_arg.arg_dtype))
831
- else:
832
- call_args_after_convert.append(call_arg)
833
- if const_number_convert:
834
- const_number_convert.insert(0, '// Convert ValuePtr to c++ scalar\n')
835
- if value_tuple_convert:
836
- value_tuple_convert.insert(0, '// ValueTuple to std::vector\n')
837
- return call_args_after_convert, value_tuple_convert, const_number_convert
838
96
 
97
+ def call_pyboost_functions_cpp_generator(work_path, op_protos, tensor_method_protos):
98
+ generator = PyboostFunctionsGenerator()
99
+ generator.generate(work_path, op_protos, tensor_method_protos)
839
100
 
840
- def delete_residual_files(work_path, all_operator_name, code_generate_path_list):
841
- """
842
- Delete residual files.
843
- """
844
- code_generate_path_list.append(f"{K.MS_COMMON_PYBOOST_KERNEL_PATH}/auto_generate/")
845
- for code_generate_path in code_generate_path_list:
846
- all_files_name = []
847
- code_generate_path = os.path.join(work_path, code_generate_path)
848
- if os.path.exists(code_generate_path):
849
- all_files_name = os.listdir(code_generate_path)
850
- all_registered_op = set(item.split(".")[0] for item in all_files_name)
851
- need_clean_op = all_registered_op - set(all_operator_name)
852
- for file in all_files_name:
853
- if file == "op_register.cc":
854
- continue
855
- for clean_name in need_clean_op:
856
- judge_file = file.split(".")[0]
857
- if judge_file == clean_name:
858
- file_path = os.path.join(code_generate_path, file)
859
- if os.path.exists(file_path):
860
- os.remove(file_path)
861
101
 
102
+ def call_pyboost_overload_functions_cpp_generator(work_path, op_protos, mint_func_protos, alias_func_mapping):
103
+ generator = PyboostOverloadFunctionsGenerator()
104
+ generator.generate(work_path, op_protos, mint_func_protos, alias_func_mapping)
862
105
 
863
- def generate_pyboost_op_cpp_code(work_path, yaml_data):
864
- """
865
- Generate pyboost op cpp code from yaml.
866
- """
867
106
 
868
- all_op_names = []
869
- all_functional_names = []
870
- all_operator_name = []
871
- for operator_name, operator_data in yaml_data.items():
872
- op_proto = OpProto.load_from_yaml(operator_name, operator_data)
873
- if not op_proto.is_dispatch:
874
- continue
875
- template_paths = get_auto_generate_template()
876
- converter = OpTemplateConverter(op_proto)
877
- functional_name = converter.functional_name
107
+ def call_pyboost_grad_functions_cpp_generator(work_path, op_protos):
108
+ generator = PyboostGradFunctionsGenerator()
109
+ generator.generate(work_path, op_protos)
878
110
 
879
- op_name_str = converter.op_name
880
111
 
881
- all_op_names.append(op_name_str)
882
- all_operator_name.append(operator_name)
883
- all_functional_names.append(functional_name)
112
+ def call_pyboost_native_grad_functions_generator(work_path, op_protos):
113
+ h_generator = PyboostGradFunctionsHeaderGenerator()
114
+ h_generator.generate(work_path, op_protos)
884
115
 
885
- call_args_with_types = converter.call_args_with_types
886
- cpp_func_return = converter.cpp_func_return
116
+ cc_generator = PyboostGradFunctionsCppGenerator()
117
+ cc_generator.generate(work_path, op_protos)
887
118
 
888
- generate_pyboost_base_op_header_code(work_path, op_name_str, functional_name, call_args_with_types,
889
- cpp_func_return)
890
- header_data = FuncHeaderData(work_path, template_paths.op_header_template_path,
891
- template_paths.code_generate_path, op_name_str,
892
- functional_name, call_args_with_types, cpp_func_return)
893
- generate_pyboost_op_header_code(header_data)
894
- generate_pyboost_op_source_code(work_path, op_proto, template_paths, converter)
895
- delete_residual_files(work_path, all_operator_name, template_paths.code_generate_path)
896
- generate_pyboost_op_register_source_code(work_path, all_op_names, all_functional_names)
897
119
 
120
+ def call_pyboost_op_cpp_code_generator(work_path, op_protos):
121
+ delete_residual_files(work_path, op_protos)
122
+ call_PyboostCommonOpCppCodeGenerator(work_path, op_protos)
123
+ call_PyboostOpHeaderGenerator(work_path, op_protos)
124
+ call_merge_pyboost_op_cpp_code_generator(work_path, op_protos)
125
+ call_PyboostOpRegisterCppCodeGenerator(work_path, op_protos)
898
126
 
899
- def gen_pyboost_inner_prim(work_path, op_yaml_data):
900
- """
901
- gen pyboost inner prim
902
- :param work_path:
903
- :param op_yaml_data:
904
- :return:
905
- """
906
- gen_py = ''
907
- gen_header = py_licence_str + template.IMPORT_PYBOOST_PRIM_HEADER
908
- for operator_name, operator_data in op_yaml_data.items():
909
- op_proto = OpProto.load_from_yaml(operator_name, operator_data)
910
- if not op_proto.is_pyboost:
911
- continue
912
- if not op_proto.prim_init:
913
- continue
914
- gen_header += template.PYBOOST_PY_FUNC_IMPORT_HEADEAR.replace(class_name=op_proto.class_name)
915
- args = operator_data.get('args')
916
- input_args = []
917
- processed_args = []
918
- process_func = ''
919
- for arg_name, arg_info in args.items():
920
- arg_handler = arg_info.get('arg_handler')
921
- processed_arg = arg_name
922
- if arg_handler is not None and arg_handler != 'dtype_to_type_id':
923
- process_func += \
924
- f"""converted_{arg_name} = {arg_handler}('{operator_name}', '{arg_name}', {arg_name})\n"""
925
- processed_arg = 'converted_' + arg_name
926
- input_args.append(arg_name)
927
- processed_args.append(processed_arg)
928
- gen_py += template.PYTHON_PRIM_TEMPLATE.replace(class_name=op_proto.class_name, input_args=input_args,
929
- process_func=process_func, func_impl_name=operator_name,
930
- processed_args=processed_args)
931
- dir_path = os.path.join(work_path, "mindspore/python/mindspore/ops/auto_generate")
932
- pathlib.Path(dir_path).mkdir(parents=True, exist_ok=True)
933
- dst_file_path = os.path.join(dir_path, "pyboost_inner_prim.py")
934
- tmp_file_path = os.path.join(dir_path, "tmp_pyboost_inner_prim.py")
935
- write_file(tmp_file_path, gen_header + gen_py)
936
- check_change_and_replace_file(dst_file_path, tmp_file_path)
937
127
 
128
+ def call_merge_pyboost_op_cpp_code_generator(work_path, op_protos):
129
+ generator = PyboostOpFunctionGenerator()
130
+ generator.generate(work_path, op_protos)
938
131
 
939
- def process_args(args):
940
- """
941
- process args
942
- :return: func args, input_args
943
- """
944
- func_args = []
945
- input_args = []
946
- for arg_name, arg_info in args.items():
947
- init_value = arg_info.get('init')
948
- arg_handler = arg_info.get('arg_handler')
949
- input_arg = arg_name
950
- if arg_handler is not None and arg_handler != 'dtype_to_type_id':
951
- input_arg = 'converted_' + arg_name
952
- if init_value is None:
953
- default_key = 'default'
954
- default_value = arg_info.get(default_key)
955
- default_value = '=' + str(default_value) if default_key in arg_info else ''
956
- func_args.append(arg_name + default_value)
957
- input_args.append(input_arg)
958
- else:
959
- if init_value == 'NO_VALUE':
960
- func_args.append(f"""{arg_name}""")
961
- else:
962
- func_args.append(f"""{arg_name}={init_value}""")
963
- return func_args, input_args
964
132
 
133
+ def call_PyboostCommonOpCppCodeGenerator(work_path, op_protos):
134
+ generator = PyboostCommonOpHeaderGenerator()
135
+ generator.generate(work_path, op_protos)
965
136
 
966
- def gen_pyboost_py_func(work_path, op_yaml_data, doc_data):
967
- """ gen_pyboost_py_func """
968
- gen_py = ''
969
- op_desc_dict = {}
970
137
 
971
- py_header = py_licence_str + template.IMPORT_PYBOOST_FUNC_HEADER
972
- for operator_name, operator_desc in doc_data.items():
973
- desc = operator_desc.get("description")
974
- op_desc_dict[operator_name] = desc
975
- for operator_name, operator_data in op_yaml_data.items():
976
- op_proto = OpProto.load_from_yaml(operator_name, operator_data)
977
- if not op_proto.is_pyboost:
978
- continue
979
- func_def = operator_data.get('function')
980
- func_name = operator_name
981
- if func_def is not None:
982
- func_disable = get_disable_flag(func_def)
983
- if func_disable:
984
- continue
985
- item = func_def.get("name")
986
- if item is not None:
987
- func_name = item
988
- if func_name.endswith("_ext"):
989
- func_name = func_name[:-4]
990
- else:
991
- continue
992
- func_impl_name = func_name
993
- if func_name.endswith("_"):
994
- func_impl_name = func_name[:-1]
995
- description = op_desc_dict.get(operator_name)
996
- args = operator_data.get('args')
997
- func_args, input_args = process_args(args)
998
- gen_py += template.PYBOOST_PY_FUNC_TEMPLATE.replace(func_name=func_name, description=description,
999
- func_args=func_args,
1000
- func_impl_name=func_impl_name,
1001
- input_args=input_args)
1002
- dir_path = os.path.join(work_path, "mindspore/python/mindspore/ops/auto_generate")
1003
- pathlib.Path(dir_path).mkdir(parents=True, exist_ok=True)
1004
- dst_file_path = os.path.join(dir_path, "gen_extend_func.py")
1005
- tmp_file_path = os.path.join(dir_path, "tmp_gen_extend_func.py")
1006
- write_file(tmp_file_path, py_header + gen_py)
1007
- check_change_and_replace_file(dst_file_path, tmp_file_path)
138
+ def call_PyboostOpHeaderGenerator(work_path, op_protos):
139
+ generator = PyboostOpHeaderGenerator('ascend')
140
+ generator.generate(work_path, op_protos)
1008
141
 
142
+ generator = PyboostOpHeaderGenerator('gpu')
143
+ generator.generate(work_path, op_protos)
1009
144
 
1010
- def gen_signature_same_type_table(args_map, operator_data):
1011
- """
1012
- gen signature same type table
1013
- :param operator_name:
1014
- :param operator_data:
1015
- :return:
1016
- """
1017
- args_signature = operator_data.get('args_signature')
1018
- signature_table = ''
1019
- type_num = 0
1020
- if args_signature is not None:
1021
- dtype_group = args_signature.get('dtype_group')
1022
- if dtype_group is not None:
1023
- match = re.findall(r'\((.*?)\)', dtype_group)
1024
- for item in match:
1025
- name_args = item.replace(' ', '').split(",")
1026
- signature_table += '{'
1027
- for arg in name_args:
1028
- arg_index = args_map[arg]
1029
- signature_table += f"""{arg_index}, """
1030
- signature_table = signature_table[:-2]
1031
- signature_table += '}, '
1032
- type_num += 1
1033
- signature_table = signature_table[:-2]
1034
- return type_num, signature_table
145
+ generator = PyboostOpHeaderGenerator('cpu')
146
+ generator.generate(work_path, op_protos)
1035
147
 
1036
148
 
1037
- def gen_pyboost_code(work_path, ops_yaml_data, doc_yaml_data, extra_ops):
1038
- """ gen_pyboost_code """
1039
- # generate pyboost inner prim
1040
- gen_pyboost_inner_prim(work_path, ops_yaml_data)
1041
- # generate pyboost py func
1042
- gen_pyboost_py_func(work_path, ops_yaml_data, doc_yaml_data)
1043
- # generate ops header file
1044
- generate_ops_header_files(work_path, ops_yaml_data, extra_ops)
1045
- # generate pyboost functions
1046
- generate_pyboost_functions(work_path, ops_yaml_data)
1047
- # generate pyboost grad functions
1048
- generate_pyboost_grad_functions(work_path, ops_yaml_data)
1049
- # generate pyboost native grad functions
1050
- generate_pyboost_native_grad_functions(work_path, ops_yaml_data)
1051
- # generate pyboost backend cpp code
1052
- generate_pyboost_op_cpp_code(work_path, ops_yaml_data)
149
+ def call_PyboostOpRegisterCppCodeGenerator(work_path, op_protos):
150
+ op_register_cpp_generator = PyboostOpRegisterCppCodeGenerator()
151
+ op_register_cpp_generator.generate(work_path, op_protos)