mindspore 2.6.0__cp311-cp311-win_amd64.whl → 2.7.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 (455) 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 +2 -2
  5. mindspore/_c_dataengine.cp311-win_amd64.pyd +0 -0
  6. mindspore/_c_expression.cp311-win_amd64.pyd +0 -0
  7. mindspore/_c_mindrecord.cp311-win_amd64.pyd +0 -0
  8. mindspore/_checkparam.py +42 -11
  9. mindspore/_extends/builtin_operations.py +3 -3
  10. mindspore/{_deprecated → _extends/optimize}/__init__.py +9 -3
  11. mindspore/_extends/optimize/cell_utils.py +96 -0
  12. mindspore/_extends/parallel_compile/akg_compiler/custom.py +1109 -0
  13. mindspore/_extends/parallel_compile/akg_compiler/gen_custom_op_files.py +1 -1
  14. mindspore/_extends/parse/__init__.py +3 -3
  15. mindspore/_extends/parse/compile_config.py +44 -22
  16. mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +1 -2
  17. mindspore/_extends/parse/parser.py +64 -83
  18. mindspore/_extends/parse/resources.py +39 -0
  19. mindspore/_extends/parse/standard_method.py +47 -14
  20. mindspore/_extends/parse/trope.py +8 -1
  21. mindspore/_extends/pijit/__init__.py +1 -2
  22. mindspore/_extends/pijit/pijit_func_white_list.py +2 -5
  23. mindspore/amp.py +4 -22
  24. mindspore/atlprov.dll +0 -0
  25. mindspore/avcodec-59.dll +0 -0
  26. mindspore/avdevice-59.dll +0 -0
  27. mindspore/avfilter-8.dll +0 -0
  28. mindspore/avformat-59.dll +0 -0
  29. mindspore/avutil-57.dll +0 -0
  30. mindspore/boost/adasum.py +1 -1
  31. mindspore/boost/boost_cell_wrapper.py +4 -4
  32. mindspore/c1.dll +0 -0
  33. mindspore/c1xx.dll +0 -0
  34. mindspore/c2.dll +0 -0
  35. mindspore/common/__init__.py +43 -12
  36. mindspore/common/_grad_function.py +2 -1
  37. mindspore/common/_pijit_context.py +28 -7
  38. mindspore/common/_stub_tensor.py +1 -209
  39. mindspore/common/_tensor_cpp_method.py +1 -1
  40. mindspore/common/_tensor_docs.py +177 -52
  41. mindspore/common/_utils.py +9 -1
  42. mindspore/common/api.py +338 -208
  43. mindspore/common/dtype.py +108 -57
  44. mindspore/common/dump.py +11 -16
  45. mindspore/common/dynamic_shape/__init__.py +0 -0
  46. mindspore/common/{auto_dynamic_shape.py → dynamic_shape/auto_dynamic_shape.py} +17 -23
  47. mindspore/common/dynamic_shape/enable_dynamic.py +197 -0
  48. mindspore/common/file_system.py +59 -9
  49. mindspore/common/generator.py +2 -3
  50. mindspore/common/hook_handle.py +33 -5
  51. mindspore/common/jit_config.py +1 -1
  52. mindspore/common/jit_trace.py +84 -105
  53. mindspore/common/np_dtype.py +3 -3
  54. mindspore/common/parameter.py +27 -29
  55. mindspore/common/recompute.py +5 -7
  56. mindspore/common/sparse_tensor.py +0 -3
  57. mindspore/common/symbol.py +0 -1
  58. mindspore/common/tensor.py +84 -133
  59. mindspore/communication/_comm_helper.py +46 -4
  60. mindspore/communication/management.py +79 -7
  61. mindspore/context.py +47 -38
  62. mindspore/dataset/__init__.py +1 -1
  63. mindspore/dataset/audio/transforms.py +1 -1
  64. mindspore/dataset/core/config.py +38 -4
  65. mindspore/dataset/engine/datasets.py +350 -322
  66. mindspore/dataset/engine/datasets_user_defined.py +69 -23
  67. mindspore/dataset/engine/iterators.py +2 -2
  68. mindspore/dataset/engine/obs/config_loader.py +2 -2
  69. mindspore/dataset/engine/obs/obs_mindrecord_dataset.py +8 -0
  70. mindspore/dataset/transforms/c_transforms.py +2 -2
  71. mindspore/dataset/transforms/py_transforms.py +7 -3
  72. mindspore/dataset/transforms/transforms.py +10 -6
  73. mindspore/dataset/vision/__init__.py +1 -1
  74. mindspore/dataset/vision/py_transforms.py +8 -8
  75. mindspore/dataset/vision/transforms.py +17 -5
  76. mindspore/dataset/vision/utils.py +632 -21
  77. mindspore/dataset/vision/validators.py +1 -0
  78. mindspore/device_context/ascend/device.py +1 -1
  79. mindspore/device_context/ascend/op_tuning.py +35 -1
  80. mindspore/device_context/gpu/__init__.py +2 -2
  81. mindspore/device_context/gpu/device.py +1 -1
  82. mindspore/device_context/gpu/op_precision.py +4 -2
  83. mindspore/device_context/gpu/op_tuning.py +6 -3
  84. mindspore/device_manager.py +16 -9
  85. mindspore/dnnl.dll +0 -0
  86. mindspore/dpcmi.dll +0 -0
  87. mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +5 -4
  88. mindspore/experimental/llm_boost/atb/boost_base.py +2 -3
  89. mindspore/experimental/optim/adadelta.py +13 -20
  90. mindspore/experimental/optim/adagrad.py +15 -22
  91. mindspore/experimental/optim/adam.py +17 -24
  92. mindspore/experimental/optim/adamax.py +14 -22
  93. mindspore/experimental/optim/adamw.py +28 -34
  94. mindspore/experimental/optim/asgd.py +15 -25
  95. mindspore/experimental/optim/lr_scheduler.py +27 -45
  96. mindspore/experimental/optim/nadam.py +14 -24
  97. mindspore/experimental/optim/optimizer.py +13 -23
  98. mindspore/experimental/optim/radam.py +18 -24
  99. mindspore/experimental/optim/rmsprop.py +14 -25
  100. mindspore/experimental/optim/rprop.py +15 -26
  101. mindspore/experimental/optim/sgd.py +9 -19
  102. mindspore/hal/__init__.py +4 -4
  103. mindspore/hal/contiguous_tensors_handle.py +2 -2
  104. mindspore/hal/memory.py +1 -0
  105. mindspore/include/api/cell.h +65 -5
  106. mindspore/include/api/cfg.h +24 -7
  107. mindspore/include/api/context.h +1 -0
  108. mindspore/include/api/delegate.h +10 -2
  109. mindspore/include/api/dual_abi_helper.h +100 -19
  110. mindspore/include/api/graph.h +14 -1
  111. mindspore/include/api/kernel.h +16 -3
  112. mindspore/include/api/kernel_api.h +9 -1
  113. mindspore/include/api/metrics/accuracy.h +9 -0
  114. mindspore/include/api/model.h +8 -1
  115. mindspore/include/api/model_group.h +4 -0
  116. mindspore/include/api/model_parallel_runner.h +2 -0
  117. mindspore/include/api/status.h +48 -10
  118. mindspore/include/api/types.h +8 -3
  119. mindspore/include/c_api/model_c.h +0 -58
  120. mindspore/include/c_api/tensor_c.h +0 -26
  121. mindspore/include/dataset/constants.h +9 -0
  122. mindspore/include/dataset/vision_ascend.h +1 -1
  123. mindspore/jpeg62.dll +0 -0
  124. mindspore/mindrecord/tools/cifar10.py +61 -11
  125. mindspore/mindrecord/tools/cifar10_to_mr.py +5 -0
  126. mindspore/mindspore_backend_common.dll +0 -0
  127. mindspore/mindspore_backend_manager.dll +0 -0
  128. mindspore/mindspore_common.dll +0 -0
  129. mindspore/mindspore_core.dll +0 -0
  130. mindspore/mindspore_cpu_res_manager.dll +0 -0
  131. mindspore/mindspore_dump.dll +0 -0
  132. mindspore/mindspore_frontend.dll +0 -0
  133. mindspore/mindspore_glog.dll +0 -0
  134. mindspore/mindspore_memory_pool.dll +0 -0
  135. mindspore/mindspore_ms_backend.dll +0 -0
  136. mindspore/mindspore_ops.dll +0 -0
  137. mindspore/mindspore_ops_host.dll +0 -0
  138. mindspore/mindspore_ops_kernel_common.dll +0 -0
  139. mindspore/mindspore_profiler.dll +0 -0
  140. mindspore/mindspore_pyboost.dll +0 -0
  141. mindspore/mindspore_pynative.dll +0 -0
  142. mindspore/mindspore_res_manager.dll +0 -0
  143. mindspore/mindspore_runtime_pipeline.dll +0 -0
  144. mindspore/mint/__init__.py +4 -44
  145. mindspore/mint/distributed/__init__.py +5 -0
  146. mindspore/mint/distributed/distributed.py +425 -19
  147. mindspore/mint/nn/__init__.py +1 -1
  148. mindspore/mint/nn/functional.py +53 -6
  149. mindspore/mint/nn/layer/_functions.py +163 -294
  150. mindspore/mint/nn/layer/activation.py +8 -6
  151. mindspore/mint/nn/layer/conv.py +125 -101
  152. mindspore/mint/nn/layer/normalization.py +11 -25
  153. mindspore/mint/optim/adam.py +19 -18
  154. mindspore/mint/optim/adamw.py +14 -8
  155. mindspore/mint/optim/sgd.py +5 -5
  156. mindspore/msobj140.dll +0 -0
  157. mindspore/mspdb140.dll +0 -0
  158. mindspore/mspdbcore.dll +0 -0
  159. mindspore/mspdbst.dll +0 -0
  160. mindspore/mspft140.dll +0 -0
  161. mindspore/msvcdis140.dll +0 -0
  162. mindspore/msvcp140_1.dll +0 -0
  163. mindspore/msvcp140_2.dll +0 -0
  164. mindspore/msvcp140_atomic_wait.dll +0 -0
  165. mindspore/msvcp140_codecvt_ids.dll +0 -0
  166. mindspore/nn/cell.py +488 -620
  167. mindspore/nn/grad/cell_grad.py +11 -12
  168. mindspore/nn/layer/activation.py +36 -36
  169. mindspore/nn/layer/basic.py +74 -77
  170. mindspore/nn/layer/channel_shuffle.py +4 -4
  171. mindspore/nn/layer/combined.py +4 -2
  172. mindspore/nn/layer/conv.py +86 -85
  173. mindspore/nn/layer/dense.py +9 -7
  174. mindspore/nn/layer/embedding.py +50 -52
  175. mindspore/nn/layer/image.py +38 -40
  176. mindspore/nn/layer/math.py +111 -112
  177. mindspore/nn/layer/normalization.py +56 -44
  178. mindspore/nn/layer/pooling.py +58 -63
  179. mindspore/nn/layer/rnn_cells.py +33 -33
  180. mindspore/nn/layer/rnns.py +56 -56
  181. mindspore/nn/layer/thor_layer.py +74 -73
  182. mindspore/nn/layer/transformer.py +11 -1
  183. mindspore/nn/learning_rate_schedule.py +20 -20
  184. mindspore/nn/loss/loss.py +79 -81
  185. mindspore/nn/optim/adam.py +2 -4
  186. mindspore/nn/optim/adasum.py +2 -2
  187. mindspore/nn/optim/lamb.py +1 -3
  188. mindspore/nn/optim/optimizer.py +1 -1
  189. mindspore/nn/optim/tft_wrapper.py +2 -3
  190. mindspore/nn/optim/thor.py +2 -2
  191. mindspore/nn/probability/distribution/_utils/utils.py +2 -2
  192. mindspore/nn/probability/distribution/exponential.py +2 -1
  193. mindspore/nn/probability/distribution/poisson.py +2 -1
  194. mindspore/nn/sparse/sparse.py +3 -3
  195. mindspore/nn/wrap/cell_wrapper.py +73 -42
  196. mindspore/nn/wrap/grad_reducer.py +37 -52
  197. mindspore/nn/wrap/loss_scale.py +72 -74
  198. mindspore/numpy/array_creations.py +7 -7
  199. mindspore/numpy/fft.py +1 -1
  200. mindspore/numpy/math_ops.py +1 -1
  201. mindspore/numpy/utils_const.py +1 -1
  202. mindspore/opencv_core452.dll +0 -0
  203. mindspore/opencv_imgcodecs452.dll +0 -0
  204. mindspore/opencv_imgproc452.dll +0 -0
  205. mindspore/ops/_grad_experimental/grad_comm_ops.py +51 -13
  206. mindspore/ops/_grad_experimental/grad_debug_ops.py +14 -0
  207. mindspore/ops/_grad_experimental/grad_inner_ops.py +0 -9
  208. mindspore/ops/_op_impl/cpu/__init__.py +1 -0
  209. mindspore/{experimental/es/__init__.py → ops/_op_impl/cpu/joinedstr_op.py} +12 -6
  210. mindspore/ops/_vmap/vmap_array_ops.py +6 -13
  211. mindspore/ops/_vmap/vmap_nn_ops.py +8 -16
  212. mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +29 -10
  213. mindspore/ops/auto_generate/gen_extend_func.py +5 -55
  214. mindspore/ops/auto_generate/gen_ops_def.py +753 -273
  215. mindspore/ops/auto_generate/gen_ops_prim.py +1687 -958
  216. mindspore/ops/auto_generate/pyboost_inner_prim.py +31 -1
  217. mindspore/ops/composite/__init__.py +10 -0
  218. mindspore/ops/composite/base.py +9 -5
  219. mindspore/ops/composite/multitype_ops/__init__.py +12 -1
  220. mindspore/ops/composite/multitype_ops/_compile_utils.py +132 -108
  221. mindspore/ops/composite/multitype_ops/_constexpr_utils.py +1 -1
  222. mindspore/ops/composite/multitype_ops/add_impl.py +70 -2
  223. mindspore/ops/composite/multitype_ops/div_impl.py +49 -0
  224. mindspore/ops/composite/multitype_ops/floordiv_impl.py +29 -0
  225. mindspore/ops/composite/multitype_ops/getitem_impl.py +11 -0
  226. mindspore/ops/composite/multitype_ops/mod_impl.py +5 -3
  227. mindspore/ops/composite/multitype_ops/mul_impl.py +49 -0
  228. mindspore/ops/composite/multitype_ops/setitem_impl.py +57 -0
  229. mindspore/ops/composite/multitype_ops/sub_impl.py +34 -0
  230. mindspore/ops/composite/multitype_ops/zeros_like_impl.py +14 -0
  231. mindspore/ops/function/__init__.py +4 -1
  232. mindspore/ops/function/_add_attr_func.py +11 -6
  233. mindspore/ops/function/array_func.py +17 -100
  234. mindspore/ops/function/debug_func.py +8 -5
  235. mindspore/ops/function/grad/grad_func.py +5 -13
  236. mindspore/ops/function/math_func.py +65 -399
  237. mindspore/ops/function/nn_func.py +44 -61
  238. mindspore/ops/function/other_func.py +4 -1
  239. mindspore/ops/function/random_func.py +31 -4
  240. mindspore/ops/functional.py +2 -3
  241. mindspore/ops/functional_overload.py +486 -18
  242. mindspore/ops/op_info_register.py +21 -0
  243. mindspore/ops/operations/__init__.py +5 -2
  244. mindspore/ops/operations/_custom_ops_utils.py +675 -8
  245. mindspore/ops/operations/_inner_ops.py +14 -18
  246. mindspore/ops/operations/_sequence_ops.py +1 -1
  247. mindspore/ops/operations/array_ops.py +4 -50
  248. mindspore/ops/operations/comm_ops.py +186 -41
  249. mindspore/ops/operations/custom_ops.py +244 -175
  250. mindspore/ops/operations/debug_ops.py +55 -4
  251. mindspore/ops/operations/image_ops.py +13 -13
  252. mindspore/ops/operations/manually_defined/ops_def.py +27 -28
  253. mindspore/ops/operations/math_ops.py +8 -9
  254. mindspore/ops/operations/nn_ops.py +6 -7
  255. mindspore/ops/primitive.py +9 -20
  256. mindspore/ops/tensor_method.py +52 -11
  257. mindspore/ops_generate/api/cpp_create_prim_instance_helper_generator.py +1 -1
  258. mindspore/ops_generate/api/functional_map_cpp_generator.py +10 -9
  259. mindspore/ops_generate/api/functions_cc_generator.py +58 -10
  260. mindspore/ops_generate/api/tensor_func_reg_cpp_generator.py +1 -1
  261. mindspore/ops_generate/common/base_generator.py +14 -0
  262. mindspore/ops_generate/common/gen_constants.py +7 -2
  263. mindspore/ops_generate/common/gen_utils.py +0 -19
  264. mindspore/ops_generate/common/op_proto.py +11 -4
  265. mindspore/ops_generate/common/template.py +88 -11
  266. mindspore/ops_generate/gen_ops.py +1 -1
  267. mindspore/ops_generate/op_def/lite_ops_cpp_generator.py +4 -4
  268. mindspore/ops_generate/op_def/ops_name_h_generator.py +0 -3
  269. mindspore/ops_generate/op_def/ops_primitive_h_generator.py +0 -4
  270. mindspore/ops_generate/op_def_py/op_prim_py_generator.py +5 -2
  271. mindspore/ops_generate/pyboost/auto_grad_impl_cc_generator.py +49 -8
  272. mindspore/ops_generate/pyboost/auto_grad_reg_cc_generator.py +2 -2
  273. mindspore/ops_generate/pyboost/gen_pyboost_func.py +31 -16
  274. mindspore/ops_generate/pyboost/op_template_parser.py +98 -72
  275. mindspore/ops_generate/pyboost/pyboost_functions_cpp_generator.py +70 -273
  276. mindspore/ops_generate/pyboost/pyboost_functions_h_generator.py +14 -6
  277. mindspore/ops_generate/pyboost/pyboost_functions_impl_cpp_generator.py +316 -0
  278. mindspore/ops_generate/pyboost/pyboost_functions_py_generator.py +1 -1
  279. mindspore/ops_generate/pyboost/pyboost_grad_function_cpp_generator.py +5 -3
  280. mindspore/ops_generate/pyboost/pyboost_inner_prim_generator.py +1 -1
  281. mindspore/ops_generate/pyboost/pyboost_internal_functions_cpp_generator.py +76 -0
  282. mindspore/ops_generate/pyboost/pyboost_internal_functions_h_generator.py +76 -0
  283. mindspore/ops_generate/pyboost/pyboost_internal_kernel_info_adapter_generator.py +125 -0
  284. mindspore/ops_generate/pyboost/pyboost_native_grad_functions_generator.py +4 -3
  285. mindspore/ops_generate/pyboost/pyboost_op_cpp_code_generator.py +348 -61
  286. mindspore/ops_generate/pyboost/pyboost_overload_functions_cpp_generator.py +1 -1
  287. mindspore/ops_generate/pyboost/pyboost_utils.py +118 -9
  288. mindspore/ops_generate/tensor_py_cc_generator.py +1 -24
  289. mindspore/parallel/_auto_parallel_context.py +9 -17
  290. mindspore/parallel/_cell_wrapper.py +106 -40
  291. mindspore/parallel/_parallel_serialization.py +4 -3
  292. mindspore/parallel/_ps_context.py +4 -6
  293. mindspore/parallel/_tensor.py +167 -12
  294. mindspore/parallel/_transformer/moe.py +1 -1
  295. mindspore/parallel/_transformer/transformer.py +17 -12
  296. mindspore/parallel/_utils.py +5 -11
  297. mindspore/parallel/auto_parallel.py +33 -12
  298. mindspore/parallel/checkpoint_convert.py +3 -3
  299. mindspore/parallel/checkpoint_transform.py +5 -1
  300. mindspore/parallel/cluster/process_entity/_api.py +88 -49
  301. mindspore/parallel/cluster/process_entity/_utils.py +95 -7
  302. mindspore/parallel/cluster/run.py +48 -7
  303. mindspore/parallel/function/__init__.py +8 -1
  304. mindspore/parallel/function/reshard_func.py +7 -6
  305. mindspore/parallel/nn/__init__.py +15 -2
  306. mindspore/parallel/nn/parallel_cell_wrapper.py +50 -14
  307. mindspore/parallel/nn/parallel_grad_reducer.py +7 -14
  308. mindspore/parallel/shard.py +9 -23
  309. mindspore/parallel/transform_safetensors.py +468 -174
  310. mindspore/pgodb140.dll +0 -0
  311. mindspore/pgort140.dll +0 -0
  312. mindspore/profiler/__init__.py +2 -1
  313. mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +7 -7
  314. mindspore/profiler/analysis/parser/timeline_assembly_factory/base_timeline_assembler.py +3 -0
  315. mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +3 -0
  316. mindspore/profiler/analysis/parser/timeline_creator/cpu_op_timeline_creator.py +3 -3
  317. mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +3 -3
  318. mindspore/profiler/analysis/parser/timeline_creator/msprof_timeline_creator.py +4 -4
  319. mindspore/profiler/analysis/parser/timeline_creator/scope_layer_timeline_creator.py +3 -3
  320. mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +4 -1
  321. mindspore/profiler/analysis/parser/timeline_event/timeline_event_pool.py +2 -1
  322. mindspore/profiler/analysis/task_manager.py +1 -1
  323. mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +5 -1
  324. mindspore/profiler/analysis/viewer/ascend_integrate_viewer.py +2 -1
  325. mindspore/profiler/analysis/viewer/ascend_kernel_details_viewer.py +10 -9
  326. mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +43 -23
  327. mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +3 -2
  328. mindspore/profiler/analysis/viewer/ms_minddata_viewer.py +9 -5
  329. mindspore/profiler/analysis/viewer/ms_operator_details_viewer.py +132 -0
  330. mindspore/profiler/common/constant.py +16 -0
  331. mindspore/profiler/common/msprof_cmd_tool.py +2 -2
  332. mindspore/profiler/common/path_manager.py +9 -0
  333. mindspore/profiler/common/profiler_context.py +50 -29
  334. mindspore/profiler/common/profiler_info.py +0 -16
  335. mindspore/profiler/common/profiler_meta_data.py +1 -0
  336. mindspore/profiler/common/profiler_op_analyse.py +239 -0
  337. mindspore/profiler/common/profiler_output_path.py +23 -8
  338. mindspore/profiler/common/profiler_parameters.py +128 -35
  339. mindspore/profiler/dynamic_profile/__init__.py +0 -0
  340. mindspore/profiler/dynamic_profile/dynamic_monitor_proxy.py +39 -0
  341. mindspore/profiler/dynamic_profile/dynamic_profiler_config_context.py +666 -0
  342. mindspore/profiler/dynamic_profile/dynamic_profiler_utils.py +62 -0
  343. mindspore/profiler/dynamic_profiler.py +374 -338
  344. mindspore/profiler/envprofiler.py +42 -12
  345. mindspore/profiler/experimental_config.py +112 -7
  346. mindspore/profiler/mstx.py +33 -12
  347. mindspore/profiler/platform/__init__.py +2 -3
  348. mindspore/profiler/platform/cpu_profiler.py +10 -4
  349. mindspore/profiler/platform/npu_profiler.py +30 -20
  350. mindspore/profiler/profiler.py +218 -154
  351. mindspore/profiler/profiler_action_controller.py +65 -77
  352. mindspore/profiler/profiler_interface.py +2 -2
  353. mindspore/profiler/schedule.py +10 -4
  354. mindspore/rewrite/common/config.py +1 -0
  355. mindspore/rewrite/common/namer.py +1 -0
  356. mindspore/rewrite/common/namespace.py +1 -0
  357. mindspore/rewrite/node/node.py +31 -11
  358. mindspore/rewrite/parsers/assign_parser.py +1 -1
  359. mindspore/rewrite/symbol_tree/symbol_tree.py +2 -2
  360. mindspore/run_check/_check_version.py +7 -10
  361. mindspore/runtime/__init__.py +8 -6
  362. mindspore/runtime/event.py +10 -4
  363. mindspore/runtime/executor.py +87 -45
  364. mindspore/runtime/memory.py +22 -30
  365. mindspore/runtime/thread_bind_core.py +299 -165
  366. mindspore/safeguard/rewrite_obfuscation.py +12 -13
  367. mindspore/swresample-4.dll +0 -0
  368. mindspore/swscale-6.dll +0 -0
  369. mindspore/tbbmalloc.dll +0 -0
  370. mindspore/tinyxml2.dll +0 -0
  371. mindspore/train/_utils.py +9 -5
  372. mindspore/train/amp.py +43 -23
  373. mindspore/train/callback/__init__.py +5 -5
  374. mindspore/train/callback/_callback.py +2 -1
  375. mindspore/train/callback/_checkpoint.py +4 -14
  376. mindspore/train/callback/_flops_collector.py +11 -7
  377. mindspore/train/callback/_landscape.py +0 -1
  378. mindspore/train/callback/_train_fault_tolerance.py +72 -18
  379. mindspore/train/data_sink.py +15 -6
  380. mindspore/train/dataset_helper.py +14 -5
  381. mindspore/train/model.py +49 -47
  382. mindspore/train/serialization.py +168 -126
  383. mindspore/train/summary/summary_record.py +13 -2
  384. mindspore/train/train_thor/model_thor.py +2 -2
  385. mindspore/turbojpeg.dll +0 -0
  386. mindspore/utils/__init__.py +3 -2
  387. mindspore/utils/dryrun.py +0 -6
  388. mindspore/utils/runtime_execution_order_check.py +162 -78
  389. mindspore/utils/sdc_detect.py +68 -0
  390. mindspore/utils/utils.py +14 -17
  391. mindspore/vcmeta.dll +0 -0
  392. mindspore/vcruntime140.dll +0 -0
  393. mindspore/vcruntime140_1.dll +0 -0
  394. mindspore/version.py +1 -1
  395. {mindspore-2.6.0.dist-info → mindspore-2.7.0.dist-info}/METADATA +5 -4
  396. {mindspore-2.6.0.dist-info → mindspore-2.7.0.dist-info}/RECORD +400 -439
  397. mindspore/_deprecated/jit.py +0 -198
  398. mindspore/_extends/remote/kernel_build_server_ascend.py +0 -75
  399. mindspore/communication/_hccl_management.py +0 -297
  400. mindspore/experimental/es/embedding_service.py +0 -891
  401. mindspore/experimental/es/embedding_service_layer.py +0 -581
  402. mindspore/profiler/common/validator/__init__.py +0 -14
  403. mindspore/profiler/common/validator/validate_path.py +0 -84
  404. mindspore/profiler/parser/__init__.py +0 -14
  405. mindspore/profiler/parser/aicpu_data_parser.py +0 -272
  406. mindspore/profiler/parser/ascend_analysis/__init__.py +0 -14
  407. mindspore/profiler/parser/ascend_analysis/constant.py +0 -71
  408. mindspore/profiler/parser/ascend_analysis/file_manager.py +0 -180
  409. mindspore/profiler/parser/ascend_analysis/function_event.py +0 -185
  410. mindspore/profiler/parser/ascend_analysis/fwk_cann_parser.py +0 -136
  411. mindspore/profiler/parser/ascend_analysis/fwk_file_parser.py +0 -131
  412. mindspore/profiler/parser/ascend_analysis/msprof_timeline_parser.py +0 -104
  413. mindspore/profiler/parser/ascend_analysis/path_manager.py +0 -313
  414. mindspore/profiler/parser/ascend_analysis/profiler_info_parser.py +0 -123
  415. mindspore/profiler/parser/ascend_analysis/tlv_decoder.py +0 -86
  416. mindspore/profiler/parser/ascend_analysis/trace_event_manager.py +0 -75
  417. mindspore/profiler/parser/ascend_cluster_generator.py +0 -116
  418. mindspore/profiler/parser/ascend_communicate_generator.py +0 -314
  419. mindspore/profiler/parser/ascend_flops_generator.py +0 -116
  420. mindspore/profiler/parser/ascend_fpbp_generator.py +0 -82
  421. mindspore/profiler/parser/ascend_hccl_generator.py +0 -271
  422. mindspore/profiler/parser/ascend_integrate_generator.py +0 -42
  423. mindspore/profiler/parser/ascend_memory_generator.py +0 -185
  424. mindspore/profiler/parser/ascend_msprof_exporter.py +0 -282
  425. mindspore/profiler/parser/ascend_msprof_generator.py +0 -187
  426. mindspore/profiler/parser/ascend_op_generator.py +0 -334
  427. mindspore/profiler/parser/ascend_steptrace_generator.py +0 -94
  428. mindspore/profiler/parser/ascend_timeline_generator.py +0 -545
  429. mindspore/profiler/parser/base_timeline_generator.py +0 -483
  430. mindspore/profiler/parser/container.py +0 -229
  431. mindspore/profiler/parser/cpu_gpu_timeline_generator.py +0 -697
  432. mindspore/profiler/parser/flops_parser.py +0 -531
  433. mindspore/profiler/parser/framework_enum.py +0 -111
  434. mindspore/profiler/parser/framework_parser.py +0 -464
  435. mindspore/profiler/parser/framework_struct.py +0 -61
  436. mindspore/profiler/parser/gpu_analysis/__init__.py +0 -14
  437. mindspore/profiler/parser/gpu_analysis/function_event.py +0 -44
  438. mindspore/profiler/parser/gpu_analysis/fwk_file_parser.py +0 -89
  439. mindspore/profiler/parser/gpu_analysis/profiler_info_parser.py +0 -72
  440. mindspore/profiler/parser/hccl_parser.py +0 -573
  441. mindspore/profiler/parser/hwts_log_parser.py +0 -122
  442. mindspore/profiler/parser/integrator.py +0 -526
  443. mindspore/profiler/parser/memory_usage_parser.py +0 -277
  444. mindspore/profiler/parser/minddata_analyzer.py +0 -800
  445. mindspore/profiler/parser/minddata_parser.py +0 -186
  446. mindspore/profiler/parser/minddata_pipeline_parser.py +0 -299
  447. mindspore/profiler/parser/op_intermediate_parser.py +0 -149
  448. mindspore/profiler/parser/optime_parser.py +0 -250
  449. mindspore/profiler/parser/profiler_info.py +0 -213
  450. mindspore/profiler/parser/step_trace_parser.py +0 -666
  451. mindspore/utils/hooks.py +0 -81
  452. /mindspore/common/{_auto_dynamic.py → dynamic_shape/_auto_dynamic.py} +0 -0
  453. {mindspore-2.6.0.dist-info → mindspore-2.7.0.dist-info}/WHEEL +0 -0
  454. {mindspore-2.6.0.dist-info → mindspore-2.7.0.dist-info}/entry_points.txt +0 -0
  455. {mindspore-2.6.0.dist-info → mindspore-2.7.0.dist-info}/top_level.txt +0 -0
