mindspore 2.4.10__cp39-cp39-win_amd64.whl → 2.6.0__cp39-cp39-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mindspore might be problematic. Click here for more details.
- 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 +47 -198
- mindspore/_extends/parse/resources.py +1 -5
- mindspore/_extends/parse/standard_method.py +229 -99
- 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 +480 -372
- 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 +5 -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 +975 -1981
- 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 +324 -573
- 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 +183 -117
- 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/dnnl.dll +0 -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 +209 -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 +179 -120
- 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_glog.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 +798 -761
- 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 +933 -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 +1373 -192
- 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 +53 -42
- 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 +19 -15
- mindspore/nn/optim/adamax.py +8 -7
- mindspore/nn/optim/adasum.py +5 -5
- mindspore/nn/optim/asgd.py +3 -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 +361 -359
- 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 +52 -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 +258 -46
- mindspore/ops/auto_generate/gen_extend_func.py +757 -185
- mindspore/ops/auto_generate/gen_ops_def.py +4197 -2243
- mindspore/ops/auto_generate/gen_ops_prim.py +16976 -6055
- 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 +4351 -3813
- mindspore/ops/function/nn_func.py +1712 -637
- mindspore/ops/function/other_func.py +159 -1
- mindspore/ops/function/parameter_func.py +18 -84
- mindspore/ops/function/random_func.py +452 -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 +26 -18
- mindspore/ops/functional.py +23 -7
- mindspore/ops/functional_overload.py +1548 -0
- mindspore/ops/op_info_register.py +32 -244
- mindspore/ops/operations/__init__.py +23 -15
- mindspore/ops/operations/_custom_ops_utils.py +235 -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 +298 -87
- mindspore/ops/operations/debug_ops.py +157 -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 +212 -531
- 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 +1895 -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 +296 -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 +159 -40
- mindspore/parallel/_cell_wrapper.py +132 -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 +700 -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 +258 -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 -59
- mindspore/parallel/transform_safetensors.py +364 -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 +109 -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 +416 -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 +96 -27
- 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} +228 -108
- 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 +269 -136
- 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 +552 -0
- mindspore/utils/utils.py +138 -4
- mindspore/version.py +1 -1
- {mindspore-2.4.10.dist-info → mindspore-2.6.0.dist-info}/METADATA +3 -3
- {mindspore-2.4.10.dist-info → mindspore-2.6.0.dist-info}/RECORD +564 -395
- {mindspore-2.4.10.dist-info → mindspore-2.6.0.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.0.dist-info}/WHEEL +0 -0
- {mindspore-2.4.10.dist-info → mindspore-2.6.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,90 @@
|
|
|
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 creator for CPU operations."""
|
|
16
|
+
from typing import List
|
|
17
|
+
|
|
18
|
+
from mindspore import log as logger
|
|
19
|
+
from mindspore.profiler.common.constant import EventConstant
|
|
20
|
+
from mindspore.profiler.common.constant import TimelineLayerName
|
|
21
|
+
from mindspore.profiler.analysis.parser.timeline_creator.base_timeline_creator import BaseTimelineCreator
|
|
22
|
+
from mindspore.profiler.analysis.parser.timeline_event.timeline_event_pool import TimelineEventPool
|
|
23
|
+
from mindspore.profiler.analysis.parser.timeline_event.cpu_op_event import CpuOpCompleteEvent
|
|
24
|
+
from mindspore.profiler.analysis.parser.timeline_event.cpu_op_event import CpuOpMetaEvent
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class CpuOpTimelineCreator(BaseTimelineCreator):
|
|
28
|
+
"""Create timeline event pools for CPU operations."""
|
|
29
|
+
|
|
30
|
+
def __init__(self):
|
|
31
|
+
super().__init__()
|
|
32
|
+
self.scope_data: List[CpuOpCompleteEvent] = []
|
|
33
|
+
|
|
34
|
+
def create(self, cpu_info_lines: List[str]) -> None:
|
|
35
|
+
"""Create timeline event pools from CPU info lines."""
|
|
36
|
+
if not cpu_info_lines:
|
|
37
|
+
return
|
|
38
|
+
|
|
39
|
+
pool = TimelineEventPool(EventConstant.CPU_OP_PID)
|
|
40
|
+
self.event_pools[EventConstant.CPU_OP_PID] = pool
|
|
41
|
+
|
|
42
|
+
self._create_base_events(pool, cpu_info_lines)
|
|
43
|
+
self._create_meta_event(pool)
|
|
44
|
+
|
|
45
|
+
def _create_base_events(self, pool: TimelineEventPool, cpu_info_lines: List[str]) -> None:
|
|
46
|
+
"""Create base events from CPU info lines."""
|
|
47
|
+
for line in cpu_info_lines:
|
|
48
|
+
line = line.strip()
|
|
49
|
+
if not line:
|
|
50
|
+
continue
|
|
51
|
+
|
|
52
|
+
op_list = line.split(';')
|
|
53
|
+
if len(op_list) < 3:
|
|
54
|
+
logger.warning(f"Invalid CPU info format, expected at least 3 fields but got {len(op_list)}: {line}")
|
|
55
|
+
continue
|
|
56
|
+
|
|
57
|
+
op_full_name, op_type, time_info = op_list[0], op_list[1], op_list[-1]
|
|
58
|
+
|
|
59
|
+
for time in time_info.split():
|
|
60
|
+
time_parts = time.split(',')
|
|
61
|
+
if len(time_parts) != 3:
|
|
62
|
+
logger.warning(f"Invalid time info format, expected 3 fields but got {len(time_parts)}: {time}")
|
|
63
|
+
continue
|
|
64
|
+
|
|
65
|
+
start_time, dur, tid = time_parts
|
|
66
|
+
event = CpuOpCompleteEvent({
|
|
67
|
+
'name': op_full_name,
|
|
68
|
+
'tid': int(tid),
|
|
69
|
+
'ts': str(start_time),
|
|
70
|
+
'dur': str(dur),
|
|
71
|
+
'args': {'type': op_type}
|
|
72
|
+
})
|
|
73
|
+
pool.add_event(event)
|
|
74
|
+
|
|
75
|
+
@staticmethod
|
|
76
|
+
def _create_meta_event(pool: TimelineEventPool) -> None:
|
|
77
|
+
"""Create meta events for CPU operations."""
|
|
78
|
+
process_meta_name_and_args = [
|
|
79
|
+
(EventConstant.PROCESS_NAME, {"name": TimelineLayerName.CPU_OP.value}),
|
|
80
|
+
(EventConstant.PROCESS_SORT, {"sort_index": EventConstant.CPU_OP_SORT_IDX}),
|
|
81
|
+
(EventConstant.PROCESS_LABEL, {"labels": EventConstant.CPU_LABEL})
|
|
82
|
+
]
|
|
83
|
+
for name, args in process_meta_name_and_args:
|
|
84
|
+
pool.add_event(CpuOpMetaEvent({"name": name, "tid": 0, "args": args}))
|
|
85
|
+
|
|
86
|
+
for tid in pool.get_all_tids():
|
|
87
|
+
pool.add_event(CpuOpMetaEvent({"name": EventConstant.THREAD_NAME, "tid": tid,
|
|
88
|
+
"args": {"name": f"Thread {tid}"}}))
|
|
89
|
+
pool.add_event(CpuOpMetaEvent({"name": EventConstant.THREAD_SORT, "tid": tid,
|
|
90
|
+
"args": {"sort_index": tid}}))
|
|
@@ -0,0 +1,76 @@
|
|
|
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 creator for framework operations."""
|
|
16
|
+
from typing import List, Dict
|
|
17
|
+
|
|
18
|
+
from mindspore.profiler.common.constant import EventConstant, FileConstant, TimelineLayerName
|
|
19
|
+
from mindspore.profiler.analysis.parser.timeline_event.timeline_event_pool import TimelineEventPool
|
|
20
|
+
from mindspore.profiler.analysis.parser.timeline_creator.base_timeline_creator import BaseTimelineCreator
|
|
21
|
+
from mindspore.profiler.analysis.parser.timeline_event.fwk_event import (
|
|
22
|
+
FwkCompleteEvent,
|
|
23
|
+
FwkInstantEvent,
|
|
24
|
+
OpRangeStructField,
|
|
25
|
+
FwkMetaEvent
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class FwkTimelineCreator(BaseTimelineCreator):
|
|
30
|
+
"""Create timeline event pools for framework operations."""
|
|
31
|
+
|
|
32
|
+
def create(self, fwk_tlv_data: List[Dict]) -> None:
|
|
33
|
+
"""Create timeline event pools from framework TLV data."""
|
|
34
|
+
if not fwk_tlv_data:
|
|
35
|
+
return
|
|
36
|
+
|
|
37
|
+
pool = TimelineEventPool(EventConstant.MINDSPORE_PID)
|
|
38
|
+
self.event_pools[EventConstant.MINDSPORE_PID] = pool
|
|
39
|
+
|
|
40
|
+
self._create_base_events(pool, fwk_tlv_data)
|
|
41
|
+
self._create_meta_event(pool)
|
|
42
|
+
|
|
43
|
+
def _create_base_events(self, pool: TimelineEventPool, fwk_tlv_data: List[Dict]) -> None:
|
|
44
|
+
"""Create base events from framework TLV data."""
|
|
45
|
+
for data in fwk_tlv_data:
|
|
46
|
+
if data[FileConstant.FIX_SIZE_DATA][OpRangeStructField.START_TIME_NS.value] == 0: # Filter abnormal data
|
|
47
|
+
continue
|
|
48
|
+
if (data[FileConstant.FIX_SIZE_DATA][OpRangeStructField.START_TIME_NS.value] ==
|
|
49
|
+
data[FileConstant.FIX_SIZE_DATA][OpRangeStructField.END_TIME_NS.value]): # dur == 0
|
|
50
|
+
event = FwkInstantEvent(data)
|
|
51
|
+
else:
|
|
52
|
+
event = FwkCompleteEvent(data)
|
|
53
|
+
if event.name == EventConstant.FLOW_OP:
|
|
54
|
+
pool.add_start_event(str(event.id), event)
|
|
55
|
+
continue
|
|
56
|
+
if event.id != EventConstant.INVALID_FLOW_ID:
|
|
57
|
+
pool.add_end_event(str(event.id), event)
|
|
58
|
+
pool.add_event(event)
|
|
59
|
+
|
|
60
|
+
@staticmethod
|
|
61
|
+
def _create_meta_event(pool: TimelineEventPool) -> None:
|
|
62
|
+
"""Create meta events for framework operations."""
|
|
63
|
+
process_meta_events = [
|
|
64
|
+
(EventConstant.PROCESS_NAME, {"name": TimelineLayerName.MINDSPORE.value}),
|
|
65
|
+
(EventConstant.PROCESS_SORT, {"sort_index": EventConstant.MINDSPORE_SORT_IDX}),
|
|
66
|
+
(EventConstant.PROCESS_LABEL, {"labels": EventConstant.CPU_LABEL})
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
for name, args in process_meta_events:
|
|
70
|
+
pool.add_event(FwkMetaEvent({"name": name, "tid": 0, "args": args}))
|
|
71
|
+
|
|
72
|
+
for tid in pool.get_all_tids():
|
|
73
|
+
pool.add_event(FwkMetaEvent({"name": EventConstant.THREAD_NAME, "tid": tid,
|
|
74
|
+
"args": {"name": f"Thread {tid}"}}))
|
|
75
|
+
pool.add_event(FwkMetaEvent({"name": EventConstant.THREAD_SORT, "tid": tid,
|
|
76
|
+
"args": {"sort_index": tid}}))
|
|
@@ -0,0 +1,103 @@
|
|
|
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 creator for MsProf operations."""
|
|
16
|
+
from typing import List, Dict, Tuple
|
|
17
|
+
|
|
18
|
+
from mindspore import log as logger
|
|
19
|
+
from mindspore.profiler.common.constant import EventConstant
|
|
20
|
+
from mindspore.profiler.analysis.parser.timeline_creator.base_timeline_creator import BaseTimelineCreator
|
|
21
|
+
from mindspore.profiler.analysis.parser.timeline_event.timeline_event_pool import TimelineEventPool
|
|
22
|
+
from mindspore.profiler.analysis.parser.timeline_event.flow_event import FlowStartEvent, FlowEndEvent
|
|
23
|
+
from mindspore.profiler.analysis.parser.timeline_event.msprof_event import (
|
|
24
|
+
MsprofMetaEvent,
|
|
25
|
+
MsprofCompleteEvent,
|
|
26
|
+
MsprofInstantEvent,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class MsprofTimelineCreator(BaseTimelineCreator):
|
|
31
|
+
"""Create timeline event pools for MsProf operations."""
|
|
32
|
+
|
|
33
|
+
def __init__(self):
|
|
34
|
+
super().__init__()
|
|
35
|
+
self.msprof_timeline_raw_data = []
|
|
36
|
+
self.acl_to_npu_flow_dict: Dict[int, Dict[str, List[MsprofCompleteEvent]]] = {}
|
|
37
|
+
|
|
38
|
+
def create(self, msprof_timeline_data: List[Dict]) -> None:
|
|
39
|
+
"""Create timeline event pools from MsProf timeline data."""
|
|
40
|
+
if not msprof_timeline_data:
|
|
41
|
+
return
|
|
42
|
+
self.msprof_timeline_raw_data = msprof_timeline_data
|
|
43
|
+
flow_dict, complete_event_map = self._create_base_events(msprof_timeline_data)
|
|
44
|
+
self._create_acl_to_npu_flow_dict(flow_dict, complete_event_map)
|
|
45
|
+
|
|
46
|
+
def _create_base_events(self, msprof_timeline_data: List[Dict]) -> Tuple[Dict, Dict]:
|
|
47
|
+
"""Create base events from MsProf timeline data."""
|
|
48
|
+
flow_dict = {}
|
|
49
|
+
complete_event_map = {}
|
|
50
|
+
|
|
51
|
+
for data in msprof_timeline_data:
|
|
52
|
+
pid = data.get("pid", 0)
|
|
53
|
+
pool = self.event_pools.get(pid)
|
|
54
|
+
if pool is None:
|
|
55
|
+
pool = TimelineEventPool(pid)
|
|
56
|
+
self.event_pools[pid] = pool
|
|
57
|
+
|
|
58
|
+
if data.get("cat") == EventConstant.HOST_TO_DEVICE_FLOW_CAT:
|
|
59
|
+
if data.get("ph") == EventConstant.START_FLOW:
|
|
60
|
+
event = FlowStartEvent(data)
|
|
61
|
+
flow_dict.setdefault(event.flow_id, {}).setdefault("start", event)
|
|
62
|
+
elif data.get("ph") == EventConstant.END_FLOW:
|
|
63
|
+
event = FlowEndEvent(data)
|
|
64
|
+
flow_dict.setdefault(event.flow_id, {}).setdefault("end", event)
|
|
65
|
+
elif data.get("ph") == EventConstant.COMPLETE_EVENT:
|
|
66
|
+
event = MsprofCompleteEvent(data)
|
|
67
|
+
complete_event_map[event.unique_id] = event
|
|
68
|
+
pool.add_event(event)
|
|
69
|
+
elif data.get("ph") == EventConstant.INSTANT_EVENT:
|
|
70
|
+
event = MsprofInstantEvent(data)
|
|
71
|
+
pool.add_event(event)
|
|
72
|
+
elif data.get("ph") == EventConstant.META_EVENT:
|
|
73
|
+
event = MsprofMetaEvent(data)
|
|
74
|
+
pool.add_event(event)
|
|
75
|
+
|
|
76
|
+
return flow_dict, complete_event_map
|
|
77
|
+
|
|
78
|
+
def _create_acl_to_npu_flow_dict(self, flow_dict: Dict, complete_event_map: Dict) -> None:
|
|
79
|
+
"""Create flow events from flow dictionary."""
|
|
80
|
+
for flow in flow_dict.values():
|
|
81
|
+
flow_start = flow.get("start")
|
|
82
|
+
flow_end = flow.get("end")
|
|
83
|
+
if flow_start and flow_end:
|
|
84
|
+
hardware_event = complete_event_map.get(flow_end.unique_id)
|
|
85
|
+
if not hardware_event:
|
|
86
|
+
logger.warning(
|
|
87
|
+
f"Failed to find hardware event for flow end event. "
|
|
88
|
+
f"Flow ID: {flow_end.flow_id}, Unique ID: {flow_end.unique_id}"
|
|
89
|
+
)
|
|
90
|
+
continue
|
|
91
|
+
(
|
|
92
|
+
self.acl_to_npu_flow_dict.setdefault(flow_start.tid, {})
|
|
93
|
+
.setdefault(str(flow_start.ts), [])
|
|
94
|
+
.append(hardware_event)
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
def get_acl_to_npu_flow_dict(self) -> Dict[int, Dict[str, List[MsprofCompleteEvent]]]:
|
|
98
|
+
"""Return the CANN to NPU flow dictionary."""
|
|
99
|
+
return self.acl_to_npu_flow_dict
|
|
100
|
+
|
|
101
|
+
def get_chrome_trace_data(self) -> List[Dict]:
|
|
102
|
+
"""Return the chrome trace events."""
|
|
103
|
+
return self.msprof_timeline_raw_data
|
|
@@ -0,0 +1,134 @@
|
|
|
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 creator for scope layer operations."""
|
|
16
|
+
from decimal import Decimal
|
|
17
|
+
from typing import List, Tuple, Optional
|
|
18
|
+
|
|
19
|
+
from mindspore.profiler.common.constant import EventConstant, TimelineLayerName
|
|
20
|
+
from mindspore.profiler.analysis.parser.timeline_event.fwk_event import FwkCompleteEvent
|
|
21
|
+
from mindspore.profiler.analysis.parser.timeline_event.cpu_op_event import CpuOpCompleteEvent
|
|
22
|
+
from mindspore.profiler.analysis.parser.timeline_event.base_event import BaseEvent, CompleteEvent
|
|
23
|
+
from mindspore.profiler.analysis.parser.timeline_event.timeline_event_pool import TimelineEventPool
|
|
24
|
+
from mindspore.profiler.analysis.parser.timeline_creator.base_timeline_creator import BaseTimelineCreator
|
|
25
|
+
from mindspore.profiler.analysis.parser.timeline_event.msprof_event import MsprofCompleteEvent
|
|
26
|
+
from mindspore.profiler.analysis.parser.timeline_event.scope_layer_event import (
|
|
27
|
+
ScopeLayerCompleteEvent,
|
|
28
|
+
ScopeLayerMetaEvent
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class ScopeLayerTimelineCreator(BaseTimelineCreator):
|
|
33
|
+
"""Create timeline event pools for scope layer operations."""
|
|
34
|
+
|
|
35
|
+
def create(self, event_list: List[BaseEvent]) -> None:
|
|
36
|
+
"""Create timeline event pools from scope layer events."""
|
|
37
|
+
if not event_list:
|
|
38
|
+
return
|
|
39
|
+
|
|
40
|
+
pool = TimelineEventPool(EventConstant.SCOPE_LAYER_PID)
|
|
41
|
+
self.event_pools[EventConstant.SCOPE_LAYER_PID] = pool
|
|
42
|
+
|
|
43
|
+
self._create_base_events(pool, event_list)
|
|
44
|
+
self._create_meta_event(pool)
|
|
45
|
+
|
|
46
|
+
def _create_base_events(self, pool: TimelineEventPool, event_list: List[BaseEvent]) -> None:
|
|
47
|
+
"""Create base events from scope layer events."""
|
|
48
|
+
event_list.sort(key=lambda x: x.ts)
|
|
49
|
+
layers = []
|
|
50
|
+
|
|
51
|
+
for event in event_list:
|
|
52
|
+
scope_data = self._parse_scope_data(event)
|
|
53
|
+
if not scope_data:
|
|
54
|
+
continue
|
|
55
|
+
scope_names, start_time, dur_time = scope_data
|
|
56
|
+
end_time = start_time + dur_time
|
|
57
|
+
if layers and start_time < layers[0].ts + layers[0].dur:
|
|
58
|
+
continue # Skip parallel operators, keep only the first one
|
|
59
|
+
|
|
60
|
+
merge = True # Flag to control merging of upper layers
|
|
61
|
+
for layer_depth, layer_name in enumerate(scope_names):
|
|
62
|
+
if layer_depth >= len(layers):
|
|
63
|
+
layers.append(ScopeLayerCompleteEvent(
|
|
64
|
+
{"name": layer_name, "tid": layer_depth, "ts": start_time, "dur": dur_time}))
|
|
65
|
+
continue
|
|
66
|
+
if merge and layers[layer_depth].name == layer_name:
|
|
67
|
+
layers[layer_depth].dur = end_time - layers[layer_depth].ts
|
|
68
|
+
else:
|
|
69
|
+
pool.add_event(layers[layer_depth])
|
|
70
|
+
layers[layer_depth] = ScopeLayerCompleteEvent(
|
|
71
|
+
{"name": layer_name, "tid": layer_depth, "ts": start_time, "dur": dur_time})
|
|
72
|
+
merge = False
|
|
73
|
+
|
|
74
|
+
# Add remaining layers to pool
|
|
75
|
+
for layer in layers:
|
|
76
|
+
pool.add_event(layer)
|
|
77
|
+
|
|
78
|
+
@staticmethod
|
|
79
|
+
def _parse_scope_data(event: CompleteEvent) -> Optional[Tuple[List[str], Decimal, Decimal]]:
|
|
80
|
+
"""Parse scope names and timing from event.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
event (CompleteEvent): Event to parse.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
Optional[Tuple[List[str], Decimal, Decimal]]: Scope names, start time and duration.
|
|
87
|
+
"""
|
|
88
|
+
if hasattr(event, 'parent') and event.parent:
|
|
89
|
+
event_scope_name = event.name.split("/")[:-1]
|
|
90
|
+
parent_scope_name = event.parent.name.split("::")[-1].split("/")[:-1]
|
|
91
|
+
if event_scope_name and parent_scope_name:
|
|
92
|
+
scope_name = (
|
|
93
|
+
parent_scope_name
|
|
94
|
+
if len(parent_scope_name) > len(event_scope_name)
|
|
95
|
+
else event_scope_name
|
|
96
|
+
)
|
|
97
|
+
else:
|
|
98
|
+
scope_name = event_scope_name or parent_scope_name
|
|
99
|
+
else:
|
|
100
|
+
scope_name = event.name.split("/")[:-1]
|
|
101
|
+
|
|
102
|
+
if scope_name:
|
|
103
|
+
return scope_name, event.ts, event.dur
|
|
104
|
+
return None
|
|
105
|
+
|
|
106
|
+
@staticmethod
|
|
107
|
+
def _create_meta_event(pool: TimelineEventPool) -> None:
|
|
108
|
+
"""Create meta events for scope layer."""
|
|
109
|
+
process_meta_events = [
|
|
110
|
+
(EventConstant.PROCESS_NAME, {"name": TimelineLayerName.SCOPER_LAYER.value}),
|
|
111
|
+
(EventConstant.PROCESS_SORT, {"sort_index": EventConstant.SCOPE_LAYER_SORT_IDX})
|
|
112
|
+
]
|
|
113
|
+
|
|
114
|
+
for name, args in process_meta_events:
|
|
115
|
+
pool.add_event(ScopeLayerMetaEvent({"name": name, "tid": 0, "args": args}))
|
|
116
|
+
|
|
117
|
+
for tid in pool.get_all_tids():
|
|
118
|
+
pool.add_event(ScopeLayerMetaEvent({"name": EventConstant.THREAD_NAME, "tid": tid,
|
|
119
|
+
"args": {"name": f"Thread {tid}"}}))
|
|
120
|
+
pool.add_event(ScopeLayerMetaEvent({"name": EventConstant.THREAD_SORT, "tid": tid,
|
|
121
|
+
"args": {"sort_index": tid}}))
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def is_scope_data(event: BaseEvent) -> bool:
|
|
125
|
+
"""Check if event is scope data."""
|
|
126
|
+
if isinstance(event, (CpuOpCompleteEvent, MsprofCompleteEvent)):
|
|
127
|
+
scope_full_name = event.name
|
|
128
|
+
return scope_full_name and scope_full_name.startswith(EventConstant.TOP_SCOPE_NAMES)
|
|
129
|
+
|
|
130
|
+
if isinstance(event, FwkCompleteEvent):
|
|
131
|
+
scope_full_name = event.name.split("::")[-1]
|
|
132
|
+
return scope_full_name and scope_full_name.startswith(EventConstant.TOP_SCOPE_NAMES)
|
|
133
|
+
|
|
134
|
+
return False
|
|
File without changes
|
|
@@ -0,0 +1,233 @@
|
|
|
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 all event types."""
|
|
16
|
+
from decimal import Decimal
|
|
17
|
+
from typing import Dict
|
|
18
|
+
from abc import ABC, abstractmethod
|
|
19
|
+
|
|
20
|
+
from mindspore.profiler.common.constant import EventConstant
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class BaseEvent(ABC):
|
|
24
|
+
"""Base class for all event types."""
|
|
25
|
+
|
|
26
|
+
def __init__(self, data: Dict):
|
|
27
|
+
"""Initialize base event with data dictionary."""
|
|
28
|
+
if not isinstance(data, dict):
|
|
29
|
+
raise TypeError("Input data must be dict.")
|
|
30
|
+
self._origin_data = data
|
|
31
|
+
|
|
32
|
+
@property
|
|
33
|
+
def ph(self) -> str:
|
|
34
|
+
"""Get event phase."""
|
|
35
|
+
raise NotImplementedError
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def origin_data(self) -> Dict:
|
|
39
|
+
"""Get original event data."""
|
|
40
|
+
return self._origin_data
|
|
41
|
+
|
|
42
|
+
@property
|
|
43
|
+
def pid(self) -> int:
|
|
44
|
+
"""Get process ID."""
|
|
45
|
+
return int(self._origin_data.get("pid", 0))
|
|
46
|
+
|
|
47
|
+
@property
|
|
48
|
+
def tid(self) -> int:
|
|
49
|
+
"""Get thread ID."""
|
|
50
|
+
return int(self._origin_data.get("tid", 0))
|
|
51
|
+
|
|
52
|
+
@property
|
|
53
|
+
def name(self) -> str:
|
|
54
|
+
"""Get event name."""
|
|
55
|
+
return self._origin_data.get("name", "")
|
|
56
|
+
|
|
57
|
+
@abstractmethod
|
|
58
|
+
def to_trace_format(self) -> dict:
|
|
59
|
+
"""Convert event to Chrome trace format."""
|
|
60
|
+
raise NotImplementedError
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class MetaEvent(BaseEvent):
|
|
64
|
+
"""Metadata event class."""
|
|
65
|
+
|
|
66
|
+
@property
|
|
67
|
+
def ph(self) -> str:
|
|
68
|
+
"""Get event phase (M for metadata)."""
|
|
69
|
+
return EventConstant.META_EVENT
|
|
70
|
+
|
|
71
|
+
@property
|
|
72
|
+
def args(self) -> dict:
|
|
73
|
+
"""Get event arguments."""
|
|
74
|
+
return self._origin_data.get("args", {})
|
|
75
|
+
|
|
76
|
+
def to_trace_format(self) -> dict:
|
|
77
|
+
"""Convert metadata event to Chrome trace format."""
|
|
78
|
+
return {
|
|
79
|
+
"ph": self.ph,
|
|
80
|
+
"name": self.name,
|
|
81
|
+
"pid": self.pid,
|
|
82
|
+
"tid": self.tid,
|
|
83
|
+
"args": self.args
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class CompleteEvent(BaseEvent):
|
|
88
|
+
"""Complete event class."""
|
|
89
|
+
|
|
90
|
+
@property
|
|
91
|
+
def ph(self) -> str:
|
|
92
|
+
"""Get event phase (X for complete)."""
|
|
93
|
+
return EventConstant.COMPLETE_EVENT
|
|
94
|
+
|
|
95
|
+
@property
|
|
96
|
+
def ts(self) -> Decimal:
|
|
97
|
+
"""Get event start timestamp."""
|
|
98
|
+
return Decimal(self._origin_data.get("ts", 0))
|
|
99
|
+
|
|
100
|
+
@property
|
|
101
|
+
def dur(self) -> Decimal:
|
|
102
|
+
"""Get event duration."""
|
|
103
|
+
return Decimal(self._origin_data.get("dur", 0))
|
|
104
|
+
|
|
105
|
+
@property
|
|
106
|
+
def cat(self) -> str:
|
|
107
|
+
"""Get event category."""
|
|
108
|
+
return str(self._origin_data.get("cat", ""))
|
|
109
|
+
|
|
110
|
+
@property
|
|
111
|
+
def args(self) -> dict:
|
|
112
|
+
"""Get event arguments."""
|
|
113
|
+
return self._origin_data.get("args", {})
|
|
114
|
+
|
|
115
|
+
@property
|
|
116
|
+
def unique_id(self) -> str:
|
|
117
|
+
"""Get unique id"""
|
|
118
|
+
return f"{self.pid}-{self.tid}-{self.ts}"
|
|
119
|
+
|
|
120
|
+
def to_trace_format(self) -> dict:
|
|
121
|
+
"""Convert complete event to Chrome trace format."""
|
|
122
|
+
return {
|
|
123
|
+
"ph": self.ph,
|
|
124
|
+
"name": self.name,
|
|
125
|
+
"pid": self.pid,
|
|
126
|
+
"tid": self.tid,
|
|
127
|
+
"ts": str(self.ts),
|
|
128
|
+
"dur": str(self.dur),
|
|
129
|
+
"cat": self.cat,
|
|
130
|
+
"args": self.args
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
class InstantEvent(BaseEvent):
|
|
135
|
+
"""Instant event class."""
|
|
136
|
+
|
|
137
|
+
@property
|
|
138
|
+
def ph(self) -> str:
|
|
139
|
+
"""Get event phase (i for instant)."""
|
|
140
|
+
return EventConstant.INSTANT_EVENT
|
|
141
|
+
|
|
142
|
+
@property
|
|
143
|
+
def ts(self) -> Decimal:
|
|
144
|
+
"""Get event timestamp."""
|
|
145
|
+
return Decimal(self._origin_data.get("ts", 0))
|
|
146
|
+
|
|
147
|
+
@property
|
|
148
|
+
def args(self) -> dict:
|
|
149
|
+
"""Get event arguments."""
|
|
150
|
+
return self._origin_data.get("args", {})
|
|
151
|
+
|
|
152
|
+
def to_trace_format(self) -> dict:
|
|
153
|
+
"""Convert instant event to Chrome trace format."""
|
|
154
|
+
return {
|
|
155
|
+
"name": self.name,
|
|
156
|
+
"ph": self.ph,
|
|
157
|
+
"ts": str(self.ts),
|
|
158
|
+
"pid": self.pid,
|
|
159
|
+
"tid": self.tid,
|
|
160
|
+
"args": self.args
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
class CounterEvent(BaseEvent):
|
|
165
|
+
"""Counter event class."""
|
|
166
|
+
|
|
167
|
+
@property
|
|
168
|
+
def ph(self) -> str:
|
|
169
|
+
"""Get event phase (C for counter)."""
|
|
170
|
+
return EventConstant.COUNTER_EVENT
|
|
171
|
+
|
|
172
|
+
@property
|
|
173
|
+
def ts(self) -> Decimal:
|
|
174
|
+
"""Get event timestamp."""
|
|
175
|
+
return Decimal(self._origin_data.get("ts", 0))
|
|
176
|
+
|
|
177
|
+
@property
|
|
178
|
+
def args(self) -> dict:
|
|
179
|
+
"""Get event arguments."""
|
|
180
|
+
return self._origin_data.get("args", {})
|
|
181
|
+
|
|
182
|
+
def to_trace_format(self) -> dict:
|
|
183
|
+
"""Convert counter event to Chrome trace format."""
|
|
184
|
+
return {
|
|
185
|
+
"name": self.name,
|
|
186
|
+
"ph": self.ph,
|
|
187
|
+
"ts": str(self.ts),
|
|
188
|
+
"pid": self.pid,
|
|
189
|
+
"tid": self.tid,
|
|
190
|
+
"args": self.args
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
class FlowEvent(BaseEvent):
|
|
195
|
+
"""Flow event class."""
|
|
196
|
+
|
|
197
|
+
@property
|
|
198
|
+
def ph(self) -> str:
|
|
199
|
+
"""Get event phase (s/t/f for flow start/step/end)."""
|
|
200
|
+
raise NotImplementedError
|
|
201
|
+
|
|
202
|
+
@property
|
|
203
|
+
def flow_id(self) -> str:
|
|
204
|
+
"""Get flow identifier."""
|
|
205
|
+
return self._origin_data.get("id", "")
|
|
206
|
+
|
|
207
|
+
@property
|
|
208
|
+
def ts(self) -> Decimal:
|
|
209
|
+
"""Get event timestamp."""
|
|
210
|
+
return Decimal(self._origin_data.get("ts", 0))
|
|
211
|
+
|
|
212
|
+
@property
|
|
213
|
+
def cat(self) -> str:
|
|
214
|
+
"""Get event category."""
|
|
215
|
+
return str(self._origin_data.get("cat", ""))
|
|
216
|
+
|
|
217
|
+
@property
|
|
218
|
+
def unique_id(self) -> str:
|
|
219
|
+
"""Get unique id"""
|
|
220
|
+
return f"{self.pid}-{self.tid}-{self.ts}"
|
|
221
|
+
|
|
222
|
+
def to_trace_format(self) -> dict:
|
|
223
|
+
"""Convert flow event to Chrome trace format."""
|
|
224
|
+
return {
|
|
225
|
+
"name": self.name,
|
|
226
|
+
"bp": "e",
|
|
227
|
+
"ph": self.ph,
|
|
228
|
+
"ts": str(self.ts),
|
|
229
|
+
"pid": self.pid,
|
|
230
|
+
"tid": self.tid,
|
|
231
|
+
"id": self.flow_id,
|
|
232
|
+
"cat": self.cat
|
|
233
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
"""CPU event class."""
|
|
16
|
+
from decimal import Decimal
|
|
17
|
+
|
|
18
|
+
from mindspore.profiler.common.constant import TimeConstant, EventConstant
|
|
19
|
+
from mindspore.profiler.analysis.parser.timeline_event.base_event import CompleteEvent, MetaEvent
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class CpuOpCompleteEvent(CompleteEvent):
|
|
23
|
+
"""CPU Complete(X) event class for representing CPU operations."""
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def ts(self) -> Decimal:
|
|
27
|
+
"""Get timestamp in microseconds, converting from nanoseconds."""
|
|
28
|
+
return (Decimal(self._origin_data.get("ts", 0)) * Decimal(TimeConstant.NS_TO_US)).quantize(Decimal('0.000'))
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def dur(self) -> Decimal:
|
|
32
|
+
"""Get duration in microseconds, converting from milliseconds."""
|
|
33
|
+
return (Decimal(self._origin_data.get("dur", 0)) * Decimal(TimeConstant.MS_TO_US)).quantize(Decimal('0.000'))
|
|
34
|
+
|
|
35
|
+
@property
|
|
36
|
+
def pid(self) -> int:
|
|
37
|
+
"""Get CPU operation process ID."""
|
|
38
|
+
return int(EventConstant.CPU_OP_PID)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class CpuOpMetaEvent(MetaEvent):
|
|
42
|
+
"""CPU Meta(M) event class for CPU operation metadata."""
|
|
43
|
+
|
|
44
|
+
@property
|
|
45
|
+
def pid(self) -> int:
|
|
46
|
+
"""Get CPU operation process ID."""
|
|
47
|
+
return int(EventConstant.CPU_OP_PID)
|