mindspore 2.4.10__cp311-cp311-win_amd64.whl → 2.6.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 (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 +47 -198
  22. mindspore/_extends/parse/resources.py +1 -5
  23. mindspore/_extends/parse/standard_method.py +229 -99
  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 +480 -372
  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 +5 -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 +975 -1981
  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 +324 -573
  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 +183 -117
  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 +209 -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 +179 -120
  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 +798 -761
  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 +933 -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 +1373 -192
  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 +53 -42
  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 +19 -15
  222. mindspore/nn/optim/adamax.py +8 -7
  223. mindspore/nn/optim/adasum.py +5 -5
  224. mindspore/nn/optim/asgd.py +3 -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 +361 -359
  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 +52 -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 +258 -46
  286. mindspore/ops/auto_generate/gen_extend_func.py +757 -185
  287. mindspore/ops/auto_generate/gen_ops_def.py +4197 -2243
  288. mindspore/ops/auto_generate/gen_ops_prim.py +16976 -6055
  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 +4351 -3813
  334. mindspore/ops/function/nn_func.py +1712 -637
  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 +452 -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 +26 -18
  343. mindspore/ops/functional.py +23 -7
  344. mindspore/ops/functional_overload.py +1548 -0
  345. mindspore/ops/op_info_register.py +32 -244
  346. mindspore/ops/operations/__init__.py +23 -15
  347. mindspore/ops/operations/_custom_ops_utils.py +235 -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 +298 -87
  360. mindspore/ops/operations/debug_ops.py +157 -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 +212 -531
  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 +1895 -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 +296 -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 +159 -40
  426. mindspore/parallel/_cell_wrapper.py +132 -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 +700 -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 +258 -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 -59
  446. mindspore/parallel/transform_safetensors.py +364 -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 +109 -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 +416 -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 +96 -27
  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} +228 -108
  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 +269 -136
  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 +552 -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.0.dist-info}/METADATA +3 -3
  584. {mindspore-2.4.10.dist-info → mindspore-2.6.0.dist-info}/RECORD +587 -418
  585. {mindspore-2.4.10.dist-info → mindspore-2.6.0.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.0.dist-info}/WHEEL +0 -0
  602. {mindspore-2.4.10.dist-info → mindspore-2.6.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,552 @@
1
+ # Copyright 2024 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
+ """mindspore utils runtime order check."""
16
+ import csv
17
+ import os
18
+ import re
19
+ from collections import defaultdict
20
+ from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor, as_completed
21
+ from multiprocessing import cpu_count
22
+ from typing import List, Dict, Union, Optional
23
+ import sys
24
+ import mindspore.log as logger
25
+
26
+ # Set Recursion Depth Limit
27
+ sys.setrecursionlimit(10000)
28
+ # support hccl group 150000 card
29
+ csv.field_size_limit(1024 * 1024)
30
+
31
+
32
+ class ExecuteOrder:
33
+ """Represents a single record from the execute_order.csv file."""
34
+
35
+ def __init__(self, index: str, group: str, comm_rank: str,
36
+ primitive: str, src_rank: str = '', dest_rank: str = '', root_rank: str = '', input_shape: str = '',
37
+ output_shape: str = ''):
38
+ self.index = index
39
+ self.group = group
40
+ self.comm_rank = comm_rank.split() # Split comm_rank into a list of individual ranks
41
+ self.primitive = primitive
42
+ self.src_rank = src_rank
43
+ self.dest_rank = dest_rank
44
+ self.root_rank = root_rank
45
+ self.input_shape = input_shape
46
+ self.output_shape = output_shape
47
+
48
+ def generate_base_key(self, rank: str) -> str:
49
+ """
50
+ Generates a unique base key for counting, excluding the counter part.
51
+ """
52
+ if not self.src_rank and not self.dest_rank and not self.root_rank:
53
+ # Aggregate communication status, for example, allGather.
54
+ comm_str = ",".join(self.comm_rank)
55
+ return f"{self.primitive}_{self.group}_({comm_str})"
56
+
57
+ if self.primitive == "Send":
58
+ # Unique base key of the Send operation.
59
+ return f"Send_Receive_{self.group}_({rank})->({self.dest_rank})_{self.input_shape}"
60
+
61
+ if self.primitive == "Receive":
62
+ # Unique base key of the reception operation
63
+ return f"Send_Receive_{self.group}_({self.src_rank})->({rank})_{self.output_shape}"
64
+
65
+ # Other operations, such as broadCast
66
+ parts = [f"{self.primitive}_{self.group}", f"commRank:({','.join(self.comm_rank)})"]
67
+ if self.src_rank:
68
+ parts.append(f"srcRank:({self.src_rank})")
69
+ if self.dest_rank:
70
+ parts.append(f"destRank:({self.dest_rank})")
71
+ if self.root_rank:
72
+ parts.append(f"rootRank:({self.root_rank})")
73
+
74
+ return "_".join(parts)
75
+
76
+ def generate_key(self, rank: str, count: int) -> str:
77
+ """
78
+ Generates the final unique key, including the counterpart.
79
+ """
80
+ base_key = self.generate_base_key(rank)
81
+ return f"{base_key}_{count}th"
82
+
83
+
84
+ class RankFolderParser:
85
+ """
86
+ Parses specified folder(s) and reads execute_order.csv files within rank_x folders.
87
+ """
88
+
89
+ REQUIRED_COLUMNS = [
90
+ "index", "group", "comm_rank", "primitive",
91
+ "src_rank", "dest_rank", "root_rank", "input_shape", "input_type", "output_shape", "output_type", "input_size",
92
+ "output_size"
93
+ ]
94
+
95
+ def __init__(self, folders: Union[str, List[str]]):
96
+ # Ensure folders is always a list of absolute paths
97
+ if isinstance(folders, str):
98
+ self.folders = [folders]
99
+ else:
100
+ self.folders = folders
101
+
102
+ # Validate provided folders or rank_{x} paths
103
+ self._validate_paths()
104
+
105
+ # Store results here
106
+ self.result_map: Dict[str, List[ExecuteOrder]] = {}
107
+
108
+ # Determine optimal number of workers based on CPU count
109
+ self.cpu_cores = cpu_count()
110
+ self.max_threads = min(8, self.cpu_cores * 2) # For I/O-bound tasks
111
+ self.max_processes = min(8, self.cpu_cores) # For CPU-bound tasks
112
+
113
+ def _validate_paths(self):
114
+ """
115
+ Validate all provided paths.
116
+ Each path must be either:
117
+ - A valid absolute directory containing rank_{x} folders, or
118
+ - A valid absolute path directly pointing to a rank_{x} folder.
119
+
120
+ Additionally, checks for duplicate rank_{x} folders and raises an error if duplicates are found.
121
+ """
122
+ seen_ranks = set() # To track rank_x folder names and detect duplicates
123
+
124
+ for path in self.folders:
125
+ if not os.path.isabs(path):
126
+ raise ValueError(
127
+ f"Invalid path: {path}. "
128
+ f"Please provide an absolute path, e.g., '/absolute/path/to/folder' or '/absolute/path/to/rank_x'."
129
+ )
130
+ if not os.path.exists(path):
131
+ raise ValueError(
132
+ f"Path does not exist: {path}. "
133
+ f"Ensure the path exists and is accessible."
134
+ )
135
+
136
+ # Check if it is a specific rank_{x} folder
137
+ if os.path.isdir(path) and os.path.basename(path).startswith("rank_"):
138
+ rank_name = os.path.basename(path)
139
+ if rank_name in seen_ranks:
140
+ raise ValueError(
141
+ f"Duplicate rank folder detected: {rank_name}. "
142
+ f"Each rank_x folder must be unique. Please remove duplicates."
143
+ )
144
+ seen_ranks.add(rank_name)
145
+ continue # Valid rank_{x} folder
146
+
147
+ # Check if it is a directory containing rank_{x} folders
148
+ if os.path.isdir(path):
149
+ rank_folders = [d for d in os.listdir(path) if
150
+ d.startswith("rank_") and os.path.isdir(os.path.join(path, d))]
151
+ if not rank_folders:
152
+ raise ValueError(
153
+ f"No rank_x folders found in {path}. Ensure the directory contains at least one folder named "
154
+ f"'rank_x', where x is an integer."
155
+ )
156
+
157
+ # Check for duplicates within this directory
158
+ for rank_folder in rank_folders:
159
+ if rank_folder in seen_ranks:
160
+ raise ValueError(
161
+ f"Duplicate rank folder detected: {rank_folder} in {path}. "
162
+ f"Each rank_x folder must be unique. Please remove duplicates."
163
+ )
164
+ seen_ranks.add(rank_folder)
165
+ continue # Valid directory containing rank_{x} folders
166
+
167
+ # Invalid case
168
+ raise ValueError(
169
+ f"Invalid path: {path}. "
170
+ f"Paths must either be rank_x folders or directories containing rank_x folders."
171
+ )
172
+
173
+ def parse(self) -> Dict[str, List[ExecuteOrder]]:
174
+ """
175
+ Main parsing function using a ProcessPoolExecutor to handle multiple paths.
176
+ Each rank_{x} folder is processed in parallel.
177
+ """
178
+ with ProcessPoolExecutor(max_workers=self.max_processes) as process_executor:
179
+ futures = [process_executor.submit(self._parse_path, path) for path in self.folders]
180
+ for future in as_completed(futures):
181
+ try:
182
+ path_result = future.result()
183
+ if path_result:
184
+ self.result_map.update(path_result)
185
+ except FileNotFoundError as e:
186
+ logger.error(f"File not found: {e}. Please ensure all required files are present.")
187
+ except ValueError as e:
188
+ logger.error(f"Value error: {e}. Please check the file contents or paths.")
189
+
190
+ return self.result_map
191
+
192
+ def _parse_path(self, path: str) -> Dict[str, List]:
193
+ """
194
+ Helper function to parse a single path. Handles both:
195
+ - Direct rank_{x} folder paths.
196
+ - Parent directories containing multiple rank_{x} folders.
197
+ """
198
+ result = {}
199
+
200
+ # If the path is a rank_{x} folder, parse it directly
201
+ if os.path.basename(path).startswith("rank_"):
202
+ rank_id = os.path.basename(path).split("_")[1]
203
+ # Adding one more layer to access the "execute_order" folder
204
+ execute_order_path = os.path.join(path, "execute_order")
205
+ if os.path.exists(execute_order_path):
206
+ rank_result = self.parse_rank_folder(execute_order_path, rank_id)
207
+ if rank_result:
208
+ result[rank_id] = rank_result[1] # Extract execute orders
209
+ return result
210
+
211
+ # If the path is a directory containing rank_{x} folders, parse all
212
+ with ThreadPoolExecutor(max_workers=self.max_threads) as thread_executor:
213
+ futures = []
214
+ for d in os.listdir(path):
215
+ if d.startswith("rank_"):
216
+ rank_id = d.split("_")[1]
217
+ rank_folder_path = os.path.join(path, d)
218
+ execute_order_path = os.path.join(rank_folder_path, "execute_order")
219
+
220
+ if os.path.exists(execute_order_path):
221
+ futures.append(thread_executor.submit(self.parse_rank_folder, execute_order_path, rank_id))
222
+
223
+ for future in as_completed(futures):
224
+ try:
225
+ rank_id, execute_orders = future.result()
226
+ if execute_orders:
227
+ result[rank_id] = execute_orders
228
+ except FileNotFoundError as e:
229
+ logger.error(f"File not found during parallel processing: {e}. "
230
+ f"Ensure the required files are present.")
231
+ except ValueError as e:
232
+ logger.error(f"Value error during parallel processing: {e}. Check file format or contents.")
233
+
234
+ return result
235
+
236
+ def parse_rank_folder(self, rank_folder_path: str, rank_id: str) -> Optional[tuple]:
237
+ """
238
+ Parse a single rank_{x} folders execute_order.csv file with header validation.
239
+ """
240
+ execute_order_file = os.path.join(rank_folder_path, "comm_execute_order.csv")
241
+
242
+ if not os.path.exists(execute_order_file):
243
+ logger.error(
244
+ f"No execute_order.csv found in {rank_folder_path}. Skipping this folder. "
245
+ f"Ensure the rank_{rank_id} folder contains a valid comm_execute_order.csv file."
246
+ )
247
+ return rank_id, None
248
+
249
+ execute_orders = []
250
+
251
+ try:
252
+ with open(execute_order_file, mode='r', encoding='utf-8') as file:
253
+ csv_reader = csv.DictReader(file)
254
+
255
+ # Validate the header
256
+ if csv_reader.fieldnames != self.REQUIRED_COLUMNS:
257
+ logger.error(
258
+ f"Invalid header in {execute_order_file}. Skipping this file. "
259
+ f"Expected columns: {self.REQUIRED_COLUMNS}. "
260
+ f"Ensure the file contains the correct column names."
261
+ )
262
+ return rank_id, None
263
+
264
+ # Read and parse data rows
265
+ for row in csv_reader:
266
+ execute_order = ExecuteOrder(
267
+ index=row["index"],
268
+ group=row["group"],
269
+ comm_rank=row["comm_rank"],
270
+ primitive=row["primitive"],
271
+ src_rank=row["src_rank"],
272
+ dest_rank=row["dest_rank"],
273
+ root_rank=row["root_rank"],
274
+ input_shape=row["input_shape"],
275
+ output_shape=row["output_shape"],
276
+
277
+ )
278
+ execute_orders.append(execute_order)
279
+ except FileNotFoundError as e:
280
+ logger.error(f"File not found: {execute_order_file}. Ensure the file exists and is accessible. Error: {e}")
281
+ return rank_id, None
282
+
283
+ return rank_id, execute_orders
284
+
285
+
286
+ def modify_execute_orders(execute_orders_map: dict) -> dict:
287
+ """
288
+ Modify and generate unique execution order keys for each rank.
289
+
290
+ This function processes a mapping of execution orders grouped by ranks. For each order,
291
+ it generates a unique key by combining a base key and a counter, ensuring all orders
292
+ are uniquely identifiable. The result is a dictionary where the keys are rank identifiers
293
+ and the values are lists of unique execution order keys.
294
+
295
+ Args:
296
+ execute_orders_map (dict): A dictionary where keys are rank identifiers (e.g., "rank_0")
297
+ and values are lists of ExecuteOrder objects. If a rank has no
298
+ orders, its value may be `None`.
299
+
300
+ Returns:
301
+ dict: A dictionary where keys are rank identifiers and values are lists of unique string
302
+ keys representing the modified execution orders for each rank.
303
+
304
+ """
305
+ result = {}
306
+
307
+ for rank, execute_orders in execute_orders_map.items():
308
+ # If execute_orders is None, use an empty list instead.
309
+ if execute_orders is None:
310
+ execute_orders = []
311
+
312
+ count_map = defaultdict(int)
313
+ new_orders = []
314
+
315
+ for order in execute_orders:
316
+ # Use generate_base_key to generate the base key for counting.
317
+ base_key = order.generate_base_key(rank)
318
+
319
+ count_map[base_key] += 1
320
+ count = count_map[base_key]
321
+
322
+ # Use generate_key to generate the final unique key.
323
+ new_key = order.generate_key(rank, count)
324
+ new_orders.append(new_key)
325
+
326
+ # Save the generated new order list to the result dictionary.
327
+ result[rank] = new_orders
328
+
329
+ return result
330
+
331
+
332
+ def parse_and_validate(data: dict, all_rank: bool = True):
333
+ """
334
+ Parse and validate execution orders in a directed graph structure.
335
+
336
+ This function checks the integrity and consistency of a given dataset, ensuring all required
337
+ keys are present and correctly referenced. It also validates the structure of the input data
338
+ and parses string values to extract meaningful components.
339
+
340
+ Args:
341
+ data (dict): A dictionary where keys are string identifiers and values are lists of strings.
342
+ Each value represents a dependency or reference to other keys.
343
+ all_rank (bool): If True, checks that all elements referenced in the data are present as keys
344
+ in the dictionary. If False, only checks intersections.
345
+
346
+ Returns:
347
+ None: Log error messages to the console if validation fails, otherwise completes silently.
348
+
349
+ Raises:
350
+ ValueError: Raised indirectly if `parse_elements` encounters malformed input strings.
351
+ TypeError: Raised indirectly if data contains unexpected types.
352
+
353
+ """
354
+ def parse_elements(value: str, max_groups: int = 2) -> set:
355
+ """Extract unique elements inside the first one or two parentheses from a string."""
356
+ groups = re.findall(r'\((.*?)\)', value)
357
+ limited_groups = groups[:max_groups] # Limit to the first `max_groups` matches
358
+ return {item.strip() for group in limited_groups for item in group.split(',')}
359
+
360
+ if not isinstance(data, dict):
361
+ logger.error("Input must be a dictionary with string keys and lists of strings as values.")
362
+ return
363
+
364
+ key_to_values = {key: set(values) for key, values in data.items() if
365
+ isinstance(values, list) and all(isinstance(v, str) for v in values)}
366
+
367
+ for key, values in data.items():
368
+ if not isinstance(values, list) or not all(isinstance(v, str) for v in values):
369
+ logger.error(f"Values for key '{key}' must be a list of strings.")
370
+ continue
371
+
372
+ for value in values:
373
+ try:
374
+ elements = parse_elements(value)
375
+ except (ValueError, TypeError, AttributeError) as e:
376
+ logger.error(f"Unable to parse elements from value '{value}' in key '{key}'. Error: {e}")
377
+ continue
378
+
379
+ # Check for missing keys if all_rank is True
380
+ if all_rank:
381
+ missing_keys = elements - key_to_values.keys()
382
+ if missing_keys:
383
+ logger.error(f"The following keys are missing for value '{value}': {missing_keys}")
384
+ continue
385
+
386
+ # Check if the value is present in the referenced keys
387
+ for element in elements & key_to_values.keys() if not all_rank else elements:
388
+ if value not in key_to_values[element]:
389
+ logger.error(f"Key '{element}' is missing the value '{value}'.")
390
+
391
+
392
+ def detect_cycle_in_graph(ranks_map):
393
+ """
394
+ Detects a cycle in the directed graph constructed from ranks_map.
395
+
396
+ Args:
397
+ - ranks_map (dict): A dictionary where keys are rank names and values are lists of nodes.
398
+
399
+ Returns:
400
+ - tuple: (cycle_path, cycle_ranks) where cycle_path is a list of nodes forming the cycle and cycle_ranks
401
+ is a list of rank transitions corresponding to the cycle path.
402
+ """
403
+ # Step 1: Build the directed graph and track edges with ranks
404
+ graph = defaultdict(list)
405
+ rank_edges = {}
406
+
407
+ for rank, nodes in ranks_map.items():
408
+ for i in range(len(nodes) - 1):
409
+ u, v = nodes[i], nodes[i + 1]
410
+ graph[u].append(v)
411
+ rank_edges[(u, v)] = rank
412
+
413
+ # Step 2: Detect cycle using DFS with path and rank tracking
414
+ visited = set()
415
+ recursion_stack = set()
416
+ path = []
417
+ cycle_path = []
418
+ cycle_ranks = []
419
+
420
+ def dfs(node):
421
+ if node in recursion_stack: # Cycle detected
422
+ # Identify the cycle path from the recursion stack
423
+ cycle_index = path.index(node)
424
+ cycle_path.extend(path[cycle_index:])
425
+ for i in range(cycle_index, len(path) - 1):
426
+ u, v = path[i], path[i + 1]
427
+ cycle_ranks.append(f"{rank_edges[(u, v)]} {u} -> {v}")
428
+ # Add the closing edge for the cycle
429
+ cycle_ranks.append(f"{rank_edges[(path[-1], node)]} {path[-1]} -> {node}")
430
+ return True
431
+
432
+ if node in visited:
433
+ return False
434
+
435
+ visited.add(node)
436
+ recursion_stack.add(node)
437
+ path.append(node)
438
+
439
+ for neighbor in graph[node]:
440
+ if dfs(neighbor):
441
+ return True
442
+
443
+ # Backtrack
444
+ recursion_stack.remove(node)
445
+ path.pop()
446
+ return False
447
+
448
+ nodes = list(graph.keys())
449
+ for node in nodes:
450
+ if node not in visited:
451
+ if dfs(node):
452
+ return cycle_path, cycle_ranks
453
+
454
+ return None, None
455
+
456
+
457
+ def determine_all_rank(folders_):
458
+ """
459
+ Determine the value of all_rank based on the input folders_.
460
+
461
+ Args:
462
+ folders_ (str | list): Folder path(s) to process.
463
+
464
+ Returns:
465
+ bool | None: Returns True/False for valid inputs, or None for invalid inputs.
466
+ """
467
+ if isinstance(folders_, str) and folders_:
468
+ return True
469
+ if isinstance(folders_, list):
470
+ if len(folders_) == 1:
471
+ return True
472
+ if len(folders_) > 1:
473
+ return False
474
+ return None
475
+ return None
476
+
477
+
478
+ def output_cycle_results(cycle_path, cycle_ranks):
479
+ """
480
+ Helper function to output cycle detection results.
481
+
482
+ Args:
483
+ cycle_path (list): List of nodes forming a cycle, if any.
484
+ cycle_ranks (list): List of ranks involved in the cycle.
485
+
486
+ Returns:
487
+ None: Outputs results to the console.
488
+ """
489
+ if cycle_path:
490
+ logger.warning("Cycle detected:")
491
+ logger.warning(" -> ".join(cycle_path) + f" -> {cycle_path[0]}") # Close the cycle
492
+ logger.warning("Involving ranks:")
493
+ for rank in cycle_ranks:
494
+ logger.warning(rank)
495
+ else:
496
+ logger.warning("Check success.")
497
+
498
+
499
+ def runtime_execution_order_check(folders_, all_rank=None):
500
+ """
501
+ Verify the rank_x folder in the specified directory.
502
+
503
+ Parameter description:
504
+ 1. folders (str or list[str]):
505
+ - Can be a single string or a list of strings representing the rank_x folder path or its upper-level directory path.
506
+ - If the input directory is the upper-level directory path, the function automatically identifies and verifies
507
+ all rank_x folders in the directory.
508
+ - If a specific rank_x folder path is passed, the function will only verify these specified folders.
509
+
510
+ 2. check_all (optional, true by default):
511
+ - Controls whether to verify all rank_x folders.
512
+ - True (default): Verify all files.
513
+ - False: Only part of the transferred rank_x folder is verified.
514
+
515
+ Example:
516
+ Example 1: Verify all rank_x folders (default behavior)
517
+ runtime_execution_order_check("path/to/parent_folder")
518
+
519
+ Example 2: Verify only some specified rank_x folders.
520
+ runtime_execution_order_check(["path/to/rank_1", "path/to/rank_2"], all_rank=False)
521
+
522
+ Example 3: Verify a single rank_x folder.
523
+ runtime_execution_order_check("path/to/rank_x", all_rank=True)
524
+
525
+ Precautions:
526
+ - When folders is the upper-level directory path, the function automatically
527
+ searches for and verifies the rank_x folder.
528
+ - When check_all is set to false, only the rank_x folder specified in the input path is verified.
529
+ """
530
+ # Use the provided all_rank if available, otherwise determine it
531
+ if all_rank is None:
532
+ all_rank = determine_all_rank(folders_)
533
+
534
+ if all_rank is None: # Input validation failed
535
+ logger.error("Invalid input. `folders_` must be a non-empty string or a list with at least one string element.")
536
+ return
537
+
538
+ # Parse folders
539
+ parser = RankFolderParser(folders_)
540
+ result_map = parser.parse()
541
+
542
+ # Modify execution orders
543
+ modified_orders = modify_execute_orders(result_map)
544
+
545
+ # Parse and validate execution orders
546
+ parse_and_validate(modified_orders, all_rank)
547
+
548
+ # Detect cycles
549
+ cycle_path, cycle_ranks = detect_cycle_in_graph(modified_orders)
550
+
551
+ # Output results
552
+ output_cycle_results(cycle_path, cycle_ranks)