mindspore 2.4.10__cp39-cp39-win_amd64.whl → 2.6.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.
- mindspore/.commit_id +1 -1
- mindspore/__init__.py +13 -6
- mindspore/_c_dataengine.cp39-win_amd64.pyd +0 -0
- mindspore/_c_expression.cp39-win_amd64.pyd +0 -0
- mindspore/_c_mindrecord.cp39-win_amd64.pyd +0 -0
- mindspore/_check_jit_forbidden_api.py +3 -0
- mindspore/_checkparam.py +3 -38
- mindspore/_deprecated/__init__.py +17 -0
- mindspore/_deprecated/jit.py +198 -0
- mindspore/_extends/builtin_operations.py +1 -1
- mindspore/_extends/parallel_compile/akg_compiler/gen_custom_op_files.py +1 -1
- mindspore/_extends/parse/__init__.py +6 -7
- mindspore/_extends/parse/compile_config.py +83 -0
- mindspore/_extends/parse/deprecated/__init__.py +0 -0
- mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +394 -0
- mindspore/_extends/parse/jit_fallback_modules/__init__.py +0 -0
- mindspore/_extends/parse/jit_fallback_modules/check_utils.py +123 -0
- mindspore/_extends/parse/jit_fallback_modules/third_party_modules.py +50 -0
- mindspore/_extends/parse/parser.py +46 -197
- mindspore/_extends/parse/resources.py +1 -5
- mindspore/_extends/parse/standard_method.py +217 -98
- mindspore/_extends/pijit/__init__.py +2 -2
- mindspore/_extends/pijit/pijit_func_white_list.py +17 -12
- mindspore/_extends/pijit/tensor_func_list.py +27 -0
- mindspore/_extends/utils.py +1 -1
- mindspore/amp.py +11 -5
- mindspore/avcodec-59.dll +0 -0
- mindspore/avdevice-59.dll +0 -0
- mindspore/avfilter-8.dll +0 -0
- mindspore/avformat-59.dll +0 -0
- mindspore/avutil-57.dll +0 -0
- mindspore/boost/__init__.py +2 -2
- mindspore/boost/base.py +3 -7
- mindspore/boost/boost_cell_wrapper.py +138 -43
- mindspore/common/__init__.py +6 -3
- mindspore/common/_grad_function.py +56 -0
- mindspore/common/_pijit_context.py +14 -5
- mindspore/common/_register_for_tensor.py +1 -2
- mindspore/common/_stub_tensor.py +30 -14
- mindspore/common/_tensor_cpp_method.py +17 -0
- mindspore/common/_tensor_docs.py +4760 -0
- mindspore/common/api.py +435 -371
- mindspore/common/auto_dynamic_shape.py +41 -44
- mindspore/common/dtype.py +39 -36
- mindspore/common/dump.py +9 -6
- mindspore/common/file_system.py +9 -1
- mindspore/common/generator.py +2 -0
- mindspore/common/hook_handle.py +6 -2
- mindspore/common/initializer.py +13 -10
- mindspore/common/jit_begin_end.py +94 -0
- mindspore/common/jit_config.py +6 -1
- mindspore/common/jit_context.py +76 -0
- mindspore/common/jit_trace.py +378 -0
- mindspore/common/lazy_inline.py +9 -3
- mindspore/common/mindir_util.py +10 -2
- mindspore/common/mutable.py +5 -4
- mindspore/common/parameter.py +135 -52
- mindspore/common/seed.py +2 -2
- mindspore/common/sparse_tensor.py +23 -17
- mindspore/common/tensor.py +951 -1992
- mindspore/communication/__init__.py +7 -5
- mindspore/communication/_comm_helper.py +52 -2
- mindspore/communication/comm_func.py +240 -181
- mindspore/communication/management.py +95 -26
- mindspore/context.py +314 -566
- mindspore/dataset/__init__.py +65 -37
- mindspore/dataset/audio/__init__.py +2 -8
- mindspore/dataset/audio/transforms.py +3 -17
- mindspore/dataset/callback/ds_callback.py +2 -1
- mindspore/dataset/core/config.py +87 -6
- mindspore/dataset/engine/cache_admin.py +3 -3
- mindspore/dataset/engine/cache_client.py +6 -5
- mindspore/dataset/engine/datasets.py +292 -267
- mindspore/dataset/engine/datasets_audio.py +22 -8
- mindspore/dataset/engine/datasets_standard_format.py +46 -27
- mindspore/dataset/engine/datasets_text.py +78 -48
- mindspore/dataset/engine/datasets_user_defined.py +182 -116
- mindspore/dataset/engine/datasets_vision.py +120 -44
- mindspore/dataset/engine/iterators.py +283 -63
- mindspore/dataset/engine/obs/obs_mindrecord_dataset.py +1 -1
- mindspore/dataset/engine/obs/util.py +8 -0
- mindspore/dataset/engine/queue.py +40 -0
- mindspore/dataset/engine/samplers.py +289 -43
- mindspore/dataset/engine/serializer_deserializer.py +3 -2
- mindspore/dataset/engine/validators.py +53 -11
- mindspore/dataset/text/__init__.py +7 -6
- mindspore/dataset/text/transforms.py +6 -5
- mindspore/dataset/text/utils.py +3 -3
- mindspore/dataset/transforms/__init__.py +0 -9
- mindspore/dataset/transforms/py_transforms_util.py +17 -0
- mindspore/dataset/transforms/transforms.py +31 -14
- mindspore/dataset/utils/browse_dataset.py +1 -1
- mindspore/dataset/vision/__init__.py +2 -9
- mindspore/dataset/vision/transforms.py +202 -158
- mindspore/dataset/vision/utils.py +7 -5
- mindspore/dataset/vision/validators.py +1 -2
- mindspore/device_context/__init__.py +21 -0
- mindspore/device_context/ascend/__init__.py +25 -0
- mindspore/device_context/ascend/device.py +72 -0
- mindspore/device_context/ascend/op_debug.py +153 -0
- mindspore/device_context/ascend/op_precision.py +193 -0
- mindspore/device_context/ascend/op_tuning.py +123 -0
- mindspore/{ops_generate/gen_constants.py → device_context/cpu/__init__.py} +6 -17
- mindspore/device_context/cpu/device.py +62 -0
- mindspore/device_context/cpu/op_tuning.py +43 -0
- mindspore/device_context/gpu/__init__.py +21 -0
- mindspore/device_context/gpu/device.py +70 -0
- mindspore/device_context/gpu/op_precision.py +67 -0
- mindspore/device_context/gpu/op_tuning.py +175 -0
- mindspore/device_manager.py +170 -0
- mindspore/experimental/es/embedding_service.py +35 -27
- mindspore/experimental/llm_boost/__init__.py +1 -0
- mindspore/experimental/llm_boost/ascend_native/__init__.py +22 -0
- mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +211 -0
- mindspore/experimental/llm_boost/ascend_native/llm_boost.py +52 -0
- mindspore/experimental/llm_boost/atb/boost_base.py +2 -3
- mindspore/experimental/llm_boost/atb/llama_boost.py +6 -1
- mindspore/experimental/llm_boost/register.py +1 -0
- mindspore/experimental/map_parameter.py +4 -4
- mindspore/experimental/optim/adadelta.py +6 -6
- mindspore/experimental/optim/adagrad.py +4 -4
- mindspore/experimental/optim/adam.py +7 -0
- mindspore/experimental/optim/adamax.py +4 -4
- mindspore/experimental/optim/adamw.py +4 -0
- mindspore/experimental/optim/asgd.py +1 -1
- mindspore/experimental/optim/lr_scheduler.py +73 -46
- mindspore/experimental/optim/radam.py +34 -31
- mindspore/experimental/optim/rprop.py +1 -1
- mindspore/experimental/optim/sgd.py +1 -1
- mindspore/hal/contiguous_tensors_handle.py +6 -10
- mindspore/hal/device.py +55 -53
- mindspore/hal/event.py +52 -52
- mindspore/hal/memory.py +157 -117
- mindspore/hal/stream.py +150 -109
- mindspore/include/api/context.h +0 -1
- mindspore/include/dataset/constants.h +7 -4
- mindspore/include/dataset/execute.h +2 -2
- mindspore/jpeg62.dll +0 -0
- mindspore/log.py +50 -0
- mindspore/mindrecord/__init__.py +21 -8
- mindspore/mindrecord/config.py +17 -316
- mindspore/mindrecord/filereader.py +1 -9
- mindspore/mindrecord/filewriter.py +5 -15
- mindspore/mindrecord/mindpage.py +1 -9
- mindspore/mindspore_backend_common.dll +0 -0
- mindspore/mindspore_backend_manager.dll +0 -0
- mindspore/mindspore_common.dll +0 -0
- mindspore/mindspore_core.dll +0 -0
- mindspore/mindspore_dump.dll +0 -0
- mindspore/mindspore_frontend.dll +0 -0
- mindspore/mindspore_memory_pool.dll +0 -0
- mindspore/mindspore_ms_backend.dll +0 -0
- mindspore/mindspore_ops.dll +0 -0
- mindspore/{mindspore_backend.dll → mindspore_ops_host.dll} +0 -0
- mindspore/mindspore_ops_kernel_common.dll +0 -0
- mindspore/mindspore_profiler.dll +0 -0
- mindspore/mindspore_pyboost.dll +0 -0
- mindspore/mindspore_pynative.dll +0 -0
- mindspore/mindspore_res_manager.dll +0 -0
- mindspore/mindspore_runtime_pipeline.dll +0 -0
- mindspore/mint/__init__.py +796 -759
- mindspore/mint/distributed/__init__.py +70 -4
- mindspore/mint/distributed/distributed.py +2679 -44
- mindspore/mint/linalg/__init__.py +8 -0
- mindspore/mint/nn/__init__.py +743 -22
- mindspore/mint/nn/functional.py +716 -23
- mindspore/mint/nn/layer/__init__.py +21 -4
- mindspore/mint/nn/layer/_functions.py +334 -0
- mindspore/mint/nn/layer/activation.py +276 -1
- mindspore/mint/nn/layer/basic.py +123 -0
- mindspore/mint/nn/layer/conv.py +921 -0
- mindspore/mint/nn/layer/normalization.py +223 -28
- mindspore/mint/nn/layer/padding.py +797 -0
- mindspore/mint/nn/layer/pooling.py +235 -0
- mindspore/mint/optim/__init__.py +3 -1
- mindspore/mint/optim/adam.py +223 -0
- mindspore/mint/optim/adamw.py +26 -19
- mindspore/mint/optim/sgd.py +171 -0
- mindspore/mint/special/__init__.py +2 -1
- mindspore/multiprocessing/__init__.py +5 -0
- mindspore/nn/__init__.py +4 -1
- mindspore/nn/cell.py +1370 -189
- mindspore/nn/dynamic_lr.py +2 -1
- mindspore/nn/layer/activation.py +29 -27
- mindspore/nn/layer/basic.py +51 -35
- mindspore/nn/layer/channel_shuffle.py +3 -3
- mindspore/nn/layer/container.py +1 -1
- mindspore/nn/layer/conv.py +22 -17
- mindspore/nn/layer/embedding.py +12 -11
- mindspore/nn/layer/normalization.py +56 -49
- mindspore/nn/layer/padding.py +4 -3
- mindspore/nn/layer/pooling.py +120 -42
- mindspore/nn/layer/rnn_cells.py +1 -1
- mindspore/nn/layer/rnns.py +2 -1
- mindspore/nn/layer/timedistributed.py +5 -5
- mindspore/nn/layer/transformer.py +59 -36
- mindspore/nn/learning_rate_schedule.py +8 -4
- mindspore/nn/loss/loss.py +58 -55
- mindspore/nn/optim/ada_grad.py +7 -5
- mindspore/nn/optim/adadelta.py +11 -9
- mindspore/nn/optim/adafactor.py +1 -1
- mindspore/nn/optim/adam.py +17 -13
- mindspore/nn/optim/adamax.py +8 -7
- mindspore/nn/optim/adasum.py +5 -5
- mindspore/nn/optim/asgd.py +1 -1
- mindspore/nn/optim/ftrl.py +11 -9
- mindspore/nn/optim/lamb.py +1 -1
- mindspore/nn/optim/lars.py +1 -4
- mindspore/nn/optim/lazyadam.py +12 -10
- mindspore/nn/optim/momentum.py +7 -6
- mindspore/nn/optim/optimizer.py +3 -3
- mindspore/nn/optim/proximal_ada_grad.py +12 -10
- mindspore/nn/optim/rmsprop.py +13 -12
- mindspore/nn/optim/rprop.py +11 -9
- mindspore/nn/optim/sgd.py +9 -6
- mindspore/nn/optim/tft_wrapper.py +5 -2
- mindspore/nn/optim/thor.py +2 -1
- mindspore/nn/probability/bijector/bijector.py +17 -11
- mindspore/nn/probability/bijector/gumbel_cdf.py +5 -5
- mindspore/nn/probability/bijector/invert.py +2 -2
- mindspore/nn/probability/bijector/scalar_affine.py +3 -3
- mindspore/nn/probability/bijector/softplus.py +3 -2
- mindspore/nn/probability/distribution/beta.py +3 -3
- mindspore/nn/probability/distribution/categorical.py +1 -1
- mindspore/nn/probability/distribution/cauchy.py +4 -2
- mindspore/nn/probability/distribution/exponential.py +6 -7
- mindspore/nn/probability/distribution/gamma.py +2 -2
- mindspore/nn/probability/distribution/gumbel.py +2 -2
- mindspore/nn/probability/distribution/half_normal.py +5 -3
- mindspore/nn/probability/distribution/logistic.py +5 -3
- mindspore/nn/probability/distribution/poisson.py +1 -1
- mindspore/nn/probability/distribution/uniform.py +5 -3
- mindspore/nn/reinforcement/_tensors_queue.py +1 -1
- mindspore/nn/reinforcement/tensor_array.py +1 -1
- mindspore/nn/utils/init.py +13 -11
- mindspore/nn/wrap/__init__.py +6 -6
- mindspore/nn/wrap/cell_wrapper.py +181 -122
- mindspore/nn/wrap/grad_reducer.py +45 -36
- mindspore/nn/wrap/loss_scale.py +6 -7
- mindspore/numpy/array_creations.py +63 -65
- mindspore/numpy/array_ops.py +149 -144
- mindspore/numpy/logic_ops.py +41 -42
- mindspore/numpy/math_ops.py +365 -363
- mindspore/numpy/utils.py +17 -18
- mindspore/numpy/utils_const.py +5 -6
- mindspore/opencv_core452.dll +0 -0
- mindspore/opencv_imgcodecs452.dll +0 -0
- mindspore/opencv_imgproc452.dll +0 -0
- mindspore/ops/__init__.py +5 -3
- mindspore/ops/_grad_experimental/grad_comm_ops.py +112 -16
- mindspore/ops/_grad_experimental/grad_debug_ops.py +14 -2
- mindspore/ops/_grad_experimental/grad_inner_ops.py +9 -0
- mindspore/ops/_grad_experimental/grad_math_ops.py +2 -1
- mindspore/ops/_grad_experimental/taylor_rule.py +29 -0
- mindspore/ops/_op_impl/cpu/__init__.py +1 -0
- mindspore/ops/_op_impl/cpu/raise_op.py +28 -0
- mindspore/ops/_register_for_op.py +0 -11
- mindspore/{ops_generate → ops/_utils}/arg_dtype_cast.py +123 -4
- mindspore/{ops_generate → ops/_utils}/arg_handler.py +3 -65
- mindspore/ops/_vmap/vmap_array_ops.py +27 -25
- mindspore/ops/_vmap/vmap_base.py +0 -2
- mindspore/ops/_vmap/vmap_grad_nn_ops.py +21 -14
- mindspore/ops/_vmap/vmap_math_ops.py +15 -16
- mindspore/ops/_vmap/vmap_nn_ops.py +29 -42
- mindspore/ops/auto_generate/__init__.py +4 -3
- mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +236 -46
- mindspore/ops/auto_generate/gen_extend_func.py +764 -124
- mindspore/ops/auto_generate/gen_ops_def.py +4018 -2264
- mindspore/ops/auto_generate/gen_ops_prim.py +15463 -5037
- mindspore/ops/auto_generate/pyboost_inner_prim.py +221 -87
- mindspore/ops/composite/__init__.py +2 -1
- mindspore/ops/composite/base.py +20 -25
- mindspore/ops/composite/math_ops.py +6 -16
- mindspore/ops/composite/multitype_ops/__init__.py +5 -2
- mindspore/ops/composite/multitype_ops/_compile_utils.py +228 -30
- mindspore/ops/composite/multitype_ops/_constexpr_utils.py +1 -2
- mindspore/ops/composite/multitype_ops/add_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/bitwise_and_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/bitwise_or_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/bitwise_xor_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/div_impl.py +6 -4
- mindspore/ops/composite/multitype_ops/equal_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/floordiv_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/getitem_impl.py +3 -2
- mindspore/ops/composite/multitype_ops/greater_equal_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/greater_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/in_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/invert_impl.py +50 -0
- mindspore/ops/composite/multitype_ops/left_shift_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/less_equal_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/less_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/logic_not_impl.py +3 -2
- mindspore/ops/composite/multitype_ops/logical_and_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/logical_or_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/mod_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/mul_impl.py +3 -2
- mindspore/ops/composite/multitype_ops/negative_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/not_equal_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/not_in_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/ones_like_impl.py +18 -0
- mindspore/ops/composite/multitype_ops/pow_impl.py +2 -30
- mindspore/ops/composite/multitype_ops/right_shift_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/setitem_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/sub_impl.py +2 -1
- mindspore/ops/function/__init__.py +40 -2
- mindspore/ops/function/_add_attr_func.py +58 -0
- mindspore/ops/function/array_func.py +2089 -2403
- mindspore/ops/function/clip_func.py +80 -23
- mindspore/ops/function/debug_func.py +57 -57
- mindspore/ops/function/grad/__init__.py +1 -0
- mindspore/ops/function/grad/grad_func.py +104 -71
- mindspore/ops/function/image_func.py +2 -2
- mindspore/ops/function/linalg_func.py +47 -78
- mindspore/ops/function/math_func.py +4501 -3802
- mindspore/ops/function/nn_func.py +1726 -620
- mindspore/ops/function/other_func.py +159 -1
- mindspore/ops/function/parameter_func.py +18 -84
- mindspore/ops/function/random_func.py +440 -387
- mindspore/ops/function/reshard_func.py +4 -70
- mindspore/ops/function/sparse_func.py +3 -3
- mindspore/ops/function/sparse_unary_func.py +6 -6
- mindspore/ops/function/spectral_func.py +25 -58
- mindspore/ops/function/vmap_func.py +24 -17
- mindspore/ops/functional.py +22 -7
- mindspore/ops/functional_overload.py +1440 -0
- mindspore/ops/op_info_register.py +32 -244
- mindspore/ops/operations/__init__.py +13 -7
- mindspore/ops/operations/_custom_ops_utils.py +247 -0
- mindspore/ops/operations/_embedding_cache_ops.py +4 -4
- mindspore/ops/operations/_grad_ops.py +2 -43
- mindspore/ops/operations/_infer_ops.py +2 -1
- mindspore/ops/operations/_inner_ops.py +43 -84
- mindspore/ops/operations/_ms_kernel.py +4 -10
- mindspore/ops/operations/_rl_inner_ops.py +1 -1
- mindspore/ops/operations/_scalar_ops.py +3 -2
- mindspore/ops/operations/_sequence_ops.py +1 -1
- mindspore/ops/operations/_tensor_array.py +1 -1
- mindspore/ops/operations/array_ops.py +81 -324
- mindspore/ops/operations/comm_ops.py +154 -108
- mindspore/ops/operations/custom_ops.py +232 -78
- mindspore/ops/operations/debug_ops.py +153 -59
- mindspore/ops/operations/inner_ops.py +7 -5
- mindspore/ops/operations/linalg_ops.py +1 -57
- mindspore/ops/operations/manually_defined/_inner.py +1 -1
- mindspore/ops/operations/manually_defined/ops_def.py +928 -180
- mindspore/ops/operations/math_ops.py +32 -234
- mindspore/ops/operations/nn_ops.py +210 -498
- mindspore/ops/operations/other_ops.py +62 -9
- mindspore/ops/operations/random_ops.py +13 -7
- mindspore/ops/operations/reshard_ops.py +1 -1
- mindspore/ops/operations/sparse_ops.py +2 -2
- mindspore/ops/primitive.py +66 -53
- mindspore/ops/tensor_method.py +1888 -0
- mindspore/ops_generate/__init__.py +0 -5
- mindspore/ops_generate/aclnn/__init__.py +0 -0
- mindspore/ops_generate/aclnn/aclnn_kernel_register_auto_cc_generator.py +135 -0
- mindspore/ops_generate/aclnn/gen_aclnn_implement.py +257 -0
- mindspore/ops_generate/api/__init__.py +0 -0
- mindspore/ops_generate/api/add_tensor_docs_generator.py +56 -0
- mindspore/ops_generate/api/cpp_create_prim_instance_helper_generator.py +105 -0
- mindspore/ops_generate/api/functional_map_cpp_generator.py +504 -0
- mindspore/ops_generate/api/functional_overload_py_generator.py +112 -0
- mindspore/ops_generate/api/functions_cc_generator.py +237 -0
- mindspore/ops_generate/api/gen_api.py +103 -0
- mindspore/ops_generate/api/op_api_proto.py +235 -0
- mindspore/ops_generate/api/tensor_func_reg_cpp_generator.py +461 -0
- mindspore/ops_generate/common/__init__.py +0 -0
- mindspore/ops_generate/common/base_generator.py +11 -0
- mindspore/ops_generate/common/gen_constants.py +91 -0
- mindspore/ops_generate/common/gen_utils.py +348 -0
- mindspore/ops_generate/common/op_proto.py +473 -0
- mindspore/ops_generate/common/template.py +523 -0
- mindspore/ops_generate/gen_ops.py +22 -1069
- mindspore/ops_generate/op_def/__init__.py +0 -0
- mindspore/ops_generate/op_def/gen_op_def.py +90 -0
- mindspore/ops_generate/op_def/lite_ops_cpp_generator.py +191 -0
- mindspore/ops_generate/op_def/ops_def_cc_generator.py +299 -0
- mindspore/ops_generate/op_def/ops_def_h_generator.py +74 -0
- mindspore/ops_generate/op_def/ops_name_h_generator.py +83 -0
- mindspore/ops_generate/op_def/ops_primitive_h_generator.py +125 -0
- mindspore/ops_generate/op_def_py/__init__.py +0 -0
- mindspore/ops_generate/op_def_py/gen_op_def_py.py +47 -0
- mindspore/ops_generate/op_def_py/op_def_py_generator.py +132 -0
- mindspore/ops_generate/op_def_py/op_prim_py_generator.py +489 -0
- mindspore/ops_generate/pyboost/__init__.py +0 -0
- mindspore/ops_generate/pyboost/auto_grad_impl_cc_generator.py +139 -0
- mindspore/ops_generate/pyboost/auto_grad_reg_cc_generator.py +93 -0
- mindspore/ops_generate/pyboost/gen_pyboost_func.py +175 -0
- mindspore/ops_generate/pyboost/op_template_parser.py +517 -0
- mindspore/ops_generate/pyboost/pyboost_functions_cpp_generator.py +407 -0
- mindspore/ops_generate/pyboost/pyboost_functions_h_generator.py +100 -0
- mindspore/ops_generate/pyboost/pyboost_functions_py_generator.py +148 -0
- mindspore/ops_generate/pyboost/pyboost_grad_function_cpp_generator.py +155 -0
- mindspore/ops_generate/pyboost/pyboost_inner_prim_generator.py +132 -0
- mindspore/ops_generate/pyboost/pyboost_native_grad_functions_generator.py +272 -0
- mindspore/ops_generate/pyboost/pyboost_op_cpp_code_generator.py +938 -0
- mindspore/ops_generate/pyboost/pyboost_overload_functions_cpp_generator.py +357 -0
- mindspore/ops_generate/{pyboost_utils.py → pyboost/pyboost_utils.py} +179 -36
- mindspore/ops_generate/resources/__init__.py +0 -0
- mindspore/ops_generate/resources/resource_list.py +30 -0
- mindspore/ops_generate/resources/resource_loader.py +36 -0
- mindspore/ops_generate/resources/resource_manager.py +64 -0
- mindspore/ops_generate/resources/yaml_loader.py +88 -0
- mindspore/ops_generate/tensor_py_cc_generator.py +122 -0
- mindspore/parallel/__init__.py +7 -3
- mindspore/parallel/_auto_parallel_context.py +152 -34
- mindspore/parallel/_cell_wrapper.py +130 -15
- mindspore/parallel/_parallel_serialization.py +107 -5
- mindspore/parallel/_ps_context.py +1 -1
- mindspore/parallel/_recovery_context.py +7 -2
- mindspore/parallel/_tensor.py +142 -18
- mindspore/parallel/_utils.py +199 -23
- mindspore/parallel/algo_parameter_config.py +4 -4
- mindspore/parallel/auto_parallel.py +732 -0
- mindspore/parallel/checkpoint_convert.py +159 -0
- mindspore/parallel/checkpoint_transform.py +698 -35
- mindspore/parallel/cluster/process_entity/_api.py +276 -50
- mindspore/parallel/cluster/process_entity/_utils.py +41 -6
- mindspore/parallel/cluster/run.py +21 -4
- mindspore/parallel/function/__init__.py +24 -0
- mindspore/parallel/function/reshard_func.py +259 -0
- mindspore/parallel/nn/__init__.py +25 -0
- mindspore/parallel/nn/parallel_cell_wrapper.py +263 -0
- mindspore/parallel/nn/parallel_grad_reducer.py +169 -0
- mindspore/parallel/parameter_broadcast.py +25 -14
- mindspore/parallel/shard.py +137 -58
- mindspore/parallel/transform_safetensors.py +363 -305
- mindspore/profiler/__init__.py +22 -5
- mindspore/profiler/analysis/__init__.py +0 -0
- mindspore/profiler/analysis/parser/__init__.py +0 -0
- mindspore/profiler/analysis/parser/ascend_cann_parser.py +170 -0
- mindspore/profiler/analysis/parser/base_parser.py +158 -0
- mindspore/profiler/analysis/parser/framework_cann_relation_parser.py +45 -0
- mindspore/profiler/analysis/parser/ms_framework_parser.py +142 -0
- mindspore/profiler/analysis/parser/ms_minddata_parser.py +145 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/__init__.py +0 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +264 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/base_timeline_assembler.py +40 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +106 -0
- mindspore/profiler/analysis/parser/timeline_creator/__init__.py +0 -0
- mindspore/profiler/analysis/parser/timeline_creator/base_timeline_creator.py +44 -0
- mindspore/profiler/analysis/parser/timeline_creator/cpu_op_timeline_creator.py +90 -0
- mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +76 -0
- mindspore/profiler/analysis/parser/timeline_creator/msprof_timeline_creator.py +103 -0
- mindspore/profiler/analysis/parser/timeline_creator/scope_layer_timeline_creator.py +134 -0
- mindspore/profiler/analysis/parser/timeline_event/__init__.py +0 -0
- mindspore/profiler/analysis/parser/timeline_event/base_event.py +233 -0
- mindspore/profiler/analysis/parser/timeline_event/cpu_op_event.py +47 -0
- mindspore/profiler/analysis/parser/timeline_event/flow_event.py +36 -0
- mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +415 -0
- mindspore/profiler/analysis/parser/timeline_event/msprof_event.py +73 -0
- mindspore/profiler/analysis/parser/timeline_event/scope_layer_event.py +53 -0
- mindspore/profiler/analysis/parser/timeline_event/timeline_event_pool.py +146 -0
- mindspore/profiler/analysis/task_manager.py +131 -0
- mindspore/profiler/analysis/time_converter.py +84 -0
- mindspore/profiler/analysis/viewer/__init__.py +0 -0
- mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +372 -0
- mindspore/profiler/analysis/viewer/ascend_integrate_viewer.py +87 -0
- mindspore/profiler/analysis/viewer/ascend_kernel_details_viewer.py +250 -0
- mindspore/profiler/analysis/viewer/ascend_memory_viewer.py +320 -0
- mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +327 -0
- mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +376 -0
- mindspore/profiler/analysis/viewer/ascend_timeline_viewer.py +58 -0
- mindspore/profiler/analysis/viewer/base_viewer.py +26 -0
- mindspore/profiler/analysis/viewer/ms_dataset_viewer.py +96 -0
- mindspore/profiler/analysis/viewer/ms_minddata_viewer.py +581 -0
- mindspore/profiler/analysis/work_flow.py +73 -0
- mindspore/profiler/common/ascend_msprof_exporter.py +139 -0
- mindspore/profiler/common/command_executor.py +90 -0
- mindspore/profiler/common/constant.py +186 -3
- mindspore/profiler/common/file_manager.py +208 -0
- mindspore/profiler/common/log.py +130 -0
- mindspore/profiler/common/msprof_cmd_tool.py +221 -0
- mindspore/profiler/common/path_manager.py +395 -0
- mindspore/profiler/common/process_bar.py +168 -0
- mindspore/profiler/common/process_pool.py +9 -3
- mindspore/profiler/common/profiler_context.py +500 -0
- mindspore/profiler/common/profiler_info.py +304 -0
- mindspore/profiler/common/profiler_meta_data.py +74 -0
- mindspore/profiler/common/profiler_output_path.py +284 -0
- mindspore/profiler/common/profiler_parameters.py +251 -0
- mindspore/profiler/common/profiler_path_manager.py +179 -0
- mindspore/profiler/common/record_function.py +76 -0
- mindspore/profiler/common/tlv_decoder.py +76 -0
- mindspore/profiler/common/util.py +75 -2
- mindspore/profiler/dynamic_profiler.py +341 -75
- mindspore/profiler/envprofiler.py +163 -0
- mindspore/profiler/experimental_config.py +197 -0
- mindspore/profiler/mstx.py +242 -0
- mindspore/profiler/platform/__init__.py +21 -0
- mindspore/profiler/platform/base_profiler.py +40 -0
- mindspore/profiler/platform/cpu_profiler.py +124 -0
- mindspore/profiler/platform/gpu_profiler.py +74 -0
- mindspore/profiler/platform/npu_profiler.py +335 -0
- mindspore/profiler/profiler.py +1073 -90
- mindspore/profiler/profiler_action_controller.py +187 -0
- mindspore/profiler/profiler_interface.py +118 -0
- mindspore/profiler/schedule.py +243 -0
- mindspore/rewrite/api/node.py +15 -13
- mindspore/rewrite/api/symbol_tree.py +2 -3
- mindspore/run_check/_check_version.py +27 -20
- mindspore/run_check/run_check.py +1 -1
- mindspore/runtime/__init__.py +37 -0
- mindspore/runtime/device.py +27 -0
- mindspore/runtime/event.py +209 -0
- mindspore/runtime/executor.py +177 -0
- mindspore/runtime/memory.py +409 -0
- mindspore/runtime/stream.py +460 -0
- mindspore/runtime/thread_bind_core.py +401 -0
- mindspore/safeguard/rewrite_obfuscation.py +12 -9
- mindspore/swresample-4.dll +0 -0
- mindspore/swscale-6.dll +0 -0
- mindspore/tinyxml2.dll +0 -0
- mindspore/train/__init__.py +8 -8
- mindspore/train/_utils.py +88 -25
- mindspore/train/amp.py +9 -5
- mindspore/train/callback/__init__.py +2 -2
- mindspore/train/callback/_callback.py +2 -16
- mindspore/train/callback/_checkpoint.py +53 -55
- mindspore/train/callback/_cluster_monitor.py +14 -18
- mindspore/train/callback/_early_stop.py +1 -1
- mindspore/train/callback/_flops_collector.py +103 -68
- mindspore/train/callback/_history.py +8 -5
- mindspore/train/callback/_lambda_callback.py +2 -2
- mindspore/train/callback/_landscape.py +0 -3
- mindspore/train/callback/_loss_monitor.py +2 -1
- mindspore/train/callback/_on_request_exit.py +6 -5
- mindspore/train/callback/_reduce_lr_on_plateau.py +11 -6
- mindspore/train/callback/_summary_collector.py +52 -19
- mindspore/train/callback/_time_monitor.py +2 -1
- mindspore/train/callback/{_tft_register.py → _train_fault_tolerance.py} +204 -107
- mindspore/train/data_sink.py +25 -2
- mindspore/train/dataset_helper.py +15 -16
- mindspore/train/loss_scale_manager.py +8 -7
- mindspore/train/metrics/accuracy.py +3 -3
- mindspore/train/metrics/confusion_matrix.py +9 -9
- mindspore/train/metrics/error.py +3 -3
- mindspore/train/metrics/hausdorff_distance.py +4 -4
- mindspore/train/metrics/mean_surface_distance.py +3 -3
- mindspore/train/metrics/metric.py +0 -12
- mindspore/train/metrics/occlusion_sensitivity.py +4 -2
- mindspore/train/metrics/precision.py +11 -10
- mindspore/train/metrics/recall.py +9 -9
- mindspore/train/metrics/root_mean_square_surface_distance.py +2 -2
- mindspore/train/mind_ir_pb2.py +174 -46
- mindspore/train/model.py +184 -113
- mindspore/train/serialization.py +622 -978
- mindspore/train/summary/_summary_adapter.py +2 -2
- mindspore/train/summary/summary_record.py +2 -3
- mindspore/train/train_thor/model_thor.py +1 -1
- mindspore/turbojpeg.dll +0 -0
- mindspore/utils/__init__.py +6 -3
- mindspore/utils/dryrun.py +140 -0
- mindspore/utils/hooks.py +81 -0
- mindspore/utils/runtime_execution_order_check.py +550 -0
- mindspore/utils/utils.py +138 -4
- mindspore/version.py +1 -1
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/METADATA +3 -3
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/RECORD +562 -393
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/entry_points.txt +1 -1
- mindspore/_install_custom.py +0 -43
- mindspore/common/_register_for_adapter.py +0 -74
- mindspore/common/_tensor_overload.py +0 -139
- mindspore/mindspore_np_dtype.dll +0 -0
- mindspore/ops/auto_generate/gen_arg_dtype_cast.py +0 -252
- mindspore/ops/auto_generate/gen_arg_handler.py +0 -197
- mindspore/ops/operations/_opaque_predicate_registry.py +0 -41
- mindspore/ops_generate/gen_aclnn_implement.py +0 -263
- mindspore/ops_generate/gen_ops_inner_prim.py +0 -131
- mindspore/ops_generate/gen_pyboost_func.py +0 -1052
- mindspore/ops_generate/gen_utils.py +0 -209
- mindspore/ops_generate/op_proto.py +0 -145
- mindspore/ops_generate/template.py +0 -261
- mindspore/profiler/envprofiling.py +0 -254
- mindspore/profiler/profiling.py +0 -1926
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/WHEEL +0 -0
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Copyright 2024 Huawei Technologies Co., Ltd
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ============================================================================
|
|
15
|
+
"""mind data parser"""
|
|
16
|
+
import os
|
|
17
|
+
from typing import Dict, Tuple, Optional, Any, List
|
|
18
|
+
from mindspore import log as logger
|
|
19
|
+
from mindspore.profiler.analysis.parser.base_parser import BaseParser
|
|
20
|
+
from mindspore.profiler.common.file_manager import FileManager
|
|
21
|
+
from mindspore.profiler.common.constant import ProfilerActivity
|
|
22
|
+
from mindspore.profiler.common.exceptions.exceptions import (
|
|
23
|
+
ProfilerPathErrorException,
|
|
24
|
+
ProfilerRawFileException
|
|
25
|
+
)
|
|
26
|
+
from mindspore.profiler.common.log import ProfilerLogger
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class MindDataParser(BaseParser):
|
|
30
|
+
"""
|
|
31
|
+
Parser for MindData profiling information.
|
|
32
|
+
"""
|
|
33
|
+
_FILE_NAMES = {
|
|
34
|
+
'pipeline': 'pipeline_profiling_{}.json',
|
|
35
|
+
'cpu_utilization': 'minddata_cpu_utilization_{}.json',
|
|
36
|
+
'device_queue': 'device_queue_profiling_{}.txt',
|
|
37
|
+
'device_iterator': 'dataset_iterator_profiling_{}.txt'
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
def __init__(self, next_parser: Optional[BaseParser] = None, **kwargs):
|
|
41
|
+
super().__init__(next_parser)
|
|
42
|
+
self._device_id = kwargs.get("rank_id") if (ProfilerActivity.NPU.value in
|
|
43
|
+
kwargs.get("activities")) else kwargs.get("device_id")
|
|
44
|
+
self._output_path = kwargs.get("framework_path")
|
|
45
|
+
self._ascend_ms_dir = kwargs.get("ascend_ms_dir")
|
|
46
|
+
ProfilerLogger.init(self._ascend_ms_dir)
|
|
47
|
+
self._logger = ProfilerLogger.get_instance()
|
|
48
|
+
self._file_paths = self._setup_file_paths()
|
|
49
|
+
|
|
50
|
+
def _setup_file_paths(self) -> Dict[str, str]:
|
|
51
|
+
return {
|
|
52
|
+
key: os.path.join(self._output_path, file_name.format(self._device_id))
|
|
53
|
+
for key, file_name in self._FILE_NAMES.items()
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
def _parse(self, data=None) -> Dict[str, Any]:
|
|
57
|
+
if data is None:
|
|
58
|
+
data = {}
|
|
59
|
+
if not os.path.exists(self._file_paths['pipeline']):
|
|
60
|
+
logger.info(
|
|
61
|
+
"pipeline profiling file %s does not exist. Please check whether minddata profiling data should exist.",
|
|
62
|
+
self._file_paths['pipeline'])
|
|
63
|
+
return data
|
|
64
|
+
op_id_info, sample_interval = self._parse_pipeline_info_dict()
|
|
65
|
+
cpu_util_info = self._parse_cpu_util_info()
|
|
66
|
+
device_trace_info = self._parse_device_trace()
|
|
67
|
+
self._logger.info("MindDataParser parse done")
|
|
68
|
+
data.update({
|
|
69
|
+
"pipeline_info": (op_id_info, sample_interval),
|
|
70
|
+
"cpu_util_info": cpu_util_info,
|
|
71
|
+
"device_trace_info": device_trace_info,
|
|
72
|
+
"device_queue_file_found": self._device_queue_file_found
|
|
73
|
+
})
|
|
74
|
+
return data
|
|
75
|
+
|
|
76
|
+
def _parse_pipeline_info_dict(self) -> Tuple[Dict[str, Any], float]:
|
|
77
|
+
"""
|
|
78
|
+
Parse the pipeline information into a dictionary.
|
|
79
|
+
Returns:
|
|
80
|
+
Tuple[Dict[str, Any], float]: A tuple containing the parsed op_info dictionary
|
|
81
|
+
and sampling interval.
|
|
82
|
+
Raises:
|
|
83
|
+
ProfilerRawFileException: If the format of the pipeline raw file is incorrect.
|
|
84
|
+
"""
|
|
85
|
+
pipeline_info = FileManager.read_json_file(self._file_paths['pipeline'])
|
|
86
|
+
if not pipeline_info:
|
|
87
|
+
raise ProfilerRawFileException('The minddata pipeline file is empty.')
|
|
88
|
+
|
|
89
|
+
sample_interval = pipeline_info.get('sampling_interval')
|
|
90
|
+
op_info = pipeline_info.get('op_info')
|
|
91
|
+
|
|
92
|
+
if sample_interval is None or not op_info:
|
|
93
|
+
raise ProfilerRawFileException('The format of minddata pipeline raw file is wrong.')
|
|
94
|
+
|
|
95
|
+
dict_op_id_info = {
|
|
96
|
+
item['op_id']: item for item in op_info if item
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if len(dict_op_id_info) != len(op_info):
|
|
100
|
+
raise ProfilerRawFileException('The content of minddata pipeline raw file is wrong.')
|
|
101
|
+
|
|
102
|
+
return dict_op_id_info, sample_interval
|
|
103
|
+
|
|
104
|
+
def _parse_cpu_util_info(self) -> Dict[str, Any]:
|
|
105
|
+
try:
|
|
106
|
+
cpu_util_info = FileManager.read_json_file(self._file_paths['cpu_utilization'])
|
|
107
|
+
if not cpu_util_info:
|
|
108
|
+
msg = f'The MindData CPU utilization file {self._file_paths["cpu_utilization"]} is empty.'
|
|
109
|
+
raise RuntimeError(msg)
|
|
110
|
+
except RuntimeError as err:
|
|
111
|
+
cpu_util_info = {}
|
|
112
|
+
logger.warning(f'Failed to read the MindData CPU utilization data. ERROR:{err}')
|
|
113
|
+
return cpu_util_info
|
|
114
|
+
|
|
115
|
+
def _parse_device_trace(self) -> List[Any]:
|
|
116
|
+
"""parse the device trace data"""
|
|
117
|
+
try:
|
|
118
|
+
self._device_trace_path, self._device_queue_file_found = self._setup_device_trace()
|
|
119
|
+
device_trace = FileManager.read_txt_file(self._device_trace_path)
|
|
120
|
+
if not device_trace:
|
|
121
|
+
msg = f"The MindData trace profiling file {self._device_trace_path} is empty."
|
|
122
|
+
raise RuntimeError(msg)
|
|
123
|
+
except RuntimeError as err:
|
|
124
|
+
device_trace = []
|
|
125
|
+
logger.warning(f'Failed to read the MindData device trace data. ERROR:{err}')
|
|
126
|
+
return device_trace
|
|
127
|
+
|
|
128
|
+
def _setup_device_trace(self) -> Tuple[str, bool]:
|
|
129
|
+
"""
|
|
130
|
+
Set up the device trace file path.
|
|
131
|
+
Returns:
|
|
132
|
+
Tuple[str, bool]: A tuple containing the device trace file path and a boolean
|
|
133
|
+
indicating whether the device queue file was found.
|
|
134
|
+
Raises:
|
|
135
|
+
ProfilerPathErrorException: If no device trace file is found.
|
|
136
|
+
"""
|
|
137
|
+
queue_path = self._file_paths['device_queue']
|
|
138
|
+
iterator_path = self._file_paths['device_iterator']
|
|
139
|
+
|
|
140
|
+
if os.path.exists(queue_path):
|
|
141
|
+
return queue_path, True
|
|
142
|
+
if os.path.exists(iterator_path):
|
|
143
|
+
return iterator_path, False
|
|
144
|
+
|
|
145
|
+
raise ProfilerPathErrorException('A MindData device trace profiling file cannot be found.')
|
|
File without changes
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
# Copyright 2024 Huawei Technologies Co., Ltd
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ============================================================================
|
|
15
|
+
"""Timeline assembler for Ascend device."""
|
|
16
|
+
from typing import List, Dict, Any
|
|
17
|
+
from decimal import Decimal
|
|
18
|
+
from collections import defaultdict
|
|
19
|
+
|
|
20
|
+
from mindspore import context
|
|
21
|
+
from mindspore import log as logger
|
|
22
|
+
from mindspore.profiler.common.constant import EventConstant, TimelineLayerName, ProfilerLevel, JitLevel
|
|
23
|
+
from mindspore.profiler.analysis.parser.timeline_event.base_event import BaseEvent
|
|
24
|
+
from mindspore.profiler.analysis.parser.timeline_event.timeline_event_pool import TimelineEventPool
|
|
25
|
+
from mindspore.profiler.analysis.parser.timeline_event.flow_event import FlowStartEvent, FlowEndEvent
|
|
26
|
+
from mindspore.profiler.analysis.parser.timeline_creator.fwk_timeline_creator import FwkTimelineCreator
|
|
27
|
+
from mindspore.profiler.analysis.parser.timeline_creator.cpu_op_timeline_creator import CpuOpTimelineCreator
|
|
28
|
+
from mindspore.profiler.analysis.parser.timeline_creator.msprof_timeline_creator import MsprofTimelineCreator
|
|
29
|
+
from mindspore.profiler.analysis.parser.timeline_assembly_factory.base_timeline_assembler import BaseTimelineAssembler
|
|
30
|
+
from mindspore.profiler.analysis.parser.timeline_creator.scope_layer_timeline_creator import (
|
|
31
|
+
ScopeLayerTimelineCreator,
|
|
32
|
+
is_scope_data
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class AscendTimelineAssembler(BaseTimelineAssembler):
|
|
37
|
+
"""Assembler for Ascend device timeline."""
|
|
38
|
+
|
|
39
|
+
def __init__(self, **kwargs):
|
|
40
|
+
super().__init__()
|
|
41
|
+
self._profiler_level = kwargs.get("profiler_level")
|
|
42
|
+
self._context_mode = kwargs.get("context_mode")
|
|
43
|
+
self._jit_level = kwargs.get("jit_level")
|
|
44
|
+
self._init_creators()
|
|
45
|
+
|
|
46
|
+
def _init_creators(self):
|
|
47
|
+
"""Initialize trace creators."""
|
|
48
|
+
self._fwk_creator = FwkTimelineCreator()
|
|
49
|
+
self._cpu_op_creator = CpuOpTimelineCreator()
|
|
50
|
+
self._msprof_creator = MsprofTimelineCreator()
|
|
51
|
+
self._scope_layer_creator = ScopeLayerTimelineCreator()
|
|
52
|
+
|
|
53
|
+
def assemble(self, data: Dict[str, Any]) -> None:
|
|
54
|
+
"""Assemble Ascend timeline from input data."""
|
|
55
|
+
self._assemble_basic_events(data)
|
|
56
|
+
self._assemble_flow_events()
|
|
57
|
+
self._assemble_scope_layer_events()
|
|
58
|
+
|
|
59
|
+
def _assemble_basic_events(self, data: Dict[str, Any]) -> None:
|
|
60
|
+
"""Create and add basic events from input data."""
|
|
61
|
+
self._assemble_events(self._fwk_creator, data.get("mindspore_op_list", []))
|
|
62
|
+
self._assemble_events(self._cpu_op_creator, data.get("cpu_op_lines", []))
|
|
63
|
+
self._assemble_events(self._msprof_creator, data.get("msprof_timeline", []))
|
|
64
|
+
|
|
65
|
+
def _assemble_scope_layer_events(self) -> None:
|
|
66
|
+
"""Create scope layer events."""
|
|
67
|
+
scope_data = []
|
|
68
|
+
|
|
69
|
+
# Get CPU OP scope data if available
|
|
70
|
+
cpu_op_pool = self.trace_view_container.get_pool_by_name(TimelineLayerName.CPU_OP.value)
|
|
71
|
+
if cpu_op_pool:
|
|
72
|
+
for event in cpu_op_pool.get_complete_events():
|
|
73
|
+
if is_scope_data(event):
|
|
74
|
+
scope_data.append(event)
|
|
75
|
+
|
|
76
|
+
# Get Ascend Hardware scope data
|
|
77
|
+
hardware_pool = self.trace_view_container.get_pool_by_name(TimelineLayerName.ASCEND_HARDWARE.value)
|
|
78
|
+
if hardware_pool:
|
|
79
|
+
for event in hardware_pool.get_complete_events():
|
|
80
|
+
if is_scope_data(event) or is_scope_data(event.parent):
|
|
81
|
+
scope_data.append(event)
|
|
82
|
+
|
|
83
|
+
if scope_data:
|
|
84
|
+
self._assemble_events(self._scope_layer_creator, scope_data)
|
|
85
|
+
|
|
86
|
+
def _assemble_events(self, creator, data) -> None:
|
|
87
|
+
"""Create events using creator and add to container."""
|
|
88
|
+
creator.create(data)
|
|
89
|
+
for pool in creator.get_event_pools().values():
|
|
90
|
+
self.trace_view_container.add_event_pool(pool)
|
|
91
|
+
self.trace_view_container.add_trace_events(creator.get_chrome_trace_data())
|
|
92
|
+
|
|
93
|
+
def _assemble_flow_events(self) -> None:
|
|
94
|
+
"""Create and add flow events between timelines."""
|
|
95
|
+
fwk_pool = self.trace_view_container.get_pool_by_name(TimelineLayerName.MINDSPORE.value)
|
|
96
|
+
if not fwk_pool:
|
|
97
|
+
return
|
|
98
|
+
|
|
99
|
+
# Create and add fwk to fwk flows
|
|
100
|
+
fwk_to_fwk_flows = self._create_fwk_to_fwk_flow(fwk_pool)
|
|
101
|
+
self.trace_view_container.add_trace_events(fwk_to_fwk_flows)
|
|
102
|
+
|
|
103
|
+
# Create and add fwk to mstx flows
|
|
104
|
+
for mstx_name in TimelineLayerName.MSTX.value:
|
|
105
|
+
mstx_pool = self.trace_view_container.get_pool_by_name(mstx_name)
|
|
106
|
+
if mstx_pool:
|
|
107
|
+
fwk_to_mstx_flows = self._create_fwk_to_mstx_flow(mstx_pool, fwk_pool)
|
|
108
|
+
self.trace_view_container.add_trace_events(fwk_to_mstx_flows)
|
|
109
|
+
|
|
110
|
+
if self._profiler_level == ProfilerLevel.LevelNone.value:
|
|
111
|
+
return
|
|
112
|
+
|
|
113
|
+
hardware_pool = self.trace_view_container.get_pool_by_name(TimelineLayerName.ASCEND_HARDWARE.value)
|
|
114
|
+
cann_pool = self.trace_view_container.get_pool_by_name(TimelineLayerName.CANN.value)
|
|
115
|
+
if not hardware_pool or not cann_pool:
|
|
116
|
+
return
|
|
117
|
+
|
|
118
|
+
# Collect kernel launch events
|
|
119
|
+
for event in fwk_pool.get_complete_events():
|
|
120
|
+
if any(keyword in event.name for keyword in EventConstant.KERNEL_LAUNCH_KEYWORDS):
|
|
121
|
+
self.trace_view_container.kernel_launch_op_event[event.tid].append(event)
|
|
122
|
+
|
|
123
|
+
# Create and add fwk to hardware flows
|
|
124
|
+
fwk_to_hardware_flows = self._create_fwk_to_hardware_flow()
|
|
125
|
+
self.trace_view_container.add_trace_events(fwk_to_hardware_flows)
|
|
126
|
+
|
|
127
|
+
def _create_fwk_to_hardware_flow(self) -> List[Dict]:
|
|
128
|
+
"""Create flow events between framework and hardware events."""
|
|
129
|
+
acl_to_npu_flow_dict = self._msprof_creator.get_acl_to_npu_flow_dict()
|
|
130
|
+
fwk_launch_op_list = self.trace_view_container.kernel_launch_op_event
|
|
131
|
+
# The graph mode O2 does not have the flow from CANN to hardware at each step
|
|
132
|
+
if not acl_to_npu_flow_dict and self._jit_level != JitLevel.GRAPH_LEVEL:
|
|
133
|
+
logger.error("Cannot find connection between CANN layer and Ascend Hardware layer.")
|
|
134
|
+
return []
|
|
135
|
+
# The graph model O2 does not have "KernelLaunch" or "LaunchTask" keywords
|
|
136
|
+
if not fwk_launch_op_list and self._jit_level != JitLevel.GRAPH_LEVEL:
|
|
137
|
+
logger.warning("Cannot find launch op in MindSpore framework.")
|
|
138
|
+
return []
|
|
139
|
+
if (set(acl_to_npu_flow_dict.keys()) != set(fwk_launch_op_list.keys()) and
|
|
140
|
+
self._context_mode == context.PYNATIVE_MODE):
|
|
141
|
+
logger.warning(
|
|
142
|
+
"The number of launch op threads in MindSpore framework is inconsistent with the CANN layer.")
|
|
143
|
+
|
|
144
|
+
fwk_to_npu_flows = []
|
|
145
|
+
for tid, cann_to_npu_events in acl_to_npu_flow_dict.items():
|
|
146
|
+
fwk_launch_op_sorted = sorted(fwk_launch_op_list.get(tid, []), key=lambda x: x.ts)
|
|
147
|
+
acl_to_npu_events_sorted = sorted(cann_to_npu_events.items(), key=lambda x: Decimal(x[0]))
|
|
148
|
+
|
|
149
|
+
index = 0
|
|
150
|
+
for acl_start_time, device_data_list in acl_to_npu_events_sorted:
|
|
151
|
+
acl_start_time = Decimal(acl_start_time)
|
|
152
|
+
while index < len(fwk_launch_op_sorted):
|
|
153
|
+
fwk_launch_op = fwk_launch_op_sorted[index]
|
|
154
|
+
if fwk_launch_op.ts > acl_start_time:
|
|
155
|
+
break
|
|
156
|
+
if acl_start_time <= fwk_launch_op.te:
|
|
157
|
+
for hardware_event in device_data_list:
|
|
158
|
+
hardware_event.parent = fwk_launch_op
|
|
159
|
+
fwk_launch_op.children.append(hardware_event)
|
|
160
|
+
self.trace_view_container.hardware_op_event[hardware_event.tid].append(hardware_event)
|
|
161
|
+
fwk_to_npu_flows.extend(
|
|
162
|
+
self._create_flow_events(
|
|
163
|
+
fwk_launch_op,
|
|
164
|
+
hardware_event,
|
|
165
|
+
EventConstant.MINDSPORE_NPU_FLOW_NAME,
|
|
166
|
+
EventConstant.MINDSPORE_NPU_FLOW_CAT
|
|
167
|
+
)
|
|
168
|
+
)
|
|
169
|
+
break
|
|
170
|
+
index += 1
|
|
171
|
+
|
|
172
|
+
return fwk_to_npu_flows
|
|
173
|
+
|
|
174
|
+
def _create_fwk_to_fwk_flow(self, framework_pool: TimelineEventPool) -> List[Dict]:
|
|
175
|
+
"""Create flow events between framework events."""
|
|
176
|
+
fwk_to_fwk_flows = []
|
|
177
|
+
for flow_id, flow_pair in framework_pool.get_start_to_end_flow_pairs().items():
|
|
178
|
+
if len(flow_pair["start"]) != 1 or len(flow_pair["end"]) != 1:
|
|
179
|
+
logger.info(
|
|
180
|
+
f"Mindspore op flow expected exactly one start and one end event with flow id {flow_id}, "
|
|
181
|
+
f"but got {len(flow_pair['start'])} start and {len(flow_pair['end'])} end events"
|
|
182
|
+
)
|
|
183
|
+
continue
|
|
184
|
+
|
|
185
|
+
start_event = flow_pair["start"][0]
|
|
186
|
+
end_event = flow_pair["end"][0]
|
|
187
|
+
end_event.parent = start_event
|
|
188
|
+
start_event.children.append(end_event)
|
|
189
|
+
|
|
190
|
+
fwk_to_fwk_flows.extend(
|
|
191
|
+
self._create_flow_events(
|
|
192
|
+
start_event,
|
|
193
|
+
end_event,
|
|
194
|
+
EventConstant.MINDSPORE_SELF_FLOW_NAME,
|
|
195
|
+
EventConstant.MINDSPORE_SELF_FLOW_CAT,
|
|
196
|
+
flow_id
|
|
197
|
+
)
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
return fwk_to_fwk_flows
|
|
201
|
+
|
|
202
|
+
def _create_fwk_to_mstx_flow(self, mstx_pool: TimelineEventPool, fwk_pool: TimelineEventPool) -> List[Dict]:
|
|
203
|
+
"""Create flow events between framework and mstx events."""
|
|
204
|
+
fwk_mstx_api_event_group_by_tid = defaultdict(list)
|
|
205
|
+
for event in fwk_pool.get_complete_events():
|
|
206
|
+
if EventConstant.MSTX_KEYWORD in event.name:
|
|
207
|
+
fwk_mstx_api_event_group_by_tid[event.tid].append(event)
|
|
208
|
+
|
|
209
|
+
fwk_to_mstx_flows = []
|
|
210
|
+
mstx_event_group_by_tid = mstx_pool.complete_event
|
|
211
|
+
|
|
212
|
+
for tid, mstx_event_list in mstx_event_group_by_tid.items():
|
|
213
|
+
sorted_fwk_mstx_api_events = sorted(fwk_mstx_api_event_group_by_tid.get(tid, []), key=lambda x: x.ts)
|
|
214
|
+
sorted_mstx_events = sorted(mstx_event_list, key=lambda x: x.ts)
|
|
215
|
+
|
|
216
|
+
index = 0
|
|
217
|
+
for mstx_event in sorted_mstx_events:
|
|
218
|
+
while index < len(sorted_fwk_mstx_api_events):
|
|
219
|
+
fwk_event = sorted_fwk_mstx_api_events[index]
|
|
220
|
+
if mstx_event.ts < fwk_event.ts:
|
|
221
|
+
break
|
|
222
|
+
if mstx_event.ts <= fwk_event.te:
|
|
223
|
+
mstx_event.parent = fwk_event
|
|
224
|
+
fwk_event.children.append(mstx_event)
|
|
225
|
+
fwk_to_mstx_flows.extend(
|
|
226
|
+
self._create_flow_events(
|
|
227
|
+
fwk_event,
|
|
228
|
+
mstx_event,
|
|
229
|
+
EventConstant.MSTX_FLOW_NAME,
|
|
230
|
+
EventConstant.MSTX_FLOW_CAT,
|
|
231
|
+
)
|
|
232
|
+
)
|
|
233
|
+
index += 1
|
|
234
|
+
break
|
|
235
|
+
index += 1
|
|
236
|
+
|
|
237
|
+
return fwk_to_mstx_flows
|
|
238
|
+
|
|
239
|
+
@staticmethod
|
|
240
|
+
def _create_flow_events(start_event: BaseEvent, end_event: BaseEvent,
|
|
241
|
+
name: str, cat: str, flow_id: str = None) -> List[Dict]:
|
|
242
|
+
"""Create flow start and end events pair."""
|
|
243
|
+
if flow_id is None:
|
|
244
|
+
flow_id = str(end_event.ts)
|
|
245
|
+
|
|
246
|
+
flow_start = FlowStartEvent({
|
|
247
|
+
"name": name,
|
|
248
|
+
"cat": cat,
|
|
249
|
+
"pid": start_event.pid,
|
|
250
|
+
"tid": start_event.tid,
|
|
251
|
+
"ts": start_event.ts,
|
|
252
|
+
"id": flow_id,
|
|
253
|
+
"bp": "e"
|
|
254
|
+
})
|
|
255
|
+
flow_end = FlowEndEvent({
|
|
256
|
+
"name": name,
|
|
257
|
+
"cat": cat,
|
|
258
|
+
"pid": end_event.pid,
|
|
259
|
+
"tid": end_event.tid,
|
|
260
|
+
"ts": end_event.ts,
|
|
261
|
+
"id": flow_id,
|
|
262
|
+
"bp": "e"
|
|
263
|
+
})
|
|
264
|
+
return [flow_start.to_trace_format(), flow_end.to_trace_format()]
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# you may not use this file except in compliance with the License.
|
|
2
|
+
# You may obtain a copy of the License at
|
|
3
|
+
#
|
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
#
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
# ============================================================================
|
|
12
|
+
"""Base class for timeline assembly process."""
|
|
13
|
+
from abc import ABC, abstractmethod
|
|
14
|
+
from typing import Dict, Any
|
|
15
|
+
|
|
16
|
+
from mindspore.profiler.analysis.parser.timeline_assembly_factory.trace_view_container import TraceViewContainer
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class BaseTimelineAssembler(ABC):
|
|
20
|
+
"""Base class for timeline assembly.
|
|
21
|
+
|
|
22
|
+
This class defines the basic interface for timeline assembly process. It coordinates
|
|
23
|
+
different trace event pools and manages the assembly of the final timeline view.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self):
|
|
27
|
+
"""Initialize timeline assembler."""
|
|
28
|
+
self.trace_view_container = TraceViewContainer()
|
|
29
|
+
|
|
30
|
+
@abstractmethod
|
|
31
|
+
def assemble(self, data: Dict[str, Any]) -> None:
|
|
32
|
+
"""Assemble timeline from input data.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
data (Dict[str, Any]): Input data containing various timeline information.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def get_trace_view_container(self) -> TraceViewContainer:
|
|
39
|
+
"""Get the trace container object."""
|
|
40
|
+
return self.trace_view_container
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# you may not use this file except in compliance with the License.
|
|
2
|
+
# You may obtain a copy of the License at
|
|
3
|
+
#
|
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
#
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
# ============================================================================
|
|
12
|
+
"""Container for managing trace view data and event pools."""
|
|
13
|
+
from typing import Dict, List, Optional
|
|
14
|
+
from collections import defaultdict
|
|
15
|
+
|
|
16
|
+
from mindspore.profiler.analysis.parser.timeline_event.timeline_event_pool import TimelineEventPool
|
|
17
|
+
from mindspore.profiler.analysis.parser.timeline_event.base_event import BaseEvent
|
|
18
|
+
from mindspore.profiler.common.constant import ProfilerStepNameConstant, TimelineLayerName
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class TraceViewContainer:
|
|
22
|
+
"""Container for trace view data and event pools.
|
|
23
|
+
|
|
24
|
+
This class is responsible for:
|
|
25
|
+
1. Storing and managing trace event pools by process ID
|
|
26
|
+
2. Maintaining process name mappings
|
|
27
|
+
3. Collecting and managing trace view events
|
|
28
|
+
4. Providing access to stored pools and events
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
def __init__(self):
|
|
32
|
+
self.event_pools: Dict[int, TimelineEventPool] = {}
|
|
33
|
+
self.name_to_pid: Dict[str, int] = {}
|
|
34
|
+
self.pid_to_name: Dict[int, str] = {}
|
|
35
|
+
self.trace_view: List[Dict] = []
|
|
36
|
+
self._kernel_launch_op_dict: Dict[int, List[BaseEvent]] = defaultdict(list)
|
|
37
|
+
self._hardware_op_event_dict: Dict[int, List[BaseEvent]] = defaultdict(list)
|
|
38
|
+
|
|
39
|
+
@property
|
|
40
|
+
def kernel_launch_op_event(self) -> Dict[int, List[BaseEvent]]:
|
|
41
|
+
"""Get all kernel launch events."""
|
|
42
|
+
return self._kernel_launch_op_dict
|
|
43
|
+
|
|
44
|
+
@property
|
|
45
|
+
def hardware_op_event(self) -> Dict[int, List[BaseEvent]]:
|
|
46
|
+
"""Get all hardware events."""
|
|
47
|
+
return self._hardware_op_event_dict
|
|
48
|
+
|
|
49
|
+
@kernel_launch_op_event.setter
|
|
50
|
+
def kernel_launch_op_event(self, value):
|
|
51
|
+
self._kernel_launch_op_dict = value
|
|
52
|
+
|
|
53
|
+
@hardware_op_event.setter
|
|
54
|
+
def hardware_op_event(self, value):
|
|
55
|
+
self._hardware_op_event_dict = value
|
|
56
|
+
|
|
57
|
+
def add_event_pool(self, pool: TimelineEventPool) -> None:
|
|
58
|
+
"""Add event pool to container."""
|
|
59
|
+
if pool.name and pool.name in self.name_to_pid:
|
|
60
|
+
raise ValueError(f"Process name '{pool.name}' already exists.")
|
|
61
|
+
self.event_pools[pool.pid] = pool
|
|
62
|
+
if pool.name:
|
|
63
|
+
self.name_to_pid[pool.name] = pool.pid
|
|
64
|
+
self.pid_to_name[pool.pid] = pool.name
|
|
65
|
+
|
|
66
|
+
def add_trace_events(self, events: List[Dict]) -> None:
|
|
67
|
+
"""Add trace view events."""
|
|
68
|
+
self.trace_view.extend(events)
|
|
69
|
+
|
|
70
|
+
def get_pool_by_pid(self, pid: int) -> Optional[TimelineEventPool]:
|
|
71
|
+
"""Get event pool by process ID."""
|
|
72
|
+
return self.event_pools.get(pid)
|
|
73
|
+
|
|
74
|
+
def get_pool_by_name(self, name: str) -> Optional[TimelineEventPool]:
|
|
75
|
+
"""Get event pool by process name."""
|
|
76
|
+
pid = self.name_to_pid.get(name)
|
|
77
|
+
return self.event_pools.get(pid) if pid is not None else None
|
|
78
|
+
|
|
79
|
+
def get_trace_view(self) -> List[Dict]:
|
|
80
|
+
"""Get all trace view events."""
|
|
81
|
+
return self.trace_view
|
|
82
|
+
|
|
83
|
+
def get_all_pools(self) -> List[TimelineEventPool]:
|
|
84
|
+
"""Get all event pools."""
|
|
85
|
+
return list(self.event_pools.values())
|
|
86
|
+
|
|
87
|
+
def get_step_id_time_dict(self) -> Dict:
|
|
88
|
+
"""Get step id to time dict."""
|
|
89
|
+
# Retrieve all events from the trace container for the Mindspore timeline layer
|
|
90
|
+
|
|
91
|
+
mindspore_pool = self.get_pool_by_name(TimelineLayerName.MINDSPORE.value)
|
|
92
|
+
if not mindspore_pool:
|
|
93
|
+
return {}
|
|
94
|
+
|
|
95
|
+
events = mindspore_pool.get_all_events()
|
|
96
|
+
|
|
97
|
+
# Filter events that contain "ProfilerStep" and create a dictionary mapping (start_ts, end_ts) to step ID
|
|
98
|
+
step_id_to_time_dict = dict(sorted(
|
|
99
|
+
(
|
|
100
|
+
event.name.split("#")[-1], (event.ts, event.dur + event.ts)
|
|
101
|
+
)
|
|
102
|
+
for event in events
|
|
103
|
+
if ProfilerStepNameConstant.PROFILER_STEP in event.name
|
|
104
|
+
))
|
|
105
|
+
|
|
106
|
+
return step_id_to_time_dict
|
|
File without changes
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Copyright 2024 Huawei Technologies Co., Ltd
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ============================================================================
|
|
15
|
+
"""Base class for timeline event creators."""
|
|
16
|
+
from abc import ABC, abstractmethod
|
|
17
|
+
from typing import List, Dict, Any
|
|
18
|
+
|
|
19
|
+
from mindspore.profiler.analysis.parser.timeline_event.timeline_event_pool import TimelineEventPool
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class BaseTimelineCreator(ABC):
|
|
23
|
+
"""Base class for creating timeline event pools."""
|
|
24
|
+
|
|
25
|
+
def __init__(self):
|
|
26
|
+
self.event_pools: Dict[int, TimelineEventPool] = {}
|
|
27
|
+
|
|
28
|
+
@abstractmethod
|
|
29
|
+
def create(self, data: Any) -> None:
|
|
30
|
+
"""Create timeline event pools from input data."""
|
|
31
|
+
|
|
32
|
+
def get_chrome_trace_data(self) -> List[Dict]:
|
|
33
|
+
"""Get all events in chrome trace format."""
|
|
34
|
+
if not self.event_pools:
|
|
35
|
+
return []
|
|
36
|
+
chrome_trace_data = []
|
|
37
|
+
for pool in self.event_pools.values():
|
|
38
|
+
if pool:
|
|
39
|
+
chrome_trace_data.extend(pool.get_all_events_with_trace_format())
|
|
40
|
+
return chrome_trace_data
|
|
41
|
+
|
|
42
|
+
def get_event_pools(self) -> Dict[int, TimelineEventPool]:
|
|
43
|
+
"""Get all timeline event pools."""
|
|
44
|
+
return self.event_pools
|