mindspore 2.4.10__cp311-cp311-win_amd64.whl → 2.6.0rc1__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 (602) 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 +13 -6
  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/_check_jit_forbidden_api.py +3 -0
  9. mindspore/_checkparam.py +3 -38
  10. mindspore/_deprecated/__init__.py +17 -0
  11. mindspore/_deprecated/jit.py +198 -0
  12. mindspore/_extends/builtin_operations.py +1 -1
  13. mindspore/_extends/parallel_compile/akg_compiler/gen_custom_op_files.py +1 -1
  14. mindspore/_extends/parse/__init__.py +6 -7
  15. mindspore/_extends/parse/compile_config.py +83 -0
  16. mindspore/_extends/parse/deprecated/__init__.py +0 -0
  17. mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +394 -0
  18. mindspore/_extends/parse/jit_fallback_modules/__init__.py +0 -0
  19. mindspore/_extends/parse/jit_fallback_modules/check_utils.py +123 -0
  20. mindspore/_extends/parse/jit_fallback_modules/third_party_modules.py +50 -0
  21. mindspore/_extends/parse/parser.py +46 -197
  22. mindspore/_extends/parse/resources.py +1 -5
  23. mindspore/_extends/parse/standard_method.py +217 -98
  24. mindspore/_extends/pijit/__init__.py +2 -2
  25. mindspore/_extends/pijit/pijit_func_white_list.py +17 -12
  26. mindspore/_extends/pijit/tensor_func_list.py +27 -0
  27. mindspore/_extends/utils.py +1 -1
  28. mindspore/amp.py +11 -5
  29. mindspore/atlprov.dll +0 -0
  30. mindspore/avcodec-59.dll +0 -0
  31. mindspore/avdevice-59.dll +0 -0
  32. mindspore/avfilter-8.dll +0 -0
  33. mindspore/avformat-59.dll +0 -0
  34. mindspore/avutil-57.dll +0 -0
  35. mindspore/boost/__init__.py +2 -2
  36. mindspore/boost/base.py +3 -7
  37. mindspore/boost/boost_cell_wrapper.py +138 -43
  38. mindspore/c1.dll +0 -0
  39. mindspore/c1xx.dll +0 -0
  40. mindspore/c2.dll +0 -0
  41. mindspore/common/__init__.py +6 -3
  42. mindspore/common/_grad_function.py +56 -0
  43. mindspore/common/_pijit_context.py +14 -5
  44. mindspore/common/_register_for_tensor.py +1 -2
  45. mindspore/common/_stub_tensor.py +30 -14
  46. mindspore/common/_tensor_cpp_method.py +17 -0
  47. mindspore/common/_tensor_docs.py +4760 -0
  48. mindspore/common/api.py +435 -371
  49. mindspore/common/auto_dynamic_shape.py +41 -44
  50. mindspore/common/dtype.py +39 -36
  51. mindspore/common/dump.py +9 -6
  52. mindspore/common/file_system.py +9 -1
  53. mindspore/common/generator.py +2 -0
  54. mindspore/common/hook_handle.py +6 -2
  55. mindspore/common/initializer.py +13 -10
  56. mindspore/common/jit_begin_end.py +94 -0
  57. mindspore/common/jit_config.py +6 -1
  58. mindspore/common/jit_context.py +76 -0
  59. mindspore/common/jit_trace.py +378 -0
  60. mindspore/common/lazy_inline.py +9 -3
  61. mindspore/common/mindir_util.py +10 -2
  62. mindspore/common/mutable.py +5 -4
  63. mindspore/common/parameter.py +135 -52
  64. mindspore/common/seed.py +2 -2
  65. mindspore/common/sparse_tensor.py +23 -17
  66. mindspore/common/tensor.py +951 -1992
  67. mindspore/communication/__init__.py +7 -5
  68. mindspore/communication/_comm_helper.py +52 -2
  69. mindspore/communication/comm_func.py +240 -181
  70. mindspore/communication/management.py +95 -26
  71. mindspore/context.py +314 -566
  72. mindspore/dataset/__init__.py +65 -37
  73. mindspore/dataset/audio/__init__.py +2 -8
  74. mindspore/dataset/audio/transforms.py +3 -17
  75. mindspore/dataset/callback/ds_callback.py +2 -1
  76. mindspore/dataset/core/config.py +87 -6
  77. mindspore/dataset/engine/cache_admin.py +3 -3
  78. mindspore/dataset/engine/cache_client.py +6 -5
  79. mindspore/dataset/engine/datasets.py +292 -267
  80. mindspore/dataset/engine/datasets_audio.py +22 -8
  81. mindspore/dataset/engine/datasets_standard_format.py +46 -27
  82. mindspore/dataset/engine/datasets_text.py +78 -48
  83. mindspore/dataset/engine/datasets_user_defined.py +182 -116
  84. mindspore/dataset/engine/datasets_vision.py +120 -44
  85. mindspore/dataset/engine/iterators.py +283 -63
  86. mindspore/dataset/engine/obs/obs_mindrecord_dataset.py +1 -1
  87. mindspore/dataset/engine/obs/util.py +8 -0
  88. mindspore/dataset/engine/queue.py +40 -0
  89. mindspore/dataset/engine/samplers.py +289 -43
  90. mindspore/dataset/engine/serializer_deserializer.py +3 -2
  91. mindspore/dataset/engine/validators.py +53 -11
  92. mindspore/dataset/text/__init__.py +7 -6
  93. mindspore/dataset/text/transforms.py +6 -5
  94. mindspore/dataset/text/utils.py +3 -3
  95. mindspore/dataset/transforms/__init__.py +0 -9
  96. mindspore/dataset/transforms/py_transforms_util.py +17 -0
  97. mindspore/dataset/transforms/transforms.py +31 -14
  98. mindspore/dataset/utils/browse_dataset.py +1 -1
  99. mindspore/dataset/vision/__init__.py +2 -9
  100. mindspore/dataset/vision/transforms.py +202 -158
  101. mindspore/dataset/vision/utils.py +7 -5
  102. mindspore/dataset/vision/validators.py +1 -2
  103. mindspore/device_context/__init__.py +21 -0
  104. mindspore/device_context/ascend/__init__.py +25 -0
  105. mindspore/device_context/ascend/device.py +72 -0
  106. mindspore/device_context/ascend/op_debug.py +153 -0
  107. mindspore/device_context/ascend/op_precision.py +193 -0
  108. mindspore/device_context/ascend/op_tuning.py +123 -0
  109. mindspore/{ops_generate/gen_constants.py → device_context/cpu/__init__.py} +6 -17
  110. mindspore/device_context/cpu/device.py +62 -0
  111. mindspore/device_context/cpu/op_tuning.py +43 -0
  112. mindspore/device_context/gpu/__init__.py +21 -0
  113. mindspore/device_context/gpu/device.py +70 -0
  114. mindspore/device_context/gpu/op_precision.py +67 -0
  115. mindspore/device_context/gpu/op_tuning.py +175 -0
  116. mindspore/device_manager.py +170 -0
  117. mindspore/dnnl.dll +0 -0
  118. mindspore/dpcmi.dll +0 -0
  119. mindspore/experimental/es/embedding_service.py +35 -27
  120. mindspore/experimental/llm_boost/__init__.py +1 -0
  121. mindspore/experimental/llm_boost/ascend_native/__init__.py +22 -0
  122. mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +211 -0
  123. mindspore/experimental/llm_boost/ascend_native/llm_boost.py +52 -0
  124. mindspore/experimental/llm_boost/atb/boost_base.py +2 -3
  125. mindspore/experimental/llm_boost/atb/llama_boost.py +6 -1
  126. mindspore/experimental/llm_boost/register.py +1 -0
  127. mindspore/experimental/map_parameter.py +4 -4
  128. mindspore/experimental/optim/adadelta.py +6 -6
  129. mindspore/experimental/optim/adagrad.py +4 -4
  130. mindspore/experimental/optim/adam.py +7 -0
  131. mindspore/experimental/optim/adamax.py +4 -4
  132. mindspore/experimental/optim/adamw.py +4 -0
  133. mindspore/experimental/optim/asgd.py +1 -1
  134. mindspore/experimental/optim/lr_scheduler.py +73 -46
  135. mindspore/experimental/optim/radam.py +34 -31
  136. mindspore/experimental/optim/rprop.py +1 -1
  137. mindspore/experimental/optim/sgd.py +1 -1
  138. mindspore/hal/contiguous_tensors_handle.py +6 -10
  139. mindspore/hal/device.py +55 -53
  140. mindspore/hal/event.py +52 -52
  141. mindspore/hal/memory.py +157 -117
  142. mindspore/hal/stream.py +150 -109
  143. mindspore/include/api/context.h +0 -1
  144. mindspore/include/dataset/constants.h +7 -4
  145. mindspore/include/dataset/execute.h +2 -2
  146. mindspore/jpeg62.dll +0 -0
  147. mindspore/log.py +50 -0
  148. mindspore/mindrecord/__init__.py +21 -8
  149. mindspore/mindrecord/config.py +17 -316
  150. mindspore/mindrecord/filereader.py +1 -9
  151. mindspore/mindrecord/filewriter.py +5 -15
  152. mindspore/mindrecord/mindpage.py +1 -9
  153. mindspore/mindspore_backend_common.dll +0 -0
  154. mindspore/mindspore_backend_manager.dll +0 -0
  155. mindspore/mindspore_common.dll +0 -0
  156. mindspore/mindspore_core.dll +0 -0
  157. mindspore/mindspore_dump.dll +0 -0
  158. mindspore/mindspore_frontend.dll +0 -0
  159. mindspore/mindspore_glog.dll +0 -0
  160. mindspore/mindspore_memory_pool.dll +0 -0
  161. mindspore/mindspore_ms_backend.dll +0 -0
  162. mindspore/mindspore_ops.dll +0 -0
  163. mindspore/{mindspore_backend.dll → mindspore_ops_host.dll} +0 -0
  164. mindspore/mindspore_ops_kernel_common.dll +0 -0
  165. mindspore/mindspore_profiler.dll +0 -0
  166. mindspore/mindspore_pyboost.dll +0 -0
  167. mindspore/mindspore_pynative.dll +0 -0
  168. mindspore/mindspore_res_manager.dll +0 -0
  169. mindspore/mindspore_runtime_pipeline.dll +0 -0
  170. mindspore/mint/__init__.py +796 -759
  171. mindspore/mint/distributed/__init__.py +70 -4
  172. mindspore/mint/distributed/distributed.py +2679 -44
  173. mindspore/mint/linalg/__init__.py +8 -0
  174. mindspore/mint/nn/__init__.py +743 -22
  175. mindspore/mint/nn/functional.py +716 -23
  176. mindspore/mint/nn/layer/__init__.py +21 -4
  177. mindspore/mint/nn/layer/_functions.py +334 -0
  178. mindspore/mint/nn/layer/activation.py +276 -1
  179. mindspore/mint/nn/layer/basic.py +123 -0
  180. mindspore/mint/nn/layer/conv.py +921 -0
  181. mindspore/mint/nn/layer/normalization.py +223 -28
  182. mindspore/mint/nn/layer/padding.py +797 -0
  183. mindspore/mint/nn/layer/pooling.py +235 -0
  184. mindspore/mint/optim/__init__.py +3 -1
  185. mindspore/mint/optim/adam.py +223 -0
  186. mindspore/mint/optim/adamw.py +26 -19
  187. mindspore/mint/optim/sgd.py +171 -0
  188. mindspore/mint/special/__init__.py +2 -1
  189. mindspore/msobj140.dll +0 -0
  190. mindspore/mspdb140.dll +0 -0
  191. mindspore/mspdbcore.dll +0 -0
  192. mindspore/mspdbst.dll +0 -0
  193. mindspore/mspft140.dll +0 -0
  194. mindspore/msvcdis140.dll +0 -0
  195. mindspore/msvcp140_1.dll +0 -0
  196. mindspore/msvcp140_2.dll +0 -0
  197. mindspore/msvcp140_atomic_wait.dll +0 -0
  198. mindspore/msvcp140_codecvt_ids.dll +0 -0
  199. mindspore/multiprocessing/__init__.py +5 -0
  200. mindspore/nn/__init__.py +4 -1
  201. mindspore/nn/cell.py +1370 -189
  202. mindspore/nn/dynamic_lr.py +2 -1
  203. mindspore/nn/layer/activation.py +29 -27
  204. mindspore/nn/layer/basic.py +51 -35
  205. mindspore/nn/layer/channel_shuffle.py +3 -3
  206. mindspore/nn/layer/container.py +1 -1
  207. mindspore/nn/layer/conv.py +22 -17
  208. mindspore/nn/layer/embedding.py +12 -11
  209. mindspore/nn/layer/normalization.py +56 -49
  210. mindspore/nn/layer/padding.py +4 -3
  211. mindspore/nn/layer/pooling.py +120 -42
  212. mindspore/nn/layer/rnn_cells.py +1 -1
  213. mindspore/nn/layer/rnns.py +2 -1
  214. mindspore/nn/layer/timedistributed.py +5 -5
  215. mindspore/nn/layer/transformer.py +59 -36
  216. mindspore/nn/learning_rate_schedule.py +8 -4
  217. mindspore/nn/loss/loss.py +58 -55
  218. mindspore/nn/optim/ada_grad.py +7 -5
  219. mindspore/nn/optim/adadelta.py +11 -9
  220. mindspore/nn/optim/adafactor.py +1 -1
  221. mindspore/nn/optim/adam.py +17 -13
  222. mindspore/nn/optim/adamax.py +8 -7
  223. mindspore/nn/optim/adasum.py +5 -5
  224. mindspore/nn/optim/asgd.py +1 -1
  225. mindspore/nn/optim/ftrl.py +11 -9
  226. mindspore/nn/optim/lamb.py +1 -1
  227. mindspore/nn/optim/lars.py +1 -4
  228. mindspore/nn/optim/lazyadam.py +12 -10
  229. mindspore/nn/optim/momentum.py +7 -6
  230. mindspore/nn/optim/optimizer.py +3 -3
  231. mindspore/nn/optim/proximal_ada_grad.py +12 -10
  232. mindspore/nn/optim/rmsprop.py +13 -12
  233. mindspore/nn/optim/rprop.py +11 -9
  234. mindspore/nn/optim/sgd.py +9 -6
  235. mindspore/nn/optim/tft_wrapper.py +5 -2
  236. mindspore/nn/optim/thor.py +2 -1
  237. mindspore/nn/probability/bijector/bijector.py +17 -11
  238. mindspore/nn/probability/bijector/gumbel_cdf.py +5 -5
  239. mindspore/nn/probability/bijector/invert.py +2 -2
  240. mindspore/nn/probability/bijector/scalar_affine.py +3 -3
  241. mindspore/nn/probability/bijector/softplus.py +3 -2
  242. mindspore/nn/probability/distribution/beta.py +3 -3
  243. mindspore/nn/probability/distribution/categorical.py +1 -1
  244. mindspore/nn/probability/distribution/cauchy.py +4 -2
  245. mindspore/nn/probability/distribution/exponential.py +6 -7
  246. mindspore/nn/probability/distribution/gamma.py +2 -2
  247. mindspore/nn/probability/distribution/gumbel.py +2 -2
  248. mindspore/nn/probability/distribution/half_normal.py +5 -3
  249. mindspore/nn/probability/distribution/logistic.py +5 -3
  250. mindspore/nn/probability/distribution/poisson.py +1 -1
  251. mindspore/nn/probability/distribution/uniform.py +5 -3
  252. mindspore/nn/reinforcement/_tensors_queue.py +1 -1
  253. mindspore/nn/reinforcement/tensor_array.py +1 -1
  254. mindspore/nn/utils/init.py +13 -11
  255. mindspore/nn/wrap/__init__.py +6 -6
  256. mindspore/nn/wrap/cell_wrapper.py +181 -122
  257. mindspore/nn/wrap/grad_reducer.py +45 -36
  258. mindspore/nn/wrap/loss_scale.py +6 -7
  259. mindspore/numpy/array_creations.py +63 -65
  260. mindspore/numpy/array_ops.py +149 -144
  261. mindspore/numpy/logic_ops.py +41 -42
  262. mindspore/numpy/math_ops.py +365 -363
  263. mindspore/numpy/utils.py +17 -18
  264. mindspore/numpy/utils_const.py +5 -6
  265. mindspore/opencv_core452.dll +0 -0
  266. mindspore/opencv_imgcodecs452.dll +0 -0
  267. mindspore/opencv_imgproc452.dll +0 -0
  268. mindspore/ops/__init__.py +5 -3
  269. mindspore/ops/_grad_experimental/grad_comm_ops.py +112 -16
  270. mindspore/ops/_grad_experimental/grad_debug_ops.py +14 -2
  271. mindspore/ops/_grad_experimental/grad_inner_ops.py +9 -0
  272. mindspore/ops/_grad_experimental/grad_math_ops.py +2 -1
  273. mindspore/ops/_grad_experimental/taylor_rule.py +29 -0
  274. mindspore/ops/_op_impl/cpu/__init__.py +1 -0
  275. mindspore/ops/_op_impl/cpu/raise_op.py +28 -0
  276. mindspore/ops/_register_for_op.py +0 -11
  277. mindspore/{ops_generate → ops/_utils}/arg_dtype_cast.py +123 -4
  278. mindspore/{ops_generate → ops/_utils}/arg_handler.py +3 -65
  279. mindspore/ops/_vmap/vmap_array_ops.py +27 -25
  280. mindspore/ops/_vmap/vmap_base.py +0 -2
  281. mindspore/ops/_vmap/vmap_grad_nn_ops.py +21 -14
  282. mindspore/ops/_vmap/vmap_math_ops.py +15 -16
  283. mindspore/ops/_vmap/vmap_nn_ops.py +29 -42
  284. mindspore/ops/auto_generate/__init__.py +4 -3
  285. mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +236 -46
  286. mindspore/ops/auto_generate/gen_extend_func.py +764 -124
  287. mindspore/ops/auto_generate/gen_ops_def.py +4018 -2264
  288. mindspore/ops/auto_generate/gen_ops_prim.py +15463 -5037
  289. mindspore/ops/auto_generate/pyboost_inner_prim.py +221 -87
  290. mindspore/ops/composite/__init__.py +2 -1
  291. mindspore/ops/composite/base.py +20 -25
  292. mindspore/ops/composite/math_ops.py +6 -16
  293. mindspore/ops/composite/multitype_ops/__init__.py +5 -2
  294. mindspore/ops/composite/multitype_ops/_compile_utils.py +228 -30
  295. mindspore/ops/composite/multitype_ops/_constexpr_utils.py +1 -2
  296. mindspore/ops/composite/multitype_ops/add_impl.py +2 -1
  297. mindspore/ops/composite/multitype_ops/bitwise_and_impl.py +2 -1
  298. mindspore/ops/composite/multitype_ops/bitwise_or_impl.py +2 -1
  299. mindspore/ops/composite/multitype_ops/bitwise_xor_impl.py +2 -1
  300. mindspore/ops/composite/multitype_ops/div_impl.py +6 -4
  301. mindspore/ops/composite/multitype_ops/equal_impl.py +4 -3
  302. mindspore/ops/composite/multitype_ops/floordiv_impl.py +2 -1
  303. mindspore/ops/composite/multitype_ops/getitem_impl.py +3 -2
  304. mindspore/ops/composite/multitype_ops/greater_equal_impl.py +4 -3
  305. mindspore/ops/composite/multitype_ops/greater_impl.py +4 -3
  306. mindspore/ops/composite/multitype_ops/in_impl.py +2 -1
  307. mindspore/ops/composite/multitype_ops/invert_impl.py +50 -0
  308. mindspore/ops/composite/multitype_ops/left_shift_impl.py +2 -1
  309. mindspore/ops/composite/multitype_ops/less_equal_impl.py +4 -3
  310. mindspore/ops/composite/multitype_ops/less_impl.py +4 -3
  311. mindspore/ops/composite/multitype_ops/logic_not_impl.py +3 -2
  312. mindspore/ops/composite/multitype_ops/logical_and_impl.py +2 -1
  313. mindspore/ops/composite/multitype_ops/logical_or_impl.py +2 -1
  314. mindspore/ops/composite/multitype_ops/mod_impl.py +2 -1
  315. mindspore/ops/composite/multitype_ops/mul_impl.py +3 -2
  316. mindspore/ops/composite/multitype_ops/negative_impl.py +2 -1
  317. mindspore/ops/composite/multitype_ops/not_equal_impl.py +2 -1
  318. mindspore/ops/composite/multitype_ops/not_in_impl.py +2 -1
  319. mindspore/ops/composite/multitype_ops/ones_like_impl.py +18 -0
  320. mindspore/ops/composite/multitype_ops/pow_impl.py +2 -30
  321. mindspore/ops/composite/multitype_ops/right_shift_impl.py +2 -1
  322. mindspore/ops/composite/multitype_ops/setitem_impl.py +2 -1
  323. mindspore/ops/composite/multitype_ops/sub_impl.py +2 -1
  324. mindspore/ops/function/__init__.py +40 -2
  325. mindspore/ops/function/_add_attr_func.py +58 -0
  326. mindspore/ops/function/array_func.py +2089 -2403
  327. mindspore/ops/function/clip_func.py +80 -23
  328. mindspore/ops/function/debug_func.py +57 -57
  329. mindspore/ops/function/grad/__init__.py +1 -0
  330. mindspore/ops/function/grad/grad_func.py +104 -71
  331. mindspore/ops/function/image_func.py +2 -2
  332. mindspore/ops/function/linalg_func.py +47 -78
  333. mindspore/ops/function/math_func.py +4501 -3802
  334. mindspore/ops/function/nn_func.py +1726 -620
  335. mindspore/ops/function/other_func.py +159 -1
  336. mindspore/ops/function/parameter_func.py +18 -84
  337. mindspore/ops/function/random_func.py +440 -387
  338. mindspore/ops/function/reshard_func.py +4 -70
  339. mindspore/ops/function/sparse_func.py +3 -3
  340. mindspore/ops/function/sparse_unary_func.py +6 -6
  341. mindspore/ops/function/spectral_func.py +25 -58
  342. mindspore/ops/function/vmap_func.py +24 -17
  343. mindspore/ops/functional.py +22 -7
  344. mindspore/ops/functional_overload.py +1440 -0
  345. mindspore/ops/op_info_register.py +32 -244
  346. mindspore/ops/operations/__init__.py +13 -7
  347. mindspore/ops/operations/_custom_ops_utils.py +247 -0
  348. mindspore/ops/operations/_embedding_cache_ops.py +4 -4
  349. mindspore/ops/operations/_grad_ops.py +2 -43
  350. mindspore/ops/operations/_infer_ops.py +2 -1
  351. mindspore/ops/operations/_inner_ops.py +43 -84
  352. mindspore/ops/operations/_ms_kernel.py +4 -10
  353. mindspore/ops/operations/_rl_inner_ops.py +1 -1
  354. mindspore/ops/operations/_scalar_ops.py +3 -2
  355. mindspore/ops/operations/_sequence_ops.py +1 -1
  356. mindspore/ops/operations/_tensor_array.py +1 -1
  357. mindspore/ops/operations/array_ops.py +81 -324
  358. mindspore/ops/operations/comm_ops.py +154 -108
  359. mindspore/ops/operations/custom_ops.py +232 -78
  360. mindspore/ops/operations/debug_ops.py +153 -59
  361. mindspore/ops/operations/inner_ops.py +7 -5
  362. mindspore/ops/operations/linalg_ops.py +1 -57
  363. mindspore/ops/operations/manually_defined/_inner.py +1 -1
  364. mindspore/ops/operations/manually_defined/ops_def.py +928 -180
  365. mindspore/ops/operations/math_ops.py +32 -234
  366. mindspore/ops/operations/nn_ops.py +210 -498
  367. mindspore/ops/operations/other_ops.py +62 -9
  368. mindspore/ops/operations/random_ops.py +13 -7
  369. mindspore/ops/operations/reshard_ops.py +1 -1
  370. mindspore/ops/operations/sparse_ops.py +2 -2
  371. mindspore/ops/primitive.py +66 -53
  372. mindspore/ops/tensor_method.py +1888 -0
  373. mindspore/ops_generate/__init__.py +0 -5
  374. mindspore/ops_generate/aclnn/__init__.py +0 -0
  375. mindspore/ops_generate/aclnn/aclnn_kernel_register_auto_cc_generator.py +135 -0
  376. mindspore/ops_generate/aclnn/gen_aclnn_implement.py +257 -0
  377. mindspore/ops_generate/api/__init__.py +0 -0
  378. mindspore/ops_generate/api/add_tensor_docs_generator.py +56 -0
  379. mindspore/ops_generate/api/cpp_create_prim_instance_helper_generator.py +105 -0
  380. mindspore/ops_generate/api/functional_map_cpp_generator.py +504 -0
  381. mindspore/ops_generate/api/functional_overload_py_generator.py +112 -0
  382. mindspore/ops_generate/api/functions_cc_generator.py +237 -0
  383. mindspore/ops_generate/api/gen_api.py +103 -0
  384. mindspore/ops_generate/api/op_api_proto.py +235 -0
  385. mindspore/ops_generate/api/tensor_func_reg_cpp_generator.py +461 -0
  386. mindspore/ops_generate/common/__init__.py +0 -0
  387. mindspore/ops_generate/common/base_generator.py +11 -0
  388. mindspore/ops_generate/common/gen_constants.py +91 -0
  389. mindspore/ops_generate/common/gen_utils.py +348 -0
  390. mindspore/ops_generate/common/op_proto.py +473 -0
  391. mindspore/ops_generate/common/template.py +523 -0
  392. mindspore/ops_generate/gen_ops.py +22 -1069
  393. mindspore/ops_generate/op_def/__init__.py +0 -0
  394. mindspore/ops_generate/op_def/gen_op_def.py +90 -0
  395. mindspore/ops_generate/op_def/lite_ops_cpp_generator.py +191 -0
  396. mindspore/ops_generate/op_def/ops_def_cc_generator.py +299 -0
  397. mindspore/ops_generate/op_def/ops_def_h_generator.py +74 -0
  398. mindspore/ops_generate/op_def/ops_name_h_generator.py +83 -0
  399. mindspore/ops_generate/op_def/ops_primitive_h_generator.py +125 -0
  400. mindspore/ops_generate/op_def_py/__init__.py +0 -0
  401. mindspore/ops_generate/op_def_py/gen_op_def_py.py +47 -0
  402. mindspore/ops_generate/op_def_py/op_def_py_generator.py +132 -0
  403. mindspore/ops_generate/op_def_py/op_prim_py_generator.py +489 -0
  404. mindspore/ops_generate/pyboost/__init__.py +0 -0
  405. mindspore/ops_generate/pyboost/auto_grad_impl_cc_generator.py +139 -0
  406. mindspore/ops_generate/pyboost/auto_grad_reg_cc_generator.py +93 -0
  407. mindspore/ops_generate/pyboost/gen_pyboost_func.py +175 -0
  408. mindspore/ops_generate/pyboost/op_template_parser.py +517 -0
  409. mindspore/ops_generate/pyboost/pyboost_functions_cpp_generator.py +407 -0
  410. mindspore/ops_generate/pyboost/pyboost_functions_h_generator.py +100 -0
  411. mindspore/ops_generate/pyboost/pyboost_functions_py_generator.py +148 -0
  412. mindspore/ops_generate/pyboost/pyboost_grad_function_cpp_generator.py +155 -0
  413. mindspore/ops_generate/pyboost/pyboost_inner_prim_generator.py +132 -0
  414. mindspore/ops_generate/pyboost/pyboost_native_grad_functions_generator.py +272 -0
  415. mindspore/ops_generate/pyboost/pyboost_op_cpp_code_generator.py +938 -0
  416. mindspore/ops_generate/pyboost/pyboost_overload_functions_cpp_generator.py +357 -0
  417. mindspore/ops_generate/{pyboost_utils.py → pyboost/pyboost_utils.py} +179 -36
  418. mindspore/ops_generate/resources/__init__.py +0 -0
  419. mindspore/ops_generate/resources/resource_list.py +30 -0
  420. mindspore/ops_generate/resources/resource_loader.py +36 -0
  421. mindspore/ops_generate/resources/resource_manager.py +64 -0
  422. mindspore/ops_generate/resources/yaml_loader.py +88 -0
  423. mindspore/ops_generate/tensor_py_cc_generator.py +122 -0
  424. mindspore/parallel/__init__.py +7 -3
  425. mindspore/parallel/_auto_parallel_context.py +152 -34
  426. mindspore/parallel/_cell_wrapper.py +130 -15
  427. mindspore/parallel/_parallel_serialization.py +107 -5
  428. mindspore/parallel/_ps_context.py +1 -1
  429. mindspore/parallel/_recovery_context.py +7 -2
  430. mindspore/parallel/_tensor.py +142 -18
  431. mindspore/parallel/_utils.py +199 -23
  432. mindspore/parallel/algo_parameter_config.py +4 -4
  433. mindspore/parallel/auto_parallel.py +732 -0
  434. mindspore/parallel/checkpoint_convert.py +159 -0
  435. mindspore/parallel/checkpoint_transform.py +698 -35
  436. mindspore/parallel/cluster/process_entity/_api.py +276 -50
  437. mindspore/parallel/cluster/process_entity/_utils.py +41 -6
  438. mindspore/parallel/cluster/run.py +21 -4
  439. mindspore/parallel/function/__init__.py +24 -0
  440. mindspore/parallel/function/reshard_func.py +259 -0
  441. mindspore/parallel/nn/__init__.py +25 -0
  442. mindspore/parallel/nn/parallel_cell_wrapper.py +263 -0
  443. mindspore/parallel/nn/parallel_grad_reducer.py +169 -0
  444. mindspore/parallel/parameter_broadcast.py +25 -14
  445. mindspore/parallel/shard.py +137 -58
  446. mindspore/parallel/transform_safetensors.py +363 -305
  447. mindspore/pgodb140.dll +0 -0
  448. mindspore/pgort140.dll +0 -0
  449. mindspore/profiler/__init__.py +22 -5
  450. mindspore/profiler/analysis/__init__.py +0 -0
  451. mindspore/profiler/analysis/parser/__init__.py +0 -0
  452. mindspore/profiler/analysis/parser/ascend_cann_parser.py +170 -0
  453. mindspore/profiler/analysis/parser/base_parser.py +158 -0
  454. mindspore/profiler/analysis/parser/framework_cann_relation_parser.py +45 -0
  455. mindspore/profiler/analysis/parser/ms_framework_parser.py +142 -0
  456. mindspore/profiler/analysis/parser/ms_minddata_parser.py +145 -0
  457. mindspore/profiler/analysis/parser/timeline_assembly_factory/__init__.py +0 -0
  458. mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +264 -0
  459. mindspore/profiler/analysis/parser/timeline_assembly_factory/base_timeline_assembler.py +40 -0
  460. mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +106 -0
  461. mindspore/profiler/analysis/parser/timeline_creator/__init__.py +0 -0
  462. mindspore/profiler/analysis/parser/timeline_creator/base_timeline_creator.py +44 -0
  463. mindspore/profiler/analysis/parser/timeline_creator/cpu_op_timeline_creator.py +90 -0
  464. mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +76 -0
  465. mindspore/profiler/analysis/parser/timeline_creator/msprof_timeline_creator.py +103 -0
  466. mindspore/profiler/analysis/parser/timeline_creator/scope_layer_timeline_creator.py +134 -0
  467. mindspore/profiler/analysis/parser/timeline_event/__init__.py +0 -0
  468. mindspore/profiler/analysis/parser/timeline_event/base_event.py +233 -0
  469. mindspore/profiler/analysis/parser/timeline_event/cpu_op_event.py +47 -0
  470. mindspore/profiler/analysis/parser/timeline_event/flow_event.py +36 -0
  471. mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +415 -0
  472. mindspore/profiler/analysis/parser/timeline_event/msprof_event.py +73 -0
  473. mindspore/profiler/analysis/parser/timeline_event/scope_layer_event.py +53 -0
  474. mindspore/profiler/analysis/parser/timeline_event/timeline_event_pool.py +146 -0
  475. mindspore/profiler/analysis/task_manager.py +131 -0
  476. mindspore/profiler/analysis/time_converter.py +84 -0
  477. mindspore/profiler/analysis/viewer/__init__.py +0 -0
  478. mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +372 -0
  479. mindspore/profiler/analysis/viewer/ascend_integrate_viewer.py +87 -0
  480. mindspore/profiler/analysis/viewer/ascend_kernel_details_viewer.py +250 -0
  481. mindspore/profiler/analysis/viewer/ascend_memory_viewer.py +320 -0
  482. mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +327 -0
  483. mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +376 -0
  484. mindspore/profiler/analysis/viewer/ascend_timeline_viewer.py +58 -0
  485. mindspore/profiler/analysis/viewer/base_viewer.py +26 -0
  486. mindspore/profiler/analysis/viewer/ms_dataset_viewer.py +96 -0
  487. mindspore/profiler/analysis/viewer/ms_minddata_viewer.py +581 -0
  488. mindspore/profiler/analysis/work_flow.py +73 -0
  489. mindspore/profiler/common/ascend_msprof_exporter.py +139 -0
  490. mindspore/profiler/common/command_executor.py +90 -0
  491. mindspore/profiler/common/constant.py +186 -3
  492. mindspore/profiler/common/file_manager.py +208 -0
  493. mindspore/profiler/common/log.py +130 -0
  494. mindspore/profiler/common/msprof_cmd_tool.py +221 -0
  495. mindspore/profiler/common/path_manager.py +395 -0
  496. mindspore/profiler/common/process_bar.py +168 -0
  497. mindspore/profiler/common/process_pool.py +9 -3
  498. mindspore/profiler/common/profiler_context.py +500 -0
  499. mindspore/profiler/common/profiler_info.py +304 -0
  500. mindspore/profiler/common/profiler_meta_data.py +74 -0
  501. mindspore/profiler/common/profiler_output_path.py +284 -0
  502. mindspore/profiler/common/profiler_parameters.py +251 -0
  503. mindspore/profiler/common/profiler_path_manager.py +179 -0
  504. mindspore/profiler/common/record_function.py +76 -0
  505. mindspore/profiler/common/tlv_decoder.py +76 -0
  506. mindspore/profiler/common/util.py +75 -2
  507. mindspore/profiler/dynamic_profiler.py +341 -75
  508. mindspore/profiler/envprofiler.py +163 -0
  509. mindspore/profiler/experimental_config.py +197 -0
  510. mindspore/profiler/mstx.py +242 -0
  511. mindspore/profiler/platform/__init__.py +21 -0
  512. mindspore/profiler/platform/base_profiler.py +40 -0
  513. mindspore/profiler/platform/cpu_profiler.py +124 -0
  514. mindspore/profiler/platform/gpu_profiler.py +74 -0
  515. mindspore/profiler/platform/npu_profiler.py +335 -0
  516. mindspore/profiler/profiler.py +1073 -90
  517. mindspore/profiler/profiler_action_controller.py +187 -0
  518. mindspore/profiler/profiler_interface.py +118 -0
  519. mindspore/profiler/schedule.py +243 -0
  520. mindspore/rewrite/api/node.py +15 -13
  521. mindspore/rewrite/api/symbol_tree.py +2 -3
  522. mindspore/run_check/_check_version.py +27 -20
  523. mindspore/run_check/run_check.py +1 -1
  524. mindspore/runtime/__init__.py +37 -0
  525. mindspore/runtime/device.py +27 -0
  526. mindspore/runtime/event.py +209 -0
  527. mindspore/runtime/executor.py +177 -0
  528. mindspore/runtime/memory.py +409 -0
  529. mindspore/runtime/stream.py +460 -0
  530. mindspore/runtime/thread_bind_core.py +401 -0
  531. mindspore/safeguard/rewrite_obfuscation.py +12 -9
  532. mindspore/swresample-4.dll +0 -0
  533. mindspore/swscale-6.dll +0 -0
  534. mindspore/tbbmalloc.dll +0 -0
  535. mindspore/tinyxml2.dll +0 -0
  536. mindspore/train/__init__.py +8 -8
  537. mindspore/train/_utils.py +88 -25
  538. mindspore/train/amp.py +9 -5
  539. mindspore/train/callback/__init__.py +2 -2
  540. mindspore/train/callback/_callback.py +2 -16
  541. mindspore/train/callback/_checkpoint.py +53 -55
  542. mindspore/train/callback/_cluster_monitor.py +14 -18
  543. mindspore/train/callback/_early_stop.py +1 -1
  544. mindspore/train/callback/_flops_collector.py +103 -68
  545. mindspore/train/callback/_history.py +8 -5
  546. mindspore/train/callback/_lambda_callback.py +2 -2
  547. mindspore/train/callback/_landscape.py +0 -3
  548. mindspore/train/callback/_loss_monitor.py +2 -1
  549. mindspore/train/callback/_on_request_exit.py +6 -5
  550. mindspore/train/callback/_reduce_lr_on_plateau.py +11 -6
  551. mindspore/train/callback/_summary_collector.py +52 -19
  552. mindspore/train/callback/_time_monitor.py +2 -1
  553. mindspore/train/callback/{_tft_register.py → _train_fault_tolerance.py} +204 -107
  554. mindspore/train/data_sink.py +25 -2
  555. mindspore/train/dataset_helper.py +15 -16
  556. mindspore/train/loss_scale_manager.py +8 -7
  557. mindspore/train/metrics/accuracy.py +3 -3
  558. mindspore/train/metrics/confusion_matrix.py +9 -9
  559. mindspore/train/metrics/error.py +3 -3
  560. mindspore/train/metrics/hausdorff_distance.py +4 -4
  561. mindspore/train/metrics/mean_surface_distance.py +3 -3
  562. mindspore/train/metrics/metric.py +0 -12
  563. mindspore/train/metrics/occlusion_sensitivity.py +4 -2
  564. mindspore/train/metrics/precision.py +11 -10
  565. mindspore/train/metrics/recall.py +9 -9
  566. mindspore/train/metrics/root_mean_square_surface_distance.py +2 -2
  567. mindspore/train/mind_ir_pb2.py +174 -46
  568. mindspore/train/model.py +184 -113
  569. mindspore/train/serialization.py +622 -978
  570. mindspore/train/summary/_summary_adapter.py +2 -2
  571. mindspore/train/summary/summary_record.py +2 -3
  572. mindspore/train/train_thor/model_thor.py +1 -1
  573. mindspore/turbojpeg.dll +0 -0
  574. mindspore/utils/__init__.py +6 -3
  575. mindspore/utils/dryrun.py +140 -0
  576. mindspore/utils/hooks.py +81 -0
  577. mindspore/utils/runtime_execution_order_check.py +550 -0
  578. mindspore/utils/utils.py +138 -4
  579. mindspore/vcmeta.dll +0 -0
  580. mindspore/vcruntime140.dll +0 -0
  581. mindspore/vcruntime140_1.dll +0 -0
  582. mindspore/version.py +1 -1
  583. {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/METADATA +3 -3
  584. {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/RECORD +587 -418
  585. {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/entry_points.txt +1 -1
  586. mindspore/_install_custom.py +0 -43
  587. mindspore/common/_register_for_adapter.py +0 -74
  588. mindspore/common/_tensor_overload.py +0 -139
  589. mindspore/mindspore_np_dtype.dll +0 -0
  590. mindspore/ops/auto_generate/gen_arg_dtype_cast.py +0 -252
  591. mindspore/ops/auto_generate/gen_arg_handler.py +0 -197
  592. mindspore/ops/operations/_opaque_predicate_registry.py +0 -41
  593. mindspore/ops_generate/gen_aclnn_implement.py +0 -263
  594. mindspore/ops_generate/gen_ops_inner_prim.py +0 -131
  595. mindspore/ops_generate/gen_pyboost_func.py +0 -1052
  596. mindspore/ops_generate/gen_utils.py +0 -209
  597. mindspore/ops_generate/op_proto.py +0 -145
  598. mindspore/ops_generate/template.py +0 -261
  599. mindspore/profiler/envprofiling.py +0 -254
  600. mindspore/profiler/profiling.py +0 -1926
  601. {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/WHEEL +0 -0
  602. {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/top_level.txt +0 -0
@@ -1,1052 +0,0 @@
1
- # Copyright 2023 Huawei Technologies Co., Ltd
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
- # ============================================================================
15
- """
16
- Generate pyboost function from pyboost_op.yaml
17
- """
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
-
581
-
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
-
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)
618
-
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
-
631
-
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
-
695
-
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
-
710
-
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
-
733
-
734
- class OpTemplateConverter:
735
- """
736
- template converter
737
- """
738
-
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)
753
-
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
-
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
777
-
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
-
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
817
-
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
-
839
-
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
-
862
-
863
- def generate_pyboost_op_cpp_code(work_path, yaml_data):
864
- """
865
- Generate pyboost op cpp code from yaml.
866
- """
867
-
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
878
-
879
- op_name_str = converter.op_name
880
-
881
- all_op_names.append(op_name_str)
882
- all_operator_name.append(operator_name)
883
- all_functional_names.append(functional_name)
884
-
885
- call_args_with_types = converter.call_args_with_types
886
- cpp_func_return = converter.cpp_func_return
887
-
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
-
898
-
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
-
938
-
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
-
965
-
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
-
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)
1008
-
1009
-
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
1035
-
1036
-
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)