mindspore 2.6.0__cp311-cp311-win_amd64.whl → 2.7.0rc1__cp311-cp311-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mindspore might be problematic. Click here for more details.

Files changed (403) 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 +1 -1
  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 +40 -9
  9. mindspore/{_deprecated → _extends/optimize}/__init__.py +9 -3
  10. mindspore/_extends/optimize/cell_utils.py +96 -0
  11. mindspore/_extends/parse/__init__.py +2 -2
  12. mindspore/_extends/parse/compile_config.py +44 -22
  13. mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +1 -1
  14. mindspore/_extends/parse/parser.py +36 -61
  15. mindspore/_extends/parse/resources.py +39 -0
  16. mindspore/_extends/parse/standard_method.py +32 -13
  17. mindspore/_extends/parse/trope.py +8 -1
  18. mindspore/_extends/pijit/__init__.py +1 -2
  19. mindspore/amp.py +4 -4
  20. mindspore/atlprov.dll +0 -0
  21. mindspore/avcodec-59.dll +0 -0
  22. mindspore/avdevice-59.dll +0 -0
  23. mindspore/avfilter-8.dll +0 -0
  24. mindspore/avformat-59.dll +0 -0
  25. mindspore/avutil-57.dll +0 -0
  26. mindspore/boost/adasum.py +1 -1
  27. mindspore/boost/boost_cell_wrapper.py +4 -4
  28. mindspore/c1.dll +0 -0
  29. mindspore/c1xx.dll +0 -0
  30. mindspore/c2.dll +0 -0
  31. mindspore/common/__init__.py +27 -2
  32. mindspore/common/_grad_function.py +2 -1
  33. mindspore/common/_pijit_context.py +28 -7
  34. mindspore/common/_stub_tensor.py +1 -209
  35. mindspore/common/_tensor_cpp_method.py +1 -1
  36. mindspore/common/_tensor_docs.py +76 -15
  37. mindspore/common/api.py +193 -112
  38. mindspore/common/dtype.py +21 -11
  39. mindspore/common/dump.py +10 -15
  40. mindspore/common/generator.py +2 -3
  41. mindspore/common/hook_handle.py +11 -2
  42. mindspore/common/jit_config.py +1 -1
  43. mindspore/common/jit_trace.py +84 -105
  44. mindspore/common/parameter.py +26 -12
  45. mindspore/common/recompute.py +3 -3
  46. mindspore/common/sparse_tensor.py +0 -3
  47. mindspore/common/symbol.py +0 -1
  48. mindspore/common/tensor.py +48 -83
  49. mindspore/communication/_comm_helper.py +46 -4
  50. mindspore/communication/management.py +79 -7
  51. mindspore/context.py +38 -23
  52. mindspore/dataset/core/config.py +3 -3
  53. mindspore/dataset/engine/datasets.py +20 -7
  54. mindspore/dataset/engine/datasets_user_defined.py +32 -2
  55. mindspore/dataset/engine/iterators.py +2 -2
  56. mindspore/dataset/engine/obs/config_loader.py +2 -2
  57. mindspore/dataset/engine/obs/obs_mindrecord_dataset.py +8 -0
  58. mindspore/dataset/transforms/py_transforms.py +7 -3
  59. mindspore/dataset/transforms/transforms.py +7 -3
  60. mindspore/dataset/vision/validators.py +1 -0
  61. mindspore/device_context/ascend/device.py +1 -1
  62. mindspore/device_context/gpu/__init__.py +2 -2
  63. mindspore/device_context/gpu/device.py +1 -1
  64. mindspore/device_context/gpu/op_precision.py +4 -2
  65. mindspore/device_context/gpu/op_tuning.py +6 -3
  66. mindspore/device_manager.py +16 -9
  67. mindspore/dnnl.dll +0 -0
  68. mindspore/dpcmi.dll +0 -0
  69. mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +3 -5
  70. mindspore/experimental/llm_boost/atb/boost_base.py +2 -3
  71. mindspore/experimental/optim/adadelta.py +13 -20
  72. mindspore/experimental/optim/adagrad.py +15 -22
  73. mindspore/experimental/optim/adam.py +17 -24
  74. mindspore/experimental/optim/adamax.py +14 -22
  75. mindspore/experimental/optim/adamw.py +28 -34
  76. mindspore/experimental/optim/asgd.py +15 -25
  77. mindspore/experimental/optim/lr_scheduler.py +27 -45
  78. mindspore/experimental/optim/nadam.py +14 -24
  79. mindspore/experimental/optim/optimizer.py +13 -23
  80. mindspore/experimental/optim/radam.py +18 -24
  81. mindspore/experimental/optim/rmsprop.py +14 -25
  82. mindspore/experimental/optim/rprop.py +15 -26
  83. mindspore/experimental/optim/sgd.py +9 -19
  84. mindspore/hal/__init__.py +4 -4
  85. mindspore/hal/contiguous_tensors_handle.py +2 -2
  86. mindspore/hal/memory.py +1 -0
  87. mindspore/include/api/cell.h +37 -1
  88. mindspore/include/api/delegate.h +10 -0
  89. mindspore/include/api/model.h +3 -0
  90. mindspore/include/api/types.h +2 -2
  91. mindspore/include/c_api/model_c.h +0 -58
  92. mindspore/include/c_api/tensor_c.h +0 -26
  93. mindspore/include/dataset/vision_ascend.h +1 -1
  94. mindspore/jpeg62.dll +0 -0
  95. mindspore/mindrecord/tools/cifar10.py +60 -11
  96. mindspore/mindrecord/tools/cifar10_to_mr.py +5 -0
  97. mindspore/mindspore_backend_common.dll +0 -0
  98. mindspore/mindspore_backend_manager.dll +0 -0
  99. mindspore/mindspore_common.dll +0 -0
  100. mindspore/mindspore_core.dll +0 -0
  101. mindspore/mindspore_cpu_res_manager.dll +0 -0
  102. mindspore/mindspore_dump.dll +0 -0
  103. mindspore/mindspore_frontend.dll +0 -0
  104. mindspore/mindspore_glog.dll +0 -0
  105. mindspore/mindspore_memory_pool.dll +0 -0
  106. mindspore/mindspore_ms_backend.dll +0 -0
  107. mindspore/mindspore_ops.dll +0 -0
  108. mindspore/mindspore_ops_host.dll +0 -0
  109. mindspore/mindspore_ops_kernel_common.dll +0 -0
  110. mindspore/mindspore_profiler.dll +0 -0
  111. mindspore/mindspore_pyboost.dll +0 -0
  112. mindspore/mindspore_pynative.dll +0 -0
  113. mindspore/mindspore_res_manager.dll +0 -0
  114. mindspore/mindspore_runtime_pipeline.dll +0 -0
  115. mindspore/mint/__init__.py +4 -44
  116. mindspore/mint/distributed/__init__.py +1 -0
  117. mindspore/mint/distributed/distributed.py +208 -5
  118. mindspore/mint/nn/__init__.py +1 -1
  119. mindspore/mint/nn/functional.py +53 -6
  120. mindspore/mint/nn/layer/_functions.py +164 -294
  121. mindspore/mint/nn/layer/activation.py +8 -6
  122. mindspore/mint/nn/layer/conv.py +122 -98
  123. mindspore/mint/nn/layer/normalization.py +8 -22
  124. mindspore/mint/optim/adam.py +19 -18
  125. mindspore/mint/optim/adamw.py +14 -8
  126. mindspore/mint/optim/sgd.py +5 -5
  127. mindspore/msobj140.dll +0 -0
  128. mindspore/mspdb140.dll +0 -0
  129. mindspore/mspdbcore.dll +0 -0
  130. mindspore/mspdbst.dll +0 -0
  131. mindspore/mspft140.dll +0 -0
  132. mindspore/msvcdis140.dll +0 -0
  133. mindspore/msvcp140_1.dll +0 -0
  134. mindspore/msvcp140_2.dll +0 -0
  135. mindspore/msvcp140_atomic_wait.dll +0 -0
  136. mindspore/msvcp140_codecvt_ids.dll +0 -0
  137. mindspore/nn/cell.py +325 -499
  138. mindspore/nn/grad/cell_grad.py +11 -12
  139. mindspore/nn/layer/activation.py +32 -34
  140. mindspore/nn/layer/basic.py +67 -64
  141. mindspore/nn/layer/channel_shuffle.py +4 -4
  142. mindspore/nn/layer/combined.py +4 -2
  143. mindspore/nn/layer/conv.py +86 -85
  144. mindspore/nn/layer/dense.py +9 -7
  145. mindspore/nn/layer/embedding.py +50 -52
  146. mindspore/nn/layer/image.py +37 -39
  147. mindspore/nn/layer/math.py +111 -112
  148. mindspore/nn/layer/normalization.py +56 -44
  149. mindspore/nn/layer/pooling.py +58 -63
  150. mindspore/nn/layer/rnn_cells.py +33 -33
  151. mindspore/nn/layer/rnns.py +56 -56
  152. mindspore/nn/layer/thor_layer.py +74 -73
  153. mindspore/nn/layer/transformer.py +11 -1
  154. mindspore/nn/learning_rate_schedule.py +20 -20
  155. mindspore/nn/loss/loss.py +79 -81
  156. mindspore/nn/optim/adam.py +1 -1
  157. mindspore/nn/optim/adasum.py +2 -2
  158. mindspore/nn/optim/optimizer.py +1 -1
  159. mindspore/nn/optim/thor.py +2 -2
  160. mindspore/nn/probability/distribution/exponential.py +2 -1
  161. mindspore/nn/probability/distribution/poisson.py +2 -1
  162. mindspore/nn/sparse/sparse.py +3 -3
  163. mindspore/nn/wrap/cell_wrapper.py +34 -37
  164. mindspore/nn/wrap/grad_reducer.py +37 -37
  165. mindspore/nn/wrap/loss_scale.py +72 -74
  166. mindspore/numpy/array_creations.py +5 -5
  167. mindspore/numpy/fft.py +1 -1
  168. mindspore/numpy/math_ops.py +1 -1
  169. mindspore/opencv_core452.dll +0 -0
  170. mindspore/opencv_imgcodecs452.dll +0 -0
  171. mindspore/opencv_imgproc452.dll +0 -0
  172. mindspore/ops/_grad_experimental/grad_comm_ops.py +51 -13
  173. mindspore/ops/_grad_experimental/grad_debug_ops.py +14 -0
  174. mindspore/ops/_vmap/vmap_array_ops.py +6 -13
  175. mindspore/ops/_vmap/vmap_nn_ops.py +8 -16
  176. mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +17 -8
  177. mindspore/ops/auto_generate/gen_extend_func.py +1 -51
  178. mindspore/ops/auto_generate/gen_ops_def.py +463 -257
  179. mindspore/ops/auto_generate/gen_ops_prim.py +1127 -885
  180. mindspore/ops/auto_generate/pyboost_inner_prim.py +31 -1
  181. mindspore/ops/composite/__init__.py +10 -0
  182. mindspore/ops/composite/base.py +8 -4
  183. mindspore/ops/composite/multitype_ops/__init__.py +12 -1
  184. mindspore/ops/composite/multitype_ops/_compile_utils.py +132 -108
  185. mindspore/ops/composite/multitype_ops/add_impl.py +70 -2
  186. mindspore/ops/composite/multitype_ops/div_impl.py +49 -0
  187. mindspore/ops/composite/multitype_ops/floordiv_impl.py +29 -0
  188. mindspore/ops/composite/multitype_ops/getitem_impl.py +11 -0
  189. mindspore/ops/composite/multitype_ops/mod_impl.py +5 -3
  190. mindspore/ops/composite/multitype_ops/mul_impl.py +49 -0
  191. mindspore/ops/composite/multitype_ops/setitem_impl.py +57 -0
  192. mindspore/ops/composite/multitype_ops/sub_impl.py +34 -0
  193. mindspore/ops/composite/multitype_ops/zeros_like_impl.py +14 -0
  194. mindspore/ops/function/__init__.py +3 -1
  195. mindspore/ops/function/_add_attr_func.py +11 -6
  196. mindspore/ops/function/array_func.py +7 -94
  197. mindspore/ops/function/debug_func.py +4 -3
  198. mindspore/ops/function/grad/grad_func.py +1 -1
  199. mindspore/ops/function/math_func.py +21 -367
  200. mindspore/ops/function/nn_func.py +26 -41
  201. mindspore/ops/function/other_func.py +4 -1
  202. mindspore/ops/function/random_func.py +31 -4
  203. mindspore/ops/functional.py +0 -2
  204. mindspore/ops/functional_overload.py +463 -6
  205. mindspore/ops/op_info_register.py +21 -0
  206. mindspore/ops/operations/__init__.py +5 -2
  207. mindspore/ops/operations/_custom_ops_utils.py +675 -8
  208. mindspore/ops/operations/_inner_ops.py +3 -6
  209. mindspore/ops/operations/_sequence_ops.py +1 -1
  210. mindspore/ops/operations/comm_ops.py +185 -26
  211. mindspore/ops/operations/custom_ops.py +235 -172
  212. mindspore/ops/operations/debug_ops.py +55 -4
  213. mindspore/ops/operations/image_ops.py +13 -13
  214. mindspore/ops/operations/manually_defined/ops_def.py +15 -16
  215. mindspore/ops/operations/math_ops.py +3 -4
  216. mindspore/ops/operations/nn_ops.py +5 -6
  217. mindspore/ops/primitive.py +6 -10
  218. mindspore/ops/tensor_method.py +36 -4
  219. mindspore/ops_generate/api/cpp_create_prim_instance_helper_generator.py +1 -1
  220. mindspore/ops_generate/api/functional_map_cpp_generator.py +10 -9
  221. mindspore/ops_generate/api/functions_cc_generator.py +58 -10
  222. mindspore/ops_generate/api/tensor_func_reg_cpp_generator.py +1 -1
  223. mindspore/ops_generate/common/base_generator.py +14 -0
  224. mindspore/ops_generate/common/gen_constants.py +7 -2
  225. mindspore/ops_generate/common/gen_utils.py +0 -19
  226. mindspore/ops_generate/common/op_proto.py +11 -4
  227. mindspore/ops_generate/common/template.py +88 -11
  228. mindspore/ops_generate/gen_ops.py +1 -1
  229. mindspore/ops_generate/op_def/lite_ops_cpp_generator.py +4 -4
  230. mindspore/ops_generate/op_def/ops_name_h_generator.py +0 -3
  231. mindspore/ops_generate/op_def/ops_primitive_h_generator.py +0 -4
  232. mindspore/ops_generate/op_def_py/op_prim_py_generator.py +5 -2
  233. mindspore/ops_generate/pyboost/auto_grad_impl_cc_generator.py +49 -8
  234. mindspore/ops_generate/pyboost/auto_grad_reg_cc_generator.py +2 -2
  235. mindspore/ops_generate/pyboost/gen_pyboost_func.py +31 -0
  236. mindspore/ops_generate/pyboost/op_template_parser.py +98 -72
  237. mindspore/ops_generate/pyboost/pyboost_functions_cpp_generator.py +70 -273
  238. mindspore/ops_generate/pyboost/pyboost_functions_h_generator.py +14 -6
  239. mindspore/ops_generate/pyboost/pyboost_functions_impl_cpp_generator.py +316 -0
  240. mindspore/ops_generate/pyboost/pyboost_functions_py_generator.py +1 -1
  241. mindspore/ops_generate/pyboost/pyboost_grad_function_cpp_generator.py +5 -3
  242. mindspore/ops_generate/pyboost/pyboost_inner_prim_generator.py +1 -1
  243. mindspore/ops_generate/pyboost/pyboost_internal_functions_cpp_generator.py +76 -0
  244. mindspore/ops_generate/pyboost/pyboost_internal_functions_h_generator.py +76 -0
  245. mindspore/ops_generate/pyboost/pyboost_internal_kernel_info_adapter_generator.py +125 -0
  246. mindspore/ops_generate/pyboost/pyboost_native_grad_functions_generator.py +4 -3
  247. mindspore/ops_generate/pyboost/pyboost_op_cpp_code_generator.py +348 -61
  248. mindspore/ops_generate/pyboost/pyboost_overload_functions_cpp_generator.py +1 -1
  249. mindspore/ops_generate/pyboost/pyboost_utils.py +118 -9
  250. mindspore/ops_generate/tensor_py_cc_generator.py +1 -24
  251. mindspore/parallel/_auto_parallel_context.py +4 -2
  252. mindspore/parallel/_cell_wrapper.py +106 -40
  253. mindspore/parallel/_parallel_serialization.py +1 -1
  254. mindspore/parallel/_ps_context.py +4 -6
  255. mindspore/parallel/_tensor.py +167 -12
  256. mindspore/parallel/_transformer/moe.py +1 -1
  257. mindspore/parallel/_transformer/transformer.py +13 -8
  258. mindspore/parallel/auto_parallel.py +12 -5
  259. mindspore/parallel/checkpoint_convert.py +3 -3
  260. mindspore/parallel/checkpoint_transform.py +3 -1
  261. mindspore/parallel/cluster/process_entity/_api.py +84 -48
  262. mindspore/parallel/cluster/process_entity/_utils.py +95 -7
  263. mindspore/parallel/cluster/run.py +43 -4
  264. mindspore/parallel/function/__init__.py +8 -1
  265. mindspore/parallel/function/reshard_func.py +1 -1
  266. mindspore/parallel/nn/__init__.py +15 -2
  267. mindspore/parallel/nn/parallel_cell_wrapper.py +9 -10
  268. mindspore/parallel/nn/parallel_grad_reducer.py +7 -6
  269. mindspore/parallel/shard.py +2 -2
  270. mindspore/parallel/transform_safetensors.py +462 -174
  271. mindspore/pgodb140.dll +0 -0
  272. mindspore/pgort140.dll +0 -0
  273. mindspore/profiler/__init__.py +2 -1
  274. mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +7 -7
  275. mindspore/profiler/analysis/parser/timeline_assembly_factory/base_timeline_assembler.py +3 -0
  276. mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +3 -0
  277. mindspore/profiler/analysis/parser/timeline_creator/cpu_op_timeline_creator.py +3 -3
  278. mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +3 -3
  279. mindspore/profiler/analysis/parser/timeline_creator/msprof_timeline_creator.py +4 -4
  280. mindspore/profiler/analysis/parser/timeline_creator/scope_layer_timeline_creator.py +3 -3
  281. mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +4 -1
  282. mindspore/profiler/analysis/parser/timeline_event/timeline_event_pool.py +2 -1
  283. mindspore/profiler/analysis/task_manager.py +1 -1
  284. mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +5 -1
  285. mindspore/profiler/analysis/viewer/ascend_integrate_viewer.py +2 -1
  286. mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +42 -22
  287. mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +3 -2
  288. mindspore/profiler/analysis/viewer/ms_minddata_viewer.py +9 -5
  289. mindspore/profiler/analysis/viewer/ms_operator_details_viewer.py +132 -0
  290. mindspore/profiler/common/constant.py +16 -0
  291. mindspore/profiler/common/profiler_context.py +25 -27
  292. mindspore/profiler/common/profiler_info.py +0 -16
  293. mindspore/profiler/common/profiler_op_analyse.py +235 -0
  294. mindspore/profiler/common/profiler_output_path.py +23 -8
  295. mindspore/profiler/common/profiler_parameters.py +128 -35
  296. mindspore/profiler/dynamic_profile/__init__.py +0 -0
  297. mindspore/profiler/dynamic_profile/dynamic_monitor_proxy.py +39 -0
  298. mindspore/profiler/dynamic_profile/dynamic_profiler_config_context.py +666 -0
  299. mindspore/profiler/dynamic_profile/dynamic_profiler_utils.py +62 -0
  300. mindspore/profiler/dynamic_profiler.py +305 -314
  301. mindspore/profiler/envprofiler.py +12 -7
  302. mindspore/profiler/experimental_config.py +96 -6
  303. mindspore/profiler/mstx.py +33 -12
  304. mindspore/profiler/platform/__init__.py +2 -3
  305. mindspore/profiler/platform/npu_profiler.py +29 -19
  306. mindspore/profiler/profiler.py +35 -19
  307. mindspore/profiler/profiler_action_controller.py +64 -76
  308. mindspore/profiler/schedule.py +10 -4
  309. mindspore/rewrite/common/config.py +1 -0
  310. mindspore/rewrite/common/namer.py +1 -0
  311. mindspore/rewrite/common/namespace.py +1 -0
  312. mindspore/rewrite/node/node.py +31 -11
  313. mindspore/rewrite/parsers/assign_parser.py +1 -1
  314. mindspore/rewrite/symbol_tree/symbol_tree.py +1 -1
  315. mindspore/run_check/_check_version.py +7 -10
  316. mindspore/runtime/__init__.py +5 -5
  317. mindspore/runtime/event.py +10 -4
  318. mindspore/runtime/executor.py +60 -45
  319. mindspore/runtime/memory.py +21 -30
  320. mindspore/runtime/thread_bind_core.py +298 -164
  321. mindspore/safeguard/rewrite_obfuscation.py +12 -13
  322. mindspore/swresample-4.dll +0 -0
  323. mindspore/swscale-6.dll +0 -0
  324. mindspore/tbbmalloc.dll +0 -0
  325. mindspore/tinyxml2.dll +0 -0
  326. mindspore/train/_utils.py +6 -2
  327. mindspore/train/amp.py +43 -20
  328. mindspore/train/callback/__init__.py +5 -5
  329. mindspore/train/callback/_checkpoint.py +3 -6
  330. mindspore/train/callback/_flops_collector.py +1 -1
  331. mindspore/train/callback/_landscape.py +0 -1
  332. mindspore/train/callback/_train_fault_tolerance.py +71 -13
  333. mindspore/train/data_sink.py +11 -2
  334. mindspore/train/dataset_helper.py +9 -0
  335. mindspore/train/model.py +51 -33
  336. mindspore/train/serialization.py +133 -111
  337. mindspore/train/summary/summary_record.py +13 -2
  338. mindspore/turbojpeg.dll +0 -0
  339. mindspore/utils/__init__.py +3 -2
  340. mindspore/utils/dryrun.py +0 -6
  341. mindspore/utils/runtime_execution_order_check.py +162 -78
  342. mindspore/utils/sdc_detect.py +68 -0
  343. mindspore/utils/utils.py +6 -9
  344. mindspore/vcmeta.dll +0 -0
  345. mindspore/vcruntime140.dll +0 -0
  346. mindspore/vcruntime140_1.dll +0 -0
  347. mindspore/version.py +1 -1
  348. {mindspore-2.6.0.dist-info → mindspore-2.7.0rc1.dist-info}/METADATA +5 -4
  349. {mindspore-2.6.0.dist-info → mindspore-2.7.0rc1.dist-info}/RECORD +352 -390
  350. mindspore/_deprecated/jit.py +0 -198
  351. mindspore/experimental/es/__init__.py +0 -22
  352. mindspore/experimental/es/embedding_service.py +0 -891
  353. mindspore/experimental/es/embedding_service_layer.py +0 -581
  354. mindspore/profiler/parser/__init__.py +0 -14
  355. mindspore/profiler/parser/aicpu_data_parser.py +0 -272
  356. mindspore/profiler/parser/ascend_analysis/__init__.py +0 -14
  357. mindspore/profiler/parser/ascend_analysis/constant.py +0 -71
  358. mindspore/profiler/parser/ascend_analysis/file_manager.py +0 -180
  359. mindspore/profiler/parser/ascend_analysis/function_event.py +0 -185
  360. mindspore/profiler/parser/ascend_analysis/fwk_cann_parser.py +0 -136
  361. mindspore/profiler/parser/ascend_analysis/fwk_file_parser.py +0 -131
  362. mindspore/profiler/parser/ascend_analysis/msprof_timeline_parser.py +0 -104
  363. mindspore/profiler/parser/ascend_analysis/path_manager.py +0 -313
  364. mindspore/profiler/parser/ascend_analysis/profiler_info_parser.py +0 -123
  365. mindspore/profiler/parser/ascend_analysis/tlv_decoder.py +0 -86
  366. mindspore/profiler/parser/ascend_analysis/trace_event_manager.py +0 -75
  367. mindspore/profiler/parser/ascend_cluster_generator.py +0 -116
  368. mindspore/profiler/parser/ascend_communicate_generator.py +0 -314
  369. mindspore/profiler/parser/ascend_flops_generator.py +0 -116
  370. mindspore/profiler/parser/ascend_fpbp_generator.py +0 -82
  371. mindspore/profiler/parser/ascend_hccl_generator.py +0 -271
  372. mindspore/profiler/parser/ascend_integrate_generator.py +0 -42
  373. mindspore/profiler/parser/ascend_memory_generator.py +0 -185
  374. mindspore/profiler/parser/ascend_msprof_exporter.py +0 -282
  375. mindspore/profiler/parser/ascend_msprof_generator.py +0 -187
  376. mindspore/profiler/parser/ascend_op_generator.py +0 -334
  377. mindspore/profiler/parser/ascend_steptrace_generator.py +0 -94
  378. mindspore/profiler/parser/ascend_timeline_generator.py +0 -545
  379. mindspore/profiler/parser/base_timeline_generator.py +0 -483
  380. mindspore/profiler/parser/container.py +0 -229
  381. mindspore/profiler/parser/cpu_gpu_timeline_generator.py +0 -697
  382. mindspore/profiler/parser/flops_parser.py +0 -531
  383. mindspore/profiler/parser/framework_enum.py +0 -111
  384. mindspore/profiler/parser/framework_parser.py +0 -464
  385. mindspore/profiler/parser/framework_struct.py +0 -61
  386. mindspore/profiler/parser/gpu_analysis/__init__.py +0 -14
  387. mindspore/profiler/parser/gpu_analysis/function_event.py +0 -44
  388. mindspore/profiler/parser/gpu_analysis/fwk_file_parser.py +0 -89
  389. mindspore/profiler/parser/gpu_analysis/profiler_info_parser.py +0 -72
  390. mindspore/profiler/parser/hccl_parser.py +0 -573
  391. mindspore/profiler/parser/hwts_log_parser.py +0 -122
  392. mindspore/profiler/parser/integrator.py +0 -526
  393. mindspore/profiler/parser/memory_usage_parser.py +0 -277
  394. mindspore/profiler/parser/minddata_analyzer.py +0 -800
  395. mindspore/profiler/parser/minddata_parser.py +0 -186
  396. mindspore/profiler/parser/minddata_pipeline_parser.py +0 -299
  397. mindspore/profiler/parser/op_intermediate_parser.py +0 -149
  398. mindspore/profiler/parser/optime_parser.py +0 -250
  399. mindspore/profiler/parser/profiler_info.py +0 -213
  400. mindspore/profiler/parser/step_trace_parser.py +0 -666
  401. {mindspore-2.6.0.dist-info → mindspore-2.7.0rc1.dist-info}/WHEEL +0 -0
  402. {mindspore-2.6.0.dist-info → mindspore-2.7.0rc1.dist-info}/entry_points.txt +0 -0
  403. {mindspore-2.6.0.dist-info → mindspore-2.7.0rc1.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