mindspore 2.4.10__cp39-cp39-win_amd64.whl → 2.6.0__cp39-cp39-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mindspore might be problematic. Click here for more details.
- mindspore/.commit_id +1 -1
- mindspore/__init__.py +13 -6
- mindspore/_c_dataengine.cp39-win_amd64.pyd +0 -0
- mindspore/_c_expression.cp39-win_amd64.pyd +0 -0
- mindspore/_c_mindrecord.cp39-win_amd64.pyd +0 -0
- mindspore/_check_jit_forbidden_api.py +3 -0
- mindspore/_checkparam.py +3 -38
- mindspore/_deprecated/__init__.py +17 -0
- mindspore/_deprecated/jit.py +198 -0
- mindspore/_extends/builtin_operations.py +1 -1
- mindspore/_extends/parallel_compile/akg_compiler/gen_custom_op_files.py +1 -1
- mindspore/_extends/parse/__init__.py +6 -7
- mindspore/_extends/parse/compile_config.py +83 -0
- mindspore/_extends/parse/deprecated/__init__.py +0 -0
- mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +394 -0
- mindspore/_extends/parse/jit_fallback_modules/__init__.py +0 -0
- mindspore/_extends/parse/jit_fallback_modules/check_utils.py +123 -0
- mindspore/_extends/parse/jit_fallback_modules/third_party_modules.py +50 -0
- mindspore/_extends/parse/parser.py +47 -198
- mindspore/_extends/parse/resources.py +1 -5
- mindspore/_extends/parse/standard_method.py +229 -99
- mindspore/_extends/pijit/__init__.py +2 -2
- mindspore/_extends/pijit/pijit_func_white_list.py +17 -12
- mindspore/_extends/pijit/tensor_func_list.py +27 -0
- mindspore/_extends/utils.py +1 -1
- mindspore/amp.py +11 -5
- mindspore/avcodec-59.dll +0 -0
- mindspore/avdevice-59.dll +0 -0
- mindspore/avfilter-8.dll +0 -0
- mindspore/avformat-59.dll +0 -0
- mindspore/avutil-57.dll +0 -0
- mindspore/boost/__init__.py +2 -2
- mindspore/boost/base.py +3 -7
- mindspore/boost/boost_cell_wrapper.py +138 -43
- mindspore/common/__init__.py +6 -3
- mindspore/common/_grad_function.py +56 -0
- mindspore/common/_pijit_context.py +14 -5
- mindspore/common/_register_for_tensor.py +1 -2
- mindspore/common/_stub_tensor.py +30 -14
- mindspore/common/_tensor_cpp_method.py +17 -0
- mindspore/common/_tensor_docs.py +4760 -0
- mindspore/common/api.py +480 -372
- mindspore/common/auto_dynamic_shape.py +41 -44
- mindspore/common/dtype.py +39 -36
- mindspore/common/dump.py +9 -6
- mindspore/common/file_system.py +9 -1
- mindspore/common/generator.py +5 -0
- mindspore/common/hook_handle.py +6 -2
- mindspore/common/initializer.py +13 -10
- mindspore/common/jit_begin_end.py +94 -0
- mindspore/common/jit_config.py +6 -1
- mindspore/common/jit_context.py +76 -0
- mindspore/common/jit_trace.py +378 -0
- mindspore/common/lazy_inline.py +9 -3
- mindspore/common/mindir_util.py +10 -2
- mindspore/common/mutable.py +5 -4
- mindspore/common/parameter.py +135 -52
- mindspore/common/seed.py +2 -2
- mindspore/common/sparse_tensor.py +23 -17
- mindspore/common/tensor.py +975 -1981
- mindspore/communication/__init__.py +7 -5
- mindspore/communication/_comm_helper.py +52 -2
- mindspore/communication/comm_func.py +240 -181
- mindspore/communication/management.py +95 -26
- mindspore/context.py +324 -573
- mindspore/dataset/__init__.py +65 -37
- mindspore/dataset/audio/__init__.py +2 -8
- mindspore/dataset/audio/transforms.py +3 -17
- mindspore/dataset/callback/ds_callback.py +2 -1
- mindspore/dataset/core/config.py +87 -6
- mindspore/dataset/engine/cache_admin.py +3 -3
- mindspore/dataset/engine/cache_client.py +6 -5
- mindspore/dataset/engine/datasets.py +292 -267
- mindspore/dataset/engine/datasets_audio.py +22 -8
- mindspore/dataset/engine/datasets_standard_format.py +46 -27
- mindspore/dataset/engine/datasets_text.py +78 -48
- mindspore/dataset/engine/datasets_user_defined.py +183 -117
- mindspore/dataset/engine/datasets_vision.py +120 -44
- mindspore/dataset/engine/iterators.py +283 -63
- mindspore/dataset/engine/obs/obs_mindrecord_dataset.py +1 -1
- mindspore/dataset/engine/obs/util.py +8 -0
- mindspore/dataset/engine/queue.py +40 -0
- mindspore/dataset/engine/samplers.py +289 -43
- mindspore/dataset/engine/serializer_deserializer.py +3 -2
- mindspore/dataset/engine/validators.py +53 -11
- mindspore/dataset/text/__init__.py +7 -6
- mindspore/dataset/text/transforms.py +6 -5
- mindspore/dataset/text/utils.py +3 -3
- mindspore/dataset/transforms/__init__.py +0 -9
- mindspore/dataset/transforms/py_transforms_util.py +17 -0
- mindspore/dataset/transforms/transforms.py +31 -14
- mindspore/dataset/utils/browse_dataset.py +1 -1
- mindspore/dataset/vision/__init__.py +2 -9
- mindspore/dataset/vision/transforms.py +202 -158
- mindspore/dataset/vision/utils.py +7 -5
- mindspore/dataset/vision/validators.py +1 -2
- mindspore/device_context/__init__.py +21 -0
- mindspore/device_context/ascend/__init__.py +25 -0
- mindspore/device_context/ascend/device.py +72 -0
- mindspore/device_context/ascend/op_debug.py +153 -0
- mindspore/device_context/ascend/op_precision.py +193 -0
- mindspore/device_context/ascend/op_tuning.py +123 -0
- mindspore/{ops_generate/gen_constants.py → device_context/cpu/__init__.py} +6 -17
- mindspore/device_context/cpu/device.py +62 -0
- mindspore/device_context/cpu/op_tuning.py +43 -0
- mindspore/device_context/gpu/__init__.py +21 -0
- mindspore/device_context/gpu/device.py +70 -0
- mindspore/device_context/gpu/op_precision.py +67 -0
- mindspore/device_context/gpu/op_tuning.py +175 -0
- mindspore/device_manager.py +170 -0
- mindspore/dnnl.dll +0 -0
- mindspore/experimental/es/embedding_service.py +35 -27
- mindspore/experimental/llm_boost/__init__.py +1 -0
- mindspore/experimental/llm_boost/ascend_native/__init__.py +22 -0
- mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +209 -0
- mindspore/experimental/llm_boost/ascend_native/llm_boost.py +52 -0
- mindspore/experimental/llm_boost/atb/boost_base.py +2 -3
- mindspore/experimental/llm_boost/atb/llama_boost.py +6 -1
- mindspore/experimental/llm_boost/register.py +1 -0
- mindspore/experimental/map_parameter.py +4 -4
- mindspore/experimental/optim/adadelta.py +6 -6
- mindspore/experimental/optim/adagrad.py +4 -4
- mindspore/experimental/optim/adam.py +7 -0
- mindspore/experimental/optim/adamax.py +4 -4
- mindspore/experimental/optim/adamw.py +4 -0
- mindspore/experimental/optim/asgd.py +1 -1
- mindspore/experimental/optim/lr_scheduler.py +73 -46
- mindspore/experimental/optim/radam.py +34 -31
- mindspore/experimental/optim/rprop.py +1 -1
- mindspore/experimental/optim/sgd.py +1 -1
- mindspore/hal/contiguous_tensors_handle.py +6 -10
- mindspore/hal/device.py +55 -53
- mindspore/hal/event.py +52 -52
- mindspore/hal/memory.py +179 -120
- mindspore/hal/stream.py +150 -109
- mindspore/include/api/context.h +0 -1
- mindspore/include/dataset/constants.h +7 -4
- mindspore/include/dataset/execute.h +2 -2
- mindspore/jpeg62.dll +0 -0
- mindspore/log.py +50 -0
- mindspore/mindrecord/__init__.py +21 -8
- mindspore/mindrecord/config.py +17 -316
- mindspore/mindrecord/filereader.py +1 -9
- mindspore/mindrecord/filewriter.py +5 -15
- mindspore/mindrecord/mindpage.py +1 -9
- mindspore/mindspore_backend_common.dll +0 -0
- mindspore/mindspore_backend_manager.dll +0 -0
- mindspore/mindspore_common.dll +0 -0
- mindspore/mindspore_core.dll +0 -0
- mindspore/mindspore_dump.dll +0 -0
- mindspore/mindspore_frontend.dll +0 -0
- mindspore/mindspore_glog.dll +0 -0
- mindspore/mindspore_memory_pool.dll +0 -0
- mindspore/mindspore_ms_backend.dll +0 -0
- mindspore/mindspore_ops.dll +0 -0
- mindspore/{mindspore_backend.dll → mindspore_ops_host.dll} +0 -0
- mindspore/mindspore_ops_kernel_common.dll +0 -0
- mindspore/mindspore_profiler.dll +0 -0
- mindspore/mindspore_pyboost.dll +0 -0
- mindspore/mindspore_pynative.dll +0 -0
- mindspore/mindspore_res_manager.dll +0 -0
- mindspore/mindspore_runtime_pipeline.dll +0 -0
- mindspore/mint/__init__.py +798 -761
- mindspore/mint/distributed/__init__.py +70 -4
- mindspore/mint/distributed/distributed.py +2679 -44
- mindspore/mint/linalg/__init__.py +8 -0
- mindspore/mint/nn/__init__.py +743 -22
- mindspore/mint/nn/functional.py +716 -23
- mindspore/mint/nn/layer/__init__.py +21 -4
- mindspore/mint/nn/layer/_functions.py +334 -0
- mindspore/mint/nn/layer/activation.py +276 -1
- mindspore/mint/nn/layer/basic.py +123 -0
- mindspore/mint/nn/layer/conv.py +933 -0
- mindspore/mint/nn/layer/normalization.py +223 -28
- mindspore/mint/nn/layer/padding.py +797 -0
- mindspore/mint/nn/layer/pooling.py +235 -0
- mindspore/mint/optim/__init__.py +3 -1
- mindspore/mint/optim/adam.py +223 -0
- mindspore/mint/optim/adamw.py +26 -19
- mindspore/mint/optim/sgd.py +171 -0
- mindspore/mint/special/__init__.py +2 -1
- mindspore/multiprocessing/__init__.py +5 -0
- mindspore/nn/__init__.py +4 -1
- mindspore/nn/cell.py +1373 -192
- mindspore/nn/dynamic_lr.py +2 -1
- mindspore/nn/layer/activation.py +29 -27
- mindspore/nn/layer/basic.py +51 -35
- mindspore/nn/layer/channel_shuffle.py +3 -3
- mindspore/nn/layer/container.py +1 -1
- mindspore/nn/layer/conv.py +53 -42
- mindspore/nn/layer/embedding.py +12 -11
- mindspore/nn/layer/normalization.py +56 -49
- mindspore/nn/layer/padding.py +4 -3
- mindspore/nn/layer/pooling.py +120 -42
- mindspore/nn/layer/rnn_cells.py +1 -1
- mindspore/nn/layer/rnns.py +2 -1
- mindspore/nn/layer/timedistributed.py +5 -5
- mindspore/nn/layer/transformer.py +59 -36
- mindspore/nn/learning_rate_schedule.py +8 -4
- mindspore/nn/loss/loss.py +58 -55
- mindspore/nn/optim/ada_grad.py +7 -5
- mindspore/nn/optim/adadelta.py +11 -9
- mindspore/nn/optim/adafactor.py +1 -1
- mindspore/nn/optim/adam.py +19 -15
- mindspore/nn/optim/adamax.py +8 -7
- mindspore/nn/optim/adasum.py +5 -5
- mindspore/nn/optim/asgd.py +3 -1
- mindspore/nn/optim/ftrl.py +11 -9
- mindspore/nn/optim/lamb.py +1 -1
- mindspore/nn/optim/lars.py +1 -4
- mindspore/nn/optim/lazyadam.py +12 -10
- mindspore/nn/optim/momentum.py +7 -6
- mindspore/nn/optim/optimizer.py +3 -3
- mindspore/nn/optim/proximal_ada_grad.py +12 -10
- mindspore/nn/optim/rmsprop.py +13 -12
- mindspore/nn/optim/rprop.py +11 -9
- mindspore/nn/optim/sgd.py +9 -6
- mindspore/nn/optim/tft_wrapper.py +5 -2
- mindspore/nn/optim/thor.py +2 -1
- mindspore/nn/probability/bijector/bijector.py +17 -11
- mindspore/nn/probability/bijector/gumbel_cdf.py +5 -5
- mindspore/nn/probability/bijector/invert.py +2 -2
- mindspore/nn/probability/bijector/scalar_affine.py +3 -3
- mindspore/nn/probability/bijector/softplus.py +3 -2
- mindspore/nn/probability/distribution/beta.py +3 -3
- mindspore/nn/probability/distribution/categorical.py +1 -1
- mindspore/nn/probability/distribution/cauchy.py +4 -2
- mindspore/nn/probability/distribution/exponential.py +6 -7
- mindspore/nn/probability/distribution/gamma.py +2 -2
- mindspore/nn/probability/distribution/gumbel.py +2 -2
- mindspore/nn/probability/distribution/half_normal.py +5 -3
- mindspore/nn/probability/distribution/logistic.py +5 -3
- mindspore/nn/probability/distribution/poisson.py +1 -1
- mindspore/nn/probability/distribution/uniform.py +5 -3
- mindspore/nn/reinforcement/_tensors_queue.py +1 -1
- mindspore/nn/reinforcement/tensor_array.py +1 -1
- mindspore/nn/utils/init.py +13 -11
- mindspore/nn/wrap/__init__.py +6 -6
- mindspore/nn/wrap/cell_wrapper.py +181 -122
- mindspore/nn/wrap/grad_reducer.py +45 -36
- mindspore/nn/wrap/loss_scale.py +6 -7
- mindspore/numpy/array_creations.py +63 -65
- mindspore/numpy/array_ops.py +149 -144
- mindspore/numpy/logic_ops.py +41 -42
- mindspore/numpy/math_ops.py +361 -359
- mindspore/numpy/utils.py +17 -18
- mindspore/numpy/utils_const.py +5 -6
- mindspore/opencv_core452.dll +0 -0
- mindspore/opencv_imgcodecs452.dll +0 -0
- mindspore/opencv_imgproc452.dll +0 -0
- mindspore/ops/__init__.py +5 -3
- mindspore/ops/_grad_experimental/grad_comm_ops.py +112 -16
- mindspore/ops/_grad_experimental/grad_debug_ops.py +14 -2
- mindspore/ops/_grad_experimental/grad_inner_ops.py +9 -0
- mindspore/ops/_grad_experimental/grad_math_ops.py +2 -1
- mindspore/ops/_grad_experimental/taylor_rule.py +29 -0
- mindspore/ops/_op_impl/cpu/__init__.py +1 -0
- mindspore/ops/_op_impl/cpu/raise_op.py +28 -0
- mindspore/ops/_register_for_op.py +0 -11
- mindspore/{ops_generate → ops/_utils}/arg_dtype_cast.py +123 -4
- mindspore/{ops_generate → ops/_utils}/arg_handler.py +3 -65
- mindspore/ops/_vmap/vmap_array_ops.py +52 -25
- mindspore/ops/_vmap/vmap_base.py +0 -2
- mindspore/ops/_vmap/vmap_grad_nn_ops.py +21 -14
- mindspore/ops/_vmap/vmap_math_ops.py +15 -16
- mindspore/ops/_vmap/vmap_nn_ops.py +29 -42
- mindspore/ops/auto_generate/__init__.py +4 -3
- mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +258 -46
- mindspore/ops/auto_generate/gen_extend_func.py +757 -185
- mindspore/ops/auto_generate/gen_ops_def.py +4197 -2243
- mindspore/ops/auto_generate/gen_ops_prim.py +16976 -6055
- mindspore/ops/auto_generate/pyboost_inner_prim.py +221 -87
- mindspore/ops/composite/__init__.py +2 -1
- mindspore/ops/composite/base.py +20 -25
- mindspore/ops/composite/math_ops.py +6 -16
- mindspore/ops/composite/multitype_ops/__init__.py +5 -2
- mindspore/ops/composite/multitype_ops/_compile_utils.py +228 -30
- mindspore/ops/composite/multitype_ops/_constexpr_utils.py +1 -2
- mindspore/ops/composite/multitype_ops/add_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/bitwise_and_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/bitwise_or_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/bitwise_xor_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/div_impl.py +6 -4
- mindspore/ops/composite/multitype_ops/equal_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/floordiv_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/getitem_impl.py +3 -2
- mindspore/ops/composite/multitype_ops/greater_equal_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/greater_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/in_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/invert_impl.py +50 -0
- mindspore/ops/composite/multitype_ops/left_shift_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/less_equal_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/less_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/logic_not_impl.py +3 -2
- mindspore/ops/composite/multitype_ops/logical_and_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/logical_or_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/mod_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/mul_impl.py +3 -2
- mindspore/ops/composite/multitype_ops/negative_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/not_equal_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/not_in_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/ones_like_impl.py +18 -0
- mindspore/ops/composite/multitype_ops/pow_impl.py +2 -30
- mindspore/ops/composite/multitype_ops/right_shift_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/setitem_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/sub_impl.py +2 -1
- mindspore/ops/function/__init__.py +40 -2
- mindspore/ops/function/_add_attr_func.py +58 -0
- mindspore/ops/function/array_func.py +2089 -2403
- mindspore/ops/function/clip_func.py +80 -23
- mindspore/ops/function/debug_func.py +57 -57
- mindspore/ops/function/grad/__init__.py +1 -0
- mindspore/ops/function/grad/grad_func.py +104 -71
- mindspore/ops/function/image_func.py +2 -2
- mindspore/ops/function/linalg_func.py +47 -78
- mindspore/ops/function/math_func.py +4351 -3813
- mindspore/ops/function/nn_func.py +1712 -637
- mindspore/ops/function/other_func.py +159 -1
- mindspore/ops/function/parameter_func.py +18 -84
- mindspore/ops/function/random_func.py +452 -387
- mindspore/ops/function/reshard_func.py +4 -70
- mindspore/ops/function/sparse_func.py +3 -3
- mindspore/ops/function/sparse_unary_func.py +6 -6
- mindspore/ops/function/spectral_func.py +25 -58
- mindspore/ops/function/vmap_func.py +26 -18
- mindspore/ops/functional.py +23 -7
- mindspore/ops/functional_overload.py +1548 -0
- mindspore/ops/op_info_register.py +32 -244
- mindspore/ops/operations/__init__.py +23 -15
- mindspore/ops/operations/_custom_ops_utils.py +235 -0
- mindspore/ops/operations/_embedding_cache_ops.py +4 -4
- mindspore/ops/operations/_grad_ops.py +2 -43
- mindspore/ops/operations/_infer_ops.py +2 -1
- mindspore/ops/operations/_inner_ops.py +43 -84
- mindspore/ops/operations/_ms_kernel.py +4 -10
- mindspore/ops/operations/_rl_inner_ops.py +1 -1
- mindspore/ops/operations/_scalar_ops.py +3 -2
- mindspore/ops/operations/_sequence_ops.py +1 -1
- mindspore/ops/operations/_tensor_array.py +1 -1
- mindspore/ops/operations/array_ops.py +81 -324
- mindspore/ops/operations/comm_ops.py +154 -108
- mindspore/ops/operations/custom_ops.py +298 -87
- mindspore/ops/operations/debug_ops.py +157 -59
- mindspore/ops/operations/inner_ops.py +7 -5
- mindspore/ops/operations/linalg_ops.py +1 -57
- mindspore/ops/operations/manually_defined/_inner.py +1 -1
- mindspore/ops/operations/manually_defined/ops_def.py +928 -180
- mindspore/ops/operations/math_ops.py +32 -234
- mindspore/ops/operations/nn_ops.py +212 -531
- mindspore/ops/operations/other_ops.py +62 -9
- mindspore/ops/operations/random_ops.py +13 -7
- mindspore/ops/operations/reshard_ops.py +1 -1
- mindspore/ops/operations/sparse_ops.py +2 -2
- mindspore/ops/primitive.py +66 -53
- mindspore/ops/tensor_method.py +1895 -0
- mindspore/ops_generate/__init__.py +0 -5
- mindspore/ops_generate/aclnn/__init__.py +0 -0
- mindspore/ops_generate/aclnn/aclnn_kernel_register_auto_cc_generator.py +135 -0
- mindspore/ops_generate/aclnn/gen_aclnn_implement.py +257 -0
- mindspore/ops_generate/api/__init__.py +0 -0
- mindspore/ops_generate/api/add_tensor_docs_generator.py +56 -0
- mindspore/ops_generate/api/cpp_create_prim_instance_helper_generator.py +105 -0
- mindspore/ops_generate/api/functional_map_cpp_generator.py +504 -0
- mindspore/ops_generate/api/functional_overload_py_generator.py +112 -0
- mindspore/ops_generate/api/functions_cc_generator.py +237 -0
- mindspore/ops_generate/api/gen_api.py +103 -0
- mindspore/ops_generate/api/op_api_proto.py +235 -0
- mindspore/ops_generate/api/tensor_func_reg_cpp_generator.py +461 -0
- mindspore/ops_generate/common/__init__.py +0 -0
- mindspore/ops_generate/common/base_generator.py +11 -0
- mindspore/ops_generate/common/gen_constants.py +91 -0
- mindspore/ops_generate/common/gen_utils.py +348 -0
- mindspore/ops_generate/common/op_proto.py +473 -0
- mindspore/ops_generate/common/template.py +523 -0
- mindspore/ops_generate/gen_ops.py +22 -1069
- mindspore/ops_generate/op_def/__init__.py +0 -0
- mindspore/ops_generate/op_def/gen_op_def.py +90 -0
- mindspore/ops_generate/op_def/lite_ops_cpp_generator.py +191 -0
- mindspore/ops_generate/op_def/ops_def_cc_generator.py +296 -0
- mindspore/ops_generate/op_def/ops_def_h_generator.py +74 -0
- mindspore/ops_generate/op_def/ops_name_h_generator.py +83 -0
- mindspore/ops_generate/op_def/ops_primitive_h_generator.py +125 -0
- mindspore/ops_generate/op_def_py/__init__.py +0 -0
- mindspore/ops_generate/op_def_py/gen_op_def_py.py +47 -0
- mindspore/ops_generate/op_def_py/op_def_py_generator.py +132 -0
- mindspore/ops_generate/op_def_py/op_prim_py_generator.py +489 -0
- mindspore/ops_generate/pyboost/__init__.py +0 -0
- mindspore/ops_generate/pyboost/auto_grad_impl_cc_generator.py +139 -0
- mindspore/ops_generate/pyboost/auto_grad_reg_cc_generator.py +93 -0
- mindspore/ops_generate/pyboost/gen_pyboost_func.py +175 -0
- mindspore/ops_generate/pyboost/op_template_parser.py +517 -0
- mindspore/ops_generate/pyboost/pyboost_functions_cpp_generator.py +407 -0
- mindspore/ops_generate/pyboost/pyboost_functions_h_generator.py +100 -0
- mindspore/ops_generate/pyboost/pyboost_functions_py_generator.py +148 -0
- mindspore/ops_generate/pyboost/pyboost_grad_function_cpp_generator.py +155 -0
- mindspore/ops_generate/pyboost/pyboost_inner_prim_generator.py +132 -0
- mindspore/ops_generate/pyboost/pyboost_native_grad_functions_generator.py +272 -0
- mindspore/ops_generate/pyboost/pyboost_op_cpp_code_generator.py +938 -0
- mindspore/ops_generate/pyboost/pyboost_overload_functions_cpp_generator.py +357 -0
- mindspore/ops_generate/{pyboost_utils.py → pyboost/pyboost_utils.py} +179 -36
- mindspore/ops_generate/resources/__init__.py +0 -0
- mindspore/ops_generate/resources/resource_list.py +30 -0
- mindspore/ops_generate/resources/resource_loader.py +36 -0
- mindspore/ops_generate/resources/resource_manager.py +64 -0
- mindspore/ops_generate/resources/yaml_loader.py +88 -0
- mindspore/ops_generate/tensor_py_cc_generator.py +122 -0
- mindspore/parallel/__init__.py +7 -3
- mindspore/parallel/_auto_parallel_context.py +159 -40
- mindspore/parallel/_cell_wrapper.py +132 -15
- mindspore/parallel/_parallel_serialization.py +107 -5
- mindspore/parallel/_ps_context.py +1 -1
- mindspore/parallel/_recovery_context.py +7 -2
- mindspore/parallel/_tensor.py +142 -18
- mindspore/parallel/_utils.py +199 -23
- mindspore/parallel/algo_parameter_config.py +4 -4
- mindspore/parallel/auto_parallel.py +732 -0
- mindspore/parallel/checkpoint_convert.py +159 -0
- mindspore/parallel/checkpoint_transform.py +700 -35
- mindspore/parallel/cluster/process_entity/_api.py +276 -50
- mindspore/parallel/cluster/process_entity/_utils.py +41 -6
- mindspore/parallel/cluster/run.py +21 -4
- mindspore/parallel/function/__init__.py +24 -0
- mindspore/parallel/function/reshard_func.py +258 -0
- mindspore/parallel/nn/__init__.py +25 -0
- mindspore/parallel/nn/parallel_cell_wrapper.py +263 -0
- mindspore/parallel/nn/parallel_grad_reducer.py +169 -0
- mindspore/parallel/parameter_broadcast.py +25 -14
- mindspore/parallel/shard.py +137 -59
- mindspore/parallel/transform_safetensors.py +364 -305
- mindspore/profiler/__init__.py +22 -5
- mindspore/profiler/analysis/__init__.py +0 -0
- mindspore/profiler/analysis/parser/__init__.py +0 -0
- mindspore/profiler/analysis/parser/ascend_cann_parser.py +170 -0
- mindspore/profiler/analysis/parser/base_parser.py +158 -0
- mindspore/profiler/analysis/parser/framework_cann_relation_parser.py +45 -0
- mindspore/profiler/analysis/parser/ms_framework_parser.py +142 -0
- mindspore/profiler/analysis/parser/ms_minddata_parser.py +145 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/__init__.py +0 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +264 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/base_timeline_assembler.py +40 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +109 -0
- mindspore/profiler/analysis/parser/timeline_creator/__init__.py +0 -0
- mindspore/profiler/analysis/parser/timeline_creator/base_timeline_creator.py +44 -0
- mindspore/profiler/analysis/parser/timeline_creator/cpu_op_timeline_creator.py +90 -0
- mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +76 -0
- mindspore/profiler/analysis/parser/timeline_creator/msprof_timeline_creator.py +103 -0
- mindspore/profiler/analysis/parser/timeline_creator/scope_layer_timeline_creator.py +134 -0
- mindspore/profiler/analysis/parser/timeline_event/__init__.py +0 -0
- mindspore/profiler/analysis/parser/timeline_event/base_event.py +233 -0
- mindspore/profiler/analysis/parser/timeline_event/cpu_op_event.py +47 -0
- mindspore/profiler/analysis/parser/timeline_event/flow_event.py +36 -0
- mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +415 -0
- mindspore/profiler/analysis/parser/timeline_event/msprof_event.py +73 -0
- mindspore/profiler/analysis/parser/timeline_event/scope_layer_event.py +53 -0
- mindspore/profiler/analysis/parser/timeline_event/timeline_event_pool.py +146 -0
- mindspore/profiler/analysis/task_manager.py +131 -0
- mindspore/profiler/analysis/time_converter.py +84 -0
- mindspore/profiler/analysis/viewer/__init__.py +0 -0
- mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +372 -0
- mindspore/profiler/analysis/viewer/ascend_integrate_viewer.py +87 -0
- mindspore/profiler/analysis/viewer/ascend_kernel_details_viewer.py +250 -0
- mindspore/profiler/analysis/viewer/ascend_memory_viewer.py +320 -0
- mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +327 -0
- mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +376 -0
- mindspore/profiler/analysis/viewer/ascend_timeline_viewer.py +58 -0
- mindspore/profiler/analysis/viewer/base_viewer.py +26 -0
- mindspore/profiler/analysis/viewer/ms_dataset_viewer.py +96 -0
- mindspore/profiler/analysis/viewer/ms_minddata_viewer.py +581 -0
- mindspore/profiler/analysis/work_flow.py +73 -0
- mindspore/profiler/common/ascend_msprof_exporter.py +139 -0
- mindspore/profiler/common/command_executor.py +90 -0
- mindspore/profiler/common/constant.py +186 -3
- mindspore/profiler/common/file_manager.py +208 -0
- mindspore/profiler/common/log.py +130 -0
- mindspore/profiler/common/msprof_cmd_tool.py +221 -0
- mindspore/profiler/common/path_manager.py +395 -0
- mindspore/profiler/common/process_bar.py +168 -0
- mindspore/profiler/common/process_pool.py +9 -3
- mindspore/profiler/common/profiler_context.py +500 -0
- mindspore/profiler/common/profiler_info.py +304 -0
- mindspore/profiler/common/profiler_meta_data.py +74 -0
- mindspore/profiler/common/profiler_output_path.py +284 -0
- mindspore/profiler/common/profiler_parameters.py +251 -0
- mindspore/profiler/common/profiler_path_manager.py +179 -0
- mindspore/profiler/common/record_function.py +76 -0
- mindspore/profiler/common/tlv_decoder.py +76 -0
- mindspore/profiler/common/util.py +75 -2
- mindspore/profiler/dynamic_profiler.py +341 -75
- mindspore/profiler/envprofiler.py +163 -0
- mindspore/profiler/experimental_config.py +197 -0
- mindspore/profiler/mstx.py +242 -0
- mindspore/profiler/platform/__init__.py +21 -0
- mindspore/profiler/platform/base_profiler.py +40 -0
- mindspore/profiler/platform/cpu_profiler.py +124 -0
- mindspore/profiler/platform/gpu_profiler.py +74 -0
- mindspore/profiler/platform/npu_profiler.py +335 -0
- mindspore/profiler/profiler.py +1073 -90
- mindspore/profiler/profiler_action_controller.py +187 -0
- mindspore/profiler/profiler_interface.py +118 -0
- mindspore/profiler/schedule.py +243 -0
- mindspore/rewrite/api/node.py +15 -13
- mindspore/rewrite/api/symbol_tree.py +2 -3
- mindspore/run_check/_check_version.py +27 -20
- mindspore/run_check/run_check.py +1 -1
- mindspore/runtime/__init__.py +37 -0
- mindspore/runtime/device.py +27 -0
- mindspore/runtime/event.py +209 -0
- mindspore/runtime/executor.py +177 -0
- mindspore/runtime/memory.py +416 -0
- mindspore/runtime/stream.py +460 -0
- mindspore/runtime/thread_bind_core.py +401 -0
- mindspore/safeguard/rewrite_obfuscation.py +12 -9
- mindspore/swresample-4.dll +0 -0
- mindspore/swscale-6.dll +0 -0
- mindspore/tinyxml2.dll +0 -0
- mindspore/train/__init__.py +8 -8
- mindspore/train/_utils.py +96 -27
- mindspore/train/amp.py +9 -5
- mindspore/train/callback/__init__.py +2 -2
- mindspore/train/callback/_callback.py +2 -16
- mindspore/train/callback/_checkpoint.py +53 -55
- mindspore/train/callback/_cluster_monitor.py +14 -18
- mindspore/train/callback/_early_stop.py +1 -1
- mindspore/train/callback/_flops_collector.py +103 -68
- mindspore/train/callback/_history.py +8 -5
- mindspore/train/callback/_lambda_callback.py +2 -2
- mindspore/train/callback/_landscape.py +0 -3
- mindspore/train/callback/_loss_monitor.py +2 -1
- mindspore/train/callback/_on_request_exit.py +6 -5
- mindspore/train/callback/_reduce_lr_on_plateau.py +11 -6
- mindspore/train/callback/_summary_collector.py +52 -19
- mindspore/train/callback/_time_monitor.py +2 -1
- mindspore/train/callback/{_tft_register.py → _train_fault_tolerance.py} +228 -108
- mindspore/train/data_sink.py +25 -2
- mindspore/train/dataset_helper.py +15 -16
- mindspore/train/loss_scale_manager.py +8 -7
- mindspore/train/metrics/accuracy.py +3 -3
- mindspore/train/metrics/confusion_matrix.py +9 -9
- mindspore/train/metrics/error.py +3 -3
- mindspore/train/metrics/hausdorff_distance.py +4 -4
- mindspore/train/metrics/mean_surface_distance.py +3 -3
- mindspore/train/metrics/metric.py +0 -12
- mindspore/train/metrics/occlusion_sensitivity.py +4 -2
- mindspore/train/metrics/precision.py +11 -10
- mindspore/train/metrics/recall.py +9 -9
- mindspore/train/metrics/root_mean_square_surface_distance.py +2 -2
- mindspore/train/mind_ir_pb2.py +174 -46
- mindspore/train/model.py +269 -136
- mindspore/train/serialization.py +622 -978
- mindspore/train/summary/_summary_adapter.py +2 -2
- mindspore/train/summary/summary_record.py +2 -3
- mindspore/train/train_thor/model_thor.py +1 -1
- mindspore/turbojpeg.dll +0 -0
- mindspore/utils/__init__.py +6 -3
- mindspore/utils/dryrun.py +140 -0
- mindspore/utils/hooks.py +81 -0
- mindspore/utils/runtime_execution_order_check.py +552 -0
- mindspore/utils/utils.py +138 -4
- mindspore/version.py +1 -1
- {mindspore-2.4.10.dist-info → mindspore-2.6.0.dist-info}/METADATA +3 -3
- {mindspore-2.4.10.dist-info → mindspore-2.6.0.dist-info}/RECORD +564 -395
- {mindspore-2.4.10.dist-info → mindspore-2.6.0.dist-info}/entry_points.txt +1 -1
- mindspore/_install_custom.py +0 -43
- mindspore/common/_register_for_adapter.py +0 -74
- mindspore/common/_tensor_overload.py +0 -139
- mindspore/mindspore_np_dtype.dll +0 -0
- mindspore/ops/auto_generate/gen_arg_dtype_cast.py +0 -252
- mindspore/ops/auto_generate/gen_arg_handler.py +0 -197
- mindspore/ops/operations/_opaque_predicate_registry.py +0 -41
- mindspore/ops_generate/gen_aclnn_implement.py +0 -263
- mindspore/ops_generate/gen_ops_inner_prim.py +0 -131
- mindspore/ops_generate/gen_pyboost_func.py +0 -1052
- mindspore/ops_generate/gen_utils.py +0 -209
- mindspore/ops_generate/op_proto.py +0 -145
- mindspore/ops_generate/template.py +0 -261
- mindspore/profiler/envprofiling.py +0 -254
- mindspore/profiler/profiling.py +0 -1926
- {mindspore-2.4.10.dist-info → mindspore-2.6.0.dist-info}/WHEEL +0 -0
- {mindspore-2.4.10.dist-info → mindspore-2.6.0.dist-info}/top_level.txt +0 -0
mindspore/numpy/utils.py
CHANGED
|
@@ -18,9 +18,8 @@ from __future__ import absolute_import
|
|
|
18
18
|
import types
|
|
19
19
|
|
|
20
20
|
from mindspore.common import Tensor
|
|
21
|
-
from mindspore._c_expression import Tensor as Tensor_
|
|
22
|
-
from mindspore.ops import functional as F
|
|
23
21
|
from mindspore.common import dtype as mstype
|
|
22
|
+
from mindspore import ops
|
|
24
23
|
|
|
25
24
|
from mindspore.numpy.utils_const import _tile_size, _add_unit_axes, _raise_type_error, _type_convert, \
|
|
26
25
|
_tuple_setitem, _callable_const, _check_is_float, _get_device
|
|
@@ -65,7 +64,7 @@ def _check_input_for_asarray(array_like):
|
|
|
65
64
|
|
|
66
65
|
def _is_scalar(shape):
|
|
67
66
|
"""check whether input shape is a scalar"""
|
|
68
|
-
return
|
|
67
|
+
return ops.shape_mul(shape) == 1
|
|
69
68
|
|
|
70
69
|
|
|
71
70
|
def _convert_list_tensor_to_tuple_tensor(list_of_tensor):
|
|
@@ -80,27 +79,27 @@ def _convert_list_tensor_to_tuple_tensor(list_of_tensor):
|
|
|
80
79
|
|
|
81
80
|
def _expand(x, ndim, axis=0):
|
|
82
81
|
"""Expand x to ndim from axis, which can be 0 or -1."""
|
|
83
|
-
shape = _add_unit_axes(
|
|
84
|
-
return
|
|
82
|
+
shape = _add_unit_axes(ops.shape(x), ndim, axis == -1)
|
|
83
|
+
return ops.reshape(x, shape)
|
|
85
84
|
|
|
86
85
|
|
|
87
86
|
def _broadcast_to(x, shape_cur, shape_to, ndim_to):
|
|
88
87
|
"""Broadcasts x from shape_cur to shape_to."""
|
|
89
88
|
size = _tile_size(shape_cur, shape_to, ndim_to)
|
|
90
|
-
return
|
|
89
|
+
return ops.tile(x, size)
|
|
91
90
|
|
|
92
91
|
|
|
93
92
|
def _broadcast_to_shape(x, shape):
|
|
94
93
|
"""Broadcasts x from current shape to shape"""
|
|
95
94
|
ndim_to = len(shape)
|
|
96
95
|
x = _expand(x, ndim_to)
|
|
97
|
-
return _broadcast_to(x,
|
|
96
|
+
return _broadcast_to(x, ops.shape(x), shape, ndim_to)
|
|
98
97
|
|
|
99
98
|
|
|
100
99
|
def _get_size(x, axis=None):
|
|
101
100
|
"""Get the number of elements along the given axis of tensor x."""
|
|
102
|
-
if axis is None or
|
|
103
|
-
axis =
|
|
101
|
+
if axis is None or ops.tuple_len(axis) == 0:
|
|
102
|
+
axis = ops.make_range(x.ndim)
|
|
104
103
|
nums = 1
|
|
105
104
|
for ax in axis:
|
|
106
105
|
nums *= x.shape[ax]
|
|
@@ -110,7 +109,7 @@ def _get_size(x, axis=None):
|
|
|
110
109
|
def _check_input_tensor(*tensors):
|
|
111
110
|
for tensor in tensors:
|
|
112
111
|
if not isinstance(tensor, Tensor):
|
|
113
|
-
_raise_type_error('expect Tensor, but got ',
|
|
112
|
+
_raise_type_error('expect Tensor, but got ', ops.typeof(tensor))
|
|
114
113
|
return True
|
|
115
114
|
|
|
116
115
|
|
|
@@ -129,7 +128,7 @@ def _to_tensor(*args):
|
|
|
129
128
|
for arg in args:
|
|
130
129
|
if isinstance(arg, (int, float, bool, list, tuple)):
|
|
131
130
|
if isinstance(arg, (list, tuple)) and not arg:
|
|
132
|
-
arg =
|
|
131
|
+
arg = Tensor(arg)
|
|
133
132
|
arg = _convert_64_to_32(_type_convert(Tensor, arg))
|
|
134
133
|
elif not isinstance(arg, Tensor):
|
|
135
134
|
_raise_type_error("Expect input to be array like.")
|
|
@@ -141,7 +140,7 @@ def _to_tensor(*args):
|
|
|
141
140
|
|
|
142
141
|
def _get_dtype_from_scalar(*input_numbers):
|
|
143
142
|
"""
|
|
144
|
-
Get the final dtype from series of input numbers, compared with
|
|
143
|
+
Get the final dtype from series of input numbers, compared with ops.typeof, we
|
|
145
144
|
return int32/float32 for python int/float instead.
|
|
146
145
|
"""
|
|
147
146
|
bool_flag = True
|
|
@@ -184,7 +183,7 @@ def _slice_along_axis(f, axis, slice_start, slice_end):
|
|
|
184
183
|
slice_size = slice_end - slice_start
|
|
185
184
|
index_start = _tuple_setitem(index_start, axis, slice_start)
|
|
186
185
|
index_end = _tuple_setitem(index_end, axis, slice_size)
|
|
187
|
-
return
|
|
186
|
+
return ops.tensor_slice(f, index_start, index_end)
|
|
188
187
|
|
|
189
188
|
|
|
190
189
|
def _to_tensor_origin_dtype(*args):
|
|
@@ -203,12 +202,12 @@ def _to_tensor_origin_dtype(*args):
|
|
|
203
202
|
|
|
204
203
|
def _callable(tensor, obj):
|
|
205
204
|
"""Returns True if `obj` is a function."""
|
|
206
|
-
if
|
|
205
|
+
if ops.isconstant(tensor):
|
|
207
206
|
return isinstance(obj, types.FunctionType)
|
|
208
|
-
return _callable_const(
|
|
207
|
+
return _callable_const(ops.typeof(obj))
|
|
209
208
|
|
|
210
209
|
|
|
211
210
|
def _isnan(x):
|
|
212
|
-
if _get_device() == 'Ascend' and not _check_is_float(
|
|
213
|
-
return
|
|
214
|
-
return
|
|
211
|
+
if _get_device() == 'Ascend' and not _check_is_float(ops.dtype(x)):
|
|
212
|
+
return ops.fill(mstype.bool_, ops.shape(x), False)
|
|
213
|
+
return ops.isnan(x)
|
mindspore/numpy/utils_const.py
CHANGED
|
@@ -20,14 +20,13 @@ from itertools import accumulate
|
|
|
20
20
|
import operator
|
|
21
21
|
|
|
22
22
|
import mindspore.context as context
|
|
23
|
-
from mindspore.ops import functional as F
|
|
24
23
|
from mindspore.ops.primitive import constexpr
|
|
25
24
|
from mindspore.ops.primitive import _primexpr
|
|
26
25
|
from mindspore.common import dtype as mstype
|
|
27
26
|
from mindspore.common import Tensor
|
|
28
|
-
from mindspore._c_expression import Tensor as Tensor_
|
|
29
27
|
from mindspore._c_expression import typing
|
|
30
28
|
from mindspore import _checkparam as validator
|
|
29
|
+
from mindspore import ops
|
|
31
30
|
|
|
32
31
|
from mindspore.numpy.dtypes import promotion_rule, dtype_tuple, all_types, dtype_map, rule_for_trigonometric
|
|
33
32
|
|
|
@@ -80,13 +79,13 @@ def _check_dtype(dtype):
|
|
|
80
79
|
@_primexpr
|
|
81
80
|
def _is_shape_empty(shp):
|
|
82
81
|
"""Check whether shape contains zero"""
|
|
83
|
-
if
|
|
82
|
+
if ops.is_sequence_shape_unknown(shp):
|
|
84
83
|
return False
|
|
85
84
|
if isinstance(shp, int):
|
|
86
85
|
return shp == 0
|
|
87
86
|
if isinstance(shp, (tuple, list)):
|
|
88
87
|
return 0 in shp
|
|
89
|
-
return
|
|
88
|
+
return ops.shape_mul(shp) == 0
|
|
90
89
|
|
|
91
90
|
|
|
92
91
|
@_primexpr
|
|
@@ -189,7 +188,7 @@ def _check_axis_valid(axes, ndim):
|
|
|
189
188
|
raise ValueError('duplicate value in "axis"')
|
|
190
189
|
|
|
191
190
|
if axes is None:
|
|
192
|
-
axes =
|
|
191
|
+
axes = ops.make_range(ndim)
|
|
193
192
|
return axes
|
|
194
193
|
if isinstance(axes, (tuple, list)):
|
|
195
194
|
axes = tuple(map(lambda x: _check_axis_in_range(x, ndim), axes))
|
|
@@ -282,7 +281,7 @@ def _raise_unimplemented_error(info, param=None):
|
|
|
282
281
|
@_primexpr
|
|
283
282
|
def _empty(dtype, shape):
|
|
284
283
|
"""Returns an uninitialized array with dtype and shape."""
|
|
285
|
-
return
|
|
284
|
+
return Tensor(dtype=dtype, shape=shape)
|
|
286
285
|
|
|
287
286
|
|
|
288
287
|
@constexpr
|
mindspore/opencv_core452.dll
CHANGED
|
Binary file
|
|
Binary file
|
mindspore/opencv_imgproc452.dll
CHANGED
|
Binary file
|
mindspore/ops/__init__.py
CHANGED
|
@@ -31,12 +31,14 @@ from mindspore.ops.op_info_register import op_info_register, custom_info_registe
|
|
|
31
31
|
from mindspore.ops.primitive import constexpr
|
|
32
32
|
from mindspore.ops import composite, operations, functional, function
|
|
33
33
|
from mindspore.ops import signature
|
|
34
|
-
from mindspore.ops.auto_generate import cpp_create_prim_instance_helper,
|
|
34
|
+
from mindspore.ops.auto_generate import cpp_create_prim_instance_helper, \
|
|
35
35
|
gen_extend_func, gen_ops_def, gen_ops_prim, pyboost_inner_prim
|
|
36
|
+
from mindspore.ops.functional_overload import all_gather_matmul, matmul_reduce_scatter
|
|
36
37
|
from mindspore.ops.composite import *
|
|
37
38
|
from mindspore.ops.operations import *
|
|
38
39
|
from mindspore.ops.function import *
|
|
39
40
|
from mindspore.ops.functional import *
|
|
41
|
+
from mindspore.ops._utils import arg_dtype_cast, arg_handler
|
|
40
42
|
|
|
41
43
|
__primitive__ = [
|
|
42
44
|
"prim_attr_register", "prim_arg_register", "Primitive", "PrimitiveWithInfer", "PrimitiveWithCheck", "signature"
|
|
@@ -46,8 +48,8 @@ __all__ = ["get_vm_impl_fn", "vm_impl_registry",
|
|
|
46
48
|
"op_info_register", "custom_info_register", "AkgGpuRegOp", "AkgAscendRegOp", "AiCPURegOp", "TBERegOp",
|
|
47
49
|
"CpuRegOp", "CustomRegOp", "DataType",
|
|
48
50
|
"constexpr", "reshard",
|
|
49
|
-
"cpp_create_prim_instance_helper", "
|
|
50
|
-
"gen_ops_prim", "pyboost_inner_prim"]
|
|
51
|
+
"cpp_create_prim_instance_helper", "arg_dtype_cast", "arg_handler", "gen_extend_func", "gen_ops_def",
|
|
52
|
+
"gen_ops_prim", "pyboost_inner_prim", "all_gather_matmul", "matmul_reduce_scatter"]
|
|
51
53
|
__all__.extend(__primitive__)
|
|
52
54
|
__all__.extend(composite.__all__)
|
|
53
55
|
__all__.extend(operations.__all__)
|
|
@@ -27,7 +27,7 @@ from mindspore.ops.operations._inner_ops import issubclass_
|
|
|
27
27
|
from mindspore.common.sparse_tensor import RowTensorInner
|
|
28
28
|
from mindspore.ops.composite.multitype_ops.zeros_like_impl import zeros_like
|
|
29
29
|
from mindspore.ops.operations.comm_ops import (AllGather, _MiniStepAllGather, _HostAllGather, AllReduce,
|
|
30
|
-
NeighborExchange, AlltoAll, NeighborExchangeV2, Broadcast,
|
|
30
|
+
NeighborExchange, AlltoAll, AlltoAllV, NeighborExchangeV2, Broadcast,
|
|
31
31
|
_GetTensorSlice, _MirrorOperator, _MirrorMiniStepOperator, ReduceOp,
|
|
32
32
|
ReduceScatter, _HostReduceScatter, _VirtualDiv, _VirtualAdd, _AllSwap,
|
|
33
33
|
_VirtualAssignAdd, _VirtualAccuGrad, _MirrorMicroStepOperator,
|
|
@@ -37,9 +37,24 @@ from mindspore.ops._grad_experimental.grad_base import bprop_getters
|
|
|
37
37
|
from mindspore.ops.operations import _grad_ops as G
|
|
38
38
|
import mindspore as ms
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
_squared_device_local_norm = None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def get_squared_device_local_norm_param():
|
|
44
|
+
"""
|
|
45
|
+
Get Parameter `_squared_device_local_norm`.
|
|
46
|
+
`_squared_device_local_norm` will accumulate squared local norm of each grad in bprop under GRAPH_MODE.
|
|
47
|
+
User need to reset it to zero after network propagation each step.
|
|
48
|
+
"""
|
|
49
|
+
global _squared_device_local_norm
|
|
50
|
+
if _squared_device_local_norm is None:
|
|
51
|
+
if ms.get_auto_parallel_context("dump_device_local_norm"):
|
|
52
|
+
_squared_device_local_norm = Parameter(Tensor(0.0, mstype.float32), name="_squared_device_local_norm",
|
|
53
|
+
requires_grad=False)
|
|
54
|
+
else:
|
|
55
|
+
raise ValueError("The parallel config 'dump_device_local_norm' is False.")
|
|
56
|
+
return _squared_device_local_norm
|
|
57
|
+
|
|
43
58
|
|
|
44
59
|
@bprop_getters.register(AllReduce)
|
|
45
60
|
def get_bprop_all_reduce(self):
|
|
@@ -177,7 +192,7 @@ def get_bprop_virtual_assign_add(self):
|
|
|
177
192
|
|
|
178
193
|
def bprop(x, y, out, dout):
|
|
179
194
|
if reduce_scatter:
|
|
180
|
-
dout = reduce_scatter(dout)
|
|
195
|
+
dout = reduce_scatter(cast(dout, dtype(y)))
|
|
181
196
|
return F.depend((cast(out_tensor, dtype(x)), cast(out_tensor, dtype(y))), assign_add(y, dout))
|
|
182
197
|
|
|
183
198
|
return bprop
|
|
@@ -195,7 +210,7 @@ def get_bprop_virtual_assign_kv_cache(self):
|
|
|
195
210
|
dout_update = dout + y
|
|
196
211
|
kv_equal = F.equal(seq_chunk, 0)
|
|
197
212
|
update_kv = F.select(kv_equal, F.broadcast_to(cast(out_tensor, dtype(y)), F.shape(y)), dout_update)
|
|
198
|
-
return F.depend((dout_update, cast(out_tensor, dtype(y)),
|
|
213
|
+
return F.depend((cast(dout_update, dtype(dout)), cast(out_tensor, dtype(y)),
|
|
199
214
|
cast(out_tensor, dtype(seq_chunk))), assign(y, update_kv))
|
|
200
215
|
|
|
201
216
|
return bprop
|
|
@@ -221,6 +236,7 @@ def get_bprop_mirror_micro_step_operator(self):
|
|
|
221
236
|
allgather for sparse feature.
|
|
222
237
|
"""
|
|
223
238
|
group = self.group
|
|
239
|
+
global_rank = get_rank()
|
|
224
240
|
dev_num = self.dev_num
|
|
225
241
|
mean_flag = self.mean_flag
|
|
226
242
|
param_name = " "
|
|
@@ -247,18 +263,29 @@ def get_bprop_mirror_micro_step_operator(self):
|
|
|
247
263
|
out_tensor = Tensor(1.0, mstype.float16)
|
|
248
264
|
opt_shard = _get_enable_parallel_optimizer()
|
|
249
265
|
ln_print = P.Print()
|
|
266
|
+
tensor_dump = P.TensorDump()
|
|
250
267
|
reduce_sum = P.ReduceSum(keep_dims=False)
|
|
251
268
|
square = P.Square()
|
|
269
|
+
sqrt = P.Sqrt()
|
|
252
270
|
dump_local_norm = ms.get_auto_parallel_context("dump_local_norm")
|
|
271
|
+
dump_local_norm_path = ms.get_auto_parallel_context("dump_local_norm_path")
|
|
253
272
|
dump_device_local_norm = ms.get_auto_parallel_context("dump_device_local_norm")
|
|
273
|
+
if dump_device_local_norm:
|
|
274
|
+
# init _squared _squared_device_local_norm
|
|
275
|
+
squared_device_local_norm = get_squared_device_local_norm_param()
|
|
254
276
|
|
|
255
277
|
def bprop(x, z, out, dout):
|
|
256
278
|
if dump_local_norm or dump_device_local_norm:
|
|
257
|
-
|
|
279
|
+
squared_norm = reduce_sum(square((z)))
|
|
258
280
|
if dump_local_norm:
|
|
259
|
-
|
|
281
|
+
if dump_local_norm_path:
|
|
282
|
+
z = F.depend(z, tensor_dump(dump_local_norm_path + "/rank_" + str(global_rank) +
|
|
283
|
+
"/local_norm__" + param_name, sqrt(squared_norm)))
|
|
284
|
+
else:
|
|
285
|
+
z = F.depend(z, ln_print("dump local norm: ", param_name, sqrt(squared_norm)))
|
|
260
286
|
if dump_device_local_norm:
|
|
261
|
-
z = F.depend(z, F.assign_add(
|
|
287
|
+
z = F.depend(z, F.assign_add(squared_device_local_norm,
|
|
288
|
+
cast(squared_norm, squared_device_local_norm.dtype)))
|
|
262
289
|
real_grad = z
|
|
263
290
|
assign_out = dout
|
|
264
291
|
if issubclass_(F.typeof(dout), mstype.tensor_type):
|
|
@@ -301,8 +328,38 @@ def get_bprop_all_gather(self):
|
|
|
301
328
|
if self.rank_size == 0:
|
|
302
329
|
raise ValueError(f"The 'rank_size' can not be zero, but got {self.rank_size}.")
|
|
303
330
|
scale = 1.0 / self.rank_size
|
|
331
|
+
param_name = ""
|
|
332
|
+
if 'mirror_user_id' in self.get_attr_dict():
|
|
333
|
+
param_name = self.get_attr_dict()['mirror_user_id']
|
|
334
|
+
# monitor local norm
|
|
335
|
+
dump_local_norm = ms.get_auto_parallel_context("dump_local_norm")
|
|
336
|
+
dump_local_norm_path = ms.get_auto_parallel_context("dump_local_norm_path")
|
|
337
|
+
dump_device_local_norm = ms.get_auto_parallel_context("dump_device_local_norm")
|
|
338
|
+
if param_name and (dump_local_norm or dump_device_local_norm):
|
|
339
|
+
global_rank = get_rank()
|
|
340
|
+
cast = P.Cast()
|
|
341
|
+
ln_print = P.Print()
|
|
342
|
+
tensor_dump = P.TensorDump()
|
|
343
|
+
reduce_sum = P.ReduceSum(keep_dims=False)
|
|
344
|
+
square = P.Square()
|
|
345
|
+
sqrt = P.Sqrt()
|
|
346
|
+
if dump_device_local_norm:
|
|
347
|
+
# init _squared _squared_device_local_norm
|
|
348
|
+
squared_device_local_norm = get_squared_device_local_norm_param()
|
|
304
349
|
|
|
305
350
|
def bprop(x, out, dout):
|
|
351
|
+
if param_name and (dump_local_norm or dump_device_local_norm):
|
|
352
|
+
squared_norm = reduce_sum(square((dout)))
|
|
353
|
+
if dump_local_norm:
|
|
354
|
+
if dump_local_norm_path:
|
|
355
|
+
dout = F.depend(dout, tensor_dump(dump_local_norm_path + "/rank_" + str(global_rank) +
|
|
356
|
+
"/local_norm__" + param_name, sqrt(squared_norm)))
|
|
357
|
+
else:
|
|
358
|
+
dout = F.depend(dout, ln_print("dump local norm: ", param_name, sqrt(squared_norm)))
|
|
359
|
+
if dump_device_local_norm:
|
|
360
|
+
dout = F.depend(dout, F.assign_add(squared_device_local_norm,
|
|
361
|
+
cast(squared_norm, squared_device_local_norm.dtype)))
|
|
362
|
+
|
|
306
363
|
dx = reduce_scatter(dout)
|
|
307
364
|
if mean_flag:
|
|
308
365
|
dx = F.tensor_mul(dx, scale)
|
|
@@ -373,31 +430,43 @@ def get_bprop_micro_step_all_gather(self):
|
|
|
373
430
|
if self.instance_name:
|
|
374
431
|
instance_name = "grad_" + self.instance_name
|
|
375
432
|
reduce_scatter.set_prim_instance_name(instance_name)
|
|
433
|
+
global_rank = get_rank()
|
|
376
434
|
cast = P.Cast()
|
|
377
435
|
dtype = P.DType()
|
|
378
436
|
out_tensor = Tensor(1.0, mstype.float16)
|
|
379
437
|
with_mirror_operator = self.get_attr_dict()["with_mirror_operator"]
|
|
380
438
|
ln_print = P.Print()
|
|
439
|
+
tensor_dump = P.TensorDump()
|
|
381
440
|
reduce_sum = P.ReduceSum(keep_dims=False)
|
|
382
441
|
square = P.Square()
|
|
442
|
+
sqrt = P.Sqrt()
|
|
383
443
|
dump_local_norm = ms.get_auto_parallel_context("dump_local_norm")
|
|
444
|
+
dump_local_norm_path = ms.get_auto_parallel_context("dump_local_norm_path")
|
|
384
445
|
dump_device_local_norm = ms.get_auto_parallel_context("dump_device_local_norm")
|
|
446
|
+
if dump_device_local_norm:
|
|
447
|
+
# init _squared _squared_device_local_norm
|
|
448
|
+
squared_device_local_norm = get_squared_device_local_norm_param()
|
|
385
449
|
|
|
386
450
|
def bprop(x, z, out, dout):
|
|
387
451
|
if with_mirror_operator:
|
|
388
452
|
if not do_mirror:
|
|
389
453
|
return (dout, cast(out_tensor, dtype(z)))
|
|
390
|
-
real_grad = reduce_scatter(dout)
|
|
454
|
+
real_grad = reduce_scatter(cast(dout, dtype(z)))
|
|
391
455
|
if mean_flag:
|
|
392
456
|
real_grad = F.tensor_mul(real_grad, scale)
|
|
393
457
|
return (real_grad, cast(out_tensor, dtype(z)))
|
|
394
458
|
z = F.depend(z, dout)
|
|
395
459
|
if dump_local_norm or dump_device_local_norm:
|
|
396
|
-
|
|
460
|
+
squared_norm = reduce_sum(square((z)))
|
|
397
461
|
if dump_local_norm:
|
|
398
|
-
|
|
462
|
+
if dump_local_norm_path:
|
|
463
|
+
z = F.depend(z, tensor_dump(dump_local_norm_path + "/rank_" + str(global_rank) +
|
|
464
|
+
"/local_norm__" + param_name, sqrt(squared_norm)))
|
|
465
|
+
else:
|
|
466
|
+
z = F.depend(z, ln_print("dump local norm: ", param_name, sqrt(squared_norm)))
|
|
399
467
|
if dump_device_local_norm:
|
|
400
|
-
z = F.depend(z, F.assign_add(
|
|
468
|
+
z = F.depend(z, F.assign_add(squared_device_local_norm,
|
|
469
|
+
cast(squared_norm, squared_device_local_norm.dtype)))
|
|
401
470
|
if not do_mirror:
|
|
402
471
|
return (z, cast(out_tensor, dtype(z)))
|
|
403
472
|
real_grad = reduce_scatter(z)
|
|
@@ -566,6 +635,21 @@ def get_bprop_all_to_all(self):
|
|
|
566
635
|
return bprop
|
|
567
636
|
|
|
568
637
|
|
|
638
|
+
@bprop_getters.register(AlltoAllV)
|
|
639
|
+
def get_bprop_all_to_all_v(self):
|
|
640
|
+
"""Generate bprop for AlltoAll."""
|
|
641
|
+
all_to_all_v_grad = AlltoAllV(self.group, self.block_size)
|
|
642
|
+
if hasattr(self, "instance_name") and self.instance_name:
|
|
643
|
+
instance_name = "grad" + self.instance_name
|
|
644
|
+
all_to_all_v_grad.set_prim_instance_name(instance_name)
|
|
645
|
+
|
|
646
|
+
def bprop(x, send_numel_list, recv_numel_list, out, dout):
|
|
647
|
+
dx = all_to_all_v_grad(dout, recv_numel_list, send_numel_list)
|
|
648
|
+
return (dx, zeros_like(send_numel_list), zeros_like(recv_numel_list))
|
|
649
|
+
|
|
650
|
+
return bprop
|
|
651
|
+
|
|
652
|
+
|
|
569
653
|
@bprop_getters.register(NeighborExchangeV2)
|
|
570
654
|
def get_bprop_neighborexchangev2(self):
|
|
571
655
|
"""Generate bprop for NeighborExchangeV2."""
|
|
@@ -599,16 +683,23 @@ def get_bprop_mirror_operator(self):
|
|
|
599
683
|
|
|
600
684
|
dev_num_r = 1.0
|
|
601
685
|
dump_local_norm = ms.get_auto_parallel_context("dump_local_norm")
|
|
686
|
+
dump_local_norm_path = ms.get_auto_parallel_context("dump_local_norm_path")
|
|
602
687
|
dump_device_local_norm = ms.get_auto_parallel_context("dump_device_local_norm")
|
|
688
|
+
if dump_device_local_norm:
|
|
689
|
+
# init _squared _squared_device_local_norm
|
|
690
|
+
squared_device_local_norm = get_squared_device_local_norm_param()
|
|
603
691
|
if dev_num > 1:
|
|
692
|
+
global_rank = get_rank()
|
|
604
693
|
dev_num_r = 1.0 / dev_num
|
|
605
694
|
all_reduce = AllReduce(group=group)
|
|
606
695
|
all_gather = AllGather(group=group)
|
|
607
696
|
mul = P.Mul()
|
|
608
697
|
cast = P.Cast()
|
|
609
698
|
ln_print = P.Print()
|
|
699
|
+
tensor_dump = P.TensorDump()
|
|
610
700
|
reduce_sum = P.ReduceSum(keep_dims=False)
|
|
611
701
|
square = P.Square()
|
|
702
|
+
sqrt = P.Sqrt()
|
|
612
703
|
|
|
613
704
|
fusion = self.get_attr_dict()["fusion"]
|
|
614
705
|
all_reduce.add_prim_attr("fusion", fusion)
|
|
@@ -623,11 +714,16 @@ def get_bprop_mirror_operator(self):
|
|
|
623
714
|
|
|
624
715
|
def bprop(x, out, dout):
|
|
625
716
|
if dump_local_norm or dump_device_local_norm:
|
|
626
|
-
|
|
717
|
+
squared_norm = reduce_sum(square((dout)))
|
|
627
718
|
if dump_local_norm:
|
|
628
|
-
|
|
719
|
+
if dump_local_norm_path:
|
|
720
|
+
dout = F.depend(dout, tensor_dump(dump_local_norm_path + "/rank_" + str(global_rank) +
|
|
721
|
+
"/local_norm__" + param_name, sqrt(squared_norm)))
|
|
722
|
+
else:
|
|
723
|
+
dout = F.depend(dout, ln_print("dump local norm: ", param_name, sqrt(squared_norm)))
|
|
629
724
|
if dump_device_local_norm:
|
|
630
|
-
dout = F.depend(dout, F.assign_add(
|
|
725
|
+
dout = F.depend(dout, F.assign_add(squared_device_local_norm,
|
|
726
|
+
cast(squared_norm, squared_device_local_norm.dtype)))
|
|
631
727
|
|
|
632
728
|
if dev_num == 1:
|
|
633
729
|
return (dout,)
|
|
@@ -15,8 +15,10 @@
|
|
|
15
15
|
|
|
16
16
|
"""Generate bprop for debug ops"""
|
|
17
17
|
|
|
18
|
+
import mindspore.ops.functional as F
|
|
18
19
|
from mindspore.ops import operations as P
|
|
19
|
-
from mindspore.ops.
|
|
20
|
+
from mindspore.ops.composite import multitype_ops as C
|
|
21
|
+
from mindspore.ops._grad_experimental.grad_base import bprop_getters, bprops
|
|
20
22
|
|
|
21
23
|
# Unused parameters are placeholders.
|
|
22
24
|
|
|
@@ -27,5 +29,15 @@ def get_bprop_insert_gradient_of(self):
|
|
|
27
29
|
f = self.f
|
|
28
30
|
|
|
29
31
|
def bprop(x, out, dout):
|
|
30
|
-
|
|
32
|
+
fdout = f(dout)
|
|
33
|
+
if fdout is None:
|
|
34
|
+
dout = F.depend(dout, fdout)
|
|
35
|
+
return (dout,)
|
|
36
|
+
return (fdout,)
|
|
31
37
|
return bprop
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@bprops.register("TensorDump")
|
|
41
|
+
def bprop_tensor_dump(file, input_x, out, dout):
|
|
42
|
+
"""Generate bprop for TensorDump"""
|
|
43
|
+
return file, C.zeros_like(input_x)
|
|
@@ -23,6 +23,15 @@ from mindspore.ops.composite.multitype_ops.zeros_like_impl import zeros_like
|
|
|
23
23
|
from mindspore.ops._grad_experimental.grad_base import bprop_getters
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
@bprop_getters.register("raise")
|
|
27
|
+
def get_bprop_raise(self):
|
|
28
|
+
"""Grad definition for `raise` operation."""
|
|
29
|
+
def bprop(x, y, z, out, dout):
|
|
30
|
+
return x, y, z
|
|
31
|
+
|
|
32
|
+
return bprop
|
|
33
|
+
|
|
34
|
+
|
|
26
35
|
@bprop_getters.register(inner.ParallelResizeBilinear)
|
|
27
36
|
def get_bprop_parallel_resize_bilinear(self):
|
|
28
37
|
"""Grad definition for `ParallelResizeBilinear` operation."""
|
|
@@ -657,7 +657,8 @@ def get_bprop_fft_with_size(self):
|
|
|
657
657
|
dx = rfft_fn(dout)
|
|
658
658
|
dx = reverse_branch(dx, onesided, dout_shape, offset_shape,
|
|
659
659
|
output_type, dout, norm, inverse, signal_ndim, offset_size)
|
|
660
|
-
return
|
|
660
|
+
return dx, zeros_like(signal_ndim), zeros_like(inverse), zeros_like(real), zeros_like(norm_enum), \
|
|
661
|
+
zeros_like(onesided), zeros_like(signal_sizes)
|
|
661
662
|
|
|
662
663
|
return bprop
|
|
663
664
|
|
|
@@ -127,6 +127,35 @@ def taylor_realdiv(self):
|
|
|
127
127
|
return taylor_fprop_realdiv
|
|
128
128
|
|
|
129
129
|
|
|
130
|
+
def _taylor_fprop_div(input_x, input_y):
|
|
131
|
+
"""The rule to generate `Div` taylor rule."""
|
|
132
|
+
if not input_y.shape:
|
|
133
|
+
return ops.div(input_x, input_y)
|
|
134
|
+
input_x, input_y = _trans_scalar_inputs(input_x, input_y)
|
|
135
|
+
primals = ops.div(input_x[0], input_y[0])
|
|
136
|
+
series_num = len(input_x) - 1
|
|
137
|
+
factorial = _factorial(series_num)
|
|
138
|
+
series = zeros_like(input_x)
|
|
139
|
+
series[0] = primals
|
|
140
|
+
for k in range(1, series_num + 1):
|
|
141
|
+
for i in range(0, k):
|
|
142
|
+
tmp = ops.div(series[i] * input_y[k - i], (factorial[k - i] * factorial[i]))
|
|
143
|
+
series[k] += tmp
|
|
144
|
+
series[k] = ops.div(input_x[k] - factorial[k] * series[k], input_y[0])
|
|
145
|
+
return series
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
@taylor_fprop_getters.register(P.Div)
|
|
149
|
+
def taylor_div(self):
|
|
150
|
+
"""Higher order derivatives rule definition for `Div` operation."""
|
|
151
|
+
|
|
152
|
+
def taylor_fprop_div(input_x, input_y):
|
|
153
|
+
series = _taylor_fprop_div(input_x, input_y)
|
|
154
|
+
return series
|
|
155
|
+
|
|
156
|
+
return taylor_fprop_div
|
|
157
|
+
|
|
158
|
+
|
|
130
159
|
@taylor_fprop_getters.register(P.Exp)
|
|
131
160
|
def taylor_exp(self):
|
|
132
161
|
"""Higher order derivatives rule definition for `Exp` operation."""
|
|
@@ -71,6 +71,7 @@ from .pyexecute import _pyexecute_cpu
|
|
|
71
71
|
from .pyfunc import _pyfunc_cpu
|
|
72
72
|
from .buffer_append import _buffer_append_cpu
|
|
73
73
|
from .buffer_get import _buffer_get_cpu
|
|
74
|
+
from .raise_op import _raise_cpu
|
|
74
75
|
from .buffer_sample import _buffer_sample_cpu
|
|
75
76
|
from .priority_replay_buffer import _prb_push_op_cpu
|
|
76
77
|
from .priority_replay_buffer import _prb_sample_op_cpu
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Copyright 2024 Huawei Technologies Co., Ltd
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ============================================================================
|
|
15
|
+
"""storeattrgrad op"""
|
|
16
|
+
from mindspore.ops.op_info_register import op_info_register, CpuRegOp, DataType
|
|
17
|
+
|
|
18
|
+
raise_op_info = CpuRegOp("raise") \
|
|
19
|
+
.input(0, "x", "dynamic") \
|
|
20
|
+
.output(0, "y", "dynamic") \
|
|
21
|
+
.dtype_format(DataType.I32_Default, DataType.I32_Default) \
|
|
22
|
+
.get_op_info()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@op_info_register(raise_op_info)
|
|
26
|
+
def _raise_cpu():
|
|
27
|
+
"""_getattrgrad_cpu cpu register"""
|
|
28
|
+
return
|
|
@@ -60,14 +60,3 @@ class PyFuncRegistry(UserDict):
|
|
|
60
60
|
if key not in self:
|
|
61
61
|
raise ValueError(f"Python function with key{key} not registered.")
|
|
62
62
|
return self[key]
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
class OpaquePredicateRegistry(PyFuncRegistry):
|
|
66
|
-
"""Registry opaque predicate functions used for dynamic obfuscation"""
|
|
67
|
-
def __init__(self):
|
|
68
|
-
super(OpaquePredicateRegistry, self).__init__()
|
|
69
|
-
self.func_names = []
|
|
70
|
-
|
|
71
|
-
def register(self, key, value):
|
|
72
|
-
self[key] = value
|
|
73
|
-
self.func_names.append(key)
|