mindspore 2.6.0__cp39-cp39-win_amd64.whl → 2.7.0rc1__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 (380) hide show
  1. mindspore/.commit_id +1 -1
  2. mindspore/__init__.py +1 -1
  3. mindspore/_c_dataengine.cp39-win_amd64.pyd +0 -0
  4. mindspore/_c_expression.cp39-win_amd64.pyd +0 -0
  5. mindspore/_c_mindrecord.cp39-win_amd64.pyd +0 -0
  6. mindspore/_checkparam.py +40 -9
  7. mindspore/{_deprecated → _extends/optimize}/__init__.py +9 -3
  8. mindspore/_extends/optimize/cell_utils.py +96 -0
  9. mindspore/_extends/parse/__init__.py +2 -2
  10. mindspore/_extends/parse/compile_config.py +44 -22
  11. mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +1 -1
  12. mindspore/_extends/parse/parser.py +36 -61
  13. mindspore/_extends/parse/resources.py +39 -0
  14. mindspore/_extends/parse/standard_method.py +32 -13
  15. mindspore/_extends/parse/trope.py +8 -1
  16. mindspore/_extends/pijit/__init__.py +1 -2
  17. mindspore/amp.py +4 -4
  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/adasum.py +1 -1
  24. mindspore/boost/boost_cell_wrapper.py +4 -4
  25. mindspore/common/__init__.py +27 -2
  26. mindspore/common/_grad_function.py +2 -1
  27. mindspore/common/_pijit_context.py +28 -7
  28. mindspore/common/_stub_tensor.py +1 -209
  29. mindspore/common/_tensor_cpp_method.py +1 -1
  30. mindspore/common/_tensor_docs.py +76 -15
  31. mindspore/common/api.py +193 -112
  32. mindspore/common/dtype.py +21 -11
  33. mindspore/common/dump.py +10 -15
  34. mindspore/common/generator.py +2 -3
  35. mindspore/common/hook_handle.py +11 -2
  36. mindspore/common/jit_config.py +1 -1
  37. mindspore/common/jit_trace.py +84 -105
  38. mindspore/common/parameter.py +26 -12
  39. mindspore/common/recompute.py +3 -3
  40. mindspore/common/sparse_tensor.py +0 -3
  41. mindspore/common/symbol.py +0 -1
  42. mindspore/common/tensor.py +48 -83
  43. mindspore/communication/_comm_helper.py +46 -4
  44. mindspore/communication/management.py +79 -7
  45. mindspore/context.py +38 -23
  46. mindspore/dataset/core/config.py +3 -3
  47. mindspore/dataset/engine/datasets.py +20 -7
  48. mindspore/dataset/engine/datasets_user_defined.py +32 -2
  49. mindspore/dataset/engine/iterators.py +2 -2
  50. mindspore/dataset/engine/obs/config_loader.py +2 -2
  51. mindspore/dataset/engine/obs/obs_mindrecord_dataset.py +8 -0
  52. mindspore/dataset/transforms/py_transforms.py +7 -3
  53. mindspore/dataset/transforms/transforms.py +7 -3
  54. mindspore/dataset/vision/validators.py +1 -0
  55. mindspore/device_context/ascend/device.py +1 -1
  56. mindspore/device_context/gpu/__init__.py +2 -2
  57. mindspore/device_context/gpu/device.py +1 -1
  58. mindspore/device_context/gpu/op_precision.py +4 -2
  59. mindspore/device_context/gpu/op_tuning.py +6 -3
  60. mindspore/device_manager.py +16 -9
  61. mindspore/dnnl.dll +0 -0
  62. mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +3 -5
  63. mindspore/experimental/llm_boost/atb/boost_base.py +2 -3
  64. mindspore/experimental/optim/adadelta.py +13 -20
  65. mindspore/experimental/optim/adagrad.py +15 -22
  66. mindspore/experimental/optim/adam.py +17 -24
  67. mindspore/experimental/optim/adamax.py +14 -22
  68. mindspore/experimental/optim/adamw.py +28 -34
  69. mindspore/experimental/optim/asgd.py +15 -25
  70. mindspore/experimental/optim/lr_scheduler.py +27 -45
  71. mindspore/experimental/optim/nadam.py +14 -24
  72. mindspore/experimental/optim/optimizer.py +13 -23
  73. mindspore/experimental/optim/radam.py +18 -24
  74. mindspore/experimental/optim/rmsprop.py +14 -25
  75. mindspore/experimental/optim/rprop.py +15 -26
  76. mindspore/experimental/optim/sgd.py +9 -19
  77. mindspore/hal/__init__.py +4 -4
  78. mindspore/hal/contiguous_tensors_handle.py +2 -2
  79. mindspore/hal/memory.py +1 -0
  80. mindspore/include/api/cell.h +37 -1
  81. mindspore/include/api/delegate.h +10 -0
  82. mindspore/include/api/model.h +3 -0
  83. mindspore/include/api/types.h +2 -2
  84. mindspore/include/c_api/model_c.h +0 -58
  85. mindspore/include/c_api/tensor_c.h +0 -26
  86. mindspore/include/dataset/vision_ascend.h +1 -1
  87. mindspore/jpeg62.dll +0 -0
  88. mindspore/mindrecord/tools/cifar10.py +60 -11
  89. mindspore/mindrecord/tools/cifar10_to_mr.py +5 -0
  90. mindspore/mindspore_backend_common.dll +0 -0
  91. mindspore/mindspore_backend_manager.dll +0 -0
  92. mindspore/mindspore_common.dll +0 -0
  93. mindspore/mindspore_core.dll +0 -0
  94. mindspore/mindspore_cpu_res_manager.dll +0 -0
  95. mindspore/mindspore_dump.dll +0 -0
  96. mindspore/mindspore_frontend.dll +0 -0
  97. mindspore/mindspore_glog.dll +0 -0
  98. mindspore/mindspore_memory_pool.dll +0 -0
  99. mindspore/mindspore_ms_backend.dll +0 -0
  100. mindspore/mindspore_ops.dll +0 -0
  101. mindspore/mindspore_ops_host.dll +0 -0
  102. mindspore/mindspore_ops_kernel_common.dll +0 -0
  103. mindspore/mindspore_profiler.dll +0 -0
  104. mindspore/mindspore_pyboost.dll +0 -0
  105. mindspore/mindspore_pynative.dll +0 -0
  106. mindspore/mindspore_res_manager.dll +0 -0
  107. mindspore/mindspore_runtime_pipeline.dll +0 -0
  108. mindspore/mint/__init__.py +4 -44
  109. mindspore/mint/distributed/__init__.py +1 -0
  110. mindspore/mint/distributed/distributed.py +208 -5
  111. mindspore/mint/nn/__init__.py +1 -1
  112. mindspore/mint/nn/functional.py +53 -6
  113. mindspore/mint/nn/layer/_functions.py +164 -294
  114. mindspore/mint/nn/layer/activation.py +8 -6
  115. mindspore/mint/nn/layer/conv.py +122 -98
  116. mindspore/mint/nn/layer/normalization.py +8 -22
  117. mindspore/mint/optim/adam.py +19 -18
  118. mindspore/mint/optim/adamw.py +14 -8
  119. mindspore/mint/optim/sgd.py +5 -5
  120. mindspore/nn/cell.py +325 -499
  121. mindspore/nn/grad/cell_grad.py +11 -12
  122. mindspore/nn/layer/activation.py +32 -34
  123. mindspore/nn/layer/basic.py +67 -64
  124. mindspore/nn/layer/channel_shuffle.py +4 -4
  125. mindspore/nn/layer/combined.py +4 -2
  126. mindspore/nn/layer/conv.py +86 -85
  127. mindspore/nn/layer/dense.py +9 -7
  128. mindspore/nn/layer/embedding.py +50 -52
  129. mindspore/nn/layer/image.py +37 -39
  130. mindspore/nn/layer/math.py +111 -112
  131. mindspore/nn/layer/normalization.py +56 -44
  132. mindspore/nn/layer/pooling.py +58 -63
  133. mindspore/nn/layer/rnn_cells.py +33 -33
  134. mindspore/nn/layer/rnns.py +56 -56
  135. mindspore/nn/layer/thor_layer.py +74 -73
  136. mindspore/nn/layer/transformer.py +11 -1
  137. mindspore/nn/learning_rate_schedule.py +20 -20
  138. mindspore/nn/loss/loss.py +79 -81
  139. mindspore/nn/optim/adam.py +1 -1
  140. mindspore/nn/optim/adasum.py +2 -2
  141. mindspore/nn/optim/optimizer.py +1 -1
  142. mindspore/nn/optim/thor.py +2 -2
  143. mindspore/nn/probability/distribution/exponential.py +2 -1
  144. mindspore/nn/probability/distribution/poisson.py +2 -1
  145. mindspore/nn/sparse/sparse.py +3 -3
  146. mindspore/nn/wrap/cell_wrapper.py +34 -37
  147. mindspore/nn/wrap/grad_reducer.py +37 -37
  148. mindspore/nn/wrap/loss_scale.py +72 -74
  149. mindspore/numpy/array_creations.py +5 -5
  150. mindspore/numpy/fft.py +1 -1
  151. mindspore/numpy/math_ops.py +1 -1
  152. mindspore/opencv_core452.dll +0 -0
  153. mindspore/opencv_imgcodecs452.dll +0 -0
  154. mindspore/opencv_imgproc452.dll +0 -0
  155. mindspore/ops/_grad_experimental/grad_comm_ops.py +51 -13
  156. mindspore/ops/_grad_experimental/grad_debug_ops.py +14 -0
  157. mindspore/ops/_vmap/vmap_array_ops.py +6 -13
  158. mindspore/ops/_vmap/vmap_nn_ops.py +8 -16
  159. mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +17 -8
  160. mindspore/ops/auto_generate/gen_extend_func.py +1 -51
  161. mindspore/ops/auto_generate/gen_ops_def.py +463 -257
  162. mindspore/ops/auto_generate/gen_ops_prim.py +1127 -885
  163. mindspore/ops/auto_generate/pyboost_inner_prim.py +31 -1
  164. mindspore/ops/composite/__init__.py +10 -0
  165. mindspore/ops/composite/base.py +8 -4
  166. mindspore/ops/composite/multitype_ops/__init__.py +12 -1
  167. mindspore/ops/composite/multitype_ops/_compile_utils.py +132 -108
  168. mindspore/ops/composite/multitype_ops/add_impl.py +70 -2
  169. mindspore/ops/composite/multitype_ops/div_impl.py +49 -0
  170. mindspore/ops/composite/multitype_ops/floordiv_impl.py +29 -0
  171. mindspore/ops/composite/multitype_ops/getitem_impl.py +11 -0
  172. mindspore/ops/composite/multitype_ops/mod_impl.py +5 -3
  173. mindspore/ops/composite/multitype_ops/mul_impl.py +49 -0
  174. mindspore/ops/composite/multitype_ops/setitem_impl.py +57 -0
  175. mindspore/ops/composite/multitype_ops/sub_impl.py +34 -0
  176. mindspore/ops/composite/multitype_ops/zeros_like_impl.py +14 -0
  177. mindspore/ops/function/__init__.py +3 -1
  178. mindspore/ops/function/_add_attr_func.py +11 -6
  179. mindspore/ops/function/array_func.py +7 -94
  180. mindspore/ops/function/debug_func.py +4 -3
  181. mindspore/ops/function/grad/grad_func.py +1 -1
  182. mindspore/ops/function/math_func.py +21 -367
  183. mindspore/ops/function/nn_func.py +26 -41
  184. mindspore/ops/function/other_func.py +4 -1
  185. mindspore/ops/function/random_func.py +31 -4
  186. mindspore/ops/functional.py +0 -2
  187. mindspore/ops/functional_overload.py +463 -6
  188. mindspore/ops/op_info_register.py +21 -0
  189. mindspore/ops/operations/__init__.py +5 -2
  190. mindspore/ops/operations/_custom_ops_utils.py +675 -8
  191. mindspore/ops/operations/_inner_ops.py +3 -6
  192. mindspore/ops/operations/_sequence_ops.py +1 -1
  193. mindspore/ops/operations/comm_ops.py +185 -26
  194. mindspore/ops/operations/custom_ops.py +235 -172
  195. mindspore/ops/operations/debug_ops.py +55 -4
  196. mindspore/ops/operations/image_ops.py +13 -13
  197. mindspore/ops/operations/manually_defined/ops_def.py +15 -16
  198. mindspore/ops/operations/math_ops.py +3 -4
  199. mindspore/ops/operations/nn_ops.py +5 -6
  200. mindspore/ops/primitive.py +6 -10
  201. mindspore/ops/tensor_method.py +36 -4
  202. mindspore/ops_generate/api/cpp_create_prim_instance_helper_generator.py +1 -1
  203. mindspore/ops_generate/api/functional_map_cpp_generator.py +10 -9
  204. mindspore/ops_generate/api/functions_cc_generator.py +58 -10
  205. mindspore/ops_generate/api/tensor_func_reg_cpp_generator.py +1 -1
  206. mindspore/ops_generate/common/base_generator.py +14 -0
  207. mindspore/ops_generate/common/gen_constants.py +7 -2
  208. mindspore/ops_generate/common/gen_utils.py +0 -19
  209. mindspore/ops_generate/common/op_proto.py +11 -4
  210. mindspore/ops_generate/common/template.py +88 -11
  211. mindspore/ops_generate/gen_ops.py +1 -1
  212. mindspore/ops_generate/op_def/lite_ops_cpp_generator.py +4 -4
  213. mindspore/ops_generate/op_def/ops_name_h_generator.py +0 -3
  214. mindspore/ops_generate/op_def/ops_primitive_h_generator.py +0 -4
  215. mindspore/ops_generate/op_def_py/op_prim_py_generator.py +5 -2
  216. mindspore/ops_generate/pyboost/auto_grad_impl_cc_generator.py +49 -8
  217. mindspore/ops_generate/pyboost/auto_grad_reg_cc_generator.py +2 -2
  218. mindspore/ops_generate/pyboost/gen_pyboost_func.py +31 -0
  219. mindspore/ops_generate/pyboost/op_template_parser.py +98 -72
  220. mindspore/ops_generate/pyboost/pyboost_functions_cpp_generator.py +70 -273
  221. mindspore/ops_generate/pyboost/pyboost_functions_h_generator.py +14 -6
  222. mindspore/ops_generate/pyboost/pyboost_functions_impl_cpp_generator.py +316 -0
  223. mindspore/ops_generate/pyboost/pyboost_functions_py_generator.py +1 -1
  224. mindspore/ops_generate/pyboost/pyboost_grad_function_cpp_generator.py +5 -3
  225. mindspore/ops_generate/pyboost/pyboost_inner_prim_generator.py +1 -1
  226. mindspore/ops_generate/pyboost/pyboost_internal_functions_cpp_generator.py +76 -0
  227. mindspore/ops_generate/pyboost/pyboost_internal_functions_h_generator.py +76 -0
  228. mindspore/ops_generate/pyboost/pyboost_internal_kernel_info_adapter_generator.py +125 -0
  229. mindspore/ops_generate/pyboost/pyboost_native_grad_functions_generator.py +4 -3
  230. mindspore/ops_generate/pyboost/pyboost_op_cpp_code_generator.py +348 -61
  231. mindspore/ops_generate/pyboost/pyboost_overload_functions_cpp_generator.py +1 -1
  232. mindspore/ops_generate/pyboost/pyboost_utils.py +118 -9
  233. mindspore/ops_generate/tensor_py_cc_generator.py +1 -24
  234. mindspore/parallel/_auto_parallel_context.py +4 -2
  235. mindspore/parallel/_cell_wrapper.py +106 -40
  236. mindspore/parallel/_parallel_serialization.py +1 -1
  237. mindspore/parallel/_ps_context.py +4 -6
  238. mindspore/parallel/_tensor.py +167 -12
  239. mindspore/parallel/_transformer/moe.py +1 -1
  240. mindspore/parallel/_transformer/transformer.py +13 -8
  241. mindspore/parallel/auto_parallel.py +12 -5
  242. mindspore/parallel/checkpoint_convert.py +3 -3
  243. mindspore/parallel/checkpoint_transform.py +3 -1
  244. mindspore/parallel/cluster/process_entity/_api.py +84 -48
  245. mindspore/parallel/cluster/process_entity/_utils.py +95 -7
  246. mindspore/parallel/cluster/run.py +43 -4
  247. mindspore/parallel/function/__init__.py +8 -1
  248. mindspore/parallel/function/reshard_func.py +1 -1
  249. mindspore/parallel/nn/__init__.py +15 -2
  250. mindspore/parallel/nn/parallel_cell_wrapper.py +9 -10
  251. mindspore/parallel/nn/parallel_grad_reducer.py +7 -6
  252. mindspore/parallel/shard.py +2 -2
  253. mindspore/parallel/transform_safetensors.py +462 -174
  254. mindspore/profiler/__init__.py +2 -1
  255. mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +7 -7
  256. mindspore/profiler/analysis/parser/timeline_assembly_factory/base_timeline_assembler.py +3 -0
  257. mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +3 -0
  258. mindspore/profiler/analysis/parser/timeline_creator/cpu_op_timeline_creator.py +3 -3
  259. mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +3 -3
  260. mindspore/profiler/analysis/parser/timeline_creator/msprof_timeline_creator.py +4 -4
  261. mindspore/profiler/analysis/parser/timeline_creator/scope_layer_timeline_creator.py +3 -3
  262. mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +4 -1
  263. mindspore/profiler/analysis/parser/timeline_event/timeline_event_pool.py +2 -1
  264. mindspore/profiler/analysis/task_manager.py +1 -1
  265. mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +5 -1
  266. mindspore/profiler/analysis/viewer/ascend_integrate_viewer.py +2 -1
  267. mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +42 -22
  268. mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +3 -2
  269. mindspore/profiler/analysis/viewer/ms_minddata_viewer.py +9 -5
  270. mindspore/profiler/analysis/viewer/ms_operator_details_viewer.py +132 -0
  271. mindspore/profiler/common/constant.py +16 -0
  272. mindspore/profiler/common/profiler_context.py +25 -27
  273. mindspore/profiler/common/profiler_info.py +0 -16
  274. mindspore/profiler/common/profiler_op_analyse.py +235 -0
  275. mindspore/profiler/common/profiler_output_path.py +23 -8
  276. mindspore/profiler/common/profiler_parameters.py +128 -35
  277. mindspore/profiler/dynamic_profile/__init__.py +0 -0
  278. mindspore/profiler/dynamic_profile/dynamic_monitor_proxy.py +39 -0
  279. mindspore/profiler/dynamic_profile/dynamic_profiler_config_context.py +666 -0
  280. mindspore/profiler/dynamic_profile/dynamic_profiler_utils.py +62 -0
  281. mindspore/profiler/dynamic_profiler.py +305 -314
  282. mindspore/profiler/envprofiler.py +12 -7
  283. mindspore/profiler/experimental_config.py +96 -6
  284. mindspore/profiler/mstx.py +33 -12
  285. mindspore/profiler/platform/__init__.py +2 -3
  286. mindspore/profiler/platform/npu_profiler.py +29 -19
  287. mindspore/profiler/profiler.py +35 -19
  288. mindspore/profiler/profiler_action_controller.py +64 -76
  289. mindspore/profiler/schedule.py +10 -4
  290. mindspore/rewrite/common/config.py +1 -0
  291. mindspore/rewrite/common/namer.py +1 -0
  292. mindspore/rewrite/common/namespace.py +1 -0
  293. mindspore/rewrite/node/node.py +31 -11
  294. mindspore/rewrite/parsers/assign_parser.py +1 -1
  295. mindspore/rewrite/symbol_tree/symbol_tree.py +1 -1
  296. mindspore/run_check/_check_version.py +7 -10
  297. mindspore/runtime/__init__.py +5 -5
  298. mindspore/runtime/event.py +10 -4
  299. mindspore/runtime/executor.py +60 -45
  300. mindspore/runtime/memory.py +21 -30
  301. mindspore/runtime/thread_bind_core.py +298 -164
  302. mindspore/safeguard/rewrite_obfuscation.py +12 -13
  303. mindspore/swresample-4.dll +0 -0
  304. mindspore/swscale-6.dll +0 -0
  305. mindspore/tinyxml2.dll +0 -0
  306. mindspore/train/_utils.py +6 -2
  307. mindspore/train/amp.py +43 -20
  308. mindspore/train/callback/__init__.py +5 -5
  309. mindspore/train/callback/_checkpoint.py +3 -6
  310. mindspore/train/callback/_flops_collector.py +1 -1
  311. mindspore/train/callback/_landscape.py +0 -1
  312. mindspore/train/callback/_train_fault_tolerance.py +71 -13
  313. mindspore/train/data_sink.py +11 -2
  314. mindspore/train/dataset_helper.py +9 -0
  315. mindspore/train/model.py +51 -33
  316. mindspore/train/serialization.py +133 -111
  317. mindspore/train/summary/summary_record.py +13 -2
  318. mindspore/turbojpeg.dll +0 -0
  319. mindspore/utils/__init__.py +3 -2
  320. mindspore/utils/dryrun.py +0 -6
  321. mindspore/utils/runtime_execution_order_check.py +162 -78
  322. mindspore/utils/sdc_detect.py +68 -0
  323. mindspore/utils/utils.py +6 -9
  324. mindspore/version.py +1 -1
  325. {mindspore-2.6.0.dist-info → mindspore-2.7.0rc1.dist-info}/METADATA +5 -4
  326. {mindspore-2.6.0.dist-info → mindspore-2.7.0rc1.dist-info}/RECORD +329 -367
  327. mindspore/_deprecated/jit.py +0 -198
  328. mindspore/experimental/es/__init__.py +0 -22
  329. mindspore/experimental/es/embedding_service.py +0 -891
  330. mindspore/experimental/es/embedding_service_layer.py +0 -581
  331. mindspore/profiler/parser/__init__.py +0 -14
  332. mindspore/profiler/parser/aicpu_data_parser.py +0 -272
  333. mindspore/profiler/parser/ascend_analysis/__init__.py +0 -14
  334. mindspore/profiler/parser/ascend_analysis/constant.py +0 -71
  335. mindspore/profiler/parser/ascend_analysis/file_manager.py +0 -180
  336. mindspore/profiler/parser/ascend_analysis/function_event.py +0 -185
  337. mindspore/profiler/parser/ascend_analysis/fwk_cann_parser.py +0 -136
  338. mindspore/profiler/parser/ascend_analysis/fwk_file_parser.py +0 -131
  339. mindspore/profiler/parser/ascend_analysis/msprof_timeline_parser.py +0 -104
  340. mindspore/profiler/parser/ascend_analysis/path_manager.py +0 -313
  341. mindspore/profiler/parser/ascend_analysis/profiler_info_parser.py +0 -123
  342. mindspore/profiler/parser/ascend_analysis/tlv_decoder.py +0 -86
  343. mindspore/profiler/parser/ascend_analysis/trace_event_manager.py +0 -75
  344. mindspore/profiler/parser/ascend_cluster_generator.py +0 -116
  345. mindspore/profiler/parser/ascend_communicate_generator.py +0 -314
  346. mindspore/profiler/parser/ascend_flops_generator.py +0 -116
  347. mindspore/profiler/parser/ascend_fpbp_generator.py +0 -82
  348. mindspore/profiler/parser/ascend_hccl_generator.py +0 -271
  349. mindspore/profiler/parser/ascend_integrate_generator.py +0 -42
  350. mindspore/profiler/parser/ascend_memory_generator.py +0 -185
  351. mindspore/profiler/parser/ascend_msprof_exporter.py +0 -282
  352. mindspore/profiler/parser/ascend_msprof_generator.py +0 -187
  353. mindspore/profiler/parser/ascend_op_generator.py +0 -334
  354. mindspore/profiler/parser/ascend_steptrace_generator.py +0 -94
  355. mindspore/profiler/parser/ascend_timeline_generator.py +0 -545
  356. mindspore/profiler/parser/base_timeline_generator.py +0 -483
  357. mindspore/profiler/parser/container.py +0 -229
  358. mindspore/profiler/parser/cpu_gpu_timeline_generator.py +0 -697
  359. mindspore/profiler/parser/flops_parser.py +0 -531
  360. mindspore/profiler/parser/framework_enum.py +0 -111
  361. mindspore/profiler/parser/framework_parser.py +0 -464
  362. mindspore/profiler/parser/framework_struct.py +0 -61
  363. mindspore/profiler/parser/gpu_analysis/__init__.py +0 -14
  364. mindspore/profiler/parser/gpu_analysis/function_event.py +0 -44
  365. mindspore/profiler/parser/gpu_analysis/fwk_file_parser.py +0 -89
  366. mindspore/profiler/parser/gpu_analysis/profiler_info_parser.py +0 -72
  367. mindspore/profiler/parser/hccl_parser.py +0 -573
  368. mindspore/profiler/parser/hwts_log_parser.py +0 -122
  369. mindspore/profiler/parser/integrator.py +0 -526
  370. mindspore/profiler/parser/memory_usage_parser.py +0 -277
  371. mindspore/profiler/parser/minddata_analyzer.py +0 -800
  372. mindspore/profiler/parser/minddata_parser.py +0 -186
  373. mindspore/profiler/parser/minddata_pipeline_parser.py +0 -299
  374. mindspore/profiler/parser/op_intermediate_parser.py +0 -149
  375. mindspore/profiler/parser/optime_parser.py +0 -250
  376. mindspore/profiler/parser/profiler_info.py +0 -213
  377. mindspore/profiler/parser/step_trace_parser.py +0 -666
  378. {mindspore-2.6.0.dist-info → mindspore-2.7.0rc1.dist-info}/WHEEL +0 -0
  379. {mindspore-2.6.0.dist-info → mindspore-2.7.0rc1.dist-info}/entry_points.txt +0 -0
  380. {mindspore-2.6.0.dist-info → mindspore-2.7.0rc1.dist-info}/top_level.txt +0 -0