@@ -1,666 +0,0 @@
1
- # Copyright 2020-201 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
- """The parser for step trace data."""
16
- import csv
17
- import json
18
- import os
19
- import stat
20
- from collections import defaultdict
21
- from decimal import Decimal
22
- from abc import abstractmethod
23
- from enum import Enum
24
- from pathlib import Path
25
-
26
- from mindspore import log
27
- from mindspore.profiler.common.exceptions.exceptions import ProfilerIOException, ProfilerRawFileException
28
- from mindspore.profiler.common.util import get_summary_for_step_trace
29
- from mindspore.profiler.common.struct_type import StructType
30
- from mindspore.profiler.common.util import combine_stream_task_id
31
-
32
-
33
- class PointTag(Enum):
34
- """Initializing indexes."""
35
- MODEL_START = 0
36
- MODEL_END = 1
37
- FP_START = 2
38
- BP_END = 3
39
- ITER_END = 4
40
- MIN_ALL_REDUCE = 10000
41
- MAX_ALL_REDUCE = 20000
42
-
43
-
44
- STEP_TRACE_RPT_TYPE = 10
45
- TS_TRACK_STEP_TRACE_STRUCT = dict(
46
- mode=StructType.UINT8,
47
- rptType=StructType.UINT8,
48
- bufSize=StructType.UINT16,
49
- reserved1=StructType.UINT32,
50
- timestamp=StructType.UINT64,
51
- indexId=StructType.UINT64,
52
- modelId=StructType.UINT64,
53
- streamId=StructType.UINT16,
54
- taskId=StructType.UINT16,
55
- tagId=StructType.UINT16,
56
- reserved2=StructType.UINT16
57
- )
58
-
59
-
60
- class BaseStepTraceParser:
61
- """
62
- The parser for step trace data.
63
-
64
- Args:
65
- input_dir (str): The directory that contains original step trace data.
66
- output_file_path (str): The output file path.
67
- skip_first_step (bool): Whether skip the first step or not.
68
- is_training_mode (bool): Whether in training mode or not.
69
- is_gpu_kernel_async_launch (bool): Whether is gpu kernel async launch or not.
70
- """
71
-
72
- def __init__(self, input_dir, output_file_path, skip_first_step=False,
73
- is_training_mode=True, is_gpu_kernel_async_launch=False):
74
- self._input_dir = input_dir
75
- self._output_path = output_file_path
76
- self._skip_first_step = skip_first_step
77
- self._is_training_mode = is_training_mode
78
- self._is_gpu_kernel_async_launch = is_gpu_kernel_async_launch
79
-
80
- self._result = []
81
- self._header = []
82
- self._step_num = 0
83
- self._tag_map = {}
84
- self._unique_id_map = {}
85
-
86
- @property
87
- def output_file(self):
88
- """The property of step trace header."""
89
- file_name = self._output_path.rsplit('/', 2)
90
- return file_name[-1] if len(file_name) == 3 else ''
91
-
92
- @staticmethod
93
- def _get_op_type(tag, name):
94
- """
95
- Get op type from tag and name.
96
-
97
- Args:
98
- tag (int): The tag id.
99
- name (str): The op name.
100
-
101
- Returns:
102
- str, the op type or communication op name.
103
- """
104
- tag_map = {PointTag.FP_START.value: 'fp', PointTag.BP_END.value: 'bp', PointTag.ITER_END.value: 'end'}
105
- # get solid tag type
106
- op_type = tag_map.get(tag, '')
107
- if op_type:
108
- return op_type
109
- # check if the tag is step tag.
110
- if tag == PointTag.MODEL_START.value:
111
- return 'start'
112
- # analyze reduce tag
113
- op_name = name.rsplit('/', 1)[-1]
114
- if not op_name:
115
- log.warning("Unexpected op name:%s", name)
116
-
117
- return op_name
118
-
119
- def show(self):
120
- """The property of step trace info."""
121
- summary_info = {}
122
- if self._result:
123
- summary_info = get_summary_for_step_trace(self._result[-1], self._header, self._is_training_mode)
124
- summary_info['total_steps'] = len(self._result) - 1
125
- log.info('\nStep trace summary info (unit: syscnt):')
126
- log.info(summary_info)
127
- log.info('\nThe step trace parse result saves under ${summary_dir}/profiler/%s' % self.output_file)
128
-
129
- def parse_and_save(self):
130
- """Parse step trace files and save the result."""
131
- self._parse()
132
- self._save()
133
- log.info("Finish to save intermediate result for step trace file.")
134
-
135
- @abstractmethod
136
- def record_point_info(self, output_path):
137
- """
138
- Record point info into json.
139
-
140
- Args:
141
- output_path (str): The output path for saving point info.
142
-
143
- Returns:
144
- dict, parsed point info.
145
- """
146
-
147
- @abstractmethod
148
- def _parse(self):
149
- """Parse source step trace files."""
150
-
151
- @abstractmethod
152
- def _get_single_reduce_event_info(self, field_name, start_point, end_point):
153
- """
154
- Get single reduce info.
155
-
156
- Args:
157
- field_name (str): The field name.
158
- start_point (Tuple[int, int]): Start point time info, including (tag_id, sys_count).
159
- end_point (Tuple[int, int]): End point time info, including (tag_id, sys_count).
160
-
161
- Returns:
162
- dict, reduce info.
163
- """
164
-
165
- def _record_trace_event(self, step_trace):
166
- """Record trace event."""
167
- log.debug("Profiler start to record trace event: %s", str(step_trace))
168
- self._step_num += 1
169
- start_time = step_trace.get('start')
170
- end_time = step_trace.get('end')
171
- fp_time = step_trace.get('fp')
172
- bp_time = step_trace.get('bp')
173
- if not (start_time and end_time and fp_time and bp_time):
174
- log.warning("The step %d lacks basic time.", self._step_num)
175
- return
176
- if start_time == '-':
177
- start_time = fp_time
178
- row_data = {
179
- 'step_num': self._step_num,
180
- 'start_point': start_time,
181
- 'end_point': end_time,
182
- 'total': end_time - start_time,
183
- 'fp_point': fp_time,
184
- 'bp_point': bp_time,
185
- 'iteration_interval': fp_time - start_time,
186
- 'fp_and_bp': bp_time - fp_time,
187
- 'tail': end_time - bp_time
188
- }
189
- # update reduce info
190
- self._update_reduce_info(step_trace, row_data)
191
- # save the row data, The unit of duration is 10ns
192
- if not self._header:
193
- self._header = list(row_data.keys())
194
- log.info("Profiler step trace header: %s", str(self._header))
195
- self._header.extend([reduce_col for reduce_col in row_data if reduce_col not in self._header])
196
- row_data_list = [row_data.get(header_name, 0) for header_name in self._header]
197
- self._result.append(row_data_list)
198
-
199
- def _update_reduce_info(self, step_trace, row_data):
200
- """Extract reduce info."""
201
- reduce_time = step_trace.get('reduce', {})
202
- for stream_id, time_points in reduce_time.items():
203
- time_point_num = len(time_points)
204
- if time_point_num % 2:
205
- log.warning("Stream %d has %d reduce time points.", stream_id, time_point_num)
206
- continue
207
- for index, point_id in enumerate(range(0, time_point_num, 2)):
208
- field_name = f'stream_{stream_id}_{index}'
209
- reduce_info = self._get_single_reduce_event_info(
210
- field_name, time_points[point_id], time_points[point_id + 1])
211
- row_data.update(reduce_info)
212
-
213
- def _record_average_info(self):
214
- """Calculate average info."""
215
- result_size = len(self._result)
216
- # calculate average data for each column in result data
217
- average_data = [0] * len(self._header)
218
- if result_size >= 1:
219
- for row_info in self._result:
220
- average_data = [Decimal(i) + Decimal(j) for i, j in zip(row_info, average_data)]
221
- average_data = [round(item / result_size) for item in average_data]
222
- # change step num info in average_data to None
223
- step_num_index = self._header.index('step_num')
224
- average_data[step_num_index] = '-'
225
- self._result.append(average_data)
226
- log.info("Finish add average info for step trace.")
227
-
228
- def _save(self):
229
- """save step trace file."""
230
- bp_point, tail, fp_duration = 5, -1, -2
231
- log.info("Start to save step trace file.")
232
- if not self._header:
233
- return
234
- try:
235
- with os.fdopen(os.open(self._output_path, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600),
236
- 'w') as file_handle:
237
- csv_writer = csv.writer(file_handle)
238
- if not self._is_training_mode:
239
- self._header[fp_duration] = 'fp'
240
- self._header = self._header[:bp_point] + self._header[bp_point + 1:tail]
241
- csv_writer.writerow(self._header)
242
- for row_data in self._result:
243
- if not self._is_training_mode:
244
- row_data[fp_duration] += row_data[tail]
245
- row_data = row_data[:bp_point] + row_data[bp_point + 1:tail]
246
- csv_writer.writerow(row_data)
247
- os.chmod(self._output_path, stat.S_IREAD | stat.S_IWRITE)
248
- except (IOError, OSError) as err:
249
- log.warning('Failed to save step trace raw info. %s', err)
250
- raise ProfilerIOException from err
251
-
252
-
253
- class GpuStepTraceParser(BaseStepTraceParser):
254
- """The parser for gpu step trace data."""
255
-
256
- def __init__(self, *args, **kwargs):
257
- super(GpuStepTraceParser, self).__init__(*args, **kwargs)
258
- self._source_file_path = self._input_dir
259
- self._reduce_op_type = []
260
-
261
- def get_fp_bp(self, f_obj, all_step_fp, all_step_bp):
262
- """Parser the fp and bp."""
263
- fp_start, bp_end = 0, 1
264
- if self._is_gpu_kernel_async_launch:
265
- for line in f_obj:
266
- line = line.strip().split()
267
- all_step_fp.append(line[1].split(',')[0])
268
- all_step_bp.append(line[2].split(',')[0])
269
- else:
270
- lines = f_obj.readlines()
271
- all_step_fp.append(lines[fp_start].split()[0])
272
- all_step_bp.append(lines[bp_end].split()[0])
273
-
274
- def record_point_info(self, output_path):
275
- """
276
- Record point info into json.
277
-
278
- Args:
279
- output_path (str): The output path for saving point info.
280
-
281
- Returns:
282
- dict, parsed point info.
283
- """
284
- all_step_points = []
285
- all_step_fp = []
286
- all_step_bp = []
287
- try:
288
- with open(self._source_file_path, 'r') as f_obj:
289
- self.get_fp_bp(f_obj, all_step_fp, all_step_bp)
290
- except (IOError, OSError) as err:
291
- log.warning(f'Failed to read {self._source_file_path}', err)
292
- raise ProfilerIOException from err
293
-
294
- for fp_name, bp_name in zip(all_step_fp, all_step_bp):
295
- if self._is_training_mode:
296
- points = {
297
- 'fp_start': fp_name,
298
- 'bp_end': bp_name
299
- }
300
- else:
301
- points = {
302
- 'fp_start': fp_name,
303
- }
304
- all_step_points.append(points)
305
-
306
- try:
307
- with os.fdopen(os.open(output_path, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600), 'w') as json_file:
308
- if self._is_gpu_kernel_async_launch:
309
- json.dump(all_step_points, json_file)
310
- else:
311
- json.dump(all_step_points[0], json_file)
312
- os.chmod(output_path, stat.S_IREAD | stat.S_IWRITE)
313
- except (IOError, OSError) as err:
314
- log.warning('Failed to save point info. %s', err)
315
- raise ProfilerIOException from err
316
-
317
- return all_step_points[0]
318
-
319
- def _parse(self):
320
- if self._is_gpu_kernel_async_launch:
321
- self._parse_async_launch()
322
- else:
323
- self._parse_not_async_launch()
324
-
325
- def _parse_not_async_launch(self):
326
- """Parse source step trace files."""
327
- log.info("Start to parse step trace file.")
328
- fp_start, bp_end, iter_end, iter_start = 0, 1, 2, 3
329
- reduce_start = 4
330
- start_time, end_time = 0, 1
331
- step_trace_point_count = 3
332
-
333
- source_file = self._source_file_path
334
- try:
335
- with open(source_file, 'r') as f:
336
- lines = f.readlines()
337
- if len(lines) < step_trace_point_count:
338
- raise ProfilerRawFileException(
339
- f"Failed to parse {source_file} file. The FP_POINT/BP_POINT/ITER_END_POINT "
340
- f"do not recognized correctly. Try to set the environment variable'PROFILING_FP_START' "
341
- f"and 'PROFILING_BP_END' to solve this problem. For example, "
342
- f"'export PROFILING_FP_START=Default/xxx/Conv2d-op1' ")
343
- step_trace_info_all = [line.strip().split()[1:] for line in lines]
344
- num_of_step = len(step_trace_info_all[0])
345
- for step_trace_point in step_trace_info_all:
346
- if len(step_trace_point) != num_of_step:
347
- raise ProfilerRawFileException(
348
- f"Failed to parse {source_file} file. Due to the profiled "
349
- f"step_num of FP/BP/ITER_END Point are not equal")
350
- iter_start_info = [step_trace_info_all[fp_start][0]] + \
351
- step_trace_info_all[iter_end][:num_of_step]
352
- step_trace_info_all.insert(iter_start, iter_start_info)
353
- except (IOError, OSError) as err:
354
- log.warning(f'Failed to read {source_file}', err)
355
- raise ProfilerIOException from err
356
- finally:
357
- pass
358
-
359
- for step_num in range(num_of_step):
360
- step_trace = {
361
- 'start': int(step_trace_info_all[iter_start][step_num].split(',')[start_time]),
362
- 'fp': int(step_trace_info_all[fp_start][step_num].split(',')[start_time]),
363
- 'bp': int(step_trace_info_all[bp_end][step_num].split(',')[end_time]),
364
- 'end': int(step_trace_info_all[iter_end][step_num].split(',')[end_time]),
365
- 'reduce': {}
366
- }
367
- num_of_step_point = len(step_trace_info_all)
368
- if num_of_step_point > reduce_start:
369
- reduce_info = {}
370
- reduce_time_info = []
371
- for reduce_idx in range(reduce_start, num_of_step_point):
372
- cur_reduce_time = step_trace_info_all[reduce_idx][step_num]
373
- reduce_time_info += cur_reduce_time.split(',')
374
- reduce_info['ops'] = reduce_time_info
375
- step_trace['reduce'] = reduce_info
376
- self._record_trace_event(step_trace)
377
- self._record_average_info()
378
- log.info("Finish to parse step trace file.")
379
-
380
- def _parse_one_step(self, line):
381
- """
382
- Parse step text line to dict obj.
383
-
384
- Args:
385
- line (str): The step trace line text, it contains five parts, each part is separated by a space.
386
- part 1: start_op_name,start_op_time
387
- part 2: fp_op_name,fp_time
388
- part 3: bp_op_name,bp_time
389
- part 4: end_op_name,end_time
390
- part 5: [reduce_op_name,reduce1_start],it contains multiple reduce, each reduce is separated by a space.
391
- """
392
-
393
- line = line.strip().split()
394
- start_time = int(line[0].split(',')[1][:-1])
395
- fp_time = int(line[1].split(',')[1][:-1])
396
- bp_time = int(line[2].split(',')[1][:-1])
397
- end_time = int(line[3].split(',')[1][:-1])
398
- reduce_info = {}
399
- reduce_time_info = []
400
-
401
- for reduce_item in line[4:]:
402
- # add communication op start and end time, time unit from ns to 10ns.
403
- reduce_time_info.append(reduce_item.split(',')[1][:-1])
404
- reduce_time_info.append(reduce_item.split(',')[2][:-1])
405
- self._reduce_op_type.append(reduce_item.split(',')[0].split('/')[-1])
406
- step_trace = {
407
- 'start': start_time,
408
- 'fp': fp_time,
409
- 'bp': bp_time,
410
- 'end': end_time
411
- }
412
- if reduce_time_info:
413
- reduce_info['ops'] = reduce_time_info
414
- step_trace['reduce'] = reduce_info
415
- self._record_trace_event(step_trace)
416
-
417
- def _parse_async_launch(self):
418
- """Parse source step trace files generated from async launch kernel."""
419
- log.info("Start to parse step trace file.")
420
- try:
421
- with open(self._source_file_path, 'r') as f_obj:
422
- for line in f_obj:
423
- self._parse_one_step(line)
424
-
425
- except (IOError, OSError) as err:
426
- log.warning(f'Failed to read {self._source_file_path}', err)
427
- raise ProfilerIOException from err
428
-
429
- self._record_average_info()
430
- log.info("Finish to parse step trace file.")
431
-
432
- def _get_single_reduce_event_info(self, field_name, start_point, end_point):
433
- """
434
- Get single reduce info.
435
-
436
- Args:
437
- field_name (str): The field name.
438
- start_point (str): Start point time.
439
- end_point (str): End point time.
440
-
441
- Returns:
442
- dict, reduce info.
443
- """
444
- reduce_info = {}
445
-
446
- index = int(field_name.split('_')[2])
447
- op_type = self._reduce_op_type[index]
448
- # append field name with op type.
449
- field_name += '_' + op_type
450
- reduce_info[field_name] = int(end_point) - int(start_point)
451
- reduce_info[field_name + '_start_point'] = start_point
452
- reduce_info[field_name + '_end_point'] = end_point
453
-
454
- return reduce_info
455
-
456
-
457
- class AscendStepTraceParser(BaseStepTraceParser):
458
- """The parser for ascend step trace data."""
459
-
460
- def __init__(self, *args, **kwargs):
461
- super(AscendStepTraceParser, self).__init__(*args, **kwargs)
462
- self._task_id_op_name_dict = {}
463
-
464
- @staticmethod
465
- def _list_ts_track_files(input_dir):
466
- """Ts track files have 4 types data, this function will list all files."""
467
- step_trace_paths = []
468
- data_dir = os.path.join(input_dir, 'data')
469
- data_dir = os.path.realpath(data_dir)
470
- for file in Path(data_dir).glob(r'ts_track*[0-9]'):
471
- step_trace_paths.append(file.resolve())
472
- if not step_trace_paths:
473
- raise ProfilerRawFileException(f"Can not find any ts track files in {data_dir} when parse profiler data.")
474
- step_trace_paths.sort()
475
- log.info("Profiler found %d ts track files.", len(step_trace_paths))
476
- return step_trace_paths
477
-
478
- @staticmethod
479
- def _is_all_reduce_tag(tag):
480
- return PointTag.MIN_ALL_REDUCE.value <= tag < PointTag.MAX_ALL_REDUCE.value
481
-
482
- @staticmethod
483
- def _list_ts_track_step_traces(ts_track_paths):
484
- """List all ts track from ts track files."""
485
- step_trace_size = StructType.sizeof(TS_TRACK_STEP_TRACE_STRUCT)
486
- ts_tracks = []
487
- for path in ts_track_paths:
488
- try:
489
- with open(path, 'rb') as fp:
490
- while True:
491
- binary_data = fp.read(step_trace_size)
492
- if len(binary_data) < step_trace_size:
493
- break
494
- unpacked_data = StructType.unpack_binary_data(TS_TRACK_STEP_TRACE_STRUCT, binary_data)
495
- if unpacked_data.get('rptType') != STEP_TRACE_RPT_TYPE:
496
- continue
497
- ts_tracks.append(unpacked_data)
498
- except (IOError, OSError) as err:
499
- log.critical("Can not parse profiler file, open file %s failed, detail: %s.", path, str(err))
500
- raise ProfilerIOException() from err
501
- finally:
502
- pass
503
- log.info("Profiler found %d ts track step trace data.", len(ts_tracks))
504
- return ts_tracks
505
-
506
- def set_task_id_op_name_dict(self, task_id_op_name_dict):
507
- """The operator task id matches the operator name."""
508
- self._task_id_op_name_dict = task_id_op_name_dict
509
-
510
- def record_point_info(self, output_path):
511
- """
512
- Record point info into json.
513
-
514
- Args:
515
- output_path (str): The output path for saving point info.
516
-
517
- Returns:
518
- dict, parsed point info.
519
- """
520
- point_info = self._tag_map
521
- if self._is_training_mode:
522
- points = {
523
- 'fp_start': point_info.get(PointTag.FP_START.value, ''),
524
- 'bp_end': point_info.get(PointTag.BP_END.value, '')
525
- }
526
- else:
527
- points = {
528
- 'fp_start': point_info.get(PointTag.FP_START.value, ''),
529
- }
530
- if os.path.exists(output_path):
531
- return points
532
- try:
533
- with os.fdopen(os.open(output_path, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600), 'w') as json_file:
534
- json.dump(points, json_file)
535
- os.chmod(output_path, stat.S_IREAD | stat.S_IWRITE)
536
- except (IOError, OSError) as err:
537
- log.warning('Failed to save point info. %s', err)
538
- raise ProfilerIOException
539
- return points
540
-
541
- def _parse(self):
542
- """Parse source step trace files."""
543
- log.info("Start to parse step trace file.")
544
- ts_track_paths = self._list_ts_track_files(self._input_dir)
545
- ts_tracks = self._list_ts_track_step_traces(ts_track_paths)
546
- self._unique_id_map, self._tag_map = self._construct_point_info(ts_tracks, self._task_id_op_name_dict)
547
- self._save_step_trace_to_result(ts_tracks, self._skip_first_step)
548
- self._record_average_info()
549
- log.info("Finish to parse step trace file.")
550
-
551
- def _construct_point_info(self, ts_tracks, task_id_op_name_dict):
552
- """This function can not support multi graph scenario."""
553
- unique_id_map_tag = {}
554
- tag_map_unique_id = {}
555
- for ts_track in ts_tracks:
556
- unique_id = combine_stream_task_id(ts_track.get('streamId'), ts_track.get('taskId'))
557
- unique_id_map_tag[unique_id] = ts_track.get('tagId')
558
- tag_map_unique_id[ts_track.get('tagId')] = unique_id
559
- unique_id_map_op = {}
560
- tag_map_op = {}
561
- for unique_id, tag in unique_id_map_tag.items():
562
- unique_id_map_op[unique_id] = self._get_real_point_op_name(tag, unique_id, task_id_op_name_dict)
563
- for tag, unique_id in tag_map_unique_id.items():
564
- tag_map_op[tag] = self._get_real_point_op_name(tag, unique_id, task_id_op_name_dict)
565
- return unique_id_map_op, tag_map_op
566
-
567
- def _get_real_point_op_name(self, tag, profiling_task_id, task_id_op_name_dict):
568
- """Get real point op name from given tag and task id."""
569
- # Currently, the given task id belongs to the profiling operator. We need to obtain the operator whose
570
- # point is actually performed based on the tag.
571
- # Inserting point operator rules:
572
- # 1. model start profiling op -> fp start profiling op -> init-data op -> bp end profiling op -> iter end
573
- # 2. model start -> other op... -> fp start -> Conv op ... -> bp end -> other op -> iter end
574
- # 3. AllReduce profiling-op (tag:10000) -> AllReduce op -> AllReduce profiling op (tag: 10001)
575
- task_ids = list(task_id_op_name_dict.keys())
576
- op_names = list(task_id_op_name_dict.values())
577
-
578
- cur_task_index = task_ids.index(profiling_task_id)
579
- if tag == PointTag.MODEL_START.value:
580
- real_index = cur_task_index + 1
581
- is_fp_start_profiling_op = bool('Profiling-op' in op_names[real_index])
582
- if is_fp_start_profiling_op:
583
- real_index += 1
584
- elif tag == PointTag.FP_START.value:
585
- real_index = cur_task_index + 1
586
- elif tag in (PointTag.BP_END.value, PointTag.ITER_END.value, PointTag.MODEL_END.value):
587
- real_index = cur_task_index - 1
588
- elif tag == PointTag.ITER_END.value:
589
- real_index = cur_task_index - 1
590
- elif self._is_all_reduce_tag(tag):
591
- if tag % 2:
592
- real_index = cur_task_index - 1
593
- else:
594
- real_index = cur_task_index + 1
595
- else:
596
- real_index = cur_task_index
597
- log.warning("The tag id %s can not be identified.", tag)
598
- return op_names[real_index]
599
-
600
- def _save_step_trace_to_result(self, ts_tracks, skip_step):
601
- """Save step trace data to result."""
602
- step_trace = {'reduce': defaultdict(list), 'start': '-'}
603
- model_ids = set()
604
- for ts_track in ts_tracks:
605
- if ts_track.get('rptType') != STEP_TRACE_RPT_TYPE:
606
- continue
607
- self._construct_step_trace(ts_track, step_trace)
608
- model_ids.add(ts_track["modelId"])
609
-
610
- if step_trace.get('end'):
611
- if not skip_step:
612
- self._record_trace_event(step_trace)
613
- skip_step = False
614
- start_time = step_trace.get('end', '-')
615
- step_trace.clear()
616
- step_trace['start'] = start_time
617
- step_trace['reduce'] = defaultdict(list)
618
-
619
- if len(model_ids) > 1:
620
- log.warning("[profiler] Current model has multiple sub graphs, "
621
- "the segmentation of steps may be inaccurate.")
622
-
623
- def _construct_step_trace(self, ts_track, step_trace):
624
- """Construct step point data."""
625
- timestamp = ts_track['timestamp']
626
- tag_id = ts_track['tagId']
627
- stream_id = ts_track['streamId']
628
-
629
- if tag_id == PointTag.FP_START.value:
630
- step_trace['fp'] = timestamp
631
- elif tag_id == PointTag.BP_END.value:
632
- step_trace['bp'] = timestamp
633
- elif tag_id == PointTag.ITER_END.value:
634
- step_trace['end'] = timestamp
635
- elif self._is_all_reduce_tag(tag_id):
636
- unique_id = combine_stream_task_id(ts_track.get('streamId'), ts_track.get('taskId'))
637
- step_trace['reduce'][stream_id].append((unique_id, timestamp))
638
-
639
- def _get_single_reduce_event_info(self, field_name, start_point, end_point):
640
- """
641
- Get single reduce info.
642
-
643
- Args:
644
- field_name (str): The field name.
645
- start_point (Tuple[int, int]): Start point time info, including (tag_id, sys_count).
646
- end_point (Tuple[int, int]): End point time info, including (tag_id, sys_count).
647
-
648
- Returns:
649
- dict, reduce info.
650
- """
651
- reduce_info = {}
652
- if self._unique_id_map.get(end_point[0]) != self._unique_id_map.get(start_point[0]):
653
- log.warning("Unmatched reduce event <%s, %s>.", start_point, end_point)
654
- return reduce_info
655
- op_type = self._unique_id_map.get(start_point[0])
656
- # append field name with op type.
657
- if not op_type:
658
- log.warning("Can't recognize the inner type for point tag: %d.", start_point[0])
659
- field_name += '_parallel'
660
- else:
661
- field_name += '_' + op_type
662
- reduce_info[field_name] = end_point[1] - start_point[1]
663
- reduce_info[field_name + '_start_point'] = start_point[1]
664
- reduce_info[field_name + '_end_point'] = end_point[1]
665
-
666
- return reduce_info