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,372 @@
|
|
|
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 communication viewer"""
|
|
16
|
+
import os
|
|
17
|
+
import re
|
|
18
|
+
from collections import defaultdict
|
|
19
|
+
|
|
20
|
+
from typing import Dict
|
|
21
|
+
from mindspore.profiler.analysis.viewer.base_viewer import BaseViewer
|
|
22
|
+
from mindspore.profiler.common.file_manager import FileManager
|
|
23
|
+
from mindspore.profiler.common.log import ProfilerLogger
|
|
24
|
+
|
|
25
|
+
from mindspore import log as logger
|
|
26
|
+
from mindspore.profiler.common.constant import JitLevel
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class AscendCommunicationViewer(BaseViewer):
|
|
30
|
+
"""Ascend communication viewer"""
|
|
31
|
+
|
|
32
|
+
COMMUNICATION_TIME_INFO = "Communication Time Info"
|
|
33
|
+
START_TIMESTAMP = "Start Timestamp(us)"
|
|
34
|
+
COMMUNICATION_BANDWIDTH_INFO = "Communication Bandwidth Info"
|
|
35
|
+
HCOM_SEND = "Send"
|
|
36
|
+
HCOM_RECEIVE = "Receive"
|
|
37
|
+
TOTAL = "Total"
|
|
38
|
+
SYNCHRONIZATION_TIME_RATIO = "Synchronization Time Ratio"
|
|
39
|
+
SYNCHRONIZATION_TIME_MS = "Synchronization Time(ms)"
|
|
40
|
+
WAIT_TIME_RATIO = "Wait Time Ratio"
|
|
41
|
+
TRANSIT_TIME_MS = "Transit Time(ms)"
|
|
42
|
+
TRANSIT_SIZE_MB = "Transit Size(MB)"
|
|
43
|
+
SIZE_DISTRIBUTION = "Size Distribution"
|
|
44
|
+
WAIT_TIME_MS = "Wait Time(ms)"
|
|
45
|
+
BANDWIDTH_GB_S = "Bandwidth(GB/s)"
|
|
46
|
+
COMMUNICATION = "communication.json"
|
|
47
|
+
COMMUNICATION_MATRIX = "communication_matrix.json"
|
|
48
|
+
P2P = "p2p"
|
|
49
|
+
COLLECTIVE = "collective"
|
|
50
|
+
TRANSPORT_TYPE = "Transport Type"
|
|
51
|
+
PATTERN1 = re.compile(r"receive|send")
|
|
52
|
+
PATTERN2 = re.compile(r"invalid|broadcast|allreduce|reduce|"
|
|
53
|
+
r"allgather|reducescatter|scatter|alltoall|alltoallv|alltoallvc")
|
|
54
|
+
|
|
55
|
+
def __init__(self, **kwargs):
|
|
56
|
+
super().__init__()
|
|
57
|
+
self.step_list = []
|
|
58
|
+
self.output_communication = {}
|
|
59
|
+
self.output_matrix_data = {}
|
|
60
|
+
self._output_path = kwargs.get("ascend_profiler_output_path")
|
|
61
|
+
self._msprof_analyze_output_path = kwargs.get("msprof_analyze_output_path")
|
|
62
|
+
self._ascend_ms_dir = kwargs.get("ascend_ms_dir")
|
|
63
|
+
self._is_set_schedule = kwargs.get("is_set_schedule")
|
|
64
|
+
self._jit_level = kwargs.get("jit_level")
|
|
65
|
+
ProfilerLogger.init(self._ascend_ms_dir)
|
|
66
|
+
self._logger = ProfilerLogger.get_instance()
|
|
67
|
+
self._communication_input_path = os.path.join(
|
|
68
|
+
self._msprof_analyze_output_path,
|
|
69
|
+
self.COMMUNICATION
|
|
70
|
+
)
|
|
71
|
+
self._communication_matrix_input_path = os.path.join(
|
|
72
|
+
self._msprof_analyze_output_path,
|
|
73
|
+
self.COMMUNICATION_MATRIX
|
|
74
|
+
)
|
|
75
|
+
self._communication_output_path = os.path.join(
|
|
76
|
+
self._output_path,
|
|
77
|
+
self.COMMUNICATION
|
|
78
|
+
)
|
|
79
|
+
self._communication_matrix_output_path = os.path.join(
|
|
80
|
+
self._output_path,
|
|
81
|
+
self.COMMUNICATION_MATRIX
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
def save(self, data=None):
|
|
85
|
+
"""
|
|
86
|
+
Save ascend integrate data.
|
|
87
|
+
"""
|
|
88
|
+
self._logger.info("AscendCommunicationViewer start")
|
|
89
|
+
try:
|
|
90
|
+
self._init_step_list(data)
|
|
91
|
+
self._generate_communication()
|
|
92
|
+
self._generate_matrix()
|
|
93
|
+
self._save_analyze_data()
|
|
94
|
+
except Exception as e: # pylint: disable=W0703
|
|
95
|
+
self._logger.error("Failed to save ascend communication data, error: %s", e, exc_info=True)
|
|
96
|
+
self._logger.info("AscendCommunicationViewer end")
|
|
97
|
+
|
|
98
|
+
def _init_step_list(self, data):
|
|
99
|
+
"""
|
|
100
|
+
Init step list.
|
|
101
|
+
"""
|
|
102
|
+
trace_container = data.get("trace_view_container", None)
|
|
103
|
+
if trace_container is None:
|
|
104
|
+
raise ValueError("trace view container is None")
|
|
105
|
+
step_id_to_time_dict = trace_container.get_step_id_time_dict()
|
|
106
|
+
|
|
107
|
+
if not self._is_set_schedule or self._jit_level == JitLevel.GRAPH_LEVEL or not step_id_to_time_dict:
|
|
108
|
+
self._update_default_step_list()
|
|
109
|
+
else:
|
|
110
|
+
self._update_step_list(step_id_to_time_dict)
|
|
111
|
+
|
|
112
|
+
def _update_default_step_list(self):
|
|
113
|
+
"""
|
|
114
|
+
When the step dict is empty, it is set to the default value.
|
|
115
|
+
"""
|
|
116
|
+
self.step_list = [{"step_id": "0", "start_ts": 0, "end_ts": float('inf'), "comm_ops": {}}]
|
|
117
|
+
|
|
118
|
+
def _update_step_list(self, step_id_to_time_dict: Dict):
|
|
119
|
+
"""
|
|
120
|
+
When the step dict is not empty, set a value that contains the step id.
|
|
121
|
+
"""
|
|
122
|
+
for step_id, (start_time, end_time) in step_id_to_time_dict.items():
|
|
123
|
+
step_dict = {
|
|
124
|
+
"step_id": step_id,
|
|
125
|
+
"start_ts": start_time,
|
|
126
|
+
"end_ts": end_time,
|
|
127
|
+
"comm_ops": {}
|
|
128
|
+
}
|
|
129
|
+
self.step_list.append(step_dict)
|
|
130
|
+
|
|
131
|
+
def _save_analyze_data(self):
|
|
132
|
+
"""
|
|
133
|
+
Save analyse data
|
|
134
|
+
"""
|
|
135
|
+
self._logger.info("Save ascend communication data start")
|
|
136
|
+
if not self.output_communication:
|
|
137
|
+
return
|
|
138
|
+
FileManager.create_json_file(self._communication_output_path, self.output_communication)
|
|
139
|
+
self._logger.info("Save ascend communication data done")
|
|
140
|
+
if not self.output_matrix_data:
|
|
141
|
+
return
|
|
142
|
+
FileManager.create_json_file(self._communication_matrix_output_path, self.output_matrix_data)
|
|
143
|
+
self._logger.info("Save ascend communication matrix data done")
|
|
144
|
+
|
|
145
|
+
@staticmethod
|
|
146
|
+
def _combine_size_distribution(op_dict: dict, total_dict: dict):
|
|
147
|
+
"""combine size distribution"""
|
|
148
|
+
for size, size_info in op_dict.items():
|
|
149
|
+
total_dict[size][0] += size_info[0]
|
|
150
|
+
total_dict[size][1] += size_info[1]
|
|
151
|
+
|
|
152
|
+
@staticmethod
|
|
153
|
+
def _compute_ratio(dividend: float, divisor: float):
|
|
154
|
+
"""compute ratio"""
|
|
155
|
+
if abs(divisor) < 1e-15:
|
|
156
|
+
return 0
|
|
157
|
+
return round(dividend / divisor, 4)
|
|
158
|
+
|
|
159
|
+
def _generate_communication(self):
|
|
160
|
+
"""
|
|
161
|
+
generate communication.json
|
|
162
|
+
"""
|
|
163
|
+
if not os.path.exists(self._communication_input_path):
|
|
164
|
+
return
|
|
165
|
+
communication_data = FileManager.read_json_file(self._communication_input_path)
|
|
166
|
+
if not communication_data:
|
|
167
|
+
return
|
|
168
|
+
self._split_comm_op_by_step(communication_data)
|
|
169
|
+
|
|
170
|
+
for step_info in self.step_list:
|
|
171
|
+
step = "step" + step_info.get("step_id") if step_info.get("step_id") else "step"
|
|
172
|
+
self.output_communication[step] = self._get_communication_ops_dict(step_info.get("comm_ops"))
|
|
173
|
+
|
|
174
|
+
def _generate_matrix(self):
|
|
175
|
+
"""generate matrix"""
|
|
176
|
+
if not os.path.exists(self._communication_matrix_input_path):
|
|
177
|
+
return
|
|
178
|
+
matrix_data = FileManager.read_json_file(self._communication_matrix_input_path)
|
|
179
|
+
if not matrix_data:
|
|
180
|
+
return
|
|
181
|
+
matrix_data_by_step = self._split_matrix_by_step(matrix_data)
|
|
182
|
+
|
|
183
|
+
for step, comm_matrix_data in matrix_data_by_step.items():
|
|
184
|
+
self.output_matrix_data[step] = self._get_matrix_ops_dict(comm_matrix_data)
|
|
185
|
+
|
|
186
|
+
def _split_comm_op_by_step(self, communication_data: dict):
|
|
187
|
+
"""split comm op by step"""
|
|
188
|
+
if len(self.step_list) == 1:
|
|
189
|
+
self.step_list[0]["comm_ops"] = communication_data
|
|
190
|
+
for communication_op, communication_op_info in communication_data.items():
|
|
191
|
+
start_time = communication_op_info.get(self.COMMUNICATION_TIME_INFO, {}).get(self.START_TIMESTAMP)
|
|
192
|
+
for step_info in self.step_list:
|
|
193
|
+
if step_info.get("start_ts", -1) <= start_time <= step_info.get("end_ts", -1):
|
|
194
|
+
step_info.get("comm_ops", {})[communication_op] = communication_op_info
|
|
195
|
+
break
|
|
196
|
+
|
|
197
|
+
def _split_communication_p2p_ops(self, op_data: dict):
|
|
198
|
+
"""
|
|
199
|
+
split communicate
|
|
200
|
+
"""
|
|
201
|
+
comm_op_dict = {self.P2P: {}, self.COLLECTIVE: {}}
|
|
202
|
+
for communication_op, communication_info in op_data.items():
|
|
203
|
+
if communication_op.find(self.HCOM_SEND) != -1 or communication_op.find(self.HCOM_RECEIVE) != -1:
|
|
204
|
+
comm_op_dict[self.P2P][communication_op] = communication_info
|
|
205
|
+
elif communication_op.startswith(self.TOTAL):
|
|
206
|
+
continue
|
|
207
|
+
else:
|
|
208
|
+
comm_op_dict[self.COLLECTIVE][communication_op] = communication_info
|
|
209
|
+
return comm_op_dict
|
|
210
|
+
|
|
211
|
+
def _split_matrix_by_step(self, matrix_data: dict) -> dict:
|
|
212
|
+
"""
|
|
213
|
+
split matrix by step
|
|
214
|
+
"""
|
|
215
|
+
matrix_data_by_step = {}
|
|
216
|
+
if self._is_step_list_empty():
|
|
217
|
+
matrix_data_by_step["step"] = matrix_data
|
|
218
|
+
return matrix_data_by_step
|
|
219
|
+
|
|
220
|
+
for comm_op in matrix_data:
|
|
221
|
+
for step_info in self.step_list:
|
|
222
|
+
if comm_op in step_info.get("comm_ops", {}):
|
|
223
|
+
step = "step" + step_info.get("step_id") if step_info.get("step_id") else "step"
|
|
224
|
+
matrix_data_by_step.setdefault(step, {})[comm_op] = matrix_data.get(comm_op)
|
|
225
|
+
break
|
|
226
|
+
return matrix_data_by_step
|
|
227
|
+
|
|
228
|
+
def _get_communication_ops_dict(self, op_data: dict) -> dict:
|
|
229
|
+
"""get communication ops dict"""
|
|
230
|
+
comm_op_dict = self._split_communication_p2p_ops(op_data)
|
|
231
|
+
self._compute_total_info(comm_op_dict[self.P2P])
|
|
232
|
+
self._compute_total_info(comm_op_dict[self.COLLECTIVE])
|
|
233
|
+
return comm_op_dict
|
|
234
|
+
|
|
235
|
+
def _integrate_matrix_data(self, comm_op_dict_simple):
|
|
236
|
+
"""integrate the matrix data"""
|
|
237
|
+
comm_op_dict = defaultdict(dict)
|
|
238
|
+
for new_comm_op_name, data in comm_op_dict_simple.items():
|
|
239
|
+
data.sort(key=lambda x: x[self.BANDWIDTH_GB_S], reverse=True)
|
|
240
|
+
t_type = data[0].get(self.TRANSPORT_TYPE, '')
|
|
241
|
+
t_size = sum(x.get(self.TRANSIT_SIZE_MB, 0) for x in data)
|
|
242
|
+
t_time = sum(x.get(self.TRANSIT_TIME_MS, 0) for x in data)
|
|
243
|
+
bandwidth = self._compute_ratio(t_size, t_time)
|
|
244
|
+
|
|
245
|
+
link = new_comm_op_name[2]
|
|
246
|
+
|
|
247
|
+
comm_op_dict[f'{new_comm_op_name[0]}-top1@{new_comm_op_name[1]}'].update({link: data[0]})
|
|
248
|
+
comm_op_dict[f'{new_comm_op_name[0]}-middle@{new_comm_op_name[1]}'].update({link: data[len(data) // 2]})
|
|
249
|
+
comm_op_dict[f'{new_comm_op_name[0]}-bottom1@{new_comm_op_name[1]}'].update({link: data[-1]})
|
|
250
|
+
index2 = -2
|
|
251
|
+
index3 = -3
|
|
252
|
+
if len(data) == 1:
|
|
253
|
+
index2 = -1
|
|
254
|
+
index3 = -1
|
|
255
|
+
elif len(data) == 2:
|
|
256
|
+
index3 = -2
|
|
257
|
+
comm_op_dict[f'{new_comm_op_name[0]}-bottom2@{new_comm_op_name[1]}'].update({link: data[index2]})
|
|
258
|
+
comm_op_dict[f'{new_comm_op_name[0]}-bottom3@{new_comm_op_name[1]}'].update({link: data[index3]})
|
|
259
|
+
comm_op_dict[f'{new_comm_op_name[0]}-total@{new_comm_op_name[1]}'].update({link: {
|
|
260
|
+
self.TRANSPORT_TYPE: t_type,
|
|
261
|
+
self.TRANSIT_SIZE_MB: t_size,
|
|
262
|
+
self.TRANSIT_TIME_MS: t_time,
|
|
263
|
+
self.BANDWIDTH_GB_S: bandwidth
|
|
264
|
+
}})
|
|
265
|
+
return comm_op_dict
|
|
266
|
+
|
|
267
|
+
def _get_matrix_ops_dict(self, op_data: dict) -> dict:
|
|
268
|
+
"""parse matrix data"""
|
|
269
|
+
comm_op_dict_simple_p2p = defaultdict(list)
|
|
270
|
+
comm_op_dict_simple_collective = defaultdict(list)
|
|
271
|
+
|
|
272
|
+
for communication_op, communication_info in op_data.items():
|
|
273
|
+
if communication_op.find(self.HCOM_SEND) != -1 or communication_op.find(self.HCOM_RECEIVE) != -1:
|
|
274
|
+
|
|
275
|
+
match_obj = self.PATTERN1.search(communication_op.lower())
|
|
276
|
+
comm_op_type = match_obj.group()
|
|
277
|
+
for link, data in communication_info.items():
|
|
278
|
+
new_comm_op_name = (comm_op_type, communication_op.split("@")[-1], link)
|
|
279
|
+
data['op_name'] = communication_op.split("@")[0]
|
|
280
|
+
comm_op_dict_simple_p2p[new_comm_op_name].append(data)
|
|
281
|
+
|
|
282
|
+
elif communication_op.startswith(self.TOTAL):
|
|
283
|
+
continue
|
|
284
|
+
else:
|
|
285
|
+
match_obj = self.PATTERN2.search(communication_op.lower())
|
|
286
|
+
if not match_obj:
|
|
287
|
+
comm_op_type = communication_op.lower().split('/')[-1].split('-op')[0]
|
|
288
|
+
logger.warning(
|
|
289
|
+
"Communication operator type not found communication_op: %s, use comm_op_type: %s",
|
|
290
|
+
communication_op, comm_op_type)
|
|
291
|
+
else:
|
|
292
|
+
comm_op_type = match_obj.group()
|
|
293
|
+
for link, data in communication_info.items():
|
|
294
|
+
new_comm_op_name = (comm_op_type, communication_op.split("@")[-1], link)
|
|
295
|
+
data['op_name'] = communication_op.split("@")[0]
|
|
296
|
+
comm_op_dict_simple_collective[new_comm_op_name].append(data)
|
|
297
|
+
|
|
298
|
+
comm_op_dict = {self.P2P: self._integrate_matrix_data(comm_op_dict_simple_p2p),
|
|
299
|
+
self.COLLECTIVE: self._integrate_matrix_data(comm_op_dict_simple_collective)}
|
|
300
|
+
|
|
301
|
+
return comm_op_dict
|
|
302
|
+
|
|
303
|
+
def _is_step_list_empty(self):
|
|
304
|
+
"""is step list empty"""
|
|
305
|
+
for step_info in self.step_list:
|
|
306
|
+
if step_info.get("comm_ops"):
|
|
307
|
+
return False
|
|
308
|
+
return True
|
|
309
|
+
|
|
310
|
+
def _compute_total_info(self, comm_ops: dict):
|
|
311
|
+
"""
|
|
312
|
+
compute total info
|
|
313
|
+
"""
|
|
314
|
+
if not comm_ops:
|
|
315
|
+
return
|
|
316
|
+
total_time_info_dict = defaultdict(float)
|
|
317
|
+
total_bandwidth_info_dict = {}
|
|
318
|
+
for _, communication_op_info in comm_ops.items():
|
|
319
|
+
for com_info, com_info_dict in communication_op_info.items():
|
|
320
|
+
if com_info == self.COMMUNICATION_TIME_INFO:
|
|
321
|
+
self._combine_time_info(com_info_dict, total_time_info_dict)
|
|
322
|
+
if com_info == self.COMMUNICATION_BANDWIDTH_INFO:
|
|
323
|
+
self._combine_bandwidth_info(com_info_dict, total_bandwidth_info_dict)
|
|
324
|
+
self._compute_time_ratio(total_time_info_dict)
|
|
325
|
+
self._compute_bandwidth_ratio(total_bandwidth_info_dict)
|
|
326
|
+
comm_ops['Total Op Info'] = {
|
|
327
|
+
self.COMMUNICATION_TIME_INFO: total_time_info_dict,
|
|
328
|
+
self.COMMUNICATION_BANDWIDTH_INFO: total_bandwidth_info_dict
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
def _combine_time_info(self, com_info_dict: dict, total_time_info_dict: dict):
|
|
332
|
+
"""combine time info"""
|
|
333
|
+
ratio_list = [self.WAIT_TIME_RATIO, self.SYNCHRONIZATION_TIME_RATIO]
|
|
334
|
+
for time_info in com_info_dict:
|
|
335
|
+
if time_info not in ratio_list and time_info != self.START_TIMESTAMP:
|
|
336
|
+
total_time_info_dict[time_info] += com_info_dict.get(time_info)
|
|
337
|
+
|
|
338
|
+
def _combine_bandwidth_info(self, com_info_dict: dict, total_bandwidth_info_dict: dict):
|
|
339
|
+
"""
|
|
340
|
+
combine bandwidth info
|
|
341
|
+
"""
|
|
342
|
+
add_list = [self.TRANSIT_TIME_MS, self.TRANSIT_SIZE_MB]
|
|
343
|
+
dict_list = [self.SIZE_DISTRIBUTION]
|
|
344
|
+
for transport_type, part_transport_dict in com_info_dict.items():
|
|
345
|
+
if transport_type not in total_bandwidth_info_dict:
|
|
346
|
+
total_bandwidth_info_dict[transport_type] = {
|
|
347
|
+
self.TRANSIT_TIME_MS: 0,
|
|
348
|
+
self.TRANSIT_SIZE_MB: 0,
|
|
349
|
+
self.SIZE_DISTRIBUTION: defaultdict(lambda: [0, 0])
|
|
350
|
+
}
|
|
351
|
+
for bandwidth_msg, value in part_transport_dict.items():
|
|
352
|
+
if bandwidth_msg in add_list:
|
|
353
|
+
total_bandwidth_info_dict[transport_type][bandwidth_msg] += value
|
|
354
|
+
if bandwidth_msg in dict_list:
|
|
355
|
+
self._combine_size_distribution(value, total_bandwidth_info_dict[transport_type][bandwidth_msg])
|
|
356
|
+
|
|
357
|
+
def _compute_time_ratio(self, total_time_info_dict: dict):
|
|
358
|
+
"""compute time ratio"""
|
|
359
|
+
total_time_info_dict[self.WAIT_TIME_RATIO] = \
|
|
360
|
+
self._compute_ratio(total_time_info_dict.get(self.WAIT_TIME_MS, 0),
|
|
361
|
+
total_time_info_dict.get(self.WAIT_TIME_MS, 0) +
|
|
362
|
+
total_time_info_dict.get(self.TRANSIT_TIME_MS, 0))
|
|
363
|
+
total_time_info_dict[self.SYNCHRONIZATION_TIME_RATIO] = \
|
|
364
|
+
self._compute_ratio(total_time_info_dict.get(self.SYNCHRONIZATION_TIME_MS, 0),
|
|
365
|
+
total_time_info_dict.get(self.TRANSIT_TIME_MS, 0) +
|
|
366
|
+
total_time_info_dict.get(self.SYNCHRONIZATION_TIME_MS, 0))
|
|
367
|
+
|
|
368
|
+
def _compute_bandwidth_ratio(self, total_bandwidth_info_dict: dict):
|
|
369
|
+
"""compute bandwidth ratio"""
|
|
370
|
+
for _, bandwidth_dict in total_bandwidth_info_dict.items():
|
|
371
|
+
self._compute_ratio(bandwidth_dict.get(self.TRANSIT_SIZE_MB, 0),
|
|
372
|
+
bandwidth_dict.get(self.TRANSIT_TIME_MS, 0))
|
|
@@ -0,0 +1,87 @@
|
|
|
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 integrate viewer"""
|
|
16
|
+
import os
|
|
17
|
+
import glob
|
|
18
|
+
from typing import List
|
|
19
|
+
|
|
20
|
+
from mindspore.profiler.analysis.viewer.base_viewer import BaseViewer
|
|
21
|
+
from mindspore.profiler.common.file_manager import FileManager
|
|
22
|
+
from mindspore.profiler.common.log import ProfilerLogger
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class AscendIntegrateViewer(BaseViewer):
|
|
26
|
+
"""Ascend integrate viewer"""
|
|
27
|
+
|
|
28
|
+
CSV_PREFIX_NAME = ["l2_cache", "api_statistic", "op_statistic", "static_op_mem"]
|
|
29
|
+
AI_CPU_CSV_PATTERN = "aicpu_[0-9]*.csv"
|
|
30
|
+
|
|
31
|
+
def __init__(self, **kwargs):
|
|
32
|
+
super().__init__()
|
|
33
|
+
self._output_path = kwargs.get("ascend_profiler_output_path")
|
|
34
|
+
self._framework_path = kwargs.get("framework_path")
|
|
35
|
+
self._analyze_json_path = kwargs.get("analyze_json_path")
|
|
36
|
+
self._msprof_profile_output_path = kwargs.get("msprof_profile_output_path")
|
|
37
|
+
self._ascend_ms_dir = kwargs.get("ascend_ms_dir")
|
|
38
|
+
ProfilerLogger.init(self._ascend_ms_dir)
|
|
39
|
+
self._logger = ProfilerLogger.get_instance()
|
|
40
|
+
|
|
41
|
+
def save(self, data=None):
|
|
42
|
+
"""
|
|
43
|
+
Save ascend integrate data.
|
|
44
|
+
"""
|
|
45
|
+
self._logger.info("AscendIntegrateViewer start")
|
|
46
|
+
try:
|
|
47
|
+
self._copy_msprof_csv_files()
|
|
48
|
+
self._copy_ai_cpu_csv_file()
|
|
49
|
+
except Exception as e: # pylint: disable=W0703
|
|
50
|
+
self._logger.error("Failed to save ascend integrate data, error: %s", e, exc_info=True)
|
|
51
|
+
self._logger.info("AscendIntegrateViewer end")
|
|
52
|
+
|
|
53
|
+
def _copy_csv_files(self, csv_names: List[str], source_path: str):
|
|
54
|
+
"""
|
|
55
|
+
Copy CSV files from source path to output path.
|
|
56
|
+
Args:
|
|
57
|
+
csv_names (List[str]): List of CSV file name prefixes
|
|
58
|
+
source_path (str): Source directory path
|
|
59
|
+
"""
|
|
60
|
+
self._logger.info("Copy csv files start")
|
|
61
|
+
for csv_name in csv_names:
|
|
62
|
+
src_file = os.path.join(source_path, csv_name + "_*")
|
|
63
|
+
src_file_list = glob.glob(src_file)
|
|
64
|
+
if src_file_list:
|
|
65
|
+
dst_file = os.path.join(self._output_path, csv_name + ".csv")
|
|
66
|
+
FileManager.copy_file(src_file_list[0], dst_file)
|
|
67
|
+
self._logger.info("Copy csv file %s to %s", src_file_list[0], dst_file)
|
|
68
|
+
self._logger.info("Copy csv files done")
|
|
69
|
+
|
|
70
|
+
def _copy_ai_cpu_csv_file(self):
|
|
71
|
+
"""
|
|
72
|
+
Copy ai cpu csv files from source path to output path.
|
|
73
|
+
"""
|
|
74
|
+
src_file = os.path.join(self._msprof_profile_output_path, self.AI_CPU_CSV_PATTERN)
|
|
75
|
+
src_file_list = glob.glob(src_file)
|
|
76
|
+
if src_file_list:
|
|
77
|
+
dst_file = os.path.join(self._output_path, "data_preprocess.csv")
|
|
78
|
+
FileManager.copy_file(src_file_list[0], dst_file)
|
|
79
|
+
self._logger.info("Copy aicpu file %s to %s", src_file_list[0], dst_file)
|
|
80
|
+
self._logger.info("Copy aicpu csv files done")
|
|
81
|
+
|
|
82
|
+
def _copy_msprof_csv_files(self):
|
|
83
|
+
"""
|
|
84
|
+
Copy msprof csv files from source path to output path.
|
|
85
|
+
"""
|
|
86
|
+
self._copy_csv_files(self.CSV_PREFIX_NAME, self._msprof_profile_output_path)
|
|
87
|
+
self._logger.info("Copy msprof csv files done")
|