@@ -1,545 +0,0 @@
1
- # Copyright 2022 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 integrator for integrating parsed profiling files."""
16
-
17
- import os.path
18
- import glob
19
- import json
20
- import stat
21
- from decimal import Decimal
22
- import numpy as np
23
- from mindspore import log as logger
24
- from mindspore.profiler.common.exceptions.exceptions import ProfilerIOException
25
- from mindspore.profiler.parser.base_timeline_generator import BaseTimelineGenerator
26
- from mindspore.profiler.parser.integrator import DeviceTarget
27
- from mindspore.profiler.parser.ascend_analysis.fwk_cann_parser import FwkCANNParser
28
- from mindspore.profiler.common.util import get_newest_file
29
- from mindspore.profiler.parser.ascend_analysis.constant import Constant
30
-
31
-
32
- class AscendTimelineGenerator(BaseTimelineGenerator):
33
- """Generate ascend Timeline data from file."""
34
- _timeline_display_filename = 'ascend_timeline_display_{}.json'
35
- _timeline_summary_filename = 'ascend_timeline_summary_{}.json'
36
- _cluster_analyse_filename = 'ascend_cluster_analyse_{}_{}_{}_{}.csv'
37
-
38
- def __init__(self, profiling_dir, source_path, mindstudio_profiler_output, rank_id, rank_size, mode,
39
- step_list=None):
40
- super().__init__(DeviceTarget.ASCEND.value, mode)
41
- self._profiling_dir = profiling_dir
42
- self._source_path = source_path
43
- self._mindstudio_profiler_output = mindstudio_profiler_output
44
- self._rank_id = rank_id
45
- self._rank_size = rank_size
46
- self._timeline_display_filename = self._timeline_display_filename.format(rank_id)
47
- self._timeline_summary_filename = self._timeline_summary_filename.format(rank_id)
48
- self._timeline_data = []
49
- self._step_list = step_list
50
-
51
- self.step_time_list_df = np.dtype(
52
- [('Iteration ID', object), ('Steps', object), ('Iteration Start', float), ('Iteration Time', float)])
53
-
54
- self.aicpu_time_list_dt = np.dtype(
55
- [('Op Name', object), ('Stream ID', int), ('Task Start Time', float), ('Task Duration', float)])
56
-
57
- def parse_cluster_data(self, op_summary, steptrace):
58
- """
59
- Parse cluster data and timeline summary data.
60
-
61
- Args:
62
- op_summary: op data
63
- steptrace: step data
64
- """
65
-
66
- logger.info('parse cluster data...')
67
- if isinstance(op_summary, np.ndarray) and op_summary.shape[0] == 0 or \
68
- not isinstance(op_summary, np.ndarray) and not op_summary:
69
- return
70
- timeline_list = op_summary[~np.isin(op_summary['Task Type'], ['AI_CPU', 'HCCL'])][
71
- ['Op Name', 'Stream ID', 'Task Start Time', 'Task Duration']]
72
-
73
- timeline_list = timeline_list.tolist()
74
-
75
- if not isinstance(steptrace, np.ndarray) or steptrace.shape[0] == 0 or not steptrace.tolist():
76
- iteration_time = op_summary[-1]['Task Start Time'] - op_summary[0]['Task Start Time'] + op_summary[-1][
77
- 'Task Duration'] + op_summary[-1]['Task Wait Time']
78
- step_time_list = [['1', 'Steps', op_summary[0]['Task Start Time'], iteration_time]]
79
- else:
80
- step_time_list = np.empty((len(steptrace),), dtype=self.step_time_list_df)
81
- step_time_list['Iteration ID'] = \
82
- np.char.add("Model ID: ",
83
- np.char.add(steptrace['Model ID'].astype(str),
84
- np.char.add(" Iteration ID: ",
85
- steptrace['Iteration ID'].astype(str))))
86
- step_time_list['Steps'] = 'Steps'
87
- step_time_list['Iteration Start'] = steptrace['Iteration End'] - steptrace['Iteration Time']
88
- step_time_list['Iteration Time'] = steptrace['Iteration Time']
89
- step_time_list = step_time_list.tolist()
90
-
91
- # Add AI CPU data into timeline temp list and sort by start time.
92
- aicpu_op = op_summary[op_summary['Task Type'] == 'AI_CPU']
93
- if aicpu_op.size:
94
- aicpu_time_list = np.empty((len(aicpu_op),), dtype=self.aicpu_time_list_dt)
95
- aicpu_time_list['Op Name'] = aicpu_op['Op Name']
96
- aicpu_time_list['Stream ID'] = aicpu_op['Stream ID']
97
- aicpu_time_list['Task Start Time'] = aicpu_op['Task Start Time']
98
- aicpu_time_list['Task Duration'] = aicpu_op['Task Duration'] + aicpu_op['Task Wait Time']
99
- aicpu_time_list = aicpu_time_list.tolist()
100
- timeline_list.extend(aicpu_time_list)
101
- timeline_list.sort(key=lambda x: float(x[self._start_time_idx]))
102
-
103
- # Add AllReduce info to timeline temp list and sort by start time.
104
- communication_info = op_summary[op_summary['Task Type'] == 'HCCL'][
105
- ['Op Name', 'Stream ID', 'Task Start Time', 'Task Duration']]
106
- if communication_info.size:
107
- communication_info = communication_info.tolist()
108
- communication_info.sort(key=lambda x: float(x[self._start_time_idx]))
109
- logger.debug('AllReduce info found. Start adding info into timeline...')
110
- self._get_cluster_timeline(timeline_list, communication_info, step_time_list)
111
-
112
- # Update timeline summary info
113
- timeline_summary = op_summary[['Op Name', 'Stream ID', 'Task Duration']]
114
- self._timeline_summary['total_time'] = np.sum(timeline_summary['Task Duration'])
115
- self._timeline_summary['num_of_streams'] = int(
116
- len(np.unique(timeline_summary['Stream ID'], return_counts=True)[0]))
117
- self._timeline_summary['num_of_ops'] = int(len(np.unique(timeline_summary['Op Name'], return_counts=True)[0]))
118
- self._timeline_summary['op_exe_times'] = int(len(timeline_summary))
119
- if self._timeline_summary['op_exe_times'] != 0:
120
- self._timeline_summary['max_scope_name_num'] = int(np.max(
121
- [len(x) for x in np.char.split(timeline_summary['Op Name'].astype(str), sep='/')]))
122
- else:
123
- self._timeline_summary['max_scope_name_num'] = 0
124
- logger.info('Finished parse cluster data...')
125
-
126
- def write_timeline_display(self):
127
- """Write timeline display"""
128
- logger.info('Writing timeline file...')
129
- display_file_path = os.path.join(
130
- self._profiling_dir,
131
- self._timeline_display_filename
132
- )
133
- try:
134
- with os.fdopen(os.open(display_file_path, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600), 'w') as fw:
135
- json.dump(self._timeline_data, fw, indent=self.indent)
136
- os.chmod(display_file_path, stat.S_IREAD | stat.S_IWRITE)
137
- logger.info('Finished file writing!')
138
- except (IOError, OSError) as err:
139
- logger.critical('Error occurred when write timeline display file: %s', err)
140
- raise ProfilerIOException() from err
141
-
142
- def parse_timeline_data(self, pretty=False):
143
- """
144
- Get detail timeline
145
- Returns:
146
- json, the content of timeline data.
147
- """
148
- logger.info("Start parse timeline data...")
149
- self._pretty = pretty
150
- timeline_data = []
151
- all_scope_data = []
152
-
153
- # get msprof data
154
- msprof_file_name = fr'{self._mindstudio_profiler_output}/msprof_*.json'
155
- file_list_msprof = glob.glob(msprof_file_name)
156
- msprof_timeline = []
157
- if not file_list_msprof:
158
- logger.error('Could not find msprof_*.json file in %s', self._mindstudio_profiler_output)
159
- else:
160
- msprof_timeline = self._parse_msprof_data(get_newest_file(file_list_msprof))
161
-
162
- # get cpu op
163
- cpu_op_file_name = fr'{self._profiling_dir}/cpu_op_execute_timestamp_{self._rank_id}.txt'
164
- file_list = glob.glob(cpu_op_file_name)
165
- if not file_list:
166
- logger.warning('Could not find cpu op file in %s', self._profiling_dir)
167
- else:
168
- cpu_timeline, scope_data = self.parse_cpu_timeline(file_list)
169
- timeline_data.extend(cpu_timeline)
170
- all_scope_data.extend(scope_data)
171
-
172
- oprange_name = self._op_range_name.format(self._rank_id)
173
- fwk_file_path = fr'{self._profiling_dir}/{self._framework_dir}/{oprange_name}'
174
- if os.path.exists(fwk_file_path):
175
- # It is faster not to submit to the pool
176
- result = self._parse_fwk_device_data(msprof_timeline)
177
- all_scope_data.extend(result.get('scope_data', []))
178
- timeline_data.extend(result.get("trace_data", []))
179
- self._kernel_events = result.get("kernels", [])
180
- else:
181
- # get Ascend Hardware for scope
182
- scope_data = self._parse_ascend_hardware_scope(msprof_timeline)
183
- all_scope_data.extend(scope_data)
184
- timeline_data.extend(msprof_timeline)
185
-
186
- # parse scope info
187
- scope_timeline = self._parse_scope_info(all_scope_data)
188
- timeline_data.extend(scope_timeline)
189
-
190
- logger.info("All timeline data parse complete.")
191
- self._timeline_data = timeline_data
192
- return timeline_data
193
-
194
- def parse_cpu_timeline(self, file_list):
195
- """Load cpu operator data from file"""
196
- ms_to_us = 1e3
197
- ns_to_us = 1e-3
198
- new_pid = Constant.CPU_OP
199
- process_list = [{"name": "process_name",
200
- "pid": new_pid,
201
- "args": {
202
- "name": f"CPU OP"
203
- },
204
- "ph": "M"
205
- }, {"name": "process_sort_index", "pid": new_pid,
206
- "args": {"sort_index": new_pid}, "ph": "M"}
207
- ]
208
- tid_set = set()
209
- thread_list = []
210
- new_timeline = []
211
- scope_data = []
212
- try:
213
- flags = os.O_RDONLY
214
- for file_path in file_list:
215
- with os.fdopen(os.open(file_path, flags, 0o400), 'r') as fr:
216
- for line in fr:
217
- op_list = line.strip().split(';')
218
- op_full_name = op_list[0]
219
- time_arr = op_list[-1]
220
- time_arr = time_arr.split(" ")
221
- for time in time_arr:
222
- ts, dur, tid = time.split(",") # origin unit of ts is ns and dur is ms.
223
- ts = Decimal(ts).quantize(Decimal('0.000')) * Decimal(ns_to_us).quantize(
224
- Decimal('0.000')) # cast to us
225
- dur = Decimal(dur).quantize(Decimal('0.000')) * Decimal(ms_to_us).quantize(
226
- Decimal('0.000')) # cast to us
227
-
228
- if op_full_name and op_full_name.startswith(Constant.TOP_SCOPE_NAMES):
229
- te = ts + dur
230
- scope_data.append((op_full_name.split('/')[:-1], ts, te))
231
-
232
- if int(tid) not in tid_set:
233
- tid_set.add(int(tid))
234
- thread_list.append({"name": "thread_name",
235
- "pid": new_pid,
236
- "tid": int(tid),
237
- "ph": "M",
238
- 'args': {'name': f'thread {tid}'}
239
- })
240
-
241
- new_timeline.append({'name': op_list[0],
242
- 'pid': new_pid,
243
- 'tid': int(tid),
244
- 'ph': 'X',
245
- 'ts': str(ts),
246
- 'dur': float(dur) * ms_to_us,
247
- 'args':
248
- {'type': op_list[1]}
249
- })
250
- break
251
-
252
- return process_list + thread_list + new_timeline, scope_data
253
-
254
- except (IOError, OSError, json.JSONDecodeError) as err:
255
- logger.error('parse_cann_data failed! please theck. detail: %s', err)
256
- return []
257
-
258
- def _parse_fwk_device_data(self, cann_kernel_data):
259
- """
260
- Get framework op range trace data, flow events and hardware kernel events
261
- """
262
- fwkcann_parser = FwkCANNParser(self._source_path, cann_kernel_data, self._rank_id, self._step_list)
263
- fwk_link_data = fwkcann_parser.generate_trace_data()
264
- kernels = fwkcann_parser.kernels
265
- scope_data = fwkcann_parser.scope_data_with_flow + fwkcann_parser.scope_data_without_flow
266
- result = {"trace_data": fwk_link_data, "kernels": kernels, "scope_data": scope_data}
267
- return result
268
-
269
- def _parse_msprof_data(self, file_list):
270
- """
271
- parse msprof.json file
272
- :param file_list:
273
- :return:
274
- """
275
- flags = os.O_RDONLY
276
- raw_data = []
277
- try:
278
- for file_path in file_list:
279
- with os.fdopen(os.open(file_path, flags, 0o400), 'r') as fr:
280
- raw_data.extend(json.load(fr))
281
-
282
- if not raw_data:
283
- logger.error('Could not found msprof data in file list: %s .', file_list)
284
-
285
- return raw_data
286
-
287
- except (IOError, OSError, json.JSONDecodeError) as err:
288
- logger.error('_parse_msprof_data failed! please theck. detail: %s', err)
289
- return []
290
-
291
- def _parse_ascend_hardware_scope(self, msprof_timeline):
292
- """
293
- parse ascend hardware scope
294
- """
295
- scope_data = []
296
- try:
297
-
298
- for event in msprof_timeline:
299
- if event.get("ph") == "M":
300
- continue
301
-
302
- op_full_name = event.get('name')
303
- if op_full_name and op_full_name.startswith(Constant.TOP_SCOPE_NAMES):
304
- ts = Decimal(event.get('ts')).quantize(Decimal('0.000'))
305
- te = ts + Decimal(event.get('dur')).quantize(Decimal('0.000'))
306
- scope_data.append((op_full_name.split('/')[:-1], ts, te))
307
-
308
- return scope_data
309
-
310
- except (IOError, OSError, json.JSONDecodeError) as err:
311
- logger.error('_parse_ascend_hardware_scope failed! please theck. detail: %s', err)
312
- return []
313
-
314
- def _parse_scope_info(self, scope_data):
315
- """Parse scope info of op"""
316
- if not scope_data:
317
- return []
318
- new_pid = Constant.SCOPE_LAYLER
319
- scope_data.sort(key=lambda x: x[1])
320
- process_list = [
321
- {"name": "process_name",
322
- "pid": new_pid,
323
- "args": {
324
- "name": f"Scope Layer"
325
- },
326
- "ph": "M"},
327
- {"name": "process_sort_index",
328
- "pid": new_pid,
329
- "args": {"sort_index": new_pid},
330
- "ph": "M"}
331
- ]
332
-
333
- new_events = []
334
- layer_stack = []
335
- for layer_name in scope_data[0][0]:
336
- layer_stack.append([layer_name, scope_data[0][1], scope_data[0][2]])
337
-
338
- for op in scope_data[1:]:
339
- if op[1] < layer_stack[0][2]:
340
- # 并行算子只保留前面的
341
- continue
342
- flag = True # 判断上层是否合并, 上层不合并下层也不合并
343
- for layer_depth, layer_name in enumerate(op[0]):
344
- if layer_depth >= len(layer_stack):
345
- layer_stack.append([layer_name, op[1], op[2]])
346
- else:
347
- if layer_stack[layer_depth][0] == layer_name and flag:
348
- layer_stack[layer_depth][2] = op[2] # 合并
349
- else:
350
- ts = layer_stack[layer_depth][1]
351
- new_events.append({
352
- "name": layer_stack[layer_depth][0],
353
- "pid": new_pid,
354
- "tid": layer_depth,
355
- "ph": "X",
356
- "ts": str(ts),
357
- "dur": float(layer_stack[layer_depth][2] - layer_stack[layer_depth][1])
358
- })
359
- layer_stack[layer_depth] = [layer_name, op[1], op[2]]
360
- flag = False
361
-
362
- thread_list = []
363
- for index, layer in enumerate(layer_stack):
364
- thread_list.extend([{
365
- "name": "thread_name",
366
- "pid": new_pid,
367
- "tid": index,
368
- "args": {
369
- "name": f"layer{index}"
370
- },
371
- "ph": "M"
372
- }, {
373
- "name": "thread_sort_index",
374
- "pid": new_pid,
375
- "tid": index,
376
- "args": {"sort_index": index},
377
- "ph": "M"
378
- }])
379
- if layer:
380
- ts = layer[1]
381
- new_events.append({
382
- "name": layer[0],
383
- "pid": new_pid,
384
- "tid": index,
385
- "ph": "X",
386
- "ts": str(ts),
387
- "dur": float(layer[2] - layer[1])
388
- })
389
-
390
- return process_list + thread_list + new_events
391
-
392
- def _produce_two_separated_timeline(self, timeline, op_name):
393
- """Produce two separated timeline based on op_name."""
394
- timeline_include_op_name = []
395
- timeline_exclude_op_name = []
396
- for time_item in timeline:
397
- if op_name in time_item[self._op_name_idx]:
398
- timeline_include_op_name.append(time_item)
399
- else:
400
- timeline_exclude_op_name.append(time_item)
401
- return timeline_include_op_name, timeline_exclude_op_name
402
-
403
- def _get_cluster_timeline(self, aicore_info, comm_info, step_info):
404
- """
405
- Analyse the cluster communication and computation data, and write result to file.
406
-
407
- To analyse the cluster performance bottleneck based on timeline, define the time of a training
408
- step as "t_total", propose five metrics as follows:
409
- 1) The time that "receive" operators not overlapped by others(t1)
410
- 2) The time that is consumed inside the stage(t_total - t1)
411
- 3) The time that "communication" operators not overlapped by others(t2)
412
- 4) The time that consumed by computation(t_total - t2)
413
- 5) The time that "collective communication" operators not overlapped by others(t3)
414
- In pipeline parallel mode, we can locate slow stage based on t_total - t1. Inside each stage,
415
- we can locate slow card based on t_total - t2. The value of t1 indicates the degree that
416
- communication time between stages slow down the training. The value of t3 indicates the degree
417
- that communication inside each stage slow down the training.
418
- """
419
- is_pipeline_parallel = False
420
- comm_timeline = self._get_merged_time_list(
421
- comm_info, display_name="communication"
422
- )
423
- aicore_timeline = self._get_merged_time_list(
424
- aicore_info, get_interval_time=True
425
- )
426
- # Consider if the overlap will be 0 or not.
427
- comm_not_overlapped_timeline = self._get_intersection_time(
428
- aicore_timeline[0], comm_timeline[0]
429
- )
430
-
431
- # Process receive part.
432
- all_timeline = aicore_info + comm_info
433
- all_timeline.sort(key=lambda x: float(x[self._start_time_idx]))
434
- receive_timeline = self._produce_two_separated_timeline(
435
- all_timeline, "Receive-op"
436
- )
437
- if receive_timeline[0]:
438
- is_pipeline_parallel = True
439
- receive_op_merged_timeline = self._get_merged_time_list(receive_timeline[0])[0]
440
- timeline_exclude_receive_op_interval = self._get_merged_time_list(
441
- receive_timeline[1], get_interval_time=True
442
- )[0]
443
- receive_op_not_overlapped_timeline = self._get_intersection_time(
444
- timeline_exclude_receive_op_interval, receive_op_merged_timeline
445
- )
446
-
447
- # Process collective communication part.
448
- collective_comm_timeline = self._produce_two_separated_timeline(
449
- comm_info, "Receive-op"
450
- )[-1]
451
-
452
- collective_comm_not_overlapped_timeline = self._get_intersection_time(
453
- aicore_timeline[0], self._get_merged_time_list(collective_comm_timeline)[0]
454
- )
455
-
456
- self._parse_cluster_metrices(step_info, receive_op_not_overlapped_timeline, comm_not_overlapped_timeline,
457
- collective_comm_not_overlapped_timeline, is_pipeline_parallel)
458
-
459
- def _parse_cluster_metrices(self, step_info, receive_op_not_overlapped_timeline, comm_not_overlapped_timeline,
460
- collective_comm_not_overlapped_timeline, is_pipeline_parallel):
461
- """Write the cluster metrices"""
462
- # Compute these five metrics mentioned above per step.
463
- recieve_alone_time = self._compute_time_inside_step(receive_op_not_overlapped_timeline, step_info)
464
- time_info = {"stage_time": [], "computation_time": []}
465
- comm_alone_time = self._compute_time_inside_step(comm_not_overlapped_timeline, step_info)
466
- collective_comm_alone_time = self._compute_time_inside_step(
467
- collective_comm_not_overlapped_timeline, step_info
468
- )
469
- step_num = len(step_info)
470
- for step in range(step_num):
471
- try:
472
- if is_pipeline_parallel:
473
- time_info.get("stage_time").append(step_info[step][self._duration_idx] - recieve_alone_time[step])
474
- except IndexError as err:
475
- logger.error(err)
476
-
477
- try:
478
- time_info.get("computation_time").append(step_info[step][self._duration_idx] - comm_alone_time[step])
479
- except IndexError as err:
480
- logger.error(err)
481
-
482
- metrices_per_step_list = [
483
- time_info.get("computation_time"), comm_alone_time, time_info.get("stage_time"),
484
- recieve_alone_time, collective_comm_alone_time
485
- ]
486
- if step_num > 1:
487
- for metric in metrices_per_step_list:
488
- metric.append(sum(metric[1:]) / (step_num - 1))
489
-
490
- try:
491
- self._write_cluster_metrices(metrices_per_step_list, is_pipeline_parallel, "Ascend", self._rank_id)
492
- except (IOError, OSError) as err:
493
- logger.warning(err)
494
- raise ProfilerIOException from err
495
-
496
- def _compute_time_inside_step(self, metric_timeline, step_time_list):
497
- """Compute per step time of metric_timeline."""
498
- per_step_time_list = [0 for _ in range(len(step_time_list))]
499
- step = 0
500
- step_end_time = step_time_list[step][self._start_time_idx] + step_time_list[step][self._duration_idx]
501
- for time_item in metric_timeline:
502
- start_time = time_item[self._start_time_idx]
503
- if start_time > step_end_time:
504
- step += 1
505
- if step >= len(step_time_list):
506
- logger.warning("Compute profiler compute_time_inside_step time, "
507
- "find the data length is more than step count, "
508
- "maybe current graph has multi sub graph, skip the last data.")
509
- break
510
- step_end_time = step_time_list[step][self._start_time_idx] + step_time_list[step][self._duration_idx]
511
- per_step_time_list[step] += time_item[self._duration_idx]
512
-
513
- return per_step_time_list
514
-
515
- def _get_intersection_time(self, first_time_list, second_time_list,
516
- display_name="communication_not_overlapped"):
517
- """Get intersection time of two time list."""
518
- first_list_idx, second_list_idx = 0, 0
519
- first_list_len = len(first_time_list)
520
- second_list_len = len(second_time_list)
521
- intersection_segment_display_list = []
522
-
523
- while first_list_idx < first_list_len and \
524
- second_list_idx < second_list_len:
525
- intersection_start = max(
526
- first_time_list[first_list_idx][self._start_time_idx],
527
- second_time_list[second_list_idx][self._start_time_idx]
528
- )
529
- intersection_end = min(
530
- first_time_list[first_list_idx][self._duration_idx],
531
- second_time_list[second_list_idx][self._duration_idx]
532
- )
533
- if intersection_start < intersection_end:
534
- tid = self._tid_dict.get(display_name, [0, 0])
535
- intersection_segment_display_list.append(
536
- [display_name, tid[0],
537
- intersection_start, intersection_end - intersection_start, tid[1]]
538
- )
539
- if first_time_list[first_list_idx][self._duration_idx] >= \
540
- second_time_list[second_list_idx][self._duration_idx]:
541
- second_list_idx += 1
542
- else:
543
- first_list_idx += 1
544
-
545
- return intersection_segment_display_list