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,376 @@
|
|
|
1
|
+
# Copyright 2024 Huawei Technologies Co., Ltd
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ============================================================================
|
|
15
|
+
"""Ascend Step Trace Time Viewer"""
|
|
16
|
+
import os
|
|
17
|
+
import re
|
|
18
|
+
from decimal import Decimal
|
|
19
|
+
from enum import Enum
|
|
20
|
+
from typing import List, Any, Tuple, Optional
|
|
21
|
+
|
|
22
|
+
import numpy as np
|
|
23
|
+
|
|
24
|
+
from mindspore import log as logger
|
|
25
|
+
from mindspore.profiler.analysis.viewer.base_viewer import BaseViewer
|
|
26
|
+
from mindspore.profiler.common.file_manager import FileManager
|
|
27
|
+
from mindspore.profiler.common.constant import (
|
|
28
|
+
TimelineLayerName,
|
|
29
|
+
OverlapAnalysisTidName,
|
|
30
|
+
ProfilerLevel,
|
|
31
|
+
ProfilerActivity
|
|
32
|
+
)
|
|
33
|
+
from mindspore.profiler.analysis.parser.timeline_event.msprof_event import (
|
|
34
|
+
MsprofCompleteEvent,
|
|
35
|
+
)
|
|
36
|
+
from mindspore.profiler.analysis.parser.timeline_event.timeline_event_pool import (
|
|
37
|
+
TimelineEventPool,
|
|
38
|
+
)
|
|
39
|
+
from mindspore.profiler.analysis.parser.timeline_assembly_factory.trace_view_container import (
|
|
40
|
+
TraceViewContainer,
|
|
41
|
+
)
|
|
42
|
+
from mindspore.profiler.common.log import ProfilerLogger
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class StepTraceTimeHeaders(Enum):
|
|
46
|
+
"""Step trace time headers"""
|
|
47
|
+
STEP = "Step"
|
|
48
|
+
COMPUTING = "Computing"
|
|
49
|
+
COMMUNICATION_NOT_OVERLAPPED = "Communication(Not Overlapped)"
|
|
50
|
+
OVERLAPPED = "Overlapped"
|
|
51
|
+
COMMUNICATION = "Communication"
|
|
52
|
+
FREE = "Free"
|
|
53
|
+
STAGE = "Stage"
|
|
54
|
+
BUBBLE = "Bubble"
|
|
55
|
+
COMMUNICATION_NOT_OVERLAPPED_EXCLUDE_RECEIVE = "Communication(Not Overlapped and Exclude Receive)"
|
|
56
|
+
PREPARING = "Preparing"
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class AscendStepTraceTimeViewer(BaseViewer):
|
|
60
|
+
"""Ascend Step Trace Time Viewer"""
|
|
61
|
+
|
|
62
|
+
STEP_TRACE_TIME_FILE_NAME = "step_trace_time.csv"
|
|
63
|
+
STEP_TRACE_TIME_HEADERS = [header.value for header in StepTraceTimeHeaders]
|
|
64
|
+
|
|
65
|
+
# HCCL Send, Recv op pattern
|
|
66
|
+
PP_OP_PATTERN = (
|
|
67
|
+
# eg: hcom_BatchSendRecv__101_0_1
|
|
68
|
+
re.compile(r"^hcom_\w+SendRecv__\d+"),
|
|
69
|
+
# eg: hcom_send__101_0_1
|
|
70
|
+
re.compile(r"hcom_send__\d+"),
|
|
71
|
+
# eg: hcom_receive__101_0_1
|
|
72
|
+
re.compile(r"hcom_receive__\d+"),
|
|
73
|
+
re.compile(r"Receive-op"),
|
|
74
|
+
re.compile(r"Send-op"),
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
# numpy array dtype
|
|
78
|
+
OVERLAP_DTYPE = np.dtype([("ts", object), ("dur", object)])
|
|
79
|
+
HCCL_DTYPE = np.dtype([("name", object), ("ts", object), ("dur", object)])
|
|
80
|
+
|
|
81
|
+
def __init__(self, **kwargs):
|
|
82
|
+
super().__init__()
|
|
83
|
+
self._save_path = os.path.join(
|
|
84
|
+
kwargs.get("ascend_profiler_output_path"), self.STEP_TRACE_TIME_FILE_NAME
|
|
85
|
+
)
|
|
86
|
+
self._profiler_level = kwargs.get("profiler_level")
|
|
87
|
+
self._ascend_ms_dir = kwargs.get("ascend_ms_dir")
|
|
88
|
+
self._activities = kwargs.get("activities")
|
|
89
|
+
ProfilerLogger.init(self._ascend_ms_dir)
|
|
90
|
+
self._logger = ProfilerLogger.get_instance()
|
|
91
|
+
self.step_trace_time_data_list = []
|
|
92
|
+
self.trace_container: TraceViewContainer = None
|
|
93
|
+
self.hccl_pool: TimelineEventPool = None
|
|
94
|
+
self.overlap_pool: TimelineEventPool = None
|
|
95
|
+
# HCCL events
|
|
96
|
+
self.hccl_events: List[MsprofCompleteEvent] = None
|
|
97
|
+
# Overlap analysis events
|
|
98
|
+
self.computing_events: List[MsprofCompleteEvent] = None
|
|
99
|
+
self.communication_events: List[MsprofCompleteEvent] = None
|
|
100
|
+
self.communication_not_overlapped_events: List[MsprofCompleteEvent] = None
|
|
101
|
+
self.free_events: List[MsprofCompleteEvent] = None
|
|
102
|
+
# Overlap analysis numpy array
|
|
103
|
+
self.computing_np: np.ndarray = None
|
|
104
|
+
self.communication_np: np.ndarray = None
|
|
105
|
+
self.communication_not_overlapped_np: np.ndarray = None
|
|
106
|
+
self.free_np: np.ndarray = None
|
|
107
|
+
# HCCL numpy array
|
|
108
|
+
self.hccl_events_np: np.ndarray = None
|
|
109
|
+
|
|
110
|
+
def save(self, data: Any):
|
|
111
|
+
"""
|
|
112
|
+
Save step trace time data to csv file
|
|
113
|
+
"""
|
|
114
|
+
self._logger.info("AscendStepTraceTimeViewer start")
|
|
115
|
+
if self._profiler_level == ProfilerLevel.LevelNone.value:
|
|
116
|
+
return
|
|
117
|
+
try:
|
|
118
|
+
self._check_input_data(data)
|
|
119
|
+
self._convert_events_to_numpy()
|
|
120
|
+
self._calculate_step_trace_time()
|
|
121
|
+
self._write_data()
|
|
122
|
+
except Exception as e: # pylint: disable=W0703
|
|
123
|
+
self._logger.error("Failed to save step trace time data, error: %s", str(e), exc_info=True)
|
|
124
|
+
self._logger.info("AscendStepTraceTimeViewer end")
|
|
125
|
+
|
|
126
|
+
def _write_data(self):
|
|
127
|
+
"""
|
|
128
|
+
Write step trace time data to csv file
|
|
129
|
+
"""
|
|
130
|
+
self._logger.info("Write step trace time data start")
|
|
131
|
+
data = [[str(item.get(header, "")) for header in self.STEP_TRACE_TIME_HEADERS]
|
|
132
|
+
for item in self.step_trace_time_data_list]
|
|
133
|
+
FileManager.create_csv_file(
|
|
134
|
+
self._save_path,
|
|
135
|
+
data,
|
|
136
|
+
self.STEP_TRACE_TIME_HEADERS,
|
|
137
|
+
)
|
|
138
|
+
self._logger.info("Write step trace time data done, %d rows saved, save path: %s", len(data), self._save_path)
|
|
139
|
+
|
|
140
|
+
def _check_input_data(self, data: Any):
|
|
141
|
+
"""
|
|
142
|
+
Check input data and initialize data
|
|
143
|
+
"""
|
|
144
|
+
self.trace_container: TraceViewContainer = data.get(
|
|
145
|
+
"trace_view_container", None
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
if self.trace_container is None:
|
|
149
|
+
raise ValueError("trace is empty")
|
|
150
|
+
|
|
151
|
+
self.overlap_pool: TimelineEventPool = self.trace_container.get_pool_by_name(
|
|
152
|
+
TimelineLayerName.OVERLAP_ANALYSIS.value
|
|
153
|
+
)
|
|
154
|
+
self.hccl_pool: TimelineEventPool = self.trace_container.get_pool_by_name(
|
|
155
|
+
TimelineLayerName.HCCL.value
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
if self.overlap_pool is None:
|
|
159
|
+
raise ValueError("overlap pool is empty")
|
|
160
|
+
|
|
161
|
+
self.computing_events: List[MsprofCompleteEvent] = (
|
|
162
|
+
self.overlap_pool.get_events_by_name(OverlapAnalysisTidName.COMPUTING.value)
|
|
163
|
+
)
|
|
164
|
+
self.communication_events: List[MsprofCompleteEvent] = (
|
|
165
|
+
self.overlap_pool.get_events_by_name(
|
|
166
|
+
OverlapAnalysisTidName.COMMUNICATION.value
|
|
167
|
+
)
|
|
168
|
+
)
|
|
169
|
+
self.communication_not_overlapped_events: List[MsprofCompleteEvent] = (
|
|
170
|
+
self.overlap_pool.get_events_by_name(
|
|
171
|
+
OverlapAnalysisTidName.COMMUNICATION_NOT_OVERLAP.value
|
|
172
|
+
)
|
|
173
|
+
)
|
|
174
|
+
self.free_events: List[MsprofCompleteEvent] = (
|
|
175
|
+
self.overlap_pool.get_events_by_name(OverlapAnalysisTidName.FREE.value)
|
|
176
|
+
)
|
|
177
|
+
if self.hccl_pool is not None:
|
|
178
|
+
self.hccl_events: List[MsprofCompleteEvent] = (
|
|
179
|
+
self.hccl_pool.get_complete_events()
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
def _convert_overlap_events_to_numpy(
|
|
183
|
+
self, events: List[MsprofCompleteEvent], dtype
|
|
184
|
+
):
|
|
185
|
+
"""
|
|
186
|
+
Convert overlap events to numpy array
|
|
187
|
+
"""
|
|
188
|
+
return np.array([(event.ts, event.dur) for event in events], dtype=dtype)
|
|
189
|
+
|
|
190
|
+
def _convert_events_to_numpy(self):
|
|
191
|
+
"""
|
|
192
|
+
Convert events to numpy array
|
|
193
|
+
"""
|
|
194
|
+
self.computing_np = self._convert_overlap_events_to_numpy(
|
|
195
|
+
self.computing_events, self.OVERLAP_DTYPE
|
|
196
|
+
)
|
|
197
|
+
self.communication_np = self._convert_overlap_events_to_numpy(
|
|
198
|
+
self.communication_events, self.OVERLAP_DTYPE
|
|
199
|
+
)
|
|
200
|
+
self.communication_not_overlapped_np = self._convert_overlap_events_to_numpy(
|
|
201
|
+
self.communication_not_overlapped_events, self.OVERLAP_DTYPE
|
|
202
|
+
)
|
|
203
|
+
self.free_np = self._convert_overlap_events_to_numpy(
|
|
204
|
+
self.free_events, self.OVERLAP_DTYPE
|
|
205
|
+
)
|
|
206
|
+
self.computing_np = np.sort(self.computing_np, order="ts")
|
|
207
|
+
self.communication_np = np.sort(self.communication_np, order="ts")
|
|
208
|
+
self.communication_not_overlapped_np = np.sort(
|
|
209
|
+
self.communication_not_overlapped_np, order="ts"
|
|
210
|
+
)
|
|
211
|
+
self.free_np = np.sort(self.free_np, order="ts")
|
|
212
|
+
|
|
213
|
+
if self.hccl_events is not None:
|
|
214
|
+
self.hccl_events_np = np.array(
|
|
215
|
+
[(event.name, event.ts, event.dur) for event in self.hccl_events],
|
|
216
|
+
dtype=self.HCCL_DTYPE,
|
|
217
|
+
)
|
|
218
|
+
self.hccl_events_np = np.sort(self.hccl_events_np, order="ts")
|
|
219
|
+
|
|
220
|
+
def _calculate_step_trace_time(self):
|
|
221
|
+
"""
|
|
222
|
+
Calculate step trace time data
|
|
223
|
+
"""
|
|
224
|
+
step_id_to_time_dict = self._init_step_dict()
|
|
225
|
+
self.generate_step_trace_time_data(step_id_to_time_dict)
|
|
226
|
+
|
|
227
|
+
def _init_step_dict(self):
|
|
228
|
+
"""
|
|
229
|
+
Init step list.
|
|
230
|
+
"""
|
|
231
|
+
return self.trace_container.get_step_id_time_dict() or {0: (Decimal('0'), Decimal('Infinity'))}
|
|
232
|
+
|
|
233
|
+
def generate_step_trace_time_data(self, step_id_to_time_dict):
|
|
234
|
+
"""
|
|
235
|
+
Generate step trace time data
|
|
236
|
+
"""
|
|
237
|
+
for step_id, (start_time, end_time) in step_id_to_time_dict.items():
|
|
238
|
+
# step id、computing time、communication time、communication not overlapped time、free time
|
|
239
|
+
computing_time = self._calculate_event_total_time_by_step(self.computing_np, start_time, end_time)
|
|
240
|
+
communication_time = self._calculate_event_total_time_by_step(self.communication_np, start_time, end_time)
|
|
241
|
+
communication_not_over_lapped_time = self._calculate_event_total_time_by_step(
|
|
242
|
+
self.communication_not_overlapped_np, start_time, end_time)
|
|
243
|
+
free_time = self._calculate_free_event_total_time_by_step(self.free_np, start_time, end_time)
|
|
244
|
+
step_trace_time_data = {StepTraceTimeHeaders.STEP.value: step_id,
|
|
245
|
+
StepTraceTimeHeaders.COMPUTING.value: computing_time,
|
|
246
|
+
StepTraceTimeHeaders.COMMUNICATION.value: communication_time,
|
|
247
|
+
StepTraceTimeHeaders.COMMUNICATION_NOT_OVERLAPPED.value:
|
|
248
|
+
communication_not_over_lapped_time,
|
|
249
|
+
StepTraceTimeHeaders.FREE.value: free_time}
|
|
250
|
+
# overlapped time
|
|
251
|
+
step_trace_time_data[StepTraceTimeHeaders.OVERLAPPED.value] = (
|
|
252
|
+
step_trace_time_data[StepTraceTimeHeaders.COMMUNICATION.value]
|
|
253
|
+
- step_trace_time_data[StepTraceTimeHeaders.COMMUNICATION_NOT_OVERLAPPED.value]
|
|
254
|
+
)
|
|
255
|
+
# stage time && bubble time
|
|
256
|
+
(
|
|
257
|
+
step_trace_time_data[StepTraceTimeHeaders.STAGE.value],
|
|
258
|
+
step_trace_time_data[StepTraceTimeHeaders.BUBBLE.value],
|
|
259
|
+
) = self._calculate_stage_bubble(start_time, end_time)
|
|
260
|
+
# communication not overlapped time exclude receive
|
|
261
|
+
step_trace_time_data[StepTraceTimeHeaders.COMMUNICATION_NOT_OVERLAPPED_EXCLUDE_RECEIVE.value] = (
|
|
262
|
+
step_trace_time_data[StepTraceTimeHeaders.COMMUNICATION_NOT_OVERLAPPED.value]
|
|
263
|
+
- step_trace_time_data[StepTraceTimeHeaders.BUBBLE.value]
|
|
264
|
+
)
|
|
265
|
+
step_trace_time_data[StepTraceTimeHeaders.PREPARING.value] = self._calculate_prepare_time_by_step(
|
|
266
|
+
self.computing_np, self.communication_np, start_time, step_id
|
|
267
|
+
)
|
|
268
|
+
self.step_trace_time_data_list.append(step_trace_time_data)
|
|
269
|
+
|
|
270
|
+
def _calculate_event_total_time_by_step(self, times: np.ndarray, ts: Decimal, es: Decimal) -> Decimal:
|
|
271
|
+
"""
|
|
272
|
+
Calculate event total time by step.
|
|
273
|
+
"""
|
|
274
|
+
|
|
275
|
+
ts_values = times['ts']
|
|
276
|
+
|
|
277
|
+
mask = (ts_values >= ts) & (ts_values <= es)
|
|
278
|
+
filtered_times = times[mask]
|
|
279
|
+
|
|
280
|
+
return Decimal(str(filtered_times['dur'].sum())).quantize(Decimal('0.000'))
|
|
281
|
+
|
|
282
|
+
def _calculate_free_event_total_time_by_step(self, times: np.ndarray, ts: Decimal, es: Decimal) -> Decimal:
|
|
283
|
+
"""
|
|
284
|
+
Calculate free event total time by step, with clipping of events that exceed the time range.
|
|
285
|
+
"""
|
|
286
|
+
start_times = times['ts']
|
|
287
|
+
durations = times['dur']
|
|
288
|
+
end_times = start_times + durations
|
|
289
|
+
|
|
290
|
+
# Clip start times to ts and end times to es
|
|
291
|
+
clipped_start_times = np.maximum(start_times, ts)
|
|
292
|
+
clipped_end_times = np.minimum(end_times, es)
|
|
293
|
+
|
|
294
|
+
# Calculate the clipped durations
|
|
295
|
+
clipped_durations = np.maximum(clipped_end_times - clipped_start_times, Decimal('0.000'))
|
|
296
|
+
|
|
297
|
+
return Decimal(sum(clipped_durations)).quantize(Decimal('0.000'))
|
|
298
|
+
|
|
299
|
+
def _calculate_event_first_time_by_step(self, times: np.ndarray, ts: Decimal) -> Optional[Decimal]:
|
|
300
|
+
"""
|
|
301
|
+
Calculate event first time by step.
|
|
302
|
+
"""
|
|
303
|
+
|
|
304
|
+
idx = np.searchsorted(times['ts'], ts)
|
|
305
|
+
|
|
306
|
+
if idx >= len(times):
|
|
307
|
+
return None
|
|
308
|
+
|
|
309
|
+
return Decimal(str(times['ts'][idx])).quantize(Decimal('0.000'))
|
|
310
|
+
|
|
311
|
+
def _calculate_prepare_time_by_step(self, computing_np: np.ndarray, communication_np: np.ndarray,
|
|
312
|
+
ts: Decimal, step_id: int) -> Decimal:
|
|
313
|
+
"""
|
|
314
|
+
calculate prepare time
|
|
315
|
+
"""
|
|
316
|
+
|
|
317
|
+
# No frame work data is collected when no CPU is passed in activities
|
|
318
|
+
if ProfilerActivity.CPU.value not in self._activities:
|
|
319
|
+
return Decimal('0.000')
|
|
320
|
+
|
|
321
|
+
step_computing_first_time = self._calculate_event_first_time_by_step(computing_np, ts)
|
|
322
|
+
step_communication_first_time = self._calculate_event_first_time_by_step(communication_np, ts)
|
|
323
|
+
|
|
324
|
+
if step_computing_first_time and step_communication_first_time:
|
|
325
|
+
step_first_device_task_time = min(step_computing_first_time, step_communication_first_time)
|
|
326
|
+
else:
|
|
327
|
+
step_first_device_task_time = step_computing_first_time or step_communication_first_time
|
|
328
|
+
|
|
329
|
+
if step_first_device_task_time:
|
|
330
|
+
if ts == Decimal("0"): # When Profiler.step() is not used
|
|
331
|
+
fmk_api_events = self.trace_container.get_pool_by_name(
|
|
332
|
+
TimelineLayerName.MINDSPORE.value
|
|
333
|
+
).get_complete_events()
|
|
334
|
+
step_host_start_time = min(event.ts for event in fmk_api_events)
|
|
335
|
+
else:
|
|
336
|
+
step_host_start_time = ts
|
|
337
|
+
step_prepare_time = step_first_device_task_time - step_host_start_time
|
|
338
|
+
return step_prepare_time.quantize(Decimal('0.000'))
|
|
339
|
+
|
|
340
|
+
logger.warning(f"Failed to find device task in step {step_id}, set prepare time to 0")
|
|
341
|
+
return Decimal('0.000')
|
|
342
|
+
|
|
343
|
+
def _calculate_stage_bubble(self, ts: Decimal, es: Decimal) -> Tuple[Decimal, Decimal]:
|
|
344
|
+
"""
|
|
345
|
+
Calculate stage and bubble time
|
|
346
|
+
"""
|
|
347
|
+
if self.hccl_events is None:
|
|
348
|
+
logger.info("HCCL events is empty, skip calculate stage and bubble")
|
|
349
|
+
return Decimal(0), Decimal(0)
|
|
350
|
+
|
|
351
|
+
mask = (self.hccl_events_np["ts"] >= ts) & (self.hccl_events_np["ts"] <= es)
|
|
352
|
+
filtered_hccl_events_np = self.hccl_events_np[mask]
|
|
353
|
+
|
|
354
|
+
if filtered_hccl_events_np.size == 0:
|
|
355
|
+
logger.info("No HCCL events in the given time range, skip calculate stage and bubble")
|
|
356
|
+
return Decimal(0), Decimal(0)
|
|
357
|
+
|
|
358
|
+
total_hccl_time = filtered_hccl_events_np["ts"][-1] - filtered_hccl_events_np["ts"][0]
|
|
359
|
+
bubble_time = np.sum(
|
|
360
|
+
filtered_hccl_events_np["dur"][
|
|
361
|
+
np.array(
|
|
362
|
+
[
|
|
363
|
+
self._is_send_recv_op(name)
|
|
364
|
+
for name in filtered_hccl_events_np["name"]
|
|
365
|
+
]
|
|
366
|
+
)
|
|
367
|
+
]
|
|
368
|
+
)
|
|
369
|
+
stage_time = total_hccl_time - bubble_time
|
|
370
|
+
return stage_time, bubble_time
|
|
371
|
+
|
|
372
|
+
def _is_send_recv_op(self, op_name: str) -> bool:
|
|
373
|
+
"""
|
|
374
|
+
Check if the op is a send or recv op
|
|
375
|
+
"""
|
|
376
|
+
return any(pattern.match(op_name) for pattern in self.PP_OP_PATTERN)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Copyright 2024 Huawei Technologies Co., Ltd
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ============================================================================
|
|
15
|
+
"""ascend timeline viewer"""
|
|
16
|
+
import os
|
|
17
|
+
from typing import List, Dict
|
|
18
|
+
|
|
19
|
+
from mindspore.profiler.analysis.viewer.base_viewer import BaseViewer
|
|
20
|
+
from mindspore.profiler.common.file_manager import FileManager
|
|
21
|
+
from mindspore.profiler.common.log import ProfilerLogger
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class AscendTimelineViewer(BaseViewer):
|
|
25
|
+
"""Ascend Timeline Viewer for analyzing and saving timeline data."""
|
|
26
|
+
|
|
27
|
+
_TRACE_VIEW_FILE_NAME = 'trace_view.json'
|
|
28
|
+
|
|
29
|
+
def __init__(self, **kwargs):
|
|
30
|
+
"""Initialize the AscendTimelineViewer."""
|
|
31
|
+
super().__init__()
|
|
32
|
+
self._save_path = os.path.join(
|
|
33
|
+
kwargs.get("ascend_profiler_output_path"),
|
|
34
|
+
self._TRACE_VIEW_FILE_NAME
|
|
35
|
+
)
|
|
36
|
+
self._ascend_ms_dir = kwargs.get("ascend_ms_dir")
|
|
37
|
+
ProfilerLogger.init(self._ascend_ms_dir)
|
|
38
|
+
self._logger = ProfilerLogger.get_instance()
|
|
39
|
+
|
|
40
|
+
def save(self, data: Dict) -> None:
|
|
41
|
+
"""Get the input data and save the timeline data."""
|
|
42
|
+
self._logger.info("AscendTimelineViewer start")
|
|
43
|
+
try:
|
|
44
|
+
trace_view_container = data.get("trace_view_container", None)
|
|
45
|
+
if not trace_view_container:
|
|
46
|
+
raise RuntimeError("The trace view container is None, Failed to save trace_view.json.")
|
|
47
|
+
trace_view_data = trace_view_container.get_trace_view()
|
|
48
|
+
self._save_data(trace_view_data)
|
|
49
|
+
self._logger.info("Trace viewer save trace_view.json done")
|
|
50
|
+
except Exception as e: # pylint: disable=W0703
|
|
51
|
+
self._logger.error("Failed to save trace_view.json: %s", e, exc_info=True)
|
|
52
|
+
self._logger.info("AscendTimelineViewer end")
|
|
53
|
+
|
|
54
|
+
def _save_data(self, timeline_data: List[Dict]) -> None:
|
|
55
|
+
"""Save the timeline data to a JSON file."""
|
|
56
|
+
self._logger.info("Trace view saved start")
|
|
57
|
+
FileManager.create_json_file(self._save_path, timeline_data)
|
|
58
|
+
self._logger.info("Trace view saved done, save path: %s", self._save_path)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Copyright 2024 Huawei Technologies Co., Ltd
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ============================================================================
|
|
15
|
+
"""BaseViewer class"""
|
|
16
|
+
from abc import ABC, abstractmethod
|
|
17
|
+
from typing import Any
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class BaseViewer(ABC):
|
|
21
|
+
def __init__(self):
|
|
22
|
+
pass
|
|
23
|
+
|
|
24
|
+
@abstractmethod
|
|
25
|
+
def save(self, data: Any):
|
|
26
|
+
raise NotImplementedError("Subclasses should implement this!")
|
|
@@ -0,0 +1,96 @@
|
|
|
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
|
+
"""ms dataset viewer"""
|
|
16
|
+
import os
|
|
17
|
+
from collections import defaultdict
|
|
18
|
+
from typing import List, Dict, Any
|
|
19
|
+
|
|
20
|
+
from mindspore import log as logger
|
|
21
|
+
from mindspore.profiler.common.constant import FileConstant
|
|
22
|
+
from mindspore.profiler.common.file_manager import FileManager
|
|
23
|
+
from mindspore.profiler.analysis.viewer.base_viewer import BaseViewer
|
|
24
|
+
from mindspore.profiler.analysis.parser.timeline_event.fwk_event import (
|
|
25
|
+
FwkCompleteEvent,
|
|
26
|
+
OpRangeStructField,
|
|
27
|
+
)
|
|
28
|
+
from mindspore.profiler.common.log import ProfilerLogger
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class MsDatasetViewer(BaseViewer):
|
|
32
|
+
"""Viewer for MindSpore dataset profiling data."""
|
|
33
|
+
|
|
34
|
+
_DATASET_FILE_NAME = 'dataset.csv'
|
|
35
|
+
_DATASET_OP_PREFIX = 'Dataset'
|
|
36
|
+
_COL_NAMES = ['Operation', 'Stage', 'Occurrences', 'Avg. time (us)', 'Custom Info']
|
|
37
|
+
|
|
38
|
+
def __init__(self, **kwargs):
|
|
39
|
+
super().__init__()
|
|
40
|
+
self._save_path = os.path.join(
|
|
41
|
+
kwargs.get("ascend_profiler_output_path"),
|
|
42
|
+
self._DATASET_FILE_NAME
|
|
43
|
+
)
|
|
44
|
+
self._ascend_ms_dir = kwargs.get("ascend_ms_dir")
|
|
45
|
+
ProfilerLogger.init(self._ascend_ms_dir)
|
|
46
|
+
self._logger = ProfilerLogger.get_instance()
|
|
47
|
+
|
|
48
|
+
def save(self, data: Dict[str, Any]) -> None:
|
|
49
|
+
"""Process and save dataset profiling data."""
|
|
50
|
+
self._logger.info("MsDatasetViewer start")
|
|
51
|
+
try:
|
|
52
|
+
op_range_list = data.get("mindspore_op_list", [])
|
|
53
|
+
dataset_statistics = self._calculate_data(op_range_list)
|
|
54
|
+
self._save_data(dataset_statistics)
|
|
55
|
+
except Exception as e: # pylint: disable=W0703
|
|
56
|
+
self._logger.error("Failed to save dataset.csv: %s", e, exc_info=True)
|
|
57
|
+
self._logger.info("MsDatasetViewer end")
|
|
58
|
+
|
|
59
|
+
def _save_data(self, dataset_statistics: List[List[Any]]) -> None:
|
|
60
|
+
"""Save dataset statistics to a CSV file."""
|
|
61
|
+
if not dataset_statistics:
|
|
62
|
+
return
|
|
63
|
+
self._logger.info("Save dataset statistics start")
|
|
64
|
+
FileManager.create_csv_file(self._save_path, dataset_statistics, self._COL_NAMES)
|
|
65
|
+
self._logger.info("Save dataset statistics done")
|
|
66
|
+
|
|
67
|
+
def _calculate_data(self, fwk_tlv_data: List[Dict]) -> List[List[Any]]:
|
|
68
|
+
"""Calculate statistics for dataset operations."""
|
|
69
|
+
dataset_op_data = []
|
|
70
|
+
for data in fwk_tlv_data:
|
|
71
|
+
if (data[FileConstant.FIX_SIZE_DATA][OpRangeStructField.START_TIME_NS.value] <
|
|
72
|
+
data[FileConstant.FIX_SIZE_DATA][OpRangeStructField.END_TIME_NS.value]): # dur > 0
|
|
73
|
+
name = data.get(OpRangeStructField.MODULE_GRAPH.value, "")
|
|
74
|
+
if name == self._DATASET_OP_PREFIX:
|
|
75
|
+
dataset_op_data.append(FwkCompleteEvent(data))
|
|
76
|
+
|
|
77
|
+
dataset_op_stats = defaultdict(list)
|
|
78
|
+
for op_data in dataset_op_data:
|
|
79
|
+
op_name_list = op_data.name.split('::')
|
|
80
|
+
if len(op_name_list) != 3:
|
|
81
|
+
logger.warning(f"Invalid dataset op name: {op_data.name}")
|
|
82
|
+
continue
|
|
83
|
+
_, event, stage = op_data.name.split('::')
|
|
84
|
+
key = f"{event}::{stage}::{op_data.custom_info}"
|
|
85
|
+
dataset_op_stats[key].append(op_data.dur)
|
|
86
|
+
|
|
87
|
+
dataset_statistics = []
|
|
88
|
+
for key, durations in dataset_op_stats.items():
|
|
89
|
+
event, stage, custom_info = key.split('::')
|
|
90
|
+
occurrence_count = len(durations)
|
|
91
|
+
if occurrence_count == 0:
|
|
92
|
+
continue
|
|
93
|
+
average_duration = round(float(sum(durations) / occurrence_count), 2)
|
|
94
|
+
dataset_statistics.append([event, stage, occurrence_count, average_duration, custom_info])
|
|
95
|
+
|
|
96
|
+
return dataset_statistics
|