mindspore 2.4.10__cp311-cp311-win_amd64.whl → 2.6.0rc1__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mindspore might be problematic. Click here for more details.
- mindspore/.commit_id +1 -1
- mindspore/Microsoft.VisualStudio.Telemetry.dll +0 -0
- mindspore/Newtonsoft.Json.dll +0 -0
- mindspore/__init__.py +13 -6
- mindspore/_c_dataengine.cp311-win_amd64.pyd +0 -0
- mindspore/_c_expression.cp311-win_amd64.pyd +0 -0
- mindspore/_c_mindrecord.cp311-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/atlprov.dll +0 -0
- 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/c1.dll +0 -0
- mindspore/c1xx.dll +0 -0
- mindspore/c2.dll +0 -0
- 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/dnnl.dll +0 -0
- mindspore/dpcmi.dll +0 -0
- mindspore/experimental/es/embedding_service.py +35 -27
- mindspore/experimental/llm_boost/__init__.py +1 -0
- mindspore/experimental/llm_boost/ascend_native/__init__.py +22 -0
- mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +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_glog.dll +0 -0
- mindspore/mindspore_memory_pool.dll +0 -0
- mindspore/mindspore_ms_backend.dll +0 -0
- mindspore/mindspore_ops.dll +0 -0
- mindspore/{mindspore_backend.dll → mindspore_ops_host.dll} +0 -0
- mindspore/mindspore_ops_kernel_common.dll +0 -0
- mindspore/mindspore_profiler.dll +0 -0
- mindspore/mindspore_pyboost.dll +0 -0
- mindspore/mindspore_pynative.dll +0 -0
- mindspore/mindspore_res_manager.dll +0 -0
- mindspore/mindspore_runtime_pipeline.dll +0 -0
- mindspore/mint/__init__.py +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/msobj140.dll +0 -0
- mindspore/mspdb140.dll +0 -0
- mindspore/mspdbcore.dll +0 -0
- mindspore/mspdbst.dll +0 -0
- mindspore/mspft140.dll +0 -0
- mindspore/msvcdis140.dll +0 -0
- mindspore/msvcp140_1.dll +0 -0
- mindspore/msvcp140_2.dll +0 -0
- mindspore/msvcp140_atomic_wait.dll +0 -0
- mindspore/msvcp140_codecvt_ids.dll +0 -0
- 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/pgodb140.dll +0 -0
- mindspore/pgort140.dll +0 -0
- 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/tbbmalloc.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/vcmeta.dll +0 -0
- mindspore/vcruntime140.dll +0 -0
- mindspore/vcruntime140_1.dll +0 -0
- 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 +587 -418
- {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,251 @@
|
|
|
1
|
+
# Copyright 2022-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
|
+
"""ProfilerParameters"""
|
|
16
|
+
import warnings
|
|
17
|
+
from typing import Dict, Optional, Callable, Any
|
|
18
|
+
|
|
19
|
+
from mindspore import log as logger
|
|
20
|
+
from mindspore.profiler.common.constant import (
|
|
21
|
+
ProfilerLevel,
|
|
22
|
+
ProfilerActivity,
|
|
23
|
+
AicoreMetrics,
|
|
24
|
+
ExportType
|
|
25
|
+
)
|
|
26
|
+
from mindspore.profiler.schedule import Schedule
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ProfilerParameters:
|
|
30
|
+
"""
|
|
31
|
+
Profiler parameters manage all parameters, parameters validation and type conversion.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
# key: Parameter name, value: (type, default value)
|
|
35
|
+
PARAMS: Dict[str, tuple] = {
|
|
36
|
+
"output_path": (str, "./data"),
|
|
37
|
+
"profiler_level": (ProfilerLevel, ProfilerLevel.Level0),
|
|
38
|
+
"activities": (list, [ProfilerActivity.CPU, ProfilerActivity.NPU]),
|
|
39
|
+
"aic_metrics": (AicoreMetrics, AicoreMetrics.AiCoreNone),
|
|
40
|
+
"with_stack": (bool, False),
|
|
41
|
+
"profile_memory": (bool, False),
|
|
42
|
+
"data_process": (bool, False),
|
|
43
|
+
"parallel_strategy": (bool, False),
|
|
44
|
+
"start_profile": (bool, True),
|
|
45
|
+
"l2_cache": (bool, False),
|
|
46
|
+
"hbm_ddr": (bool, False),
|
|
47
|
+
"pcie": (bool, False),
|
|
48
|
+
"sync_enable": (bool, True),
|
|
49
|
+
"data_simplification": (bool, True),
|
|
50
|
+
"export_type": (list, [ExportType.Text]),
|
|
51
|
+
"mstx": (bool, False),
|
|
52
|
+
"schedule": (Schedule, None),
|
|
53
|
+
"on_trace_ready": (Optional[Callable[..., Any]], None)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
TYPE_INDEX = 0
|
|
57
|
+
VALUE_INDEX = 1
|
|
58
|
+
|
|
59
|
+
def __init__(self, **kwargs):
|
|
60
|
+
self.is_set_schedule: bool = False
|
|
61
|
+
self._set_schedule(**kwargs)
|
|
62
|
+
self._check_deprecated_params(**kwargs)
|
|
63
|
+
self._init_params(kwargs)
|
|
64
|
+
self._check_params_type()
|
|
65
|
+
self._handle_compatibility()
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def original_params(self) -> Dict[str, str]:
|
|
69
|
+
"""
|
|
70
|
+
Get params dict for profiler_info.json save.
|
|
71
|
+
"""
|
|
72
|
+
params = {}
|
|
73
|
+
params["is_set_schedule"] = self.is_set_schedule
|
|
74
|
+
for param, (_, _) in self.PARAMS.items():
|
|
75
|
+
if param == "profiler_level":
|
|
76
|
+
params[param] = getattr(self, param).value
|
|
77
|
+
elif param == "aic_metrics":
|
|
78
|
+
params[param] = getattr(self, param).value
|
|
79
|
+
elif param == "activities":
|
|
80
|
+
params[param] = [item.value for item in getattr(self, param)]
|
|
81
|
+
elif param == "export_type":
|
|
82
|
+
params[param] = [item.value for item in getattr(self, param)]
|
|
83
|
+
elif param == "schedule":
|
|
84
|
+
params[param] = getattr(self, param).to_dict()
|
|
85
|
+
elif param == "on_trace_ready":
|
|
86
|
+
continue
|
|
87
|
+
else:
|
|
88
|
+
params[param] = getattr(self, param)
|
|
89
|
+
return params
|
|
90
|
+
|
|
91
|
+
@property
|
|
92
|
+
def npu_profiler_params(self) -> Dict[str, str]:
|
|
93
|
+
"""
|
|
94
|
+
Get NPU profiler parameters for Ascend profiler cpp backend.
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
Dict[str, str]: A dictionary of NPU profiler parameters.
|
|
98
|
+
"""
|
|
99
|
+
return {
|
|
100
|
+
"profile_memory": self.profile_memory,
|
|
101
|
+
"aicore_metrics": self.aic_metrics.value,
|
|
102
|
+
"l2_cache": self.l2_cache,
|
|
103
|
+
"hbm_ddr": self.hbm_ddr,
|
|
104
|
+
"pcie": self.pcie,
|
|
105
|
+
"parallel_strategy": self.parallel_strategy,
|
|
106
|
+
"profiler_level": self.profiler_level.value,
|
|
107
|
+
"with_stack": self.with_stack,
|
|
108
|
+
"mstx": self.mstx,
|
|
109
|
+
"cpu_trace": ProfilerActivity.CPU in self.activities,
|
|
110
|
+
"npu_trace": ProfilerActivity.NPU in self.activities,
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
def _init_params(self, kwargs):
|
|
114
|
+
"""
|
|
115
|
+
Initialize parameters with kwargs
|
|
116
|
+
"""
|
|
117
|
+
for param, (_, default_value) in self.PARAMS.items():
|
|
118
|
+
if param == "schedule" and kwargs.get(param) is None:
|
|
119
|
+
kwargs["schedule"] = Schedule(wait=0, active=1)
|
|
120
|
+
setattr(self, param, kwargs.get(param) if kwargs.get(param) is not None else default_value)
|
|
121
|
+
|
|
122
|
+
def _check_params_type(self) -> None:
|
|
123
|
+
"""
|
|
124
|
+
Check profiler input params type, if type is invalid reset to default value.
|
|
125
|
+
"""
|
|
126
|
+
for key, value in self.__dict__.items():
|
|
127
|
+
if key in ProfilerParameters.PARAMS:
|
|
128
|
+
expected_type = ProfilerParameters.PARAMS[key][ProfilerParameters.TYPE_INDEX]
|
|
129
|
+
default_value = ProfilerParameters.PARAMS[key][ProfilerParameters.VALUE_INDEX]
|
|
130
|
+
|
|
131
|
+
# Callable特殊处理
|
|
132
|
+
if key == "on_trace_ready":
|
|
133
|
+
if value is not None and not callable(value):
|
|
134
|
+
setattr(self, key, default_value)
|
|
135
|
+
logger.warning(
|
|
136
|
+
f"For Profiler, on_trace_ready value is Invalid, reset to {default_value}."
|
|
137
|
+
)
|
|
138
|
+
elif key == "schedule":
|
|
139
|
+
if not isinstance(value, Schedule):
|
|
140
|
+
setattr(self, key, Schedule(wait=0, active=1))
|
|
141
|
+
logger.warning(
|
|
142
|
+
f"For Profiler, schedule value is Invalid, reset to {Schedule(wait=0, active=1)}"
|
|
143
|
+
)
|
|
144
|
+
elif key == "export_type":
|
|
145
|
+
setattr(self, key, self._check_and_get_export_type(value))
|
|
146
|
+
# 检查可迭代类型
|
|
147
|
+
elif isinstance(expected_type, type) and issubclass(expected_type, (list, tuple, set)):
|
|
148
|
+
if not (isinstance(value, expected_type) and
|
|
149
|
+
all(isinstance(item, type(default_value[0])) for item in value)):
|
|
150
|
+
logger.warning(
|
|
151
|
+
f"For Profiler, {key} value is Invalid, reset to {default_value}."
|
|
152
|
+
)
|
|
153
|
+
setattr(self, key, default_value)
|
|
154
|
+
# 检查普通类型
|
|
155
|
+
elif not isinstance(value, expected_type):
|
|
156
|
+
logger.warning(
|
|
157
|
+
f"For Profiler, the type of {key} should be {expected_type}, "
|
|
158
|
+
f"but got {type(value)}, reset to {default_value}."
|
|
159
|
+
)
|
|
160
|
+
setattr(self, key, default_value)
|
|
161
|
+
|
|
162
|
+
def _check_deprecated_params(self, **kwargs) -> None:
|
|
163
|
+
"""
|
|
164
|
+
Check deprecated parameters.
|
|
165
|
+
"""
|
|
166
|
+
for key, _ in kwargs.items():
|
|
167
|
+
if key == "profile_communication":
|
|
168
|
+
warnings.warn(
|
|
169
|
+
"The parameter 'profile_communication' is deprecated,"
|
|
170
|
+
" please use 'profiler_level=ProfilerLevel.Level1' or "
|
|
171
|
+
"'profiler_level=ProfilerLevel.Level2' instead."
|
|
172
|
+
)
|
|
173
|
+
elif key == "op_time":
|
|
174
|
+
warnings.warn(
|
|
175
|
+
"The parameter 'op_time' is deprecated,"
|
|
176
|
+
" please use 'activaties=ProfilerActivity.NPU' instead."
|
|
177
|
+
)
|
|
178
|
+
elif key == "profile_framework":
|
|
179
|
+
warnings.warn(
|
|
180
|
+
"The parameter 'profile_framework' is deprecated,"
|
|
181
|
+
" please use 'activaties=ProfilerActivity.CPU' instead."
|
|
182
|
+
)
|
|
183
|
+
elif key == "host_stack":
|
|
184
|
+
warnings.warn(
|
|
185
|
+
"The parameter 'host_stack' is deprecated,"
|
|
186
|
+
" please use 'with_stack' instead."
|
|
187
|
+
)
|
|
188
|
+
elif key == "timeline_limit":
|
|
189
|
+
warnings.warn(
|
|
190
|
+
"The parameter 'timeline_limit' is deprecated and will have no effect"
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
def _set_schedule(self, **kwargs):
|
|
194
|
+
if "schedule" in kwargs and isinstance(kwargs["schedule"], Schedule):
|
|
195
|
+
self.is_set_schedule = True
|
|
196
|
+
|
|
197
|
+
def _handle_compatibility(self) -> None:
|
|
198
|
+
"""
|
|
199
|
+
Handle compatibility.
|
|
200
|
+
"""
|
|
201
|
+
if hasattr(self, "schedule") and self.is_set_schedule and self.__dict__.get('data_process', False):
|
|
202
|
+
self.data_process = False
|
|
203
|
+
warnings.warn("When 'schedule' is set, 'data_process' will be set to False.")
|
|
204
|
+
|
|
205
|
+
if not self.__dict__.get('mstx') and self.__dict__.get('profiler_level') == ProfilerLevel.LevelNone:
|
|
206
|
+
self.profiler_level = ProfilerLevel.Level0
|
|
207
|
+
warnings.warn("when 'mstx' is disabled, 'profiler_level' cannot be set to 'ProfilerLevel.LevelNone', "
|
|
208
|
+
"reset to 'ProfilerLevel.Level0'.")
|
|
209
|
+
|
|
210
|
+
if self.__dict__.get('profiler_level') in (ProfilerLevel.LevelNone, ProfilerLevel.Level0) and \
|
|
211
|
+
self.__dict__.get('aic_metrics') != AicoreMetrics.AiCoreNone:
|
|
212
|
+
self.aic_metrics = AicoreMetrics.AiCoreNone
|
|
213
|
+
warnings.warn(f"when 'profiler_level' is set to '{self.__dict__.get('profiler_level')}', "
|
|
214
|
+
f"'aic_metrics' cannot be set to other value except 'AicoreMetrics.AiCoreNone', "
|
|
215
|
+
f"reset to 'AicoreMetrics.AiCoreNone'.")
|
|
216
|
+
|
|
217
|
+
if self.__dict__.get('profiler_level') in (ProfilerLevel.Level1, ProfilerLevel.Level2) and \
|
|
218
|
+
self.__dict__.get('aic_metrics') == AicoreMetrics.AiCoreNone:
|
|
219
|
+
self.aic_metrics = AicoreMetrics.PipeUtilization
|
|
220
|
+
warnings.warn(f"when 'profiler_level' is set to '{self.__dict__.get('profiler_level')}', "
|
|
221
|
+
f"'aic_metrics' cannot be set to 'AicoreMetrics.AiCoreNone', "
|
|
222
|
+
f"reset to 'AicoreMetrics.PipeUtilization'.")
|
|
223
|
+
|
|
224
|
+
def _check_and_get_export_type(self, export_type) -> list:
|
|
225
|
+
"""
|
|
226
|
+
Check export type.
|
|
227
|
+
"""
|
|
228
|
+
if not export_type:
|
|
229
|
+
return [ExportType.Text]
|
|
230
|
+
|
|
231
|
+
if isinstance(export_type, str):
|
|
232
|
+
if export_type in [ExportType.Text.value, ExportType.Db.value]:
|
|
233
|
+
return [ExportType(export_type)]
|
|
234
|
+
|
|
235
|
+
if isinstance(export_type, list):
|
|
236
|
+
if all(isinstance(type, ExportType) for type in export_type):
|
|
237
|
+
return list(set(export_type))
|
|
238
|
+
|
|
239
|
+
if isinstance(export_type, ExportType):
|
|
240
|
+
return [export_type]
|
|
241
|
+
|
|
242
|
+
logger.warning("Invalid parameter export_type, reset it to text.")
|
|
243
|
+
return [ExportType.Text]
|
|
244
|
+
|
|
245
|
+
def __getattr__(self, name):
|
|
246
|
+
"""
|
|
247
|
+
Get attribute.
|
|
248
|
+
"""
|
|
249
|
+
if name in self.PARAMS:
|
|
250
|
+
return getattr(self, name)
|
|
251
|
+
raise AttributeError(f"'{self.__class__.__name__}' has no attribute '{name}'")
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Copyright 2022-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
|
+
"""Profiler Path Manager"""
|
|
16
|
+
import os
|
|
17
|
+
import socket
|
|
18
|
+
import glob
|
|
19
|
+
import shutil
|
|
20
|
+
from datetime import datetime, timezone
|
|
21
|
+
|
|
22
|
+
from mindspore import log as logger
|
|
23
|
+
from mindspore.profiler.common.singleton import Singleton
|
|
24
|
+
from mindspore.profiler.common.profiler_context import ProfilerContext
|
|
25
|
+
from mindspore.profiler.common.path_manager import PathManager
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@Singleton
|
|
29
|
+
class ProfilerPathManager:
|
|
30
|
+
"""
|
|
31
|
+
ProfilerPathManager is responsible for creating and managing all paths used by profiler.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
_ASCEND_MS_DIR = "{}_{}_ascend_ms"
|
|
35
|
+
MAX_WORKER_NAME_LENGTH = 226
|
|
36
|
+
|
|
37
|
+
def __init__(self):
|
|
38
|
+
self._prof_ctx = ProfilerContext()
|
|
39
|
+
self._worker_name = None
|
|
40
|
+
self._dir_path = None
|
|
41
|
+
|
|
42
|
+
def init(self, worker_name: str = None, dir_name: str = None) -> None:
|
|
43
|
+
"""
|
|
44
|
+
Init the profiler path.
|
|
45
|
+
"""
|
|
46
|
+
valid_wk_name = worker_name and isinstance(worker_name, str)
|
|
47
|
+
valid_wk_len = isinstance(worker_name, str) and len(worker_name) < self.MAX_WORKER_NAME_LENGTH
|
|
48
|
+
if (valid_wk_name and valid_wk_len) or worker_name is None:
|
|
49
|
+
self._worker_name = worker_name
|
|
50
|
+
else:
|
|
51
|
+
logger.warning("Invalid parameter worker_name, reset it to default.")
|
|
52
|
+
self._worker_name = None
|
|
53
|
+
|
|
54
|
+
valid_dir_name = dir_name and isinstance(dir_name, str)
|
|
55
|
+
if valid_dir_name:
|
|
56
|
+
dir_path = PathManager.get_real_path(dir_name)
|
|
57
|
+
PathManager.check_input_directory_path(dir_path)
|
|
58
|
+
self._dir_path = dir_path
|
|
59
|
+
elif dir_name is None:
|
|
60
|
+
self._dir_path = dir_name
|
|
61
|
+
else:
|
|
62
|
+
logger.warning(f"Invalid parameter dir_name, reset it to default.")
|
|
63
|
+
self._dir_path = None
|
|
64
|
+
|
|
65
|
+
if self._dir_path:
|
|
66
|
+
self._prof_ctx.on_trace_ready_output_path = self._dir_path
|
|
67
|
+
|
|
68
|
+
def clean_analysis_cache(self):
|
|
69
|
+
"""
|
|
70
|
+
Clean the profiler analysis cache.
|
|
71
|
+
"""
|
|
72
|
+
ANALYSIS_CACHE = (
|
|
73
|
+
# ASEND_PROFILER_OUTPUT_PATH
|
|
74
|
+
self._prof_ctx.ascend_profiler_output_path,
|
|
75
|
+
# PROF_XXX/mindstudio_profiler_output
|
|
76
|
+
self._prof_ctx.msprof_profile_output_path,
|
|
77
|
+
# PROF_XXX/mindstudio_profiler_log
|
|
78
|
+
self._prof_ctx.msprof_profile_log_path,
|
|
79
|
+
# PROF_XXX/host/sqlite
|
|
80
|
+
os.path.join(self._prof_ctx.msprof_profile_host_path, "sqlite"),
|
|
81
|
+
# PROF_XXX/host/data/all_file.complete
|
|
82
|
+
os.path.join(self._prof_ctx.msprof_profile_host_path, "data", "all_file.complete"),
|
|
83
|
+
# PROF_XXX/device_x/sqlite
|
|
84
|
+
os.path.join(self._prof_ctx.msprof_profile_device_path, "sqlite"),
|
|
85
|
+
# PROF_XXX/device_x/data/all_file.complete
|
|
86
|
+
os.path.join(self._prof_ctx.msprof_profile_device_path, "data", "all_file.complete"),
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
for cache_path in ANALYSIS_CACHE:
|
|
90
|
+
if os.path.isfile(cache_path):
|
|
91
|
+
PathManager.remove_file_safety(cache_path)
|
|
92
|
+
elif os.path.isdir(cache_path):
|
|
93
|
+
PathManager.remove_path_safety(cache_path)
|
|
94
|
+
|
|
95
|
+
def simplify_data(self):
|
|
96
|
+
"""
|
|
97
|
+
Simplify the profiler data.
|
|
98
|
+
"""
|
|
99
|
+
SIMPLIFY_CACHE = (
|
|
100
|
+
# PROF_XXX/mindstudio_profiler_output
|
|
101
|
+
self._prof_ctx.msprof_profile_output_path,
|
|
102
|
+
# PROF_XXX/mindstudio_profiler_log
|
|
103
|
+
self._prof_ctx.msprof_profile_log_path,
|
|
104
|
+
# PROF_XXX/host/sqlite
|
|
105
|
+
os.path.join(self._prof_ctx.msprof_profile_host_path, "sqlite"),
|
|
106
|
+
# PROF_XXX/host/data/all_file.complete
|
|
107
|
+
os.path.join(self._prof_ctx.msprof_profile_host_path, "data", "all_file.complete"),
|
|
108
|
+
# PROF_XXX/device_x/sqlite
|
|
109
|
+
os.path.join(self._prof_ctx.msprof_profile_device_path, "sqlite"),
|
|
110
|
+
# PROF_XXX/device_x/data/all_file.complete
|
|
111
|
+
os.path.join(self._prof_ctx.msprof_profile_device_path, "data", "all_file.complete"),
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
for cache_path in SIMPLIFY_CACHE:
|
|
115
|
+
if os.path.isfile(cache_path):
|
|
116
|
+
PathManager.remove_file_safety(cache_path)
|
|
117
|
+
elif os.path.isdir(cache_path):
|
|
118
|
+
PathManager.remove_path_safety(cache_path)
|
|
119
|
+
|
|
120
|
+
def move_db_file(self):
|
|
121
|
+
"""
|
|
122
|
+
Copy the db file to the output path.
|
|
123
|
+
"""
|
|
124
|
+
if not self._prof_ctx.msprof_profile_output_path:
|
|
125
|
+
return
|
|
126
|
+
db_files = glob.glob(os.path.join(
|
|
127
|
+
os.path.dirname(self._prof_ctx.msprof_profile_output_path),
|
|
128
|
+
'msprof*.db'
|
|
129
|
+
)) + glob.glob(os.path.join(
|
|
130
|
+
os.path.dirname(self._prof_ctx.msprof_profile_output_path),
|
|
131
|
+
"analyze",
|
|
132
|
+
"communication_analyzer.db"
|
|
133
|
+
))
|
|
134
|
+
for db_file in db_files:
|
|
135
|
+
if os.path.isfile(db_file):
|
|
136
|
+
db_file_name = os.path.basename(db_file)
|
|
137
|
+
if db_file_name == "communication_analyzer.db":
|
|
138
|
+
new_file_name = os.path.join(self._prof_ctx.ascend_profiler_output_path, db_file_name)
|
|
139
|
+
shutil.copy(db_file, new_file_name)
|
|
140
|
+
else:
|
|
141
|
+
new_file_name = f"ascend_mindspore_profiler_{self._prof_ctx.rank_id}.db" if self._prof_ctx.rank_id \
|
|
142
|
+
else f"ascend_mindspore_profiler.db"
|
|
143
|
+
new_file_path = os.path.join(self._prof_ctx.ascend_profiler_output_path, new_file_name)
|
|
144
|
+
shutil.move(db_file, new_file_path)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def create_output_path(self):
|
|
148
|
+
"""
|
|
149
|
+
Create ASCEND_PROFILER_OUTPUT dir, this method should call before analysis
|
|
150
|
+
"""
|
|
151
|
+
PathManager.make_dir_safety(self._prof_ctx.ascend_profiler_output_path)
|
|
152
|
+
|
|
153
|
+
def set_ascend_ms_dir(self):
|
|
154
|
+
"""
|
|
155
|
+
reset xxx_ascend_ms name
|
|
156
|
+
"""
|
|
157
|
+
self._prof_ctx.ascend_ms_dir = self._get_ascend_ms_dir()
|
|
158
|
+
|
|
159
|
+
def create_profiler_paths(self):
|
|
160
|
+
"""
|
|
161
|
+
Create xxx_ascend_ms and FRAMEWORK dir, this method should call before Profiler start
|
|
162
|
+
"""
|
|
163
|
+
PathManager.make_dir_safety(self._prof_ctx.ascend_ms_dir)
|
|
164
|
+
PathManager.make_dir_safety(self._prof_ctx.framework_path)
|
|
165
|
+
logger.info(
|
|
166
|
+
"Profiler ascend_ms_dir initialized: %s", self._prof_ctx.ascend_ms_dir
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
def _get_ascend_ms_dir(self) -> str:
|
|
170
|
+
"""
|
|
171
|
+
Generate xxx_ascend_ms name
|
|
172
|
+
"""
|
|
173
|
+
timestamp = datetime.now(timezone.utc).strftime("%Y%m%d%H%M%S%f")[:-3]
|
|
174
|
+
if not self._worker_name:
|
|
175
|
+
worker_name = f"{socket.gethostname()}_{os.getpid()}"
|
|
176
|
+
else:
|
|
177
|
+
worker_name = f"{self._worker_name}_{os.getpid()}"
|
|
178
|
+
|
|
179
|
+
return self._ASCEND_MS_DIR.format(worker_name, timestamp)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Copyright 2024-2025 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
|
+
"""Record Function"""
|
|
16
|
+
|
|
17
|
+
from mindspore._c_expression import PythonProfilerRecorder
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class RecordFunction:
|
|
21
|
+
"""
|
|
22
|
+
A context manager for recording profiling data using PythonProfilerRecorder.
|
|
23
|
+
|
|
24
|
+
This class provides a convenient way to start and stop recording profiling data
|
|
25
|
+
using a PythonProfilerRecorder instance. It can be used as a context manager to
|
|
26
|
+
ensure that recording is properly started and stopped, even if an exception occurs.
|
|
27
|
+
|
|
28
|
+
Attributes:
|
|
29
|
+
recorder (PythonProfilerRecorder): The underlying profiler recorder instance.
|
|
30
|
+
|
|
31
|
+
Methods:
|
|
32
|
+
start(): Starts the recording process.
|
|
33
|
+
stop(): Stops the recording process.
|
|
34
|
+
__enter__(): Starts the recording process when entering a with statement.
|
|
35
|
+
__exit__(exc_type): Stops the recording process when exiting a with statement.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, name):
|
|
39
|
+
"""
|
|
40
|
+
Initializes a new instance of RecordFunction.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
name (str): The name of the profiling record.
|
|
44
|
+
"""
|
|
45
|
+
self.recorder = PythonProfilerRecorder(name)
|
|
46
|
+
|
|
47
|
+
def start(self):
|
|
48
|
+
"""
|
|
49
|
+
Starts the recording process.
|
|
50
|
+
|
|
51
|
+
"""
|
|
52
|
+
self.recorder.record_start()
|
|
53
|
+
|
|
54
|
+
def stop(self):
|
|
55
|
+
"""
|
|
56
|
+
Stops the recording process.
|
|
57
|
+
|
|
58
|
+
"""
|
|
59
|
+
self.recorder.record_end()
|
|
60
|
+
|
|
61
|
+
def __enter__(self) -> None:
|
|
62
|
+
"""
|
|
63
|
+
Starts the recording process when entering a with statement.
|
|
64
|
+
|
|
65
|
+
"""
|
|
66
|
+
self.start()
|
|
67
|
+
|
|
68
|
+
def __exit__(self, exc_type, exc_value, traceback) -> None:
|
|
69
|
+
"""
|
|
70
|
+
Stops the recording process when exiting a with statement.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
exc_type (type): The type of exception that occurred, if any.
|
|
74
|
+
|
|
75
|
+
"""
|
|
76
|
+
self.stop()
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Copyright 2023 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
|
+
"""TLV format file decoder"""
|
|
16
|
+
|
|
17
|
+
import struct
|
|
18
|
+
from typing import List, Dict, Union
|
|
19
|
+
|
|
20
|
+
from mindspore import log as logger
|
|
21
|
+
from mindspore.profiler.common.constant import FileConstant
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class TLVDecoder:
|
|
25
|
+
"""
|
|
26
|
+
The class of TLV format data decoder.
|
|
27
|
+
"""
|
|
28
|
+
_TYPE_LEN = 2
|
|
29
|
+
_LENGTH_LEN = 4
|
|
30
|
+
|
|
31
|
+
@classmethod
|
|
32
|
+
def decode(cls, all_bytes: bytes, fix_data_formats: any, fix_data_struct_size: int) -> List:
|
|
33
|
+
"""Decode all the data."""
|
|
34
|
+
result_data = []
|
|
35
|
+
records = cls.tlv_list_decode(all_bytes)
|
|
36
|
+
for record in records:
|
|
37
|
+
if fix_data_struct_size > len(record):
|
|
38
|
+
logger.warning("The collected data has been lost")
|
|
39
|
+
continue
|
|
40
|
+
fix_data_bytes = record[0: fix_data_struct_size]
|
|
41
|
+
tlv_fields = cls.tlv_list_decode(record[fix_data_struct_size:], is_field=True)
|
|
42
|
+
tlv_fields[FileConstant.FIX_SIZE_DATA] = struct.unpack(fix_data_formats, fix_data_bytes)
|
|
43
|
+
result_data.append(tlv_fields)
|
|
44
|
+
return result_data
|
|
45
|
+
|
|
46
|
+
@classmethod
|
|
47
|
+
def tlv_list_decode(cls, tlv_bytes: bytes, is_field: bool = False) -> Union[Dict, List]:
|
|
48
|
+
"""Decode TLV format data."""
|
|
49
|
+
result_data = {} if is_field else []
|
|
50
|
+
index = 0
|
|
51
|
+
all_bytes_len = len(tlv_bytes)
|
|
52
|
+
while index < all_bytes_len:
|
|
53
|
+
if index + cls._TYPE_LEN > all_bytes_len:
|
|
54
|
+
logger.warning(f"Failed to decode TLV: type field truncated at index {index}")
|
|
55
|
+
break
|
|
56
|
+
type_id = struct.unpack("<H", tlv_bytes[index: index + cls._TYPE_LEN])[0]
|
|
57
|
+
index += cls._TYPE_LEN
|
|
58
|
+
if index + cls._LENGTH_LEN > all_bytes_len:
|
|
59
|
+
logger.warning(f"Failed to decode TLV: length field truncated at index {index}")
|
|
60
|
+
break
|
|
61
|
+
value_len = struct.unpack("<I", tlv_bytes[index: index + cls._LENGTH_LEN])[0]
|
|
62
|
+
index += cls._LENGTH_LEN
|
|
63
|
+
if index + value_len > all_bytes_len:
|
|
64
|
+
logger.warning(f"Failed to decode TLV: value field truncated at index {index}")
|
|
65
|
+
break
|
|
66
|
+
value = tlv_bytes[index: index + value_len]
|
|
67
|
+
index += value_len
|
|
68
|
+
if is_field:
|
|
69
|
+
try:
|
|
70
|
+
result_data[type_id] = bytes.decode(value)
|
|
71
|
+
except UnicodeDecodeError:
|
|
72
|
+
logger.warning(f"The collected data can't decode by bytes.decode: {value}")
|
|
73
|
+
result_data[type_id] = 'N/A'
|
|
74
|
+
else:
|
|
75
|
+
result_data.append(value)
|
|
76
|
+
return result_data
|
|
@@ -20,13 +20,75 @@ This module provides the utils.
|
|
|
20
20
|
import os
|
|
21
21
|
import time
|
|
22
22
|
from functools import wraps
|
|
23
|
-
|
|
24
|
-
# one sys count takes 10 ns, 1 ms has 100000 system count
|
|
23
|
+
from typing import Any, Callable, Type, Tuple, Union
|
|
25
24
|
import re
|
|
26
25
|
import shutil
|
|
27
26
|
import stat
|
|
28
27
|
|
|
29
28
|
from mindspore import log as logger
|
|
29
|
+
from mindspore.profiler.common.path_manager import PathManager
|
|
30
|
+
from mindspore.profiler.common.exceptions.exceptions import ProfilerPathErrorException
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def no_exception_func(
|
|
34
|
+
default_ret: Any = None,
|
|
35
|
+
exception_types: Union[Type[Exception], Tuple[Type[Exception], ...]] = Exception,
|
|
36
|
+
custom_handler: Callable[[Exception], Any] = None
|
|
37
|
+
) -> Callable[[Callable], Callable]:
|
|
38
|
+
"""
|
|
39
|
+
A decorator that catches specified exceptions and handles them gracefully.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
default_ret (Any, optional): The default return value if an exception occurs. Defaults to None.
|
|
43
|
+
exception_types (Union[Type[Exception], Tuple[Type[Exception], ...]], optional):
|
|
44
|
+
The type(s) of exceptions to catch. Defaults to Exception.
|
|
45
|
+
custom_handler (Callable[[Exception], Any], optional):
|
|
46
|
+
A custom function to handle the caught exception. Defaults to None.
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
Callable[[Callable], Callable]: A decorator function.
|
|
50
|
+
|
|
51
|
+
Example:
|
|
52
|
+
@no_exception_func(default_ret=0, exception_types=(ValueError, TypeError))
|
|
53
|
+
def divide(a, b):
|
|
54
|
+
return a / b
|
|
55
|
+
"""
|
|
56
|
+
def decorator(func: Callable) -> Callable:
|
|
57
|
+
@wraps(func)
|
|
58
|
+
def wrapper(*args: Any, **kwargs: Any) -> Any:
|
|
59
|
+
try:
|
|
60
|
+
return func(*args, **kwargs)
|
|
61
|
+
except exception_types as ex: # pylint: disable=W0703
|
|
62
|
+
if custom_handler:
|
|
63
|
+
return custom_handler(ex)
|
|
64
|
+
|
|
65
|
+
logger.error(f"Call to {func.__name__} failed. Exception: {str(ex)}")
|
|
66
|
+
return default_ret
|
|
67
|
+
return wrapper
|
|
68
|
+
return decorator
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def get_cann_version():
|
|
72
|
+
"""
|
|
73
|
+
get cann version from env
|
|
74
|
+
"""
|
|
75
|
+
ascend_home_path = os.environ.get("ASCEND_HOME_PATH", "")
|
|
76
|
+
cann_version = "not known"
|
|
77
|
+
try:
|
|
78
|
+
PathManager.check_directory_path_readable(os.path.realpath(ascend_home_path))
|
|
79
|
+
for dirpath, _, filenames in os.walk(os.path.realpath(ascend_home_path)):
|
|
80
|
+
install_files = [file for file in filenames if re.match(r"ascend_.{1,20}_install\.info", file)]
|
|
81
|
+
if install_files:
|
|
82
|
+
filepath = os.path.realpath(os.path.join(dirpath, install_files[0]))
|
|
83
|
+
PathManager.check_directory_path_readable(filepath)
|
|
84
|
+
with open(filepath, "r") as f:
|
|
85
|
+
for line in f:
|
|
86
|
+
if line.find("version") != -1:
|
|
87
|
+
cann_version = line.strip().split("=")[-1]
|
|
88
|
+
break
|
|
89
|
+
except ProfilerPathErrorException as e:
|
|
90
|
+
logger.warning(f"Failed to read CANN version from {ascend_home_path}: {e}")
|
|
91
|
+
return cann_version
|
|
30
92
|
|
|
31
93
|
|
|
32
94
|
def timeit(custom_message=None):
|
|
@@ -55,6 +117,17 @@ def timeit(custom_message=None):
|
|
|
55
117
|
|
|
56
118
|
return decorator
|
|
57
119
|
|
|
120
|
+
|
|
121
|
+
def print_msg_with_pid(msg):
|
|
122
|
+
"""
|
|
123
|
+
Print message with process id.
|
|
124
|
+
|
|
125
|
+
Args:
|
|
126
|
+
msg (str): The message to print.
|
|
127
|
+
"""
|
|
128
|
+
print(f"[{os.getpid()}] {msg}", flush=True)
|
|
129
|
+
|
|
130
|
+
|
|
58
131
|
def to_int(param, param_name):
|
|
59
132
|
"""
|
|
60
133
|
Transfer param to int type.
|