mindspore 2.4.10__cp39-cp39-win_amd64.whl → 2.5.0__cp39-cp39-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 (389) hide show
  1. mindspore/.commit_id +1 -1
  2. mindspore/Microsoft.VisualStudio.Telemetry.dll +0 -0
  3. mindspore/Newtonsoft.Json.dll +0 -0
  4. mindspore/__init__.py +8 -3
  5. mindspore/_c_dataengine.cp39-win_amd64.pyd +0 -0
  6. mindspore/_c_expression.cp39-win_amd64.pyd +0 -0
  7. mindspore/_c_mindrecord.cp39-win_amd64.pyd +0 -0
  8. mindspore/_checkparam.py +0 -5
  9. mindspore/_extends/parallel_compile/akg_compiler/gen_custom_op_files.py +1 -1
  10. mindspore/_extends/parse/compile_config.py +64 -0
  11. mindspore/_extends/parse/deprecated/__init__.py +0 -0
  12. mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +375 -0
  13. mindspore/_extends/parse/parser.py +23 -5
  14. mindspore/_extends/parse/standard_method.py +123 -27
  15. mindspore/_extends/pijit/pijit_func_white_list.py +1 -1
  16. mindspore/amp.py +7 -1
  17. mindspore/atlprov.dll +0 -0
  18. mindspore/avcodec-59.dll +0 -0
  19. mindspore/avdevice-59.dll +0 -0
  20. mindspore/avfilter-8.dll +0 -0
  21. mindspore/avformat-59.dll +0 -0
  22. mindspore/avutil-57.dll +0 -0
  23. mindspore/boost/boost_cell_wrapper.py +136 -41
  24. mindspore/c1.dll +0 -0
  25. mindspore/c1xx.dll +0 -0
  26. mindspore/c2.dll +0 -0
  27. mindspore/common/__init__.py +3 -1
  28. mindspore/common/_register_for_tensor.py +0 -1
  29. mindspore/common/_stub_tensor.py +25 -4
  30. mindspore/common/_tensor_cpp_method.py +17 -0
  31. mindspore/common/_tensor_docs.py +6132 -0
  32. mindspore/common/api.py +98 -21
  33. mindspore/common/dtype.py +34 -34
  34. mindspore/common/dump.py +2 -1
  35. mindspore/common/file_system.py +8 -3
  36. mindspore/common/generator.py +2 -0
  37. mindspore/common/hook_handle.py +3 -1
  38. mindspore/common/initializer.py +3 -4
  39. mindspore/common/lazy_inline.py +8 -2
  40. mindspore/common/mindir_util.py +10 -2
  41. mindspore/common/parameter.py +31 -15
  42. mindspore/common/tensor.py +713 -1337
  43. mindspore/communication/__init__.py +1 -1
  44. mindspore/communication/_comm_helper.py +5 -0
  45. mindspore/communication/comm_func.py +215 -173
  46. mindspore/communication/management.py +23 -20
  47. mindspore/context.py +285 -191
  48. mindspore/dataset/__init__.py +23 -19
  49. mindspore/dataset/callback/ds_callback.py +2 -1
  50. mindspore/dataset/core/config.py +84 -3
  51. mindspore/dataset/engine/cache_admin.py +3 -3
  52. mindspore/dataset/engine/cache_client.py +5 -4
  53. mindspore/dataset/engine/datasets.py +192 -149
  54. mindspore/dataset/engine/datasets_audio.py +14 -0
  55. mindspore/dataset/engine/datasets_standard_format.py +11 -11
  56. mindspore/dataset/engine/datasets_text.py +38 -1
  57. mindspore/dataset/engine/datasets_user_defined.py +100 -66
  58. mindspore/dataset/engine/datasets_vision.py +81 -8
  59. mindspore/dataset/engine/iterators.py +281 -63
  60. mindspore/dataset/engine/obs/util.py +8 -0
  61. mindspore/dataset/engine/queue.py +40 -0
  62. mindspore/dataset/engine/samplers.py +26 -2
  63. mindspore/dataset/engine/serializer_deserializer.py +1 -1
  64. mindspore/dataset/engine/validators.py +43 -11
  65. mindspore/dataset/transforms/py_transforms_util.py +17 -0
  66. mindspore/dataset/transforms/transforms.py +29 -12
  67. mindspore/dataset/vision/validators.py +1 -2
  68. mindspore/device_context/__init__.py +21 -0
  69. mindspore/device_context/ascend/__init__.py +25 -0
  70. mindspore/device_context/ascend/device.py +72 -0
  71. mindspore/device_context/ascend/op_debug.py +94 -0
  72. mindspore/device_context/ascend/op_precision.py +193 -0
  73. mindspore/device_context/ascend/op_tuning.py +127 -0
  74. mindspore/device_context/cpu/__init__.py +25 -0
  75. mindspore/device_context/cpu/device.py +62 -0
  76. mindspore/device_context/cpu/op_tuning.py +43 -0
  77. mindspore/device_context/gpu/__init__.py +21 -0
  78. mindspore/device_context/gpu/device.py +70 -0
  79. mindspore/device_context/gpu/op_precision.py +67 -0
  80. mindspore/device_context/gpu/op_tuning.py +175 -0
  81. mindspore/device_manager.py +134 -0
  82. mindspore/dnnl.dll +0 -0
  83. mindspore/dpcmi.dll +0 -0
  84. mindspore/experimental/llm_boost/__init__.py +1 -0
  85. mindspore/experimental/llm_boost/ascend_native/__init__.py +22 -0
  86. mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +211 -0
  87. mindspore/experimental/llm_boost/ascend_native/llm_boost.py +52 -0
  88. mindspore/experimental/llm_boost/atb/boost_base.py +2 -3
  89. mindspore/experimental/llm_boost/atb/llama_boost.py +6 -1
  90. mindspore/experimental/llm_boost/register.py +1 -0
  91. mindspore/experimental/optim/adadelta.py +26 -22
  92. mindspore/experimental/optim/adam.py +3 -0
  93. mindspore/experimental/optim/lr_scheduler.py +33 -24
  94. mindspore/experimental/optim/radam.py +33 -30
  95. mindspore/hal/device.py +28 -0
  96. mindspore/hal/event.py +17 -0
  97. mindspore/hal/memory.py +94 -3
  98. mindspore/hal/stream.py +91 -6
  99. mindspore/include/api/context.h +0 -1
  100. mindspore/jpeg62.dll +0 -0
  101. mindspore/log.py +12 -0
  102. mindspore/mindrecord/__init__.py +1 -1
  103. mindspore/mindrecord/config.py +17 -316
  104. mindspore/mindrecord/filereader.py +1 -9
  105. mindspore/mindrecord/filewriter.py +5 -15
  106. mindspore/mindrecord/mindpage.py +1 -9
  107. mindspore/mindspore_backend.dll +0 -0
  108. mindspore/mindspore_common.dll +0 -0
  109. mindspore/mindspore_core.dll +0 -0
  110. mindspore/mindspore_glog.dll +0 -0
  111. mindspore/mindspore_ops.dll +0 -0
  112. mindspore/mint/__init__.py +824 -218
  113. mindspore/mint/distributed/__init__.py +66 -4
  114. mindspore/mint/distributed/distributed.py +2594 -44
  115. mindspore/mint/linalg/__init__.py +6 -0
  116. mindspore/mint/nn/__init__.py +473 -14
  117. mindspore/mint/nn/functional.py +486 -11
  118. mindspore/mint/nn/layer/__init__.py +17 -4
  119. mindspore/mint/nn/layer/_functions.py +330 -0
  120. mindspore/mint/nn/layer/activation.py +169 -1
  121. mindspore/mint/nn/layer/basic.py +123 -0
  122. mindspore/mint/nn/layer/conv.py +727 -0
  123. mindspore/mint/nn/layer/normalization.py +215 -19
  124. mindspore/mint/nn/layer/padding.py +797 -0
  125. mindspore/mint/nn/layer/pooling.py +170 -0
  126. mindspore/mint/optim/__init__.py +2 -1
  127. mindspore/mint/optim/adam.py +223 -0
  128. mindspore/mint/optim/adamw.py +26 -19
  129. mindspore/mint/special/__init__.py +2 -1
  130. mindspore/msobj140.dll +0 -0
  131. mindspore/mspdb140.dll +0 -0
  132. mindspore/mspdbcore.dll +0 -0
  133. mindspore/mspdbst.dll +0 -0
  134. mindspore/mspft140.dll +0 -0
  135. mindspore/msvcdis140.dll +0 -0
  136. mindspore/msvcp140_1.dll +0 -0
  137. mindspore/msvcp140_2.dll +0 -0
  138. mindspore/msvcp140_atomic_wait.dll +0 -0
  139. mindspore/msvcp140_codecvt_ids.dll +0 -0
  140. mindspore/multiprocessing/__init__.py +5 -0
  141. mindspore/nn/cell.py +126 -19
  142. mindspore/nn/dynamic_lr.py +2 -1
  143. mindspore/nn/layer/activation.py +6 -6
  144. mindspore/nn/layer/basic.py +35 -25
  145. mindspore/nn/layer/channel_shuffle.py +3 -3
  146. mindspore/nn/layer/embedding.py +3 -3
  147. mindspore/nn/layer/normalization.py +8 -7
  148. mindspore/nn/layer/padding.py +4 -3
  149. mindspore/nn/layer/pooling.py +47 -13
  150. mindspore/nn/layer/rnn_cells.py +1 -1
  151. mindspore/nn/layer/rnns.py +2 -1
  152. mindspore/nn/layer/timedistributed.py +5 -5
  153. mindspore/nn/layer/transformer.py +48 -26
  154. mindspore/nn/learning_rate_schedule.py +5 -3
  155. mindspore/nn/loss/loss.py +31 -36
  156. mindspore/nn/optim/ada_grad.py +1 -0
  157. mindspore/nn/optim/adadelta.py +2 -2
  158. mindspore/nn/optim/adam.py +1 -1
  159. mindspore/nn/optim/lars.py +1 -4
  160. mindspore/nn/optim/optimizer.py +1 -1
  161. mindspore/nn/optim/rprop.py +2 -2
  162. mindspore/nn/optim/thor.py +2 -1
  163. mindspore/nn/utils/init.py +13 -11
  164. mindspore/nn/wrap/cell_wrapper.py +4 -6
  165. mindspore/nn/wrap/loss_scale.py +3 -4
  166. mindspore/numpy/array_creations.py +60 -62
  167. mindspore/numpy/array_ops.py +148 -143
  168. mindspore/numpy/logic_ops.py +41 -42
  169. mindspore/numpy/math_ops.py +361 -359
  170. mindspore/numpy/utils.py +16 -16
  171. mindspore/numpy/utils_const.py +4 -4
  172. mindspore/opencv_core452.dll +0 -0
  173. mindspore/opencv_imgcodecs452.dll +0 -0
  174. mindspore/opencv_imgproc452.dll +0 -0
  175. mindspore/ops/__init__.py +2 -1
  176. mindspore/ops/_grad_experimental/grad_comm_ops.py +94 -13
  177. mindspore/ops/_grad_experimental/grad_debug_ops.py +6 -1
  178. mindspore/ops/_grad_experimental/grad_inner_ops.py +9 -0
  179. mindspore/ops/_grad_experimental/grad_math_ops.py +2 -1
  180. mindspore/ops/_op_impl/cpu/__init__.py +1 -0
  181. mindspore/ops/_op_impl/cpu/raise_op.py +28 -0
  182. mindspore/ops/_vmap/vmap_array_ops.py +20 -19
  183. mindspore/ops/_vmap/vmap_base.py +0 -2
  184. mindspore/ops/_vmap/vmap_grad_nn_ops.py +19 -13
  185. mindspore/ops/_vmap/vmap_math_ops.py +11 -9
  186. mindspore/ops/_vmap/vmap_nn_ops.py +20 -34
  187. mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +149 -12
  188. mindspore/ops/auto_generate/gen_arg_handler.py +0 -61
  189. mindspore/ops/auto_generate/gen_extend_func.py +554 -60
  190. mindspore/ops/auto_generate/gen_ops_def.py +1621 -115
  191. mindspore/ops/auto_generate/gen_ops_prim.py +8024 -3409
  192. mindspore/ops/auto_generate/pyboost_inner_prim.py +183 -79
  193. mindspore/ops/composite/base.py +1 -1
  194. mindspore/ops/composite/multitype_ops/_compile_utils.py +229 -30
  195. mindspore/ops/composite/multitype_ops/pow_impl.py +0 -29
  196. mindspore/ops/function/__init__.py +12 -0
  197. mindspore/ops/function/array_func.py +561 -159
  198. mindspore/ops/function/clip_func.py +64 -0
  199. mindspore/ops/function/debug_func.py +28 -20
  200. mindspore/ops/function/image_func.py +1 -1
  201. mindspore/ops/function/linalg_func.py +5 -4
  202. mindspore/ops/function/math_func.py +1659 -290
  203. mindspore/ops/function/nn_func.py +988 -317
  204. mindspore/ops/function/parameter_func.py +3 -56
  205. mindspore/ops/function/random_func.py +243 -33
  206. mindspore/ops/function/sparse_unary_func.py +1 -1
  207. mindspore/ops/functional.py +18 -5
  208. mindspore/ops/functional_overload.py +897 -0
  209. mindspore/ops/operations/__init__.py +3 -2
  210. mindspore/ops/operations/_embedding_cache_ops.py +4 -4
  211. mindspore/ops/operations/_grad_ops.py +2 -34
  212. mindspore/ops/operations/_infer_ops.py +2 -1
  213. mindspore/ops/operations/_inner_ops.py +38 -8
  214. mindspore/ops/operations/array_ops.py +45 -303
  215. mindspore/ops/operations/comm_ops.py +19 -16
  216. mindspore/ops/operations/custom_ops.py +11 -55
  217. mindspore/ops/operations/debug_ops.py +42 -47
  218. mindspore/ops/operations/inner_ops.py +6 -4
  219. mindspore/ops/operations/linalg_ops.py +3 -2
  220. mindspore/ops/operations/manually_defined/ops_def.py +185 -104
  221. mindspore/ops/operations/math_ops.py +11 -216
  222. mindspore/ops/operations/nn_ops.py +146 -308
  223. mindspore/ops/primitive.py +23 -21
  224. mindspore/ops/tensor_method.py +1669 -0
  225. mindspore/ops_generate/aclnn_kernel_register_auto_cc_generator.py +110 -0
  226. mindspore/ops_generate/add_tensor_docs_generator.py +54 -0
  227. mindspore/ops_generate/arg_handler.py +0 -61
  228. mindspore/ops_generate/auto_grad_impl_cc_generator.py +135 -0
  229. mindspore/ops_generate/auto_grad_reg_cc_generator.py +93 -0
  230. mindspore/ops_generate/base_generator.py +11 -0
  231. mindspore/ops_generate/cpp_create_prim_instance_helper_generator.py +108 -0
  232. mindspore/ops_generate/functional_map_cpp_generator.py +491 -0
  233. mindspore/ops_generate/functional_overload_py_generator.py +110 -0
  234. mindspore/ops_generate/functions_cc_generator.py +233 -0
  235. mindspore/ops_generate/gen_aclnn_implement.py +110 -114
  236. mindspore/ops_generate/gen_constants.py +157 -3
  237. mindspore/ops_generate/gen_ops.py +245 -990
  238. mindspore/ops_generate/gen_pyboost_func.py +97 -998
  239. mindspore/ops_generate/gen_utils.py +119 -33
  240. mindspore/ops_generate/lite_ops_cpp_generator.py +155 -0
  241. mindspore/ops_generate/op_api_proto.py +206 -0
  242. mindspore/ops_generate/op_def_py_generator.py +131 -0
  243. mindspore/ops_generate/op_prim_py_generator.py +480 -0
  244. mindspore/ops_generate/op_proto.py +373 -108
  245. mindspore/ops_generate/op_template_parser.py +436 -0
  246. mindspore/ops_generate/ops_def_cc_generator.py +288 -0
  247. mindspore/ops_generate/ops_def_h_generator.py +74 -0
  248. mindspore/ops_generate/ops_name_h_generator.py +68 -0
  249. mindspore/ops_generate/ops_primitive_h_generator.py +81 -0
  250. mindspore/ops_generate/pyboost_functions_cpp_generator.py +370 -0
  251. mindspore/ops_generate/pyboost_functions_h_generator.py +68 -0
  252. mindspore/ops_generate/pyboost_functions_py_generator.py +148 -0
  253. mindspore/ops_generate/pyboost_grad_function_cpp_generator.py +154 -0
  254. mindspore/ops_generate/pyboost_inner_prim_generator.py +131 -0
  255. mindspore/ops_generate/pyboost_native_grad_functions_generator.py +268 -0
  256. mindspore/ops_generate/pyboost_op_cpp_code_generator.py +851 -0
  257. mindspore/ops_generate/pyboost_overload_functions_cpp_generator.py +344 -0
  258. mindspore/ops_generate/pyboost_utils.py +92 -33
  259. mindspore/ops_generate/template.py +294 -44
  260. mindspore/ops_generate/tensor_func_reg_cpp_generator.py +422 -0
  261. mindspore/parallel/__init__.py +3 -3
  262. mindspore/parallel/_auto_parallel_context.py +24 -33
  263. mindspore/parallel/_parallel_serialization.py +13 -2
  264. mindspore/parallel/_utils.py +4 -1
  265. mindspore/parallel/algo_parameter_config.py +1 -1
  266. mindspore/parallel/checkpoint_transform.py +44 -0
  267. mindspore/parallel/cluster/process_entity/_api.py +131 -37
  268. mindspore/parallel/cluster/process_entity/_utils.py +41 -6
  269. mindspore/parallel/cluster/run.py +20 -3
  270. mindspore/parallel/parameter_broadcast.py +1 -1
  271. mindspore/parallel/shard.py +3 -0
  272. mindspore/parallel/transform_safetensors.py +119 -253
  273. mindspore/pgodb140.dll +0 -0
  274. mindspore/pgort140.dll +0 -0
  275. mindspore/profiler/__init__.py +17 -4
  276. mindspore/profiler/analysis/__init__.py +0 -0
  277. mindspore/profiler/analysis/parser/__init__.py +0 -0
  278. mindspore/profiler/analysis/parser/ascend_cann_parser.py +166 -0
  279. mindspore/profiler/analysis/parser/base_parser.py +158 -0
  280. mindspore/profiler/analysis/parser/framework_cann_relation_parser.py +45 -0
  281. mindspore/profiler/analysis/parser/ms_framework_parser.py +142 -0
  282. mindspore/profiler/analysis/parser/ms_minddata_parser.py +145 -0
  283. mindspore/profiler/analysis/parser/timeline_assembly_factory/__init__.py +0 -0
  284. mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +261 -0
  285. mindspore/profiler/analysis/parser/timeline_assembly_factory/base_timeline_assembler.py +40 -0
  286. mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +84 -0
  287. mindspore/profiler/analysis/parser/timeline_creator/__init__.py +0 -0
  288. mindspore/profiler/analysis/parser/timeline_creator/base_timeline_creator.py +44 -0
  289. mindspore/profiler/analysis/parser/timeline_creator/cpu_op_timeline_creator.py +90 -0
  290. mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +76 -0
  291. mindspore/profiler/analysis/parser/timeline_creator/msprof_timeline_creator.py +103 -0
  292. mindspore/profiler/analysis/parser/timeline_creator/scope_layer_timeline_creator.py +134 -0
  293. mindspore/profiler/analysis/parser/timeline_event/__init__.py +0 -0
  294. mindspore/profiler/analysis/parser/timeline_event/base_event.py +233 -0
  295. mindspore/profiler/analysis/parser/timeline_event/cpu_op_event.py +47 -0
  296. mindspore/profiler/analysis/parser/timeline_event/flow_event.py +36 -0
  297. mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +260 -0
  298. mindspore/profiler/analysis/parser/timeline_event/msprof_event.py +73 -0
  299. mindspore/profiler/analysis/parser/timeline_event/scope_layer_event.py +53 -0
  300. mindspore/profiler/analysis/parser/timeline_event/timeline_event_pool.py +146 -0
  301. mindspore/profiler/analysis/task_manager.py +131 -0
  302. mindspore/profiler/analysis/time_converter.py +84 -0
  303. mindspore/profiler/analysis/viewer/__init__.py +0 -0
  304. mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +333 -0
  305. mindspore/profiler/analysis/viewer/ascend_integrate_viewer.py +87 -0
  306. mindspore/profiler/analysis/viewer/ascend_kernel_details_viewer.py +252 -0
  307. mindspore/profiler/analysis/viewer/ascend_memory_viewer.py +313 -0
  308. mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +322 -0
  309. mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +265 -0
  310. mindspore/profiler/analysis/viewer/ascend_timeline_viewer.py +58 -0
  311. mindspore/profiler/analysis/viewer/base_viewer.py +26 -0
  312. mindspore/profiler/analysis/viewer/ms_dataset_viewer.py +97 -0
  313. mindspore/profiler/analysis/viewer/ms_minddata_viewer.py +581 -0
  314. mindspore/profiler/analysis/work_flow.py +73 -0
  315. mindspore/profiler/common/ascend_msprof_exporter.py +138 -0
  316. mindspore/profiler/common/command_executor.py +90 -0
  317. mindspore/profiler/common/constant.py +174 -3
  318. mindspore/profiler/common/file_manager.py +208 -0
  319. mindspore/profiler/common/log.py +130 -0
  320. mindspore/profiler/common/msprof_cmd_tool.py +202 -0
  321. mindspore/profiler/common/path_manager.py +371 -0
  322. mindspore/profiler/common/process_bar.py +168 -0
  323. mindspore/profiler/common/process_pool.py +9 -3
  324. mindspore/profiler/common/profiler_context.py +476 -0
  325. mindspore/profiler/common/profiler_info.py +304 -0
  326. mindspore/profiler/common/profiler_output_path.py +284 -0
  327. mindspore/profiler/common/profiler_parameters.py +210 -0
  328. mindspore/profiler/common/profiler_path_manager.py +120 -0
  329. mindspore/profiler/common/record_function.py +76 -0
  330. mindspore/profiler/common/tlv_decoder.py +76 -0
  331. mindspore/profiler/common/util.py +75 -2
  332. mindspore/profiler/dynamic_profiler.py +270 -37
  333. mindspore/profiler/envprofiler.py +138 -0
  334. mindspore/profiler/mstx.py +199 -0
  335. mindspore/profiler/platform/__init__.py +21 -0
  336. mindspore/profiler/platform/base_profiler.py +40 -0
  337. mindspore/profiler/platform/cpu_profiler.py +124 -0
  338. mindspore/profiler/platform/gpu_profiler.py +74 -0
  339. mindspore/profiler/platform/npu_profiler.py +309 -0
  340. mindspore/profiler/profiler.py +580 -93
  341. mindspore/profiler/profiler_action_controller.py +187 -0
  342. mindspore/profiler/profiler_interface.py +114 -0
  343. mindspore/profiler/schedule.py +208 -0
  344. mindspore/rewrite/api/symbol_tree.py +1 -2
  345. mindspore/run_check/_check_version.py +2 -6
  346. mindspore/runtime/__init__.py +37 -0
  347. mindspore/runtime/device.py +27 -0
  348. mindspore/runtime/event.py +209 -0
  349. mindspore/runtime/executor.py +148 -0
  350. mindspore/runtime/memory.py +392 -0
  351. mindspore/runtime/stream.py +460 -0
  352. mindspore/runtime/thread_bind_core.py +401 -0
  353. mindspore/swresample-4.dll +0 -0
  354. mindspore/swscale-6.dll +0 -0
  355. mindspore/tbbmalloc.dll +0 -0
  356. mindspore/tinyxml2.dll +0 -0
  357. mindspore/train/__init__.py +2 -2
  358. mindspore/train/_utils.py +53 -18
  359. mindspore/train/amp.py +8 -4
  360. mindspore/train/callback/_checkpoint.py +32 -18
  361. mindspore/train/callback/_early_stop.py +1 -1
  362. mindspore/train/callback/_flops_collector.py +105 -69
  363. mindspore/train/callback/_history.py +1 -1
  364. mindspore/train/callback/_summary_collector.py +44 -6
  365. mindspore/train/callback/_tft_register.py +31 -10
  366. mindspore/train/dataset_helper.py +11 -11
  367. mindspore/train/metrics/precision.py +4 -5
  368. mindspore/train/mind_ir_pb2.py +167 -46
  369. mindspore/train/model.py +13 -15
  370. mindspore/train/serialization.py +462 -76
  371. mindspore/train/summary/summary_record.py +1 -2
  372. mindspore/train/train_thor/model_thor.py +1 -1
  373. mindspore/turbojpeg.dll +0 -0
  374. mindspore/utils/__init__.py +4 -2
  375. mindspore/utils/dryrun.py +138 -0
  376. mindspore/utils/runtime_execution_order_check.py +550 -0
  377. mindspore/vcmeta.dll +0 -0
  378. mindspore/vcruntime140.dll +0 -0
  379. mindspore/vcruntime140_1.dll +0 -0
  380. mindspore/version.py +1 -1
  381. {mindspore-2.4.10.dist-info → mindspore-2.5.0.dist-info}/METADATA +2 -3
  382. {mindspore-2.4.10.dist-info → mindspore-2.5.0.dist-info}/RECORD +385 -261
  383. {mindspore-2.4.10.dist-info → mindspore-2.5.0.dist-info}/entry_points.txt +1 -1
  384. mindspore/common/_tensor_overload.py +0 -139
  385. mindspore/mindspore_np_dtype.dll +0 -0
  386. mindspore/profiler/envprofiling.py +0 -254
  387. mindspore/profiler/profiling.py +0 -1926
  388. {mindspore-2.4.10.dist-info → mindspore-2.5.0.dist-info}/WHEEL +0 -0
  389. {mindspore-2.4.10.dist-info → mindspore-2.5.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,322 @@
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
+ """Ascend op memory viewer"""
16
+ import os
17
+ import struct
18
+ from collections import defaultdict
19
+ from enum import Enum
20
+ from typing import Any, Dict, List
21
+ from abc import ABC
22
+
23
+ from mindspore.profiler.parser.ascend_analysis.tlv_decoder import TLVDecoder
24
+ from mindspore.profiler.common.file_manager import FileManager
25
+ from mindspore.profiler.common.log import ProfilerLogger
26
+
27
+
28
+ class OpMemoryIndexEnum(Enum):
29
+ """Op memory index defining."""
30
+
31
+ DEVICE_ID = 0
32
+ TID = 1
33
+ PID = 2
34
+ CREATE_AT = 3
35
+ ADDR = 4
36
+ SIZE = 5
37
+ USED_SIZE = 6
38
+ PEAK_SIZE = 7
39
+ ALLOC_SIZE = 8
40
+ USED_BY_EVENT_SZIE = 9
41
+ EAGER_FREE_SIZE = 10
42
+ STEAM_PTR = 11
43
+ STREAM_ID = 12
44
+ FROM_PERSISTENT = 13
45
+ IS_PERSISTENT = 14
46
+ RUN_MODE = 15
47
+ ALLOC_TYPE = 16
48
+ OWNER = 17
49
+
50
+
51
+ class BaseEvent(ABC):
52
+ """Base class for all event types."""
53
+
54
+ def __init__(self, data: Dict):
55
+ if not isinstance(data, dict):
56
+ raise TypeError("Input data must be dict.")
57
+ self._origin_data = data
58
+
59
+
60
+ class OpMemoryEvent(BaseEvent):
61
+ """Op memory event."""
62
+
63
+ FIX_DATA_FORMAT = "<i11QI4B"
64
+ FIX_DATA_SIZE = struct.calcsize(FIX_DATA_FORMAT)
65
+ FREE_VALUE = 18446744073709551615 # 2^64 - 1
66
+ NAME_KEY = 3
67
+
68
+ def __init__(self, data: Dict):
69
+ super().__init__(data)
70
+ self.fix_size_data = struct.unpack(
71
+ self.FIX_DATA_FORMAT, self._origin_data.get("fix_size_bytes")
72
+ )
73
+
74
+ @property
75
+ def device_id(self):
76
+ """Get device id."""
77
+ return self.fix_size_data[OpMemoryIndexEnum.DEVICE_ID.value]
78
+
79
+ @property
80
+ def tid(self):
81
+ """Get tid."""
82
+ return self.fix_size_data[OpMemoryIndexEnum.TID.value]
83
+
84
+ @property
85
+ def pid(self):
86
+ """Get pid."""
87
+ return self.fix_size_data[OpMemoryIndexEnum.PID.value]
88
+
89
+ @property
90
+ def create_at(self):
91
+ """Get create at."""
92
+ return self.fix_size_data[OpMemoryIndexEnum.CREATE_AT.value]
93
+
94
+ @property
95
+ def addr(self):
96
+ """Get addr."""
97
+ return self.fix_size_data[OpMemoryIndexEnum.ADDR.value]
98
+
99
+ @property
100
+ def size(self):
101
+ """Get size."""
102
+ return self.fix_size_data[OpMemoryIndexEnum.SIZE.value]
103
+
104
+ @property
105
+ def used_size(self):
106
+ """Get used size."""
107
+ return self.fix_size_data[OpMemoryIndexEnum.USED_SIZE.value]
108
+
109
+ @property
110
+ def peak_size(self):
111
+ """Get peak size."""
112
+ return self.fix_size_data[OpMemoryIndexEnum.PEAK_SIZE.value]
113
+
114
+ @property
115
+ def alloc_size(self):
116
+ """Get alloc size."""
117
+ return self.fix_size_data[OpMemoryIndexEnum.ALLOC_SIZE.value]
118
+
119
+ @property
120
+ def used_by_event_size(self):
121
+ """Get used by event size."""
122
+ return self.fix_size_data[OpMemoryIndexEnum.USED_BY_EVENT_SZIE.value]
123
+
124
+ @property
125
+ def eager_free_size(self):
126
+ """Get eager free size."""
127
+ return self.fix_size_data[OpMemoryIndexEnum.EAGER_FREE_SIZE.value]
128
+
129
+ @property
130
+ def stream_ptr(self):
131
+ """Get stream ptr."""
132
+ return self.fix_size_data[OpMemoryIndexEnum.STEAM_PTR.value]
133
+
134
+ @property
135
+ def stream_id(self):
136
+ """Get stream id."""
137
+ return self.fix_size_data[OpMemoryIndexEnum.STREAM_ID.value]
138
+
139
+ @property
140
+ def from_persistent(self):
141
+ """Get from persistent."""
142
+ return self.fix_size_data[OpMemoryIndexEnum.FROM_PERSISTENT.value]
143
+
144
+ @property
145
+ def is_persistent(self):
146
+ """Get is persistent."""
147
+ return self.fix_size_data[OpMemoryIndexEnum.IS_PERSISTENT.value]
148
+
149
+ @property
150
+ def run_mode(self):
151
+ """Get run mode."""
152
+ return self.fix_size_data[OpMemoryIndexEnum.RUN_MODE.value]
153
+
154
+ @property
155
+ def alloc_type(self):
156
+ """Get alloc type."""
157
+ return self.fix_size_data[OpMemoryIndexEnum.ALLOC_TYPE.value]
158
+
159
+ @property
160
+ def owner(self):
161
+ """Get owner."""
162
+ return self._origin_data.get(self.NAME_KEY, "")
163
+
164
+ @property
165
+ def is_alloc(self):
166
+ """Get is alloc."""
167
+ return self.size != self.FREE_VALUE
168
+
169
+
170
+ class AscendOpMemoryViewer:
171
+ """
172
+ Ascend op memory viewer.
173
+ """
174
+
175
+ FWK_BINARY_FILE_NAME = "mindspore.memory_usage"
176
+ OUTPUT_FILE_NAME = "operator_memory.csv"
177
+ HEADERS = [
178
+ "Name",
179
+ "Size(KB)",
180
+ "Allocation Time(us)",
181
+ "Release Time(us)",
182
+ "Active Release Time(us)",
183
+ "Duration(us)",
184
+ "Active Duration(us)",
185
+ "Allocation Total Allocated(MB)",
186
+ "Allocation Total Reserved(MB)",
187
+ "Allocation Total Active(MB)",
188
+ "Release Total Allocated(MB)",
189
+ "Release Total Reserved(MB)",
190
+ "Release Total Active(MB)",
191
+ "Stream Ptr",
192
+ "Device Type",
193
+ ]
194
+ DEVICE_TYPE_FMT = "NPU:{}"
195
+ NS_TO_US = 1024
196
+ BYTES_TO_KB = 1024
197
+ BYTES_TO_MB = 1024 * 1024
198
+ EMPTY_VALUE = "N/A"
199
+ ALLOC_TIME_INDEX = 2
200
+
201
+ def __init__(self, **kwargs):
202
+ self._enable_profile_memory = kwargs.get("profile_memory", False)
203
+ self._framework_path = kwargs.get("framework_path")
204
+ self._ascend_profiler_output_path = kwargs.get("ascend_profiler_output_path")
205
+ self._ascend_ms_dir = kwargs.get("ascend_ms_dir")
206
+ ProfilerLogger.init(self._ascend_ms_dir)
207
+ self._logger = ProfilerLogger.get_instance()
208
+ self._op_memory_events = None
209
+ self._op_memory_data = []
210
+ self._addr_to_event_map = defaultdict(list)
211
+
212
+ def save(self, data: Any = None):
213
+ """
214
+ Save step trace time data to csv file
215
+ """
216
+ self._logger.info("AscendOpMemoryViewer start")
217
+ if not self._enable_profile_memory:
218
+ return
219
+
220
+ try:
221
+ self._read_fwk_binary_file()
222
+ self._calculate_op_memory_data()
223
+ self._write_data()
224
+ except Exception as e: # pylint: disable=W0703
225
+ self._logger.error("Failed to save op memory data: %s", str(e), exc_info=True)
226
+ self._logger.info("AscendOpMemoryViewer end")
227
+
228
+ def _read_fwk_binary_file(self):
229
+ """
230
+ Read fwk binary file
231
+ """
232
+ self._logger.info("Read fwk binary file start")
233
+ op_name_file_path = os.path.join(self._framework_path, self.FWK_BINARY_FILE_NAME)
234
+ raw_bin_data = FileManager.read_file_content(op_name_file_path, mode="rb")
235
+ self._op_memory_events = TLVDecoder.decode(
236
+ raw_bin_data, OpMemoryEvent, OpMemoryEvent.FIX_DATA_SIZE
237
+ )
238
+ self._op_memory_events = sorted(self._op_memory_events, key=lambda x: x.create_at)
239
+ self._logger.info("Read fwk binary file done, %d events", len(self._op_memory_events))
240
+
241
+ def _calculate_op_memory_data(self):
242
+ """
243
+ Calculate op memory data
244
+ """
245
+ self._logger.info("Calculate op memory data start")
246
+ if not self._op_memory_events:
247
+ self._logger.info("No op memory events")
248
+ return
249
+
250
+ for event in self._op_memory_events:
251
+ self._addr_to_event_map[event.addr].append(event)
252
+
253
+ for _, event_list in self._addr_to_event_map.items():
254
+ row_data_list = self._get_op_mem_row_data(event_list)
255
+ self._op_memory_data.extend(row_data_list)
256
+
257
+ self._op_memory_data = sorted(self._op_memory_data, key=lambda x: x[self.ALLOC_TIME_INDEX])
258
+ self._logger.info("Calculate op memory data done")
259
+
260
+ def _combine_alloc_and_free_event(self, alloc_event: OpMemoryEvent, free_event=None):
261
+ """
262
+ Combine alloc and free event
263
+ """
264
+ if not alloc_event:
265
+ self._logger.error("Alloc event is None")
266
+ return []
267
+
268
+ return [
269
+ alloc_event.owner, # "Name"
270
+ alloc_event.size / self.BYTES_TO_KB, # "Size(KB)"
271
+ alloc_event.create_at / self.NS_TO_US, # "Allocation Time(us)"
272
+ self.EMPTY_VALUE if free_event is None else free_event.create_at / self.NS_TO_US, # "Release Time(us)"
273
+ self.EMPTY_VALUE, # "Active Release Time(us)"
274
+ self.EMPTY_VALUE if free_event is None else (free_event.create_at - alloc_event.create_at) / self.NS_TO_US, # "Duration(us)"
275
+ self.EMPTY_VALUE, # "Active Duration(us)"
276
+ alloc_event.alloc_size / self.BYTES_TO_MB, # "Allocation Total Allocated(MB)"
277
+ alloc_event.used_size / self.BYTES_TO_MB, # "Allocation Total Reserved(MB)"
278
+ alloc_event.alloc_size / self.BYTES_TO_MB, # "Allocation Total Active(MB)"
279
+ self.EMPTY_VALUE if free_event is None else free_event.alloc_size / self.BYTES_TO_MB, # "Release Total Allocated(MB)"
280
+ self.EMPTY_VALUE if free_event is None else free_event.used_size / self.BYTES_TO_MB, # "Release Total Reserved(MB)"
281
+ self.EMPTY_VALUE if free_event is None else free_event.alloc_size / self.BYTES_TO_MB, # "Release Total Active(MB)"
282
+ alloc_event.stream_ptr, # "Stream Ptr"
283
+ self.DEVICE_TYPE_FMT.format(alloc_event.device_id), # "Device Type"
284
+ ]
285
+
286
+ def _get_op_mem_row_data(self, event_list: List[OpMemoryEvent]):
287
+ """
288
+ Get op memory row data
289
+ """
290
+ res = []
291
+
292
+ if not event_list:
293
+ self._logger.error("Event list length is less than 1")
294
+ return res
295
+
296
+ start_index = 0 if event_list[0].is_alloc else 1
297
+ alloc_event, free_event = None, None
298
+ for event in event_list[start_index:]:
299
+ if event.is_alloc:
300
+ alloc_event = event
301
+ else:
302
+ free_event = event
303
+
304
+ if alloc_event and free_event:
305
+ res.append(self._combine_alloc_and_free_event(alloc_event, free_event))
306
+ alloc_event, free_event = None, None
307
+ elif alloc_event is None and free_event:
308
+ self._logger.error("Alloc event is None, but free event is not None")
309
+
310
+ if alloc_event:
311
+ res.append(self._combine_alloc_and_free_event(alloc_event))
312
+
313
+ return res
314
+
315
+ def _write_data(self):
316
+ """
317
+ Write data to csv file
318
+ """
319
+ self._logger.info("Write data to csv file start")
320
+ save_path = os.path.join(self._ascend_profiler_output_path, self.OUTPUT_FILE_NAME)
321
+ FileManager.create_csv_file(save_path, self._op_memory_data, self.HEADERS)
322
+ self._logger.info("Write data to csv file done, %d rows, save path: %s", len(self._op_memory_data), save_path)
@@ -0,0 +1,265 @@
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
+ """Ascend Step Trace Time Viewer"""
16
+ import os
17
+ import re
18
+ from decimal import Decimal
19
+ from enum import Enum
20
+ from typing import List, Any, Tuple
21
+
22
+ import numpy as np
23
+
24
+ from mindspore import log as logger
25
+ from mindspore.profiler.analysis.viewer.base_viewer import BaseViewer
26
+ from mindspore.profiler.common.file_manager import FileManager
27
+ from mindspore.profiler.common.constant import TimelineLayerName, OverlapAnalysisTidName, ProfilerLevel
28
+ from mindspore.profiler.analysis.parser.timeline_event.msprof_event import (
29
+ MsprofCompleteEvent,
30
+ )
31
+ from mindspore.profiler.analysis.parser.timeline_event.timeline_event_pool import (
32
+ TimelineEventPool,
33
+ )
34
+ from mindspore.profiler.analysis.parser.timeline_assembly_factory.trace_view_container import (
35
+ TraceViewContainer,
36
+ )
37
+ from mindspore.profiler.common.log import ProfilerLogger
38
+
39
+
40
+ class StepTraceTimeHeaders(Enum):
41
+ """Step trace time headers"""
42
+ STEP = "Step"
43
+ COMPUTING = "Computing"
44
+ COMMUNICATION_NOT_OVERLAPPED = "Communication(Not Overlapped)"
45
+ OVERLAPPED = "Overlapped"
46
+ COMMUNICATION = "Communication"
47
+ FREE = "Free"
48
+ STAGE = "Stage"
49
+ BUBBLE = "Bubble"
50
+ COMMUNICATION_NOT_OVERLAPPED_EXCLUDE_RECEIVE = "Communication(Not Overlapped and Exclude Receive)"
51
+ PREPARING = "Preparing"
52
+
53
+
54
+ class AscendStepTraceTimeViewer(BaseViewer):
55
+ """Ascend Step Trace Time Viewer"""
56
+
57
+ STEP_TRACE_TIME_FILE_NAME = "step_trace_time.csv"
58
+ STEP_TRACE_TIME_HEADERS = [header.value for header in StepTraceTimeHeaders]
59
+
60
+ # HCCL Send, Recv op pattern
61
+ PP_OP_PATTERN = (
62
+ # eg: hcom_BatchSendRecv__101_0_1
63
+ re.compile(r"hcom_\w+SendRecv__\d+"),
64
+ # eg: hcom_send__101_0_1
65
+ re.compile(r"hcom_send__\d+"),
66
+ # eg: hcom_receive__101_0_1
67
+ re.compile(r"hcom_receive__\d+"),
68
+ re.compile(r"Receive-op"),
69
+ re.compile(r"Send-op"),
70
+ )
71
+
72
+ # numpy array dtype
73
+ OVERLAP_DTYPE = np.dtype([("ts", object), ("dur", object)])
74
+ HCCL_DTYPE = np.dtype([("name", object), ("ts", object), ("dur", object)])
75
+
76
+ def __init__(self, **kwargs):
77
+ super().__init__()
78
+ self._save_path = os.path.join(
79
+ kwargs.get("ascend_profiler_output_path"), self.STEP_TRACE_TIME_FILE_NAME
80
+ )
81
+ self._profiler_level = kwargs.get("profiler_level")
82
+ self._ascend_ms_dir = kwargs.get("ascend_ms_dir")
83
+ ProfilerLogger.init(self._ascend_ms_dir)
84
+ self._logger = ProfilerLogger.get_instance()
85
+ self.step_trace_time_data = {}
86
+ self.trace_container: TraceViewContainer = None
87
+ self.hccl_pool: TimelineEventPool = None
88
+ self.overlap_pool: TimelineEventPool = None
89
+ # HCCL events
90
+ self.hccl_events: List[MsprofCompleteEvent] = None
91
+ # Overlap analysis events
92
+ self.computing_events: List[MsprofCompleteEvent] = None
93
+ self.communication_events: List[MsprofCompleteEvent] = None
94
+ self.communication_not_overlapped_events: List[MsprofCompleteEvent] = None
95
+ self.free_events: List[MsprofCompleteEvent] = None
96
+ # Overlap analysis numpy array
97
+ self.computing_np: np.ndarray = None
98
+ self.communication_np: np.ndarray = None
99
+ self.communication_not_overlapped_np: np.ndarray = None
100
+ self.free_np: np.ndarray = None
101
+ # HCCL numpy array
102
+ self.hccl_events_np: np.ndarray = None
103
+
104
+ def save(self, data: Any):
105
+ """
106
+ Save step trace time data to csv file
107
+ """
108
+ self._logger.info("AscendStepTraceTimeViewer start")
109
+ if self._profiler_level == ProfilerLevel.LevelNone.value:
110
+ return
111
+ try:
112
+ self._check_input_data(data)
113
+ self._convert_events_to_numpy()
114
+ self._calculate_step_trace_time()
115
+ self._write_data()
116
+ except Exception as e: # pylint: disable=W0703
117
+ self._logger.error("Failed to save step trace time data, error: %s", str(e), exc_info=True)
118
+ self._logger.info("AscendStepTraceTimeViewer end")
119
+
120
+ def _write_data(self):
121
+ """
122
+ Write step trace time data to csv file
123
+ """
124
+ self._logger.info("Write step trace time data start")
125
+ data = [[str(self.step_trace_time_data.get(header, "")) for header in self.STEP_TRACE_TIME_HEADERS]]
126
+ FileManager.create_csv_file(
127
+ self._save_path,
128
+ data,
129
+ self.STEP_TRACE_TIME_HEADERS,
130
+ )
131
+ self._logger.info("Write step trace time data done, %d rows saved, save path: %s", len(data), self._save_path)
132
+
133
+ def _check_input_data(self, data: Any):
134
+ """
135
+ Check input data and initialize data
136
+ """
137
+ self.trace_container: TraceViewContainer = data.get(
138
+ "trace_view_container", None
139
+ )
140
+
141
+ if self.trace_container is None:
142
+ raise ValueError("trace is empty")
143
+
144
+ self.overlap_pool: TimelineEventPool = self.trace_container.get_pool_by_name(
145
+ TimelineLayerName.OVERLAP_ANALYSIS.value
146
+ )
147
+ self.hccl_pool: TimelineEventPool = self.trace_container.get_pool_by_name(
148
+ TimelineLayerName.HCCL.value
149
+ )
150
+
151
+ if self.overlap_pool is None:
152
+ raise ValueError("overlap pool is empty")
153
+
154
+ self.computing_events: List[MsprofCompleteEvent] = (
155
+ self.overlap_pool.get_events_by_name(OverlapAnalysisTidName.COMPUTING.value)
156
+ )
157
+ self.communication_events: List[MsprofCompleteEvent] = (
158
+ self.overlap_pool.get_events_by_name(
159
+ OverlapAnalysisTidName.COMMUNICATION.value
160
+ )
161
+ )
162
+ self.communication_not_overlapped_events: List[MsprofCompleteEvent] = (
163
+ self.overlap_pool.get_events_by_name(
164
+ OverlapAnalysisTidName.COMMUNICATION_NOT_OVERLAP.value
165
+ )
166
+ )
167
+ self.free_events: List[MsprofCompleteEvent] = (
168
+ self.overlap_pool.get_events_by_name(OverlapAnalysisTidName.FREE.value)
169
+ )
170
+ if self.hccl_pool is not None:
171
+ self.hccl_events: List[MsprofCompleteEvent] = (
172
+ self.hccl_pool.get_complete_events()
173
+ )
174
+
175
+ def _convert_overlap_events_to_numpy(
176
+ self, events: List[MsprofCompleteEvent], dtype
177
+ ):
178
+ """
179
+ Convert overlap events to numpy array
180
+ """
181
+ return np.array([(event.ts, event.dur) for event in events], dtype=dtype)
182
+
183
+ def _convert_events_to_numpy(self):
184
+ """
185
+ Convert events to numpy array
186
+ """
187
+ self.computing_np = self._convert_overlap_events_to_numpy(
188
+ self.computing_events, self.OVERLAP_DTYPE
189
+ )
190
+ self.communication_np = self._convert_overlap_events_to_numpy(
191
+ self.communication_events, self.OVERLAP_DTYPE
192
+ )
193
+ self.communication_not_overlapped_np = self._convert_overlap_events_to_numpy(
194
+ self.communication_not_overlapped_events, self.OVERLAP_DTYPE
195
+ )
196
+ self.free_np = self._convert_overlap_events_to_numpy(
197
+ self.free_events, self.OVERLAP_DTYPE
198
+ )
199
+ self.computing_np = np.sort(self.computing_np, order="ts")
200
+ self.communication_np = np.sort(self.communication_np, order="ts")
201
+ self.communication_not_overlapped_np = np.sort(
202
+ self.communication_not_overlapped_np, order="ts"
203
+ )
204
+ self.free_np = np.sort(self.free_np, order="ts")
205
+
206
+ if self.hccl_events is not None:
207
+ self.hccl_events_np = np.array(
208
+ [(event.name, event.ts, event.dur) for event in self.hccl_events],
209
+ dtype=self.HCCL_DTYPE,
210
+ )
211
+ self.hccl_events_np = np.sort(self.hccl_events_np, order="ts")
212
+
213
+ def _calculate_step_trace_time(self):
214
+ """
215
+ Calculate step trace time data
216
+ """
217
+ self.step_trace_time_data[StepTraceTimeHeaders.STEP.value] = "0"
218
+ self.step_trace_time_data[StepTraceTimeHeaders.COMPUTING.value] = np.sum(self.computing_np["dur"])
219
+ self.step_trace_time_data[StepTraceTimeHeaders.COMMUNICATION.value] = np.sum(self.communication_np["dur"])
220
+ self.step_trace_time_data[StepTraceTimeHeaders.COMMUNICATION_NOT_OVERLAPPED.value] = np.sum(
221
+ self.communication_not_overlapped_np["dur"]
222
+ )
223
+ self.step_trace_time_data[StepTraceTimeHeaders.OVERLAPPED.value] = (
224
+ self.step_trace_time_data[StepTraceTimeHeaders.COMMUNICATION.value]
225
+ - self.step_trace_time_data[StepTraceTimeHeaders.COMMUNICATION_NOT_OVERLAPPED.value]
226
+ )
227
+ self.step_trace_time_data[StepTraceTimeHeaders.FREE.value] = np.sum(self.free_np["dur"])
228
+ (
229
+ self.step_trace_time_data[StepTraceTimeHeaders.STAGE.value],
230
+ self.step_trace_time_data[StepTraceTimeHeaders.BUBBLE.value],
231
+ ) = self._calculate_stage_bubble()
232
+
233
+ self.step_trace_time_data[StepTraceTimeHeaders.COMMUNICATION_NOT_OVERLAPPED_EXCLUDE_RECEIVE.value] = (
234
+ self.step_trace_time_data[StepTraceTimeHeaders.COMMUNICATION_NOT_OVERLAPPED.value]
235
+ - self.step_trace_time_data[StepTraceTimeHeaders.BUBBLE.value]
236
+ )
237
+ self.step_trace_time_data[StepTraceTimeHeaders.PREPARING.value] = "0"
238
+
239
+ def _calculate_stage_bubble(self) -> Tuple[Decimal, Decimal]:
240
+ """
241
+ Calculate stage and bubble time
242
+ """
243
+ if self.hccl_events is None:
244
+ logger.info("HCCL events is empty, skip calculate stage and bubble")
245
+ return Decimal(0), Decimal(0)
246
+
247
+ total_hccl_time = self.hccl_events_np["ts"][-1] - self.hccl_events_np["ts"][0]
248
+ bubble_time = np.sum(
249
+ self.hccl_events_np["dur"][
250
+ np.array(
251
+ [
252
+ self._is_send_recv_op(name)
253
+ for name in self.hccl_events_np["name"]
254
+ ]
255
+ )
256
+ ]
257
+ )
258
+ stage_time = total_hccl_time - bubble_time
259
+ return stage_time, bubble_time
260
+
261
+ def _is_send_recv_op(self, op_name: str) -> bool:
262
+ """
263
+ Check if the op is a send or recv op
264
+ """
265
+ return any(pattern.match(op_name) for pattern in self.PP_OP_PATTERN)
@@ -0,0 +1,58 @@
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
+ """ascend timeline viewer"""
16
+ import os
17
+ from typing import List, Dict
18
+
19
+ from mindspore.profiler.analysis.viewer.base_viewer import BaseViewer
20
+ from mindspore.profiler.common.file_manager import FileManager
21
+ from mindspore.profiler.common.log import ProfilerLogger
22
+
23
+
24
+ class AscendTimelineViewer(BaseViewer):
25
+ """Ascend Timeline Viewer for analyzing and saving timeline data."""
26
+
27
+ _TRACE_VIEW_FILE_NAME = 'trace_view.json'
28
+
29
+ def __init__(self, **kwargs):
30
+ """Initialize the AscendTimelineViewer."""
31
+ super().__init__()
32
+ self._save_path = os.path.join(
33
+ kwargs.get("ascend_profiler_output_path"),
34
+ self._TRACE_VIEW_FILE_NAME
35
+ )
36
+ self._ascend_ms_dir = kwargs.get("ascend_ms_dir")
37
+ ProfilerLogger.init(self._ascend_ms_dir)
38
+ self._logger = ProfilerLogger.get_instance()
39
+
40
+ def save(self, data: Dict) -> None:
41
+ """Get the input data and save the timeline data."""
42
+ self._logger.info("AscendTimelineViewer start")
43
+ try:
44
+ trace_view_container = data.get("trace_view_container", None)
45
+ if not trace_view_container:
46
+ raise RuntimeError("The trace view container is None, Failed to save trace_view.json.")
47
+ trace_view_data = trace_view_container.get_trace_view()
48
+ self._save_data(trace_view_data)
49
+ self._logger.info("Trace viewer save trace_view.json done")
50
+ except Exception as e: # pylint: disable=W0703
51
+ self._logger.error("Failed to save trace_view.json: %s", e, exc_info=True)
52
+ self._logger.info("AscendTimelineViewer end")
53
+
54
+ def _save_data(self, timeline_data: List[Dict]) -> None:
55
+ """Save the timeline data to a JSON file."""
56
+ self._logger.info("Trace view saved start")
57
+ FileManager.create_json_file(self._save_path, timeline_data)
58
+ self._logger.info("Trace view saved done, save path: %s", self._save_path)
@@ -0,0 +1,26 @@
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
+ """BaseViewer class"""
16
+ from abc import ABC, abstractmethod
17
+ from typing import Any
18
+
19
+
20
+ class BaseViewer(ABC):
21
+ def __init__(self):
22
+ pass
23
+
24
+ @abstractmethod
25
+ def save(self, data: Any):
26
+ raise NotImplementedError("Subclasses should implement this!")