mindspore 2.5.0__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/Microsoft.VisualStudio.Telemetry.dll +0 -0
- mindspore/Newtonsoft.Json.dll +0 -0
- mindspore/__init__.py +6 -4
- 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 -33
- mindspore/_deprecated/__init__.py +17 -0
- mindspore/_deprecated/jit.py +198 -0
- mindspore/_extends/builtin_operations.py +1 -1
- mindspore/_extends/parse/__init__.py +6 -7
- mindspore/_extends/parse/compile_config.py +19 -0
- mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +22 -3
- 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 +24 -193
- mindspore/_extends/parse/resources.py +1 -5
- mindspore/_extends/parse/standard_method.py +97 -74
- mindspore/_extends/pijit/__init__.py +2 -2
- mindspore/_extends/pijit/pijit_func_white_list.py +16 -11
- mindspore/_extends/pijit/tensor_func_list.py +27 -0
- mindspore/_extends/utils.py +1 -1
- mindspore/amp.py +4 -4
- 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 +2 -2
- mindspore/c1.dll +0 -0
- mindspore/c1xx.dll +0 -0
- mindspore/c2.dll +0 -0
- mindspore/common/__init__.py +4 -3
- mindspore/common/_grad_function.py +56 -0
- mindspore/common/_pijit_context.py +14 -5
- mindspore/common/_register_for_tensor.py +1 -1
- mindspore/common/_stub_tensor.py +5 -10
- mindspore/common/_tensor_cpp_method.py +1 -1
- mindspore/common/_tensor_docs.py +1915 -3287
- mindspore/common/api.py +341 -354
- mindspore/common/auto_dynamic_shape.py +41 -44
- mindspore/common/dtype.py +5 -2
- mindspore/common/dump.py +7 -5
- mindspore/common/file_system.py +3 -0
- mindspore/common/hook_handle.py +5 -3
- mindspore/common/initializer.py +10 -6
- 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 +2 -2
- mindspore/common/mutable.py +5 -4
- mindspore/common/parameter.py +106 -39
- mindspore/common/seed.py +2 -2
- mindspore/common/sparse_tensor.py +23 -17
- mindspore/common/tensor.py +297 -714
- mindspore/communication/__init__.py +7 -5
- mindspore/communication/_comm_helper.py +47 -2
- mindspore/communication/comm_func.py +70 -53
- mindspore/communication/management.py +83 -17
- mindspore/context.py +214 -560
- mindspore/dataset/__init__.py +44 -20
- mindspore/dataset/audio/__init__.py +2 -8
- mindspore/dataset/audio/transforms.py +3 -17
- mindspore/dataset/core/config.py +3 -3
- mindspore/dataset/engine/cache_client.py +1 -1
- mindspore/dataset/engine/datasets.py +102 -120
- mindspore/dataset/engine/datasets_audio.py +22 -22
- mindspore/dataset/engine/datasets_standard_format.py +43 -24
- mindspore/dataset/engine/datasets_text.py +78 -85
- mindspore/dataset/engine/datasets_user_defined.py +108 -76
- mindspore/dataset/engine/datasets_vision.py +111 -108
- mindspore/dataset/engine/iterators.py +5 -3
- mindspore/dataset/engine/obs/obs_mindrecord_dataset.py +1 -1
- mindspore/dataset/engine/samplers.py +279 -57
- mindspore/dataset/engine/serializer_deserializer.py +2 -1
- mindspore/dataset/engine/validators.py +10 -0
- 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/transforms.py +3 -3
- 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/device_context/ascend/op_debug.py +60 -1
- mindspore/device_context/ascend/op_tuning.py +0 -4
- mindspore/device_manager.py +39 -3
- mindspore/dnnl.dll +0 -0
- mindspore/dpcmi.dll +0 -0
- mindspore/experimental/es/embedding_service.py +35 -27
- mindspore/experimental/map_parameter.py +4 -4
- mindspore/experimental/optim/adadelta.py +22 -26
- mindspore/experimental/optim/adagrad.py +4 -4
- mindspore/experimental/optim/adam.py +4 -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 +40 -22
- mindspore/experimental/optim/radam.py +5 -5
- 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 -81
- mindspore/hal/event.py +38 -55
- mindspore/hal/memory.py +93 -144
- mindspore/hal/stream.py +81 -125
- mindspore/include/dataset/constants.h +7 -4
- mindspore/include/dataset/execute.h +2 -2
- mindspore/jpeg62.dll +0 -0
- mindspore/log.py +40 -2
- mindspore/mindrecord/__init__.py +20 -7
- 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 +131 -700
- mindspore/mint/distributed/__init__.py +5 -1
- mindspore/mint/distributed/distributed.py +194 -109
- mindspore/mint/linalg/__init__.py +2 -0
- mindspore/mint/nn/__init__.py +280 -18
- mindspore/mint/nn/functional.py +282 -64
- mindspore/mint/nn/layer/__init__.py +4 -0
- mindspore/mint/nn/layer/_functions.py +7 -3
- mindspore/mint/nn/layer/activation.py +120 -13
- mindspore/mint/nn/layer/conv.py +218 -24
- mindspore/mint/nn/layer/normalization.py +15 -16
- mindspore/mint/nn/layer/padding.py +1 -1
- mindspore/mint/nn/layer/pooling.py +66 -1
- mindspore/mint/optim/__init__.py +2 -1
- mindspore/mint/optim/sgd.py +171 -0
- 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/nn/__init__.py +4 -1
- mindspore/nn/cell.py +1250 -176
- mindspore/nn/layer/activation.py +23 -21
- mindspore/nn/layer/basic.py +22 -16
- mindspore/nn/layer/container.py +1 -1
- mindspore/nn/layer/conv.py +22 -17
- mindspore/nn/layer/embedding.py +9 -8
- mindspore/nn/layer/normalization.py +48 -42
- mindspore/nn/layer/pooling.py +75 -31
- mindspore/nn/layer/transformer.py +11 -10
- mindspore/nn/learning_rate_schedule.py +4 -2
- mindspore/nn/loss/loss.py +27 -19
- mindspore/nn/optim/ada_grad.py +6 -5
- mindspore/nn/optim/adadelta.py +9 -7
- mindspore/nn/optim/adafactor.py +1 -1
- mindspore/nn/optim/adam.py +16 -12
- 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/lazyadam.py +12 -10
- mindspore/nn/optim/momentum.py +7 -6
- mindspore/nn/optim/optimizer.py +2 -2
- mindspore/nn/optim/proximal_ada_grad.py +12 -10
- mindspore/nn/optim/rmsprop.py +13 -12
- mindspore/nn/optim/rprop.py +9 -7
- mindspore/nn/optim/sgd.py +9 -6
- mindspore/nn/optim/tft_wrapper.py +5 -2
- 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/wrap/__init__.py +6 -6
- mindspore/nn/wrap/cell_wrapper.py +178 -117
- mindspore/nn/wrap/grad_reducer.py +45 -36
- mindspore/nn/wrap/loss_scale.py +3 -3
- mindspore/numpy/array_creations.py +3 -3
- mindspore/numpy/array_ops.py +1 -1
- mindspore/numpy/math_ops.py +4 -4
- mindspore/numpy/utils.py +1 -2
- mindspore/numpy/utils_const.py +1 -2
- mindspore/opencv_core452.dll +0 -0
- mindspore/opencv_imgcodecs452.dll +0 -0
- mindspore/opencv_imgproc452.dll +0 -0
- mindspore/ops/__init__.py +3 -2
- mindspore/ops/_grad_experimental/grad_comm_ops.py +18 -3
- mindspore/ops/_grad_experimental/grad_debug_ops.py +8 -1
- mindspore/ops/_grad_experimental/taylor_rule.py +29 -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 -4
- mindspore/ops/_vmap/vmap_array_ops.py +7 -6
- mindspore/ops/_vmap/vmap_grad_nn_ops.py +2 -1
- mindspore/ops/_vmap/vmap_math_ops.py +4 -7
- mindspore/ops/_vmap/vmap_nn_ops.py +9 -8
- mindspore/ops/auto_generate/__init__.py +4 -3
- mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +102 -49
- mindspore/ops/auto_generate/gen_extend_func.py +281 -135
- mindspore/ops/auto_generate/gen_ops_def.py +2574 -2326
- mindspore/ops/auto_generate/gen_ops_prim.py +8566 -2755
- mindspore/ops/auto_generate/pyboost_inner_prim.py +106 -76
- mindspore/ops/composite/__init__.py +2 -1
- mindspore/ops/composite/base.py +19 -24
- 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 +2 -3
- 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 -1
- 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 +28 -2
- mindspore/ops/function/_add_attr_func.py +58 -0
- mindspore/ops/function/array_func.py +1629 -2345
- mindspore/ops/function/clip_func.py +38 -45
- mindspore/ops/function/debug_func.py +36 -44
- mindspore/ops/function/grad/__init__.py +1 -0
- mindspore/ops/function/grad/grad_func.py +104 -71
- mindspore/ops/function/image_func.py +1 -1
- mindspore/ops/function/linalg_func.py +46 -78
- mindspore/ops/function/math_func.py +3035 -3705
- mindspore/ops/function/nn_func.py +676 -241
- mindspore/ops/function/other_func.py +159 -1
- mindspore/ops/function/parameter_func.py +17 -30
- mindspore/ops/function/random_func.py +204 -361
- mindspore/ops/function/reshard_func.py +4 -70
- mindspore/ops/function/sparse_func.py +3 -3
- mindspore/ops/function/sparse_unary_func.py +5 -5
- mindspore/ops/function/spectral_func.py +25 -58
- mindspore/ops/function/vmap_func.py +24 -17
- mindspore/ops/functional.py +6 -4
- mindspore/ops/functional_overload.py +547 -4
- mindspore/ops/op_info_register.py +32 -244
- mindspore/ops/operations/__init__.py +10 -5
- mindspore/ops/operations/_custom_ops_utils.py +247 -0
- mindspore/ops/operations/_grad_ops.py +1 -10
- mindspore/ops/operations/_inner_ops.py +5 -76
- 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 +37 -22
- mindspore/ops/operations/comm_ops.py +150 -107
- mindspore/ops/operations/custom_ops.py +221 -23
- mindspore/ops/operations/debug_ops.py +115 -16
- mindspore/ops/operations/inner_ops.py +1 -1
- mindspore/ops/operations/linalg_ops.py +1 -58
- mindspore/ops/operations/manually_defined/_inner.py +1 -1
- mindspore/ops/operations/manually_defined/ops_def.py +746 -79
- mindspore/ops/operations/math_ops.py +21 -18
- mindspore/ops/operations/nn_ops.py +65 -191
- 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 +43 -32
- mindspore/ops/tensor_method.py +232 -13
- mindspore/ops_generate/__init__.py +0 -5
- mindspore/ops_generate/aclnn/__init__.py +0 -0
- mindspore/ops_generate/{aclnn_kernel_register_auto_cc_generator.py → aclnn/aclnn_kernel_register_auto_cc_generator.py} +43 -18
- mindspore/ops_generate/{gen_aclnn_implement.py → aclnn/gen_aclnn_implement.py} +49 -51
- mindspore/ops_generate/api/__init__.py +0 -0
- mindspore/ops_generate/{add_tensor_docs_generator.py → api/add_tensor_docs_generator.py} +9 -7
- mindspore/ops_generate/{cpp_create_prim_instance_helper_generator.py → api/cpp_create_prim_instance_helper_generator.py} +6 -9
- mindspore/ops_generate/{functional_map_cpp_generator.py → api/functional_map_cpp_generator.py} +25 -12
- mindspore/ops_generate/{functional_overload_py_generator.py → api/functional_overload_py_generator.py} +8 -6
- mindspore/ops_generate/{functions_cc_generator.py → api/functions_cc_generator.py} +14 -10
- mindspore/ops_generate/api/gen_api.py +103 -0
- mindspore/ops_generate/{op_api_proto.py → api/op_api_proto.py} +98 -69
- mindspore/ops_generate/{tensor_func_reg_cpp_generator.py → api/tensor_func_reg_cpp_generator.py} +82 -43
- mindspore/ops_generate/common/__init__.py +0 -0
- mindspore/ops_generate/common/gen_constants.py +91 -0
- mindspore/ops_generate/{gen_utils.py → common/gen_utils.py} +72 -19
- mindspore/ops_generate/{op_proto.py → common/op_proto.py} +64 -1
- mindspore/ops_generate/{template.py → common/template.py} +96 -84
- mindspore/ops_generate/gen_ops.py +23 -325
- mindspore/ops_generate/op_def/__init__.py +0 -0
- mindspore/ops_generate/op_def/gen_op_def.py +90 -0
- mindspore/ops_generate/{lite_ops_cpp_generator.py → op_def/lite_ops_cpp_generator.py} +47 -11
- mindspore/ops_generate/{ops_def_cc_generator.py → op_def/ops_def_cc_generator.py} +18 -7
- mindspore/ops_generate/{ops_def_h_generator.py → op_def/ops_def_h_generator.py} +5 -5
- mindspore/ops_generate/{ops_name_h_generator.py → op_def/ops_name_h_generator.py} +30 -15
- 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_generator.py → op_def_py/op_def_py_generator.py} +6 -5
- mindspore/ops_generate/{op_prim_py_generator.py → op_def_py/op_prim_py_generator.py} +24 -15
- mindspore/ops_generate/pyboost/__init__.py +0 -0
- mindspore/ops_generate/{auto_grad_impl_cc_generator.py → pyboost/auto_grad_impl_cc_generator.py} +11 -7
- mindspore/ops_generate/{auto_grad_reg_cc_generator.py → pyboost/auto_grad_reg_cc_generator.py} +7 -7
- mindspore/ops_generate/{gen_pyboost_func.py → pyboost/gen_pyboost_func.py} +40 -16
- mindspore/ops_generate/{op_template_parser.py → pyboost/op_template_parser.py} +105 -24
- mindspore/ops_generate/{pyboost_functions_cpp_generator.py → pyboost/pyboost_functions_cpp_generator.py} +55 -18
- mindspore/ops_generate/{pyboost_functions_h_generator.py → pyboost/pyboost_functions_h_generator.py} +42 -10
- mindspore/ops_generate/{pyboost_functions_py_generator.py → pyboost/pyboost_functions_py_generator.py} +6 -6
- mindspore/ops_generate/{pyboost_grad_function_cpp_generator.py → pyboost/pyboost_grad_function_cpp_generator.py} +11 -10
- mindspore/ops_generate/{pyboost_inner_prim_generator.py → pyboost/pyboost_inner_prim_generator.py} +8 -7
- mindspore/ops_generate/{pyboost_native_grad_functions_generator.py → pyboost/pyboost_native_grad_functions_generator.py} +14 -10
- mindspore/ops_generate/{pyboost_op_cpp_code_generator.py → pyboost/pyboost_op_cpp_code_generator.py} +140 -53
- mindspore/ops_generate/{pyboost_overload_functions_cpp_generator.py → pyboost/pyboost_overload_functions_cpp_generator.py} +28 -15
- mindspore/ops_generate/{pyboost_utils.py → pyboost/pyboost_utils.py} +88 -4
- 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 +6 -2
- mindspore/parallel/_auto_parallel_context.py +133 -6
- mindspore/parallel/_cell_wrapper.py +130 -15
- mindspore/parallel/_parallel_serialization.py +95 -4
- mindspore/parallel/_ps_context.py +1 -1
- mindspore/parallel/_recovery_context.py +7 -2
- mindspore/parallel/_tensor.py +142 -18
- mindspore/parallel/_utils.py +198 -25
- mindspore/parallel/algo_parameter_config.py +3 -3
- mindspore/parallel/auto_parallel.py +732 -0
- mindspore/parallel/checkpoint_convert.py +159 -0
- mindspore/parallel/checkpoint_transform.py +656 -37
- mindspore/parallel/cluster/process_entity/_api.py +151 -19
- mindspore/parallel/cluster/run.py +1 -1
- 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 +24 -13
- mindspore/parallel/shard.py +137 -61
- mindspore/parallel/transform_safetensors.py +287 -95
- mindspore/pgodb140.dll +0 -0
- mindspore/pgort140.dll +0 -0
- mindspore/profiler/__init__.py +9 -5
- mindspore/profiler/analysis/parser/ascend_cann_parser.py +6 -2
- mindspore/profiler/analysis/parser/ms_framework_parser.py +4 -4
- mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +7 -4
- mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +22 -0
- mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +3 -3
- mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +241 -86
- mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +41 -2
- mindspore/profiler/analysis/viewer/ascend_kernel_details_viewer.py +33 -35
- mindspore/profiler/analysis/viewer/ascend_memory_viewer.py +7 -0
- mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +8 -3
- mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +141 -30
- mindspore/profiler/analysis/viewer/ms_dataset_viewer.py +5 -6
- mindspore/profiler/common/ascend_msprof_exporter.py +5 -4
- mindspore/profiler/common/constant.py +12 -0
- mindspore/profiler/common/msprof_cmd_tool.py +42 -23
- mindspore/profiler/common/path_manager.py +24 -0
- mindspore/profiler/common/profiler_context.py +26 -2
- mindspore/profiler/common/profiler_meta_data.py +74 -0
- mindspore/profiler/common/profiler_parameters.py +59 -18
- mindspore/profiler/common/profiler_path_manager.py +66 -7
- mindspore/profiler/dynamic_profiler.py +112 -79
- mindspore/profiler/envprofiler.py +26 -1
- mindspore/profiler/experimental_config.py +197 -0
- mindspore/profiler/mstx.py +57 -14
- mindspore/profiler/platform/npu_profiler.py +33 -7
- mindspore/profiler/profiler.py +541 -45
- mindspore/profiler/profiler_action_controller.py +1 -1
- mindspore/profiler/profiler_interface.py +4 -0
- mindspore/profiler/schedule.py +57 -22
- mindspore/rewrite/api/node.py +15 -13
- mindspore/rewrite/api/symbol_tree.py +1 -1
- mindspore/run_check/_check_version.py +25 -14
- mindspore/run_check/run_check.py +1 -1
- mindspore/runtime/__init__.py +2 -2
- mindspore/runtime/executor.py +40 -11
- mindspore/runtime/memory.py +25 -8
- 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 +35 -7
- mindspore/train/amp.py +1 -1
- mindspore/train/callback/__init__.py +2 -2
- mindspore/train/callback/_callback.py +2 -16
- mindspore/train/callback/_checkpoint.py +24 -40
- mindspore/train/callback/_cluster_monitor.py +14 -18
- mindspore/train/callback/_flops_collector.py +2 -3
- mindspore/train/callback/_history.py +7 -4
- 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 +8 -13
- mindspore/train/callback/_time_monitor.py +2 -1
- mindspore/train/callback/{_tft_register.py → _train_fault_tolerance.py} +179 -103
- mindspore/train/data_sink.py +25 -2
- mindspore/train/dataset_helper.py +4 -5
- 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 +8 -6
- mindspore/train/metrics/recall.py +9 -9
- mindspore/train/metrics/root_mean_square_surface_distance.py +2 -2
- mindspore/train/mind_ir_pb2.py +19 -12
- mindspore/train/model.py +176 -103
- mindspore/train/serialization.py +246 -988
- mindspore/train/summary/_summary_adapter.py +2 -2
- mindspore/train/summary/summary_record.py +1 -1
- mindspore/turbojpeg.dll +0 -0
- mindspore/utils/__init__.py +3 -2
- mindspore/utils/dryrun.py +4 -2
- mindspore/utils/hooks.py +81 -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.5.0.dist-info → mindspore-2.6.0rc1.dist-info}/METADATA +2 -1
- {mindspore-2.5.0.dist-info → mindspore-2.6.0rc1.dist-info}/RECORD +483 -438
- mindspore/_install_custom.py +0 -43
- mindspore/common/_register_for_adapter.py +0 -74
- mindspore/ops/auto_generate/gen_arg_dtype_cast.py +0 -252
- mindspore/ops/auto_generate/gen_arg_handler.py +0 -136
- mindspore/ops/operations/_opaque_predicate_registry.py +0 -41
- mindspore/ops_generate/gen_constants.py +0 -190
- mindspore/ops_generate/gen_ops_inner_prim.py +0 -131
- mindspore/ops_generate/ops_primitive_h_generator.py +0 -81
- /mindspore/ops_generate/{base_generator.py → common/base_generator.py} +0 -0
- {mindspore-2.5.0.dist-info → mindspore-2.6.0rc1.dist-info}/WHEEL +0 -0
- {mindspore-2.5.0.dist-info → mindspore-2.6.0rc1.dist-info}/entry_points.txt +0 -0
- {mindspore-2.5.0.dist-info → mindspore-2.6.0rc1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
# Copyright 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
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ============================================================================
|
|
16
|
+
"""Cell_wrapper."""
|
|
17
|
+
from __future__ import absolute_import
|
|
18
|
+
from __future__ import division
|
|
19
|
+
|
|
20
|
+
from mindspore import nn
|
|
21
|
+
from mindspore.ops import operations as P
|
|
22
|
+
from mindspore.nn.cell import Cell
|
|
23
|
+
from mindspore.nn.wrap.cell_wrapper import _MicroBatch
|
|
24
|
+
from mindspore import log as logger
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
__all__ = ['PipelineCell', 'Pipeline', 'MicroBatchInterleaved', 'GradAccumulation']
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class PipelineCell(Cell):
|
|
31
|
+
"""
|
|
32
|
+
Slice MiniBatch into finer-grained MicroBatch for use in pipeline-parallel training.
|
|
33
|
+
|
|
34
|
+
Note:
|
|
35
|
+
micro_size must be greater or equal to pipeline stages.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
network (Cell): The target network to wrap.
|
|
39
|
+
micro_size (int): MicroBatch size.
|
|
40
|
+
stage_config (dict, optional): The stage configuration for each cell's execution in pipeline parallel.
|
|
41
|
+
|
|
42
|
+
Supported Platforms:
|
|
43
|
+
``Ascend``
|
|
44
|
+
|
|
45
|
+
Examples:
|
|
46
|
+
>>> import mindspore.nn as nn
|
|
47
|
+
>>> # Define the network structure of LeNet5. Refer to
|
|
48
|
+
>>> # https://gitee.com/mindspore/docs/blob/master/docs/mindspore/code/lenet.py
|
|
49
|
+
>>> net = LeNet5()
|
|
50
|
+
>>> net = nn.PipelineCell(net, 4, stage_config={"cell_name_0": 0, "cell_name_1": 1})
|
|
51
|
+
"""
|
|
52
|
+
def __init__(self, network, micro_size, stage_config=None):
|
|
53
|
+
super(PipelineCell, self).__init__(auto_prefix=False)
|
|
54
|
+
self.network = network
|
|
55
|
+
self.micro_inputs = nn.CellList()
|
|
56
|
+
self.micro_size = micro_size
|
|
57
|
+
self.add_list = []
|
|
58
|
+
if not isinstance(network, Cell):
|
|
59
|
+
raise TypeError("For 'PipelineCell', the argument 'network' must cell type, "
|
|
60
|
+
"but got the type : {}.".format(type(network)))
|
|
61
|
+
if not isinstance(micro_size, int):
|
|
62
|
+
raise TypeError("For 'PipelineCell', the argument 'micro_size' must be integer, "
|
|
63
|
+
"but got the type : {}.".format(type(micro_size)))
|
|
64
|
+
if micro_size <= 0:
|
|
65
|
+
raise ValueError("For 'PipelineCell', the argument 'micro_size' must be large than 0, "
|
|
66
|
+
"but got {}.".format(micro_size))
|
|
67
|
+
for i in range(micro_size):
|
|
68
|
+
micro_input = _MicroBatch(micro_size)
|
|
69
|
+
self.micro_inputs.append(micro_input)
|
|
70
|
+
self.add = P.Add().add_prim_attr("pipeline_end", i)
|
|
71
|
+
self.add_list.append(self.add)
|
|
72
|
+
self._get_attr_from_cell(network)
|
|
73
|
+
|
|
74
|
+
# prase stage_config
|
|
75
|
+
config_dict = {}
|
|
76
|
+
if stage_config is not None:
|
|
77
|
+
for cell_name, stage_num in stage_config.items():
|
|
78
|
+
config_cell_name = cell_name
|
|
79
|
+
config_stage_num = stage_num
|
|
80
|
+
config_dict[config_cell_name] = config_stage_num
|
|
81
|
+
|
|
82
|
+
# set cell.stage_config
|
|
83
|
+
for cell_name, cell in self.network.cells_and_names():
|
|
84
|
+
for config_cell_name, config_stage_num in config_dict.copy().items():
|
|
85
|
+
if not cell_name or not config_cell_name:
|
|
86
|
+
continue
|
|
87
|
+
if cell_name == config_cell_name:
|
|
88
|
+
setattr(cell, "pipeline_stage", config_stage_num)
|
|
89
|
+
del config_dict[config_cell_name]
|
|
90
|
+
|
|
91
|
+
for config_cell_name, config_stage_num in config_dict.copy().items():
|
|
92
|
+
if str(network) == config_cell_name:
|
|
93
|
+
setattr(network, "pipeline_stage", config_stage_num)
|
|
94
|
+
del config_dict[config_cell_name]
|
|
95
|
+
|
|
96
|
+
# if there are any config elements left, print them
|
|
97
|
+
if config_dict:
|
|
98
|
+
for config_cell_name, config_stage_num in config_dict.items():
|
|
99
|
+
logger.error("pipeline_cell stage_config set pipeline_stage fail!")
|
|
100
|
+
logger.warning("config cell name:" + str(config_cell_name) +
|
|
101
|
+
" config stage num:" + str(config_stage_num))
|
|
102
|
+
logger.warning("network:" + str(self.network))
|
|
103
|
+
logger.warning("cell name available:")
|
|
104
|
+
for cell_name, cell in self.network.cells_and_names():
|
|
105
|
+
logger.warning(cell_name)
|
|
106
|
+
raise KeyError("For 'PipelineCell', the argument 'stage_config' : {} is not "
|
|
107
|
+
"found in 'network' : {}".format(config_dict, network))
|
|
108
|
+
|
|
109
|
+
def construct(self, *inputs):
|
|
110
|
+
ret = None
|
|
111
|
+
for i in range(self.micro_size):
|
|
112
|
+
micro_input = self.micro_inputs[i](i, *inputs)
|
|
113
|
+
output = self.network(*micro_input)
|
|
114
|
+
if ret is not None:
|
|
115
|
+
ret = self.add_list[i](ret, output)
|
|
116
|
+
else:
|
|
117
|
+
ret = output
|
|
118
|
+
return ret
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class Pipeline(PipelineCell):
|
|
122
|
+
"""
|
|
123
|
+
Specify the number of micro_batch for pipeline parallelism and the division rules for stage.
|
|
124
|
+
|
|
125
|
+
Note:
|
|
126
|
+
micro_size must be greater or equal to pipeline stages.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
network (Cell): The target network to wrap.
|
|
130
|
+
micro_size (int): MicroBatch size.
|
|
131
|
+
stage_config (dict, optional): Stage configuration for cell's execution in pipeline parallel. Default ``None``.
|
|
132
|
+
|
|
133
|
+
Raises:
|
|
134
|
+
TypeError: The type of `net` is not cell.
|
|
135
|
+
TypeError: If the type of `micro_size` is not int.
|
|
136
|
+
ValueError: When `micro_size` is 0 or negative value.
|
|
137
|
+
KeyError: `dict` cell name matching exception,
|
|
138
|
+
there are remaining configuration items after traversing all `cell` under the current net.
|
|
139
|
+
|
|
140
|
+
Supported Platforms:
|
|
141
|
+
``Ascend``
|
|
142
|
+
|
|
143
|
+
Examples:
|
|
144
|
+
>>> from mindspore.parallel.nn import Pipeline
|
|
145
|
+
>>> # Define the network structure of LeNet5. Refer to
|
|
146
|
+
>>> # https://gitee.com/mindspore/docs/blob/master/docs/mindspore/code/lenet.py
|
|
147
|
+
>>> net = LeNet5()
|
|
148
|
+
>>> net = Pipeline(net, 4, stage_config={"cell_name_0": 0, "cell_name_1": 1})
|
|
149
|
+
"""
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
class MicroBatchInterleaved(Cell):
|
|
153
|
+
"""
|
|
154
|
+
Implement the static graph parallel multi-copy splitting function to enable concurrent computation
|
|
155
|
+
and communication.
|
|
156
|
+
Application scenario: When there is model parallelism in semi-automatic mode
|
|
157
|
+
and network, if the first slice data is calculating forward, the second slice data will execute the
|
|
158
|
+
communication operators at the same time, to achieve the performance acceleration of communication and computing
|
|
159
|
+
concurrency.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
network (Cell): The target network to wrap.
|
|
163
|
+
interleave_num (int, optional): split num of batch size. Default: ``2`` .
|
|
164
|
+
|
|
165
|
+
Inputs:
|
|
166
|
+
tuple[Tensor]. It's the same with the input of the `network` .
|
|
167
|
+
|
|
168
|
+
Outputs:
|
|
169
|
+
The wrapped input. The output of the input `network` should be a Tensor.
|
|
170
|
+
|
|
171
|
+
Supported Platforms:
|
|
172
|
+
``Ascend``
|
|
173
|
+
|
|
174
|
+
Examples:
|
|
175
|
+
>>> import mindspore.nn as nn
|
|
176
|
+
>>> # Define the network structure of LeNet5. Refer to
|
|
177
|
+
>>> # https://gitee.com/mindspore/docs/blob/master/docs/mindspore/code/lenet.py
|
|
178
|
+
>>> net = LeNet5()
|
|
179
|
+
>>> net = nn.MicroBatchInterleaved(net, 2)
|
|
180
|
+
"""
|
|
181
|
+
def __init__(self, network, interleave_num=2):
|
|
182
|
+
super(MicroBatchInterleaved, self).__init__(auto_prefix=False)
|
|
183
|
+
if not isinstance(interleave_num, int):
|
|
184
|
+
raise TypeError("For 'MicroBatchInterleaved', the argument 'interleave_num' must be integer, "
|
|
185
|
+
"but got the type : {}.".format(type(interleave_num)))
|
|
186
|
+
if interleave_num <= 0:
|
|
187
|
+
raise ValueError("For 'MicroBatchInterleaved', the argument 'interleave_num' must be large than 0, "
|
|
188
|
+
"but got {}.".format(interleave_num))
|
|
189
|
+
self.network = network
|
|
190
|
+
self.interleave_num = interleave_num
|
|
191
|
+
self.interleave_inputs = nn.CellList()
|
|
192
|
+
self.add = P.Add().add_prim_attr("micro_interleaved_add_flag", True)
|
|
193
|
+
for _ in range(interleave_num):
|
|
194
|
+
interleave_data = _MicroBatch(interleave_num)
|
|
195
|
+
interleave_data.strided_slice.add_prim_attr("strided_slice_flag", True)
|
|
196
|
+
interleave_data.strided_slice.add_prim_attr("interleave_num", interleave_num)
|
|
197
|
+
self.interleave_inputs.append(interleave_data)
|
|
198
|
+
self._get_attr_from_cell(network)
|
|
199
|
+
|
|
200
|
+
def construct(self, *inputs):
|
|
201
|
+
output = 0.0
|
|
202
|
+
for i in range(self.interleave_num):
|
|
203
|
+
interleave_input = self.interleave_inputs[i](i, *inputs)
|
|
204
|
+
output = self.add(output, self.network(*interleave_input))
|
|
205
|
+
return output
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
class GradAccumulation(Cell):
|
|
209
|
+
"""
|
|
210
|
+
Implementation of parallel gradient accumulation for static graphs.
|
|
211
|
+
|
|
212
|
+
Args:
|
|
213
|
+
network (Cell): The target network to wrap.
|
|
214
|
+
micro_size (int): MicroBatch size.
|
|
215
|
+
|
|
216
|
+
Raises:
|
|
217
|
+
TypeError: The type of `network` is not cell.
|
|
218
|
+
TypeError: If the type of `micro_size` is not int.
|
|
219
|
+
ValueError: When `micro_size` is 0 or negative value.
|
|
220
|
+
|
|
221
|
+
Supported Platforms:
|
|
222
|
+
``Ascend``
|
|
223
|
+
|
|
224
|
+
Examples:
|
|
225
|
+
>>> from mindspore.parallel.nn import GradAccumulation
|
|
226
|
+
>>> # Define the network structure of LeNet5. Refer to
|
|
227
|
+
>>> # https://gitee.com/mindspore/docs/blob/master/docs/mindspore/code/lenet.py
|
|
228
|
+
>>> net = LeNet5()
|
|
229
|
+
>>> net = GradAccumulation(net, 4)
|
|
230
|
+
"""
|
|
231
|
+
def __init__(self, network, micro_size):
|
|
232
|
+
super(GradAccumulation, self).__init__(auto_prefix=False)
|
|
233
|
+
self.network = network
|
|
234
|
+
self.micro_inputs = nn.CellList()
|
|
235
|
+
self.micro_size = micro_size
|
|
236
|
+
self.add_list = []
|
|
237
|
+
if not isinstance(network, Cell):
|
|
238
|
+
raise TypeError("For 'GradAccumulation', the argument 'network' must cell type, "
|
|
239
|
+
"but got the type : {}.".format(type(network)))
|
|
240
|
+
if not isinstance(micro_size, int):
|
|
241
|
+
raise TypeError("For 'GradAccumulation', the argument 'micro_size' must be integer, "
|
|
242
|
+
"but got the type : {}.".format(type(micro_size)))
|
|
243
|
+
if micro_size <= 0:
|
|
244
|
+
raise ValueError("For 'GradAccumulation', the argument 'micro_size' must be large than 0, "
|
|
245
|
+
"but got {}.".format(micro_size))
|
|
246
|
+
for i in range(micro_size):
|
|
247
|
+
micro_input = _MicroBatch(micro_size)
|
|
248
|
+
micro_input.strided_slice.add_prim_attr("grad_accu_num", micro_size)
|
|
249
|
+
self.micro_inputs.append(micro_input)
|
|
250
|
+
self.add = P.Add().add_prim_attr("forward_end", i)
|
|
251
|
+
self.add_list.append(self.add)
|
|
252
|
+
self._get_attr_from_cell(network)
|
|
253
|
+
|
|
254
|
+
def construct(self, *inputs):
|
|
255
|
+
ret = None
|
|
256
|
+
for i in range(self.micro_size):
|
|
257
|
+
micro_input = self.micro_inputs[i](i, *inputs)
|
|
258
|
+
output = self.network(*micro_input)
|
|
259
|
+
if ret is not None:
|
|
260
|
+
ret = self.add_list[i](ret, output)
|
|
261
|
+
else:
|
|
262
|
+
ret = output
|
|
263
|
+
return ret
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Copyright 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
|
+
"""parallel serialization"""
|
|
16
|
+
from __future__ import absolute_import
|
|
17
|
+
|
|
18
|
+
from mindspore import context
|
|
19
|
+
from mindspore.nn.cell import Cell
|
|
20
|
+
from mindspore.ops import functional as F, composite as C, operations as P
|
|
21
|
+
import mindspore.common.dtype as mstype
|
|
22
|
+
from mindspore.common.sparse_tensor import Tensor
|
|
23
|
+
from mindspore.common.api import jit
|
|
24
|
+
from mindspore.common.parameter import Parameter
|
|
25
|
+
from mindspore.nn.layer import Identity
|
|
26
|
+
from mindspore.parallel._utils import _get_enable_parallel_optimizer
|
|
27
|
+
|
|
28
|
+
__all__ = ['PipelineGradReducer']
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
grad_scale = C.MultitypeFuncGraph("grad_scale")
|
|
32
|
+
shard_grad_scale = C.MultitypeFuncGraph("shard_grad_scale")
|
|
33
|
+
reciprocal = P.Reciprocal()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@grad_scale.register("Tensor", "Tensor", "Tensor")
|
|
37
|
+
def tensor_grad_scale_pipeline(scale, grad, accu_grad):
|
|
38
|
+
accu_grad = F.depend(accu_grad, grad)
|
|
39
|
+
new_grad = accu_grad * reciprocal(scale)
|
|
40
|
+
accu_grad = F.depend(accu_grad, new_grad)
|
|
41
|
+
zeros = F.tensor_mul(accu_grad, 0.0)
|
|
42
|
+
new_grad = F.depend(new_grad, F.assign(accu_grad, zeros))
|
|
43
|
+
return new_grad
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@shard_grad_scale.register("Tensor", "Tensor", "Tensor")
|
|
47
|
+
def tensor_shard_grad_scale_pipeline(scale, grad, accu_grad):
|
|
48
|
+
new_grad = grad * reciprocal(scale)
|
|
49
|
+
accu_grad = F.depend(accu_grad, new_grad)
|
|
50
|
+
new_grad = F.depend(new_grad, F.assign(accu_grad, F.zeros_like(accu_grad)))
|
|
51
|
+
return new_grad
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class PipelineGradReducer(Cell):
|
|
55
|
+
"""
|
|
56
|
+
Functional training scenarios for gradient statute and accumulation of pipeline parallel.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
parameters (list): the parameters to be updated.
|
|
60
|
+
scale_sense (float, optional): the scale sense of the gradient. Default: 1.0.
|
|
61
|
+
opt_shard(bool, optional): if use parallel optimizer, set opt_shard True. Default: ``None``.
|
|
62
|
+
|
|
63
|
+
Raise:
|
|
64
|
+
RuntimeError: If the mode is not graph mode.
|
|
65
|
+
|
|
66
|
+
Supported Platforms:
|
|
67
|
+
``Ascend`` ``GPU``
|
|
68
|
+
|
|
69
|
+
Examples:
|
|
70
|
+
.. note::
|
|
71
|
+
Before running the following examples, you need to configure the communication environment variables.
|
|
72
|
+
|
|
73
|
+
For the Ascend devices, users need to prepare the rank table, set rank_id and device_id.
|
|
74
|
+
Please see the `rank table Startup
|
|
75
|
+
<https://www.mindspore.cn/tutorials/en/master/parallel/rank_table.html>`_
|
|
76
|
+
for more details.
|
|
77
|
+
|
|
78
|
+
This example should be run with multiple devices.
|
|
79
|
+
|
|
80
|
+
>>> import numpy as np
|
|
81
|
+
>>> import mindspore as ms
|
|
82
|
+
>>> from mindspore import nn, ops, Tensor
|
|
83
|
+
>>> from mindspore.communication import init
|
|
84
|
+
>>>
|
|
85
|
+
>>> ms.set_context(mode=ms.GRAPH_MODE)
|
|
86
|
+
>>> ms.reset_auto_parallel_context()
|
|
87
|
+
>>> init()
|
|
88
|
+
>>> ms.set_seed(1)
|
|
89
|
+
>>>
|
|
90
|
+
>>> class Network(nn.Cell):
|
|
91
|
+
... def __init__(self, in_features, out_features, sens=1.0):
|
|
92
|
+
... super().__init__()
|
|
93
|
+
... self.layer1 = nn.Dense(in_features, 16)
|
|
94
|
+
... self.relu1 = nn.ReLU()
|
|
95
|
+
... self.layer2 = nn.Dense(16, 16)
|
|
96
|
+
... self.relu2 = nn.ReLU()
|
|
97
|
+
... self.layer3 = nn.Dense(16, out_features)
|
|
98
|
+
...
|
|
99
|
+
... def construct(self, x):
|
|
100
|
+
... x = self.layer1(x)
|
|
101
|
+
... x = self.relu1(x)
|
|
102
|
+
... x = self.layer2(x)
|
|
103
|
+
... x = self.relu2(x)
|
|
104
|
+
... logits = self.layer3(x)
|
|
105
|
+
... return logits
|
|
106
|
+
>>>
|
|
107
|
+
>>> size, in_features, out_features = 16, 32, 10
|
|
108
|
+
>>> net = Network(in_features, out_features)
|
|
109
|
+
>>> net.layer1.pipeline_stage = 0
|
|
110
|
+
>>> net.relu1.pipeline_stage = 0
|
|
111
|
+
>>> net.layer2.pipeline_stage = 0
|
|
112
|
+
>>> net.relu2.pipeline_stage = 1
|
|
113
|
+
>>> net.layer3.pipeline_stage = 1
|
|
114
|
+
>>> loss_fn = nn.CrossEntropyLoss()
|
|
115
|
+
>>> optimizer = nn.SGD(net.trainable_params(), 1e-2)
|
|
116
|
+
>>> net_with_loss = nn.Pipeline(nn.WithLossCell(net, loss_fn), 2)
|
|
117
|
+
>>> net_with_loss.set_train()
|
|
118
|
+
>>> def forward_fn(inputs, target):
|
|
119
|
+
... loss = net_with_loss(inputs, target)
|
|
120
|
+
... return loss
|
|
121
|
+
>>>
|
|
122
|
+
>>> grad_fn = ops.value_and_grad(forward_fn, None, net_with_loss.trainable_params())
|
|
123
|
+
>>> pp_grad_reducer = nn.PipelineGradReducer(optimizer.parameters)
|
|
124
|
+
>>>
|
|
125
|
+
>>> @ms.jit
|
|
126
|
+
>>> def train_one_step(inputs, target):
|
|
127
|
+
... loss, grads = grad_fn(inputs, target)
|
|
128
|
+
... grads = pp_grad_reducer(grads)
|
|
129
|
+
... optimizer(grads)
|
|
130
|
+
... return loss, grads
|
|
131
|
+
>>>
|
|
132
|
+
>>> parallel_net = AutoParallel(train_one_step, parallel_mode="semi_auto")
|
|
133
|
+
>>> parallel_net.pipeline(stages=2)
|
|
134
|
+
>>> inputs = Tensor(np.ones([size, in_features]).astype(np.float32))
|
|
135
|
+
>>> label = Tensor(np.ones([size, out_features]).astype(np.float32))
|
|
136
|
+
>>> loss, _ = train_one_step(inputs, label)
|
|
137
|
+
>>> print(loss)
|
|
138
|
+
46.36721
|
|
139
|
+
"""
|
|
140
|
+
def __init__(self, parameters, scale_sense=1.0, opt_shard=None):
|
|
141
|
+
super(PipelineGradReducer, self).__init__(auto_prefix=False)
|
|
142
|
+
self._check_mode()
|
|
143
|
+
self.accu_grads = parameters.clone(prefix="accu_grads", init="zeros")
|
|
144
|
+
self.grad_reducer = Identity()
|
|
145
|
+
self.degree = Tensor(1, mstype.float32)
|
|
146
|
+
self.scale_sense = Parameter(scale_sense, name='scale_sense')
|
|
147
|
+
self.hyper_map = C.HyperMap()
|
|
148
|
+
if opt_shard is None:
|
|
149
|
+
self.opt_shard = _get_enable_parallel_optimizer()
|
|
150
|
+
else:
|
|
151
|
+
self.opt_shard = opt_shard
|
|
152
|
+
|
|
153
|
+
@jit
|
|
154
|
+
def construct(self, grads):
|
|
155
|
+
new_grads = None
|
|
156
|
+
if self.opt_shard:
|
|
157
|
+
grads = self.grad_reducer(grads)
|
|
158
|
+
new_grads = self.hyper_map(F.partial(shard_grad_scale, self.scale_sense * self.degree),
|
|
159
|
+
grads, self.accu_grads)
|
|
160
|
+
else:
|
|
161
|
+
accu_grads = self.grad_reducer(self.accu_grads)
|
|
162
|
+
new_grads = self.hyper_map(F.partial(grad_scale, self.scale_sense * self.degree), grads, accu_grads)
|
|
163
|
+
return new_grads
|
|
164
|
+
|
|
165
|
+
def _check_mode(self):
|
|
166
|
+
"""check parallel mode"""
|
|
167
|
+
mode = context.get_context('mode')
|
|
168
|
+
if mode != context.GRAPH_MODE:
|
|
169
|
+
raise RuntimeError(f"PipelineGradReducer only support graph mode, but get {mode}")
|
|
@@ -19,7 +19,10 @@ __all__ = ["parameter_broadcast"]
|
|
|
19
19
|
|
|
20
20
|
import numpy as np
|
|
21
21
|
import mindspore as ms
|
|
22
|
-
from mindspore.communication import
|
|
22
|
+
from mindspore.communication import create_group, get_group_size
|
|
23
|
+
from mindspore.parallel._utils import _get_auto_parallel_net, _parallel_mode_map, _check_rank
|
|
24
|
+
# disable pylint too broad Exception
|
|
25
|
+
# pylint: disable=W0212
|
|
23
26
|
|
|
24
27
|
|
|
25
28
|
def parameter_broadcast(net, layout, cur_rank=0, initial_rank=0):
|
|
@@ -34,7 +37,8 @@ def parameter_broadcast(net, layout, cur_rank=0, initial_rank=0):
|
|
|
34
37
|
layout (Dict): Parameter layout dictionary. Come from
|
|
35
38
|
:func:`mindspore.nn.Cell.parameter_layout_dict`
|
|
36
39
|
or read from file(for example: "strategy.ckpt" saved by using the
|
|
37
|
-
`strategy_ckpt_config` parameter of
|
|
40
|
+
`strategy_ckpt_config` parameter of
|
|
41
|
+
:func:`mindspore.parallel.auto_parallel.AutoParallel.save_param_strategy_file` ).
|
|
38
42
|
The key is param name, the value is the layout of this parameter.
|
|
39
43
|
cur_rank (int, optional): current rank id. Default: ``0``.
|
|
40
44
|
initial_rank (int, optional): Start rank id for each pipeline. Default: ``0``.
|
|
@@ -45,6 +49,9 @@ def parameter_broadcast(net, layout, cur_rank=0, initial_rank=0):
|
|
|
45
49
|
ValueError: Parameter name in `layout` can not be found in
|
|
46
50
|
:func:`mindspore.nn.Cell.parameters_dict`.
|
|
47
51
|
|
|
52
|
+
Supported Platforms:
|
|
53
|
+
``Ascend``
|
|
54
|
+
|
|
48
55
|
Examples:
|
|
49
56
|
>>> import os
|
|
50
57
|
>>> import mindspore as ms
|
|
@@ -53,11 +60,11 @@ def parameter_broadcast(net, layout, cur_rank=0, initial_rank=0):
|
|
|
53
60
|
>>> from mindspore.communication import init
|
|
54
61
|
>>> from mindspore.common.initializer import initializer
|
|
55
62
|
>>> from mindspore.train import Model
|
|
56
|
-
>>> from mindspore.parallel.parameter_broadcast import parameter_broadcast
|
|
57
63
|
>>> from mindspore.train.serialization import load_checkpoint, load_param_into_net
|
|
64
|
+
>>> from mindspore.parallel.auto_parallel import AutoParallel
|
|
65
|
+
>>> from mindspore.parallel import parameter_broadcast
|
|
58
66
|
>>> ms.set_context(mode=ms.GRAPH_MODE)
|
|
59
67
|
>>> ms.runtime.set_memory(max_size="28GB")
|
|
60
|
-
>>> ms.set_auto_parallel_context(parallel_mode=ms.ParallelMode.SEMI_AUTO_PARALLEL)
|
|
61
68
|
>>> init()
|
|
62
69
|
>>> ms.set_seed(1)
|
|
63
70
|
>>> class Network(nn.Cell):
|
|
@@ -90,7 +97,8 @@ def parameter_broadcast(net, layout, cur_rank=0, initial_rank=0):
|
|
|
90
97
|
>>> dataset = create_dataset()
|
|
91
98
|
>>> optim = nn.SGD(net.trainable_params(), 1e-2)
|
|
92
99
|
>>> loss = nn.CrossEntropyLoss()
|
|
93
|
-
>>>
|
|
100
|
+
>>> parallel_net = AutoParallel(net)
|
|
101
|
+
>>> model = Model(parallel_net, loss_fn=loss, optimizer=optim)
|
|
94
102
|
>>> model.train(1, dataset)
|
|
95
103
|
>>> ms.save_checkpoint(net, "./simple.ckpt", False)
|
|
96
104
|
>>> layout = model.train_network.parameter_layout_dict
|
|
@@ -104,17 +112,20 @@ def parameter_broadcast(net, layout, cur_rank=0, initial_rank=0):
|
|
|
104
112
|
... print("step end, cur step num: ", cb_params.cur_step_num, flush=True)
|
|
105
113
|
>>> model.train(1, dataset, callbacks=[LossCallBack()])
|
|
106
114
|
"""
|
|
107
|
-
if not layout:
|
|
115
|
+
if not layout or get_group_size() <= 1:
|
|
108
116
|
return
|
|
109
117
|
from mindspore.train._utils import get_parameter_redundancy, remove_param_redundancy
|
|
110
118
|
from mindspore.nn.wrap.cell_wrapper import AllreduceGraph
|
|
111
|
-
origin_parallel_mode =
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
119
|
+
origin_parallel_mode = ""
|
|
120
|
+
pipeline_stages = 1
|
|
121
|
+
parallel_net = _get_auto_parallel_net(net)
|
|
122
|
+
if type(parallel_net).__name__ == 'AutoParallel':
|
|
123
|
+
origin_parallel_mode = _parallel_mode_map(parallel_net._parallel_mode)
|
|
124
|
+
pipeline_stages = parallel_net._pipeline_stages
|
|
125
|
+
else:
|
|
126
|
+
origin_parallel_mode = ms.get_auto_parallel_context("parallel_mode")
|
|
127
|
+
pipeline_stages = ms.get_auto_parallel_context("pipeline_stages")
|
|
128
|
+
_check_rank(cur_rank, initial_rank, pipeline_stages)
|
|
118
129
|
param_redundancy = get_parameter_redundancy(layout, initial_rank)
|
|
119
130
|
if not param_redundancy:
|
|
120
131
|
return
|