mindspore 2.6.0rc1__cp310-cp310-win_amd64.whl → 2.7.0rc1__cp310-cp310-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 +1 -1
- mindspore/_c_dataengine.cp310-win_amd64.pyd +0 -0
- mindspore/_c_expression.cp310-win_amd64.pyd +0 -0
- mindspore/_c_mindrecord.cp310-win_amd64.pyd +0 -0
- mindspore/_checkparam.py +40 -9
- mindspore/{_deprecated → _extends/optimize}/__init__.py +9 -3
- mindspore/_extends/optimize/cell_utils.py +96 -0
- mindspore/_extends/parse/__init__.py +2 -2
- mindspore/_extends/parse/compile_config.py +44 -22
- mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +1 -1
- mindspore/_extends/parse/parser.py +37 -62
- mindspore/_extends/parse/resources.py +39 -0
- mindspore/_extends/parse/standard_method.py +43 -13
- mindspore/_extends/parse/trope.py +8 -1
- mindspore/_extends/pijit/__init__.py +1 -2
- 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/adasum.py +1 -1
- mindspore/boost/boost_cell_wrapper.py +4 -4
- mindspore/c1.dll +0 -0
- mindspore/c1xx.dll +0 -0
- mindspore/c2.dll +0 -0
- mindspore/common/__init__.py +27 -2
- mindspore/common/_grad_function.py +2 -1
- mindspore/common/_pijit_context.py +28 -7
- mindspore/common/_stub_tensor.py +1 -209
- mindspore/common/_tensor_cpp_method.py +1 -1
- mindspore/common/_tensor_docs.py +77 -16
- mindspore/common/api.py +238 -113
- mindspore/common/dtype.py +21 -11
- mindspore/common/dump.py +10 -15
- mindspore/common/generator.py +5 -3
- mindspore/common/hook_handle.py +11 -2
- mindspore/common/jit_config.py +1 -1
- mindspore/common/jit_trace.py +84 -105
- mindspore/common/parameter.py +26 -12
- mindspore/common/recompute.py +3 -3
- mindspore/common/sparse_tensor.py +0 -3
- mindspore/common/symbol.py +0 -1
- mindspore/common/tensor.py +81 -81
- mindspore/communication/_comm_helper.py +46 -4
- mindspore/communication/management.py +79 -7
- mindspore/context.py +58 -40
- mindspore/dataset/core/config.py +3 -3
- mindspore/dataset/engine/datasets.py +20 -7
- mindspore/dataset/engine/datasets_user_defined.py +33 -3
- mindspore/dataset/engine/iterators.py +2 -2
- mindspore/dataset/engine/obs/config_loader.py +2 -2
- mindspore/dataset/engine/obs/obs_mindrecord_dataset.py +8 -0
- mindspore/dataset/transforms/py_transforms.py +7 -3
- mindspore/dataset/transforms/transforms.py +7 -3
- mindspore/dataset/vision/validators.py +1 -0
- mindspore/device_context/ascend/device.py +1 -1
- mindspore/device_context/gpu/__init__.py +2 -2
- mindspore/device_context/gpu/device.py +1 -1
- mindspore/device_context/gpu/op_precision.py +4 -2
- mindspore/device_context/gpu/op_tuning.py +6 -3
- mindspore/device_manager.py +16 -9
- mindspore/dnnl.dll +0 -0
- mindspore/dpcmi.dll +0 -0
- mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +3 -7
- mindspore/experimental/llm_boost/atb/boost_base.py +2 -3
- mindspore/experimental/optim/adadelta.py +13 -20
- mindspore/experimental/optim/adagrad.py +15 -22
- mindspore/experimental/optim/adam.py +17 -24
- mindspore/experimental/optim/adamax.py +14 -22
- mindspore/experimental/optim/adamw.py +28 -34
- mindspore/experimental/optim/asgd.py +15 -25
- mindspore/experimental/optim/lr_scheduler.py +27 -45
- mindspore/experimental/optim/nadam.py +14 -24
- mindspore/experimental/optim/optimizer.py +13 -23
- mindspore/experimental/optim/radam.py +18 -24
- mindspore/experimental/optim/rmsprop.py +14 -25
- mindspore/experimental/optim/rprop.py +15 -26
- mindspore/experimental/optim/sgd.py +9 -19
- mindspore/hal/__init__.py +4 -4
- mindspore/hal/contiguous_tensors_handle.py +2 -2
- mindspore/hal/memory.py +27 -7
- mindspore/include/api/cell.h +37 -1
- mindspore/include/api/delegate.h +10 -0
- mindspore/include/api/model.h +3 -0
- mindspore/include/api/types.h +2 -2
- mindspore/include/c_api/model_c.h +0 -58
- mindspore/include/c_api/tensor_c.h +0 -26
- mindspore/include/dataset/vision_ascend.h +1 -1
- mindspore/jpeg62.dll +0 -0
- mindspore/mindrecord/tools/cifar10.py +60 -11
- mindspore/mindrecord/tools/cifar10_to_mr.py +5 -0
- 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_cpu_res_manager.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_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 +6 -46
- mindspore/mint/distributed/__init__.py +1 -0
- mindspore/mint/distributed/distributed.py +212 -9
- mindspore/mint/nn/__init__.py +1 -1
- mindspore/mint/nn/functional.py +53 -6
- mindspore/mint/nn/layer/_functions.py +164 -294
- mindspore/mint/nn/layer/activation.py +8 -6
- mindspore/mint/nn/layer/conv.py +137 -101
- mindspore/mint/nn/layer/normalization.py +8 -22
- mindspore/mint/optim/adam.py +19 -18
- mindspore/mint/optim/adamw.py +14 -8
- mindspore/mint/optim/sgd.py +5 -5
- 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/cell.py +328 -502
- mindspore/nn/grad/cell_grad.py +11 -12
- mindspore/nn/layer/activation.py +32 -34
- mindspore/nn/layer/basic.py +67 -64
- mindspore/nn/layer/channel_shuffle.py +4 -4
- mindspore/nn/layer/combined.py +4 -2
- mindspore/nn/layer/conv.py +117 -110
- mindspore/nn/layer/dense.py +9 -7
- mindspore/nn/layer/embedding.py +50 -52
- mindspore/nn/layer/image.py +37 -39
- mindspore/nn/layer/math.py +111 -112
- mindspore/nn/layer/normalization.py +56 -44
- mindspore/nn/layer/pooling.py +58 -63
- mindspore/nn/layer/rnn_cells.py +33 -33
- mindspore/nn/layer/rnns.py +56 -56
- mindspore/nn/layer/thor_layer.py +74 -73
- mindspore/nn/layer/transformer.py +11 -1
- mindspore/nn/learning_rate_schedule.py +20 -20
- mindspore/nn/loss/loss.py +79 -81
- mindspore/nn/optim/adam.py +3 -3
- mindspore/nn/optim/adasum.py +2 -2
- mindspore/nn/optim/asgd.py +2 -0
- mindspore/nn/optim/optimizer.py +1 -1
- mindspore/nn/optim/thor.py +2 -2
- mindspore/nn/probability/distribution/exponential.py +2 -1
- mindspore/nn/probability/distribution/poisson.py +2 -1
- mindspore/nn/sparse/sparse.py +3 -3
- mindspore/nn/wrap/cell_wrapper.py +34 -37
- mindspore/nn/wrap/grad_reducer.py +37 -37
- mindspore/nn/wrap/loss_scale.py +72 -74
- mindspore/numpy/array_creations.py +5 -5
- mindspore/numpy/fft.py +1 -1
- mindspore/numpy/math_ops.py +5 -5
- mindspore/opencv_core452.dll +0 -0
- mindspore/opencv_imgcodecs452.dll +0 -0
- mindspore/opencv_imgproc452.dll +0 -0
- mindspore/ops/_grad_experimental/grad_comm_ops.py +51 -13
- mindspore/ops/_grad_experimental/grad_debug_ops.py +14 -0
- mindspore/ops/_vmap/vmap_array_ops.py +31 -13
- mindspore/ops/_vmap/vmap_nn_ops.py +8 -16
- mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +42 -11
- mindspore/ops/auto_generate/gen_extend_func.py +23 -141
- mindspore/ops/auto_generate/gen_ops_def.py +727 -321
- mindspore/ops/auto_generate/gen_ops_prim.py +1721 -984
- mindspore/ops/auto_generate/pyboost_inner_prim.py +31 -1
- mindspore/ops/composite/__init__.py +10 -0
- mindspore/ops/composite/base.py +8 -4
- mindspore/ops/composite/multitype_ops/__init__.py +12 -1
- mindspore/ops/composite/multitype_ops/_compile_utils.py +133 -109
- mindspore/ops/composite/multitype_ops/add_impl.py +70 -2
- mindspore/ops/composite/multitype_ops/div_impl.py +49 -0
- mindspore/ops/composite/multitype_ops/floordiv_impl.py +29 -0
- mindspore/ops/composite/multitype_ops/getitem_impl.py +11 -0
- mindspore/ops/composite/multitype_ops/mod_impl.py +5 -3
- mindspore/ops/composite/multitype_ops/mul_impl.py +49 -0
- mindspore/ops/composite/multitype_ops/setitem_impl.py +57 -0
- mindspore/ops/composite/multitype_ops/sub_impl.py +34 -0
- mindspore/ops/composite/multitype_ops/zeros_like_impl.py +14 -0
- mindspore/ops/function/__init__.py +3 -1
- mindspore/ops/function/_add_attr_func.py +11 -6
- mindspore/ops/function/array_func.py +9 -96
- mindspore/ops/function/debug_func.py +4 -3
- mindspore/ops/function/grad/grad_func.py +1 -1
- mindspore/ops/function/math_func.py +33 -540
- mindspore/ops/function/nn_func.py +28 -74
- mindspore/ops/function/other_func.py +4 -1
- mindspore/ops/function/random_func.py +44 -5
- mindspore/ops/function/vmap_func.py +2 -1
- mindspore/ops/functional.py +2 -3
- mindspore/ops/functional_overload.py +571 -6
- mindspore/ops/op_info_register.py +21 -0
- mindspore/ops/operations/__init__.py +16 -11
- mindspore/ops/operations/_custom_ops_utils.py +689 -34
- mindspore/ops/operations/_inner_ops.py +3 -6
- mindspore/ops/operations/_sequence_ops.py +1 -1
- mindspore/ops/operations/array_ops.py +2 -2
- mindspore/ops/operations/comm_ops.py +185 -26
- mindspore/ops/operations/custom_ops.py +294 -174
- mindspore/ops/operations/debug_ops.py +59 -4
- mindspore/ops/operations/image_ops.py +13 -13
- mindspore/ops/operations/manually_defined/ops_def.py +15 -16
- mindspore/ops/operations/math_ops.py +3 -4
- mindspore/ops/operations/nn_ops.py +7 -39
- mindspore/ops/primitive.py +6 -10
- mindspore/ops/tensor_method.py +47 -8
- mindspore/ops_generate/api/cpp_create_prim_instance_helper_generator.py +1 -1
- mindspore/ops_generate/api/functional_map_cpp_generator.py +10 -9
- mindspore/ops_generate/api/functions_cc_generator.py +58 -10
- mindspore/ops_generate/api/tensor_func_reg_cpp_generator.py +1 -1
- mindspore/ops_generate/common/base_generator.py +14 -0
- mindspore/ops_generate/common/gen_constants.py +8 -3
- mindspore/ops_generate/common/gen_utils.py +0 -19
- mindspore/ops_generate/common/op_proto.py +11 -4
- mindspore/ops_generate/common/template.py +88 -11
- mindspore/ops_generate/gen_ops.py +1 -1
- mindspore/ops_generate/op_def/lite_ops_cpp_generator.py +4 -4
- mindspore/ops_generate/op_def/ops_def_cc_generator.py +0 -3
- mindspore/ops_generate/op_def/ops_name_h_generator.py +0 -3
- mindspore/ops_generate/op_def/ops_primitive_h_generator.py +0 -4
- mindspore/ops_generate/op_def_py/op_prim_py_generator.py +5 -2
- mindspore/ops_generate/pyboost/auto_grad_impl_cc_generator.py +49 -8
- mindspore/ops_generate/pyboost/auto_grad_reg_cc_generator.py +2 -2
- mindspore/ops_generate/pyboost/gen_pyboost_func.py +31 -0
- mindspore/ops_generate/pyboost/op_template_parser.py +98 -72
- mindspore/ops_generate/pyboost/pyboost_functions_cpp_generator.py +70 -273
- mindspore/ops_generate/pyboost/pyboost_functions_h_generator.py +14 -6
- mindspore/ops_generate/pyboost/pyboost_functions_impl_cpp_generator.py +316 -0
- mindspore/ops_generate/pyboost/pyboost_functions_py_generator.py +1 -1
- mindspore/ops_generate/pyboost/pyboost_grad_function_cpp_generator.py +5 -3
- mindspore/ops_generate/pyboost/pyboost_inner_prim_generator.py +1 -1
- mindspore/ops_generate/pyboost/pyboost_internal_functions_cpp_generator.py +76 -0
- mindspore/ops_generate/pyboost/pyboost_internal_functions_h_generator.py +76 -0
- mindspore/ops_generate/pyboost/pyboost_internal_kernel_info_adapter_generator.py +125 -0
- mindspore/ops_generate/pyboost/pyboost_native_grad_functions_generator.py +4 -3
- mindspore/ops_generate/pyboost/pyboost_op_cpp_code_generator.py +348 -61
- mindspore/ops_generate/pyboost/pyboost_overload_functions_cpp_generator.py +1 -1
- mindspore/ops_generate/pyboost/pyboost_utils.py +118 -9
- mindspore/ops_generate/tensor_py_cc_generator.py +1 -24
- mindspore/parallel/_auto_parallel_context.py +11 -8
- mindspore/parallel/_cell_wrapper.py +113 -45
- mindspore/parallel/_parallel_serialization.py +1 -1
- mindspore/parallel/_ps_context.py +4 -6
- mindspore/parallel/_tensor.py +167 -12
- mindspore/parallel/_transformer/moe.py +1 -1
- mindspore/parallel/_transformer/transformer.py +13 -8
- mindspore/parallel/auto_parallel.py +14 -7
- mindspore/parallel/checkpoint_convert.py +3 -3
- mindspore/parallel/checkpoint_transform.py +11 -7
- mindspore/parallel/cluster/process_entity/_api.py +84 -48
- mindspore/parallel/cluster/process_entity/_utils.py +95 -7
- mindspore/parallel/cluster/run.py +43 -4
- mindspore/parallel/function/__init__.py +8 -1
- mindspore/parallel/function/reshard_func.py +6 -7
- mindspore/parallel/nn/__init__.py +15 -2
- mindspore/parallel/nn/parallel_cell_wrapper.py +9 -10
- mindspore/parallel/nn/parallel_grad_reducer.py +7 -6
- mindspore/parallel/shard.py +3 -4
- mindspore/parallel/transform_safetensors.py +463 -174
- mindspore/pgodb140.dll +0 -0
- mindspore/pgort140.dll +0 -0
- mindspore/profiler/__init__.py +2 -1
- mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +7 -7
- mindspore/profiler/analysis/parser/timeline_assembly_factory/base_timeline_assembler.py +3 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +12 -6
- mindspore/profiler/analysis/parser/timeline_creator/cpu_op_timeline_creator.py +3 -3
- mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +3 -3
- mindspore/profiler/analysis/parser/timeline_creator/msprof_timeline_creator.py +4 -4
- mindspore/profiler/analysis/parser/timeline_creator/scope_layer_timeline_creator.py +3 -3
- mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +4 -1
- mindspore/profiler/analysis/parser/timeline_event/timeline_event_pool.py +2 -1
- mindspore/profiler/analysis/task_manager.py +1 -1
- mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +5 -1
- mindspore/profiler/analysis/viewer/ascend_integrate_viewer.py +2 -1
- mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +42 -22
- mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +3 -2
- mindspore/profiler/analysis/viewer/ms_minddata_viewer.py +9 -5
- mindspore/profiler/analysis/viewer/ms_operator_details_viewer.py +132 -0
- mindspore/profiler/common/constant.py +16 -0
- mindspore/profiler/common/profiler_context.py +25 -27
- mindspore/profiler/common/profiler_info.py +0 -16
- mindspore/profiler/common/profiler_op_analyse.py +235 -0
- mindspore/profiler/common/profiler_output_path.py +23 -8
- mindspore/profiler/common/profiler_parameters.py +128 -35
- mindspore/profiler/dynamic_profile/__init__.py +0 -0
- mindspore/profiler/dynamic_profile/dynamic_monitor_proxy.py +39 -0
- mindspore/profiler/dynamic_profile/dynamic_profiler_config_context.py +666 -0
- mindspore/profiler/dynamic_profile/dynamic_profiler_utils.py +62 -0
- mindspore/profiler/dynamic_profiler.py +305 -314
- mindspore/profiler/envprofiler.py +12 -7
- mindspore/profiler/experimental_config.py +96 -6
- mindspore/profiler/mstx.py +33 -12
- mindspore/profiler/platform/__init__.py +2 -3
- mindspore/profiler/platform/npu_profiler.py +29 -19
- mindspore/profiler/profiler.py +35 -19
- mindspore/profiler/profiler_action_controller.py +64 -76
- mindspore/profiler/schedule.py +10 -4
- mindspore/rewrite/common/config.py +1 -0
- mindspore/rewrite/common/namer.py +1 -0
- mindspore/rewrite/common/namespace.py +1 -0
- mindspore/rewrite/node/node.py +31 -11
- mindspore/rewrite/parsers/assign_parser.py +1 -1
- mindspore/rewrite/symbol_tree/symbol_tree.py +1 -1
- mindspore/run_check/_check_version.py +7 -10
- mindspore/runtime/__init__.py +5 -5
- mindspore/runtime/event.py +10 -4
- mindspore/runtime/executor.py +60 -45
- mindspore/runtime/memory.py +30 -32
- mindspore/runtime/thread_bind_core.py +298 -164
- mindspore/safeguard/rewrite_obfuscation.py +12 -13
- mindspore/swresample-4.dll +0 -0
- mindspore/swscale-6.dll +0 -0
- mindspore/tbbmalloc.dll +0 -0
- mindspore/tinyxml2.dll +0 -0
- mindspore/train/_utils.py +14 -4
- mindspore/train/amp.py +43 -20
- mindspore/train/callback/__init__.py +5 -5
- mindspore/train/callback/_checkpoint.py +3 -6
- mindspore/train/callback/_flops_collector.py +1 -1
- mindspore/train/callback/_landscape.py +0 -1
- mindspore/train/callback/_train_fault_tolerance.py +97 -16
- mindspore/train/data_sink.py +11 -2
- mindspore/train/dataset_helper.py +9 -0
- mindspore/train/model.py +135 -55
- mindspore/train/serialization.py +133 -111
- mindspore/train/summary/summary_record.py +13 -2
- mindspore/turbojpeg.dll +0 -0
- mindspore/utils/__init__.py +3 -2
- mindspore/utils/dryrun.py +0 -6
- mindspore/utils/runtime_execution_order_check.py +163 -77
- mindspore/utils/sdc_detect.py +68 -0
- mindspore/utils/utils.py +6 -9
- mindspore/vcmeta.dll +0 -0
- mindspore/vcruntime140.dll +0 -0
- mindspore/vcruntime140_1.dll +0 -0
- mindspore/version.py +1 -1
- {mindspore-2.6.0rc1.dist-info → mindspore-2.7.0rc1.dist-info}/METADATA +5 -4
- {mindspore-2.6.0rc1.dist-info → mindspore-2.7.0rc1.dist-info}/RECORD +356 -394
- mindspore/_deprecated/jit.py +0 -198
- mindspore/experimental/es/__init__.py +0 -22
- mindspore/experimental/es/embedding_service.py +0 -891
- mindspore/experimental/es/embedding_service_layer.py +0 -581
- mindspore/profiler/parser/__init__.py +0 -14
- mindspore/profiler/parser/aicpu_data_parser.py +0 -272
- mindspore/profiler/parser/ascend_analysis/__init__.py +0 -14
- mindspore/profiler/parser/ascend_analysis/constant.py +0 -71
- mindspore/profiler/parser/ascend_analysis/file_manager.py +0 -180
- mindspore/profiler/parser/ascend_analysis/function_event.py +0 -185
- mindspore/profiler/parser/ascend_analysis/fwk_cann_parser.py +0 -136
- mindspore/profiler/parser/ascend_analysis/fwk_file_parser.py +0 -131
- mindspore/profiler/parser/ascend_analysis/msprof_timeline_parser.py +0 -104
- mindspore/profiler/parser/ascend_analysis/path_manager.py +0 -313
- mindspore/profiler/parser/ascend_analysis/profiler_info_parser.py +0 -123
- mindspore/profiler/parser/ascend_analysis/tlv_decoder.py +0 -86
- mindspore/profiler/parser/ascend_analysis/trace_event_manager.py +0 -75
- mindspore/profiler/parser/ascend_cluster_generator.py +0 -116
- mindspore/profiler/parser/ascend_communicate_generator.py +0 -314
- mindspore/profiler/parser/ascend_flops_generator.py +0 -116
- mindspore/profiler/parser/ascend_fpbp_generator.py +0 -82
- mindspore/profiler/parser/ascend_hccl_generator.py +0 -271
- mindspore/profiler/parser/ascend_integrate_generator.py +0 -42
- mindspore/profiler/parser/ascend_memory_generator.py +0 -185
- mindspore/profiler/parser/ascend_msprof_exporter.py +0 -282
- mindspore/profiler/parser/ascend_msprof_generator.py +0 -187
- mindspore/profiler/parser/ascend_op_generator.py +0 -334
- mindspore/profiler/parser/ascend_steptrace_generator.py +0 -94
- mindspore/profiler/parser/ascend_timeline_generator.py +0 -545
- mindspore/profiler/parser/base_timeline_generator.py +0 -483
- mindspore/profiler/parser/container.py +0 -229
- mindspore/profiler/parser/cpu_gpu_timeline_generator.py +0 -697
- mindspore/profiler/parser/flops_parser.py +0 -531
- mindspore/profiler/parser/framework_enum.py +0 -111
- mindspore/profiler/parser/framework_parser.py +0 -464
- mindspore/profiler/parser/framework_struct.py +0 -61
- mindspore/profiler/parser/gpu_analysis/__init__.py +0 -14
- mindspore/profiler/parser/gpu_analysis/function_event.py +0 -44
- mindspore/profiler/parser/gpu_analysis/fwk_file_parser.py +0 -89
- mindspore/profiler/parser/gpu_analysis/profiler_info_parser.py +0 -72
- mindspore/profiler/parser/hccl_parser.py +0 -573
- mindspore/profiler/parser/hwts_log_parser.py +0 -122
- mindspore/profiler/parser/integrator.py +0 -526
- mindspore/profiler/parser/memory_usage_parser.py +0 -277
- mindspore/profiler/parser/minddata_analyzer.py +0 -800
- mindspore/profiler/parser/minddata_parser.py +0 -186
- mindspore/profiler/parser/minddata_pipeline_parser.py +0 -299
- mindspore/profiler/parser/op_intermediate_parser.py +0 -149
- mindspore/profiler/parser/optime_parser.py +0 -250
- mindspore/profiler/parser/profiler_info.py +0 -213
- mindspore/profiler/parser/step_trace_parser.py +0 -666
- {mindspore-2.6.0rc1.dist-info → mindspore-2.7.0rc1.dist-info}/WHEEL +0 -0
- {mindspore-2.6.0rc1.dist-info → mindspore-2.7.0rc1.dist-info}/entry_points.txt +0 -0
- {mindspore-2.6.0rc1.dist-info → mindspore-2.7.0rc1.dist-info}/top_level.txt +0 -0
|
@@ -22,7 +22,8 @@ import socket
|
|
|
22
22
|
import psutil
|
|
23
23
|
import mindspore.log as logger
|
|
24
24
|
from ._utils import _generate_cmd_args_list, _generate_cmd_args_list_with_core, _generate_url, \
|
|
25
|
-
_is_local_ip, _convert_addr_to_ip, _send_scale_num, _get_local_ip
|
|
25
|
+
_is_local_ip, _convert_addr_to_ip, _send_scale_num, _get_local_ip, _generate_auto_bind_core_strategy, \
|
|
26
|
+
_generate_bind_core_strategy
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
class _Node:
|
|
@@ -79,11 +80,12 @@ class _ComputeGraphNode(_Node):
|
|
|
79
80
|
Worker node for dynamic networking. Inherits from the Node class.
|
|
80
81
|
"""
|
|
81
82
|
|
|
82
|
-
def __init__(self, worker_num, sched_host, sched_port, timeout, node_id, args_list, output_file,
|
|
83
|
+
def __init__(self, worker_num, sched_host, sched_port, timeout, node_id, node_rank, args_list, output_file,
|
|
83
84
|
tail_worker_log, join, is_simulation):
|
|
84
85
|
super().__init__(worker_num, sched_host, sched_port, timeout, args_list, output_file,
|
|
85
86
|
tail_worker_log, join, is_simulation)
|
|
86
87
|
self.node_id = node_id
|
|
88
|
+
self.node_rank = node_rank
|
|
87
89
|
|
|
88
90
|
def run(self):
|
|
89
91
|
"""
|
|
@@ -95,6 +97,8 @@ class _ComputeGraphNode(_Node):
|
|
|
95
97
|
super().run()
|
|
96
98
|
if self.node_id is not None:
|
|
97
99
|
os.environ["MS_NODE_ID"] = str(self.node_id)
|
|
100
|
+
if self.node_rank is not None:
|
|
101
|
+
os.environ["MS_NODE_RANK"] = str(self.node_rank)
|
|
98
102
|
# If simulation level is set, environment variable 'MS_ROLE' will not be set.
|
|
99
103
|
if not self.is_simulation:
|
|
100
104
|
os.environ["MS_ROLE"] = "MS_WORKER"
|
|
@@ -119,6 +123,9 @@ class _ComputeGraphNode(_Node):
|
|
|
119
123
|
return subprocess.Popen(['/usr/bin/tail', '-f', self.output_file])
|
|
120
124
|
|
|
121
125
|
def enable_tail_worker_log(self):
|
|
126
|
+
"""
|
|
127
|
+
Get valid rank ID for tailing the corresponding worker log.
|
|
128
|
+
"""
|
|
122
129
|
tail_worker_log_list = []
|
|
123
130
|
if self.tail_worker_log != "-1":
|
|
124
131
|
tail_worker_log_list.extend([int(num) for num in self.tail_worker_log.split(',')])
|
|
@@ -169,7 +176,7 @@ class _ProcessManager:
|
|
|
169
176
|
|
|
170
177
|
self.sim_level = args.sim_level
|
|
171
178
|
self.sim_rank_id = args.sim_rank_id
|
|
172
|
-
self.is_simulation =
|
|
179
|
+
self.is_simulation = self.sim_level != -1
|
|
173
180
|
if self.is_simulation:
|
|
174
181
|
os.environ["MS_SIMULATION_LEVEL"] = str(self.sim_level)
|
|
175
182
|
elif os.getenv("MS_SIMULATION_LEVEL"):
|
|
@@ -205,15 +212,24 @@ class _ProcessManager:
|
|
|
205
212
|
finally:
|
|
206
213
|
os.umask(origin_mask)
|
|
207
214
|
|
|
215
|
+
self.device_to_cpu_map = {}
|
|
216
|
+
if self.bind_core is True:
|
|
217
|
+
self.device_to_cpu_map = _generate_auto_bind_core_strategy(self.local_worker_num)
|
|
218
|
+
|
|
208
219
|
self.proc_rank_map = {}
|
|
209
220
|
self.enable_mindx = False
|
|
221
|
+
self._check_taskd()
|
|
222
|
+
|
|
223
|
+
def _check_taskd(self):
|
|
224
|
+
"""check if enable taskd."""
|
|
210
225
|
tft_env = os.getenv("MS_ENABLE_TFT", "")
|
|
211
|
-
if (
|
|
226
|
+
if any(v in tft_env for v in ('TTP:1', 'UCE:1', 'ARF:1', 'TSP:1', 'RSC:1', 'HCCE:1')):
|
|
212
227
|
try:
|
|
213
228
|
from taskd.python.framework.agent.ms_mgr.msrun_plugin import MSRunPlugin
|
|
214
229
|
self.msmgr = MSRunPlugin()
|
|
215
230
|
self.msmgr.register_callbacks("KILL_WORKER", self.kill_workers)
|
|
216
231
|
self.msmgr.register_callbacks("START_ALL_WORKER", self.start_all_workers)
|
|
232
|
+
self.msmgr.register_callbacks("START_WORKER_LIST", self.start_worker_list)
|
|
217
233
|
self.msmgr.register_callbacks("MONITOR", self.monitor_rank_status)
|
|
218
234
|
self.enable_mindx = True
|
|
219
235
|
os.environ["MS_ENABLE_RECOVERY"] = str(1)
|
|
@@ -261,6 +277,45 @@ class _ProcessManager:
|
|
|
261
277
|
self.is_simulation)
|
|
262
278
|
self.msn_process = msn.run()
|
|
263
279
|
|
|
280
|
+
def _start_single_worker(self, local_rank):
|
|
281
|
+
"""
|
|
282
|
+
Start worker processor
|
|
283
|
+
|
|
284
|
+
Args:
|
|
285
|
+
local_rank: local rank id.
|
|
286
|
+
"""
|
|
287
|
+
os.environ["DEVICE_ID"] = str(local_rank)
|
|
288
|
+
node_id, log_name = self._get_node_id_and_log_path(local_rank)
|
|
289
|
+
if node_id is None:
|
|
290
|
+
logger.warning(f"Rank ids will be assigned automatically, "
|
|
291
|
+
"please use 'grep -rn 'rank id:' command to check each worker log's rank id.")
|
|
292
|
+
else:
|
|
293
|
+
# If node_id is generated in '_get_node_id_and_log_path' method, export 'RANK_ID' environment variable.
|
|
294
|
+
# This is for rank_table method's compatibility consideration.
|
|
295
|
+
os.environ["RANK_ID"] = str(node_id)
|
|
296
|
+
print(f"Start worker process with rank id:{node_id}, log file:{log_name}. "
|
|
297
|
+
f"Environment variable [RANK_ID={node_id}] is exported.", flush=True)
|
|
298
|
+
if self.is_simulation and (self.sim_rank_id != -1):
|
|
299
|
+
# Reset RANK_ID env to sim_rank_id if sim_rank_id is set.
|
|
300
|
+
os.environ["RANK_ID"] = str(self.sim_rank_id)
|
|
301
|
+
logger.warning(f"In dryrun case, RANK_ID is assigned to {self.sim_rank_id}.")
|
|
302
|
+
|
|
303
|
+
if self.bind_core:
|
|
304
|
+
affinity_cpu_str = _generate_bind_core_strategy(local_rank, self.device_to_cpu_map, self.bind_core)
|
|
305
|
+
if affinity_cpu_str is not None:
|
|
306
|
+
cmd = _generate_cmd_args_list_with_core(self.cmd, self.cmd_args, affinity_cpu_str)
|
|
307
|
+
else:
|
|
308
|
+
cmd = _generate_cmd_args_list(self.cmd, self.cmd_args)
|
|
309
|
+
else:
|
|
310
|
+
cmd = _generate_cmd_args_list(self.cmd, self.cmd_args)
|
|
311
|
+
cgn = _ComputeGraphNode(self.worker_num, self.master_addr, self.master_port, self.cluster_time_out,
|
|
312
|
+
node_id, self.node_rank, cmd, log_name, self.tail_worker_log, self.join,
|
|
313
|
+
self.is_simulation)
|
|
314
|
+
process, tail_process = cgn.run()
|
|
315
|
+
self.cgn_processes.append(process)
|
|
316
|
+
self.tail_cgn_processes.append(tail_process)
|
|
317
|
+
self.proc_rank_map[local_rank] = process
|
|
318
|
+
|
|
264
319
|
def start_workers(self):
|
|
265
320
|
"""
|
|
266
321
|
Starts the worker nodes.
|
|
@@ -275,40 +330,8 @@ class _ProcessManager:
|
|
|
275
330
|
"'rank_id' of each process will be assigned after cluster is successfully built.\n"
|
|
276
331
|
"You can access 'RANK_ID' environment variable after calling "
|
|
277
332
|
"'mindspore.communication.init()'")
|
|
278
|
-
|
|
279
333
|
for i in range(self.local_worker_num):
|
|
280
|
-
|
|
281
|
-
node_id, log_name = self._get_node_id_and_log_path(i)
|
|
282
|
-
if node_id is None:
|
|
283
|
-
logger.warning(f"Rank ids will be assigned automatically, "
|
|
284
|
-
"please use 'grep -rn 'rank id:' command to check each worker log's rank id.")
|
|
285
|
-
else:
|
|
286
|
-
# If node_id is generated in '_get_node_id_and_log_path' method, export 'RANK_ID' environment variable.
|
|
287
|
-
# This is for rank_table method's compatibility consideration.
|
|
288
|
-
os.environ["RANK_ID"] = str(node_id)
|
|
289
|
-
print(f"Start worker process with rank id:{node_id}, log file:{log_name}. "
|
|
290
|
-
f"Environment variable [RANK_ID={node_id}] is exported.", flush=True)
|
|
291
|
-
if self.is_simulation and (self.sim_rank_id != -1):
|
|
292
|
-
# Reset RANK_ID env to sim_rank_id if sim_rank_id is set.
|
|
293
|
-
os.environ["RANK_ID"] = str(self.sim_rank_id)
|
|
294
|
-
logger.warning(f"In dryrun case, RANK_ID is assigned to {self.sim_rank_id}.")
|
|
295
|
-
|
|
296
|
-
if self.bind_core:
|
|
297
|
-
cpu_num = subprocess.getoutput("cat /proc/cpuinfo|grep processor|wc -l")
|
|
298
|
-
if not cpu_num.isdigit():
|
|
299
|
-
raise RuntimeError(f"Got cpu number from '/proc/cpuinfo' is {cpu_num}, failed to bind core.")
|
|
300
|
-
avg = int(cpu_num) // self.local_worker_num
|
|
301
|
-
cpu_start = avg * i
|
|
302
|
-
cpu_end = cpu_start + avg - 1
|
|
303
|
-
cmd = _generate_cmd_args_list_with_core(self.cmd, self.cmd_args, cpu_start, cpu_end)
|
|
304
|
-
else:
|
|
305
|
-
cmd = _generate_cmd_args_list(self.cmd, self.cmd_args)
|
|
306
|
-
cgn = _ComputeGraphNode(self.worker_num, self.master_addr, self.master_port, self.cluster_time_out,
|
|
307
|
-
node_id, cmd, log_name, self.tail_worker_log, self.join, self.is_simulation)
|
|
308
|
-
process, tail_process = cgn.run()
|
|
309
|
-
self.cgn_processes.append(process)
|
|
310
|
-
self.tail_cgn_processes.append(tail_process)
|
|
311
|
-
self.proc_rank_map[i] = process
|
|
334
|
+
self._start_single_worker(i)
|
|
312
335
|
|
|
313
336
|
def join_processes(self):
|
|
314
337
|
"""
|
|
@@ -334,7 +357,7 @@ class _ProcessManager:
|
|
|
334
357
|
continue
|
|
335
358
|
elif ret_code != 0:
|
|
336
359
|
has_exception = True
|
|
337
|
-
logger.error(f"Worker process {p.pid} exit with exception.")
|
|
360
|
+
logger.error(f"Worker process {p.pid} exit with exception. Error code: {ret_code}.")
|
|
338
361
|
break
|
|
339
362
|
else:
|
|
340
363
|
success_cgn_processes.add(p)
|
|
@@ -420,14 +443,9 @@ class _ProcessManager:
|
|
|
420
443
|
Args:
|
|
421
444
|
NA.
|
|
422
445
|
"""
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
p.kill()
|
|
446
|
+
self.kill_worker_processes()
|
|
447
|
+
self.kill_tail_log_processes()
|
|
426
448
|
self.cgn_processes.clear()
|
|
427
|
-
|
|
428
|
-
for p in self.tail_cgn_processes:
|
|
429
|
-
if p is not None:
|
|
430
|
-
p.kill()
|
|
431
449
|
self.tail_cgn_processes.clear()
|
|
432
450
|
|
|
433
451
|
def kill_single_worker(self, pid):
|
|
@@ -441,7 +459,7 @@ class _ProcessManager:
|
|
|
441
459
|
for i in range(len(self.cgn_processes)):
|
|
442
460
|
p = self.cgn_processes[i]
|
|
443
461
|
if p.pid == pid and p.poll() is None:
|
|
444
|
-
p.
|
|
462
|
+
os.killpg(os.getpgid(p.pid), signal.SIGKILL)
|
|
445
463
|
del self.cgn_processes[i]
|
|
446
464
|
tail_p = self.tail_cgn_processes[i]
|
|
447
465
|
if tail_p is not None:
|
|
@@ -499,7 +517,8 @@ class _ProcessManager:
|
|
|
499
517
|
p_status = p.poll()
|
|
500
518
|
if (not psutil.pid_exists(p.pid)) and (p_status != 0):
|
|
501
519
|
p_status = 300
|
|
502
|
-
return {"pid": p.pid, "status": p_status, "global_rank": global_rank_id
|
|
520
|
+
return {"pid": p.pid, "status": p_status, "global_rank": global_rank_id, "local_rank": rank_id,
|
|
521
|
+
"node_id": self.node_rank}
|
|
503
522
|
except KeyError:
|
|
504
523
|
logger.info(f"Process rank {rank_id} has not been initialized.")
|
|
505
524
|
return {"pid": None, "status": 200, "global_rank": global_rank_id}
|
|
@@ -519,7 +538,24 @@ class _ProcessManager:
|
|
|
519
538
|
self.start_workers()
|
|
520
539
|
worker_status = self.monitor_rank_status([-1])
|
|
521
540
|
for i in range(self.local_worker_num):
|
|
522
|
-
if worker_status[i]["status"]
|
|
541
|
+
if worker_status[i]["status"] is not None:
|
|
542
|
+
return 1
|
|
543
|
+
return 0
|
|
544
|
+
|
|
545
|
+
def start_worker_list(self, rank_ids):
|
|
546
|
+
"""
|
|
547
|
+
Start worker processor by rank list.
|
|
548
|
+
|
|
549
|
+
Args:
|
|
550
|
+
rank_ids: worker process's local rank list, which is also device_id.
|
|
551
|
+
"""
|
|
552
|
+
if not isinstance(rank_ids, list):
|
|
553
|
+
raise TypeError(f"The type of 'rank_ids' must be a list, but got:{rank_ids}")
|
|
554
|
+
for idx in rank_ids:
|
|
555
|
+
self._start_single_worker(idx)
|
|
556
|
+
worker_status = self.monitor_rank_status(rank_ids)
|
|
557
|
+
for i in rank_ids:
|
|
558
|
+
if worker_status[i]["status"] is not None:
|
|
523
559
|
return 1
|
|
524
560
|
return 0
|
|
525
561
|
|
|
@@ -18,6 +18,8 @@ import json
|
|
|
18
18
|
import socket
|
|
19
19
|
import ipaddress
|
|
20
20
|
import mindspore.log as logger
|
|
21
|
+
from mindspore.runtime.thread_bind_core import _get_physical_device_id, _get_cpu_available, \
|
|
22
|
+
_auto_generate_strategy, _equal_distribution_strategy
|
|
21
23
|
|
|
22
24
|
CURRENT_IP = None
|
|
23
25
|
|
|
@@ -45,19 +47,19 @@ def _generate_cmd_args_list(cmd, cmd_args):
|
|
|
45
47
|
return [cmd] + cmd_args
|
|
46
48
|
|
|
47
49
|
|
|
48
|
-
def _generate_cmd_args_list_with_core(cmd, cmd_args,
|
|
50
|
+
def _generate_cmd_args_list_with_core(cmd, cmd_args, affinity_cpu_str):
|
|
49
51
|
"""
|
|
50
52
|
Generates arguments list for 'Popen'. It consists of a binary file name and subsequential arguments.
|
|
51
53
|
"""
|
|
52
54
|
# Bind cpu cores to this process.
|
|
53
|
-
taskset_args = ['taskset'] + ['-c'] + [
|
|
55
|
+
taskset_args = ['taskset'] + ['-c'] + [affinity_cpu_str]
|
|
54
56
|
final_cmd = []
|
|
55
57
|
if cmd not in ['python', 'pytest', 'python3']:
|
|
56
58
|
# If user don't set binary file name, defaulty use 'python' to launch the job.
|
|
57
59
|
final_cmd = taskset_args + ['python'] + [cmd] + cmd_args
|
|
58
60
|
else:
|
|
59
61
|
final_cmd = taskset_args + [cmd] + cmd_args
|
|
60
|
-
logger.
|
|
62
|
+
logger.warning(f"Launch process with command: {' '.join(final_cmd)}")
|
|
61
63
|
return final_cmd
|
|
62
64
|
|
|
63
65
|
|
|
@@ -83,8 +85,8 @@ def _get_local_ip(ip_address):
|
|
|
83
85
|
CURRENT_IP = s.getsockname()[0]
|
|
84
86
|
s.close()
|
|
85
87
|
except Exception as e:
|
|
86
|
-
raise RuntimeError(
|
|
87
|
-
"
|
|
88
|
+
raise RuntimeError("Get local ip has failed. Please verify that the accessible address has been "
|
|
89
|
+
"specified in the '--master_address' parameter") from e
|
|
88
90
|
return CURRENT_IP
|
|
89
91
|
|
|
90
92
|
|
|
@@ -124,8 +126,8 @@ def _convert_addr_to_ip(master_addr):
|
|
|
124
126
|
logger.info(f"Convert input host name:{master_addr} to ip address:{ip_address}.")
|
|
125
127
|
return ip_address
|
|
126
128
|
except socket.gaierror as e:
|
|
127
|
-
raise RuntimeError(
|
|
128
|
-
"
|
|
129
|
+
raise RuntimeError("DNS resolution has failed. Please verify that the correct hostname has been "
|
|
130
|
+
"specified in the '--master_address' parameter") from e
|
|
129
131
|
|
|
130
132
|
|
|
131
133
|
def _send_scale_num(url, scale_num):
|
|
@@ -134,3 +136,89 @@ def _send_scale_num(url, scale_num):
|
|
|
134
136
|
|
|
135
137
|
"""
|
|
136
138
|
return ""
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def _parse_global_device_to_cpu_map(local_rank_id, physical_device_id, device_to_cpu_map):
|
|
142
|
+
"""
|
|
143
|
+
Parse the global device_to_cpu_map and return a cpu list for assigned local_rank_id.
|
|
144
|
+
|
|
145
|
+
"""
|
|
146
|
+
input_device_id = int(list(device_to_cpu_map.keys())[local_rank_id].replace("device", ""))
|
|
147
|
+
if physical_device_id != input_device_id:
|
|
148
|
+
return ""
|
|
149
|
+
affinity_cpu_list = list(device_to_cpu_map.values())[local_rank_id]
|
|
150
|
+
affinity_cpu_str = ",".join(affinity_cpu_list)
|
|
151
|
+
return affinity_cpu_str
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def _generate_auto_bind_core_strategy(local_worker_num):
|
|
155
|
+
"""
|
|
156
|
+
Get device to core range assigned for the all processes.
|
|
157
|
+
|
|
158
|
+
"""
|
|
159
|
+
simulation_level = os.getenv("MS_SIMULATION_LEVEL", "").strip()
|
|
160
|
+
|
|
161
|
+
try:
|
|
162
|
+
available_cpus = _get_cpu_available()
|
|
163
|
+
except RuntimeError as e:
|
|
164
|
+
logger.warning(f"Failed to acquire available cpu info, error: {e} Will not launch process with taskset.")
|
|
165
|
+
return {}
|
|
166
|
+
|
|
167
|
+
if not simulation_level:
|
|
168
|
+
device_to_cpu_map = _auto_generate_strategy(local_worker_num, available_cpus)
|
|
169
|
+
else:
|
|
170
|
+
device_to_cpu_map = _equal_distribution_strategy(local_worker_num, available_cpus)
|
|
171
|
+
|
|
172
|
+
return device_to_cpu_map
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def ranges_to_str(num_list):
|
|
176
|
+
"""
|
|
177
|
+
Convert a num list to a range string.
|
|
178
|
+
|
|
179
|
+
"""
|
|
180
|
+
ranges = []
|
|
181
|
+
start = num_list[0]
|
|
182
|
+
for i in range(1, len(num_list)):
|
|
183
|
+
if num_list[i] != num_list[i-1] + 1:
|
|
184
|
+
ranges.append((start, num_list[i-1]))
|
|
185
|
+
start = num_list[i]
|
|
186
|
+
ranges.append((start, num_list[-1]))
|
|
187
|
+
|
|
188
|
+
parts = []
|
|
189
|
+
for start, end in ranges:
|
|
190
|
+
if start == end:
|
|
191
|
+
parts.append(str(start))
|
|
192
|
+
else:
|
|
193
|
+
parts.append(f"{start}-{end}")
|
|
194
|
+
return ",".join(parts)
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def _generate_bind_core_strategy(local_rank_id, device_to_cpu_map, arg_bind_core):
|
|
198
|
+
"""
|
|
199
|
+
Get device to core range assigned for the all processes.
|
|
200
|
+
|
|
201
|
+
"""
|
|
202
|
+
affinity_cpu_str = ""
|
|
203
|
+
cpu_list_for_device = []
|
|
204
|
+
simulation_level = os.getenv("MS_SIMULATION_LEVEL", "").strip()
|
|
205
|
+
|
|
206
|
+
try:
|
|
207
|
+
physical_device_id = _get_physical_device_id(local_rank_id, simulation_level)
|
|
208
|
+
except RuntimeError as e:
|
|
209
|
+
logger.warning(f"Failed to acquire device id, error: {e} Will not launch process with taskset.")
|
|
210
|
+
return None
|
|
211
|
+
|
|
212
|
+
if isinstance(arg_bind_core, dict):
|
|
213
|
+
affinity_cpu_str = _parse_global_device_to_cpu_map(local_rank_id, physical_device_id, arg_bind_core)
|
|
214
|
+
if not affinity_cpu_str:
|
|
215
|
+
logger.warning(f"Failed to find physical_device_id[{physical_device_id}] for "
|
|
216
|
+
f"process[{local_rank_id}]. Will not launch process with taskset.")
|
|
217
|
+
return None
|
|
218
|
+
elif arg_bind_core is True:
|
|
219
|
+
cpu_list_for_device = device_to_cpu_map.get(physical_device_id, [])
|
|
220
|
+
if not cpu_list_for_device:
|
|
221
|
+
return None
|
|
222
|
+
os.environ["MSRUN_CPU_LIST"] = str(cpu_list_for_device)
|
|
223
|
+
affinity_cpu_str = ranges_to_str(cpu_list_for_device)
|
|
224
|
+
return affinity_cpu_str
|
|
@@ -14,9 +14,47 @@
|
|
|
14
14
|
# ============================================================================
|
|
15
15
|
"""Entrypoint of ms_run"""
|
|
16
16
|
import ast
|
|
17
|
-
|
|
17
|
+
import re
|
|
18
|
+
import json
|
|
19
|
+
from argparse import REMAINDER, ArgumentParser, ArgumentTypeError
|
|
18
20
|
from .process_entity import _ProcessManager
|
|
19
21
|
|
|
22
|
+
|
|
23
|
+
def parse_and_validate_bind_core(value):
|
|
24
|
+
"""
|
|
25
|
+
Parse input argument of --bind_core.
|
|
26
|
+
|
|
27
|
+
"""
|
|
28
|
+
if value.lower() == "true":
|
|
29
|
+
return True
|
|
30
|
+
if value.lower() == "false":
|
|
31
|
+
return False
|
|
32
|
+
|
|
33
|
+
try:
|
|
34
|
+
value_dict = json.loads(value)
|
|
35
|
+
except json.JSONDecodeError as e:
|
|
36
|
+
raise ArgumentTypeError("Failed to parse JSON into a dictionary") from e
|
|
37
|
+
|
|
38
|
+
if isinstance(value_dict, dict):
|
|
39
|
+
range_pattern = re.compile(r'^\d+-\d+$')
|
|
40
|
+
for device_id, affinity_cpu_list in value_dict.items():
|
|
41
|
+
if not re.fullmatch(r"device\d+", device_id):
|
|
42
|
+
raise ArgumentTypeError(f"Key '{device_id}' must be in format 'deviceX' (X ≥ 0).")
|
|
43
|
+
if not isinstance(affinity_cpu_list, list):
|
|
44
|
+
raise ArgumentTypeError(f"Value for '{device_id}':{affinity_cpu_list} should be a list, "
|
|
45
|
+
f"but got {type(affinity_cpu_list)}.")
|
|
46
|
+
|
|
47
|
+
for cpu_range in affinity_cpu_list:
|
|
48
|
+
if not isinstance(cpu_range, str):
|
|
49
|
+
raise ArgumentTypeError(f"CPU range '{cpu_range}' in '{affinity_cpu_list}' should be a string.")
|
|
50
|
+
if not range_pattern.match(cpu_range):
|
|
51
|
+
raise ArgumentTypeError(f"CPU range '{cpu_range}' in '{affinity_cpu_list}' should be "
|
|
52
|
+
"in format 'cpuidX-cpuidY'.")
|
|
53
|
+
return value_dict
|
|
54
|
+
|
|
55
|
+
raise ArgumentTypeError(f"Type of {value} should be bool or dict, but got {type(value)}.")
|
|
56
|
+
|
|
57
|
+
|
|
20
58
|
def get_args():
|
|
21
59
|
"""
|
|
22
60
|
Parses and retrieves command-line arguments.
|
|
@@ -77,9 +115,10 @@ def get_args():
|
|
|
77
115
|
parser.add_argument(
|
|
78
116
|
"--bind_core",
|
|
79
117
|
default=False,
|
|
80
|
-
type=
|
|
81
|
-
|
|
82
|
-
|
|
118
|
+
type=parse_and_validate_bind_core,
|
|
119
|
+
help="specifies whether msrun should bind CPU cores to spawned processes. "
|
|
120
|
+
"If set to True, msrun will bind core based on the environment automatically, "
|
|
121
|
+
"and if passed a dict, msrun will bind core based on this dict information."
|
|
83
122
|
)
|
|
84
123
|
parser.add_argument(
|
|
85
124
|
"--sim_level",
|
|
@@ -16,8 +16,15 @@
|
|
|
16
16
|
"""
|
|
17
17
|
Parallel function operator
|
|
18
18
|
"""
|
|
19
|
+
from __future__ import absolute_import
|
|
19
20
|
|
|
20
|
-
from
|
|
21
|
+
from . import (
|
|
22
|
+
reshard_func
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
from .reshard_func import (
|
|
26
|
+
reshard
|
|
27
|
+
)
|
|
21
28
|
|
|
22
29
|
__all__ = []
|
|
23
30
|
__all__.extend(reshard_func.__all__)
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
# ============================================================================
|
|
15
15
|
"""Defines parameter operators with functional form."""
|
|
16
|
-
import mindspore as ms
|
|
17
16
|
from mindspore import context, ops
|
|
18
17
|
from mindspore import log as logger
|
|
19
18
|
from mindspore.ops import operations as P
|
|
@@ -59,8 +58,8 @@ def reshard(tensor, layout):
|
|
|
59
58
|
Tensor. The mathematically equivalent of the input tensor.
|
|
60
59
|
|
|
61
60
|
Raises:
|
|
62
|
-
TypeError:
|
|
63
|
-
TypeError:
|
|
61
|
+
TypeError: If the type of input param `tensor` is not mindspore.Tensor.
|
|
62
|
+
TypeError: If the type of input param `layout` is not mindspore.parallel.Layout.
|
|
64
63
|
|
|
65
64
|
Supported Platforms:
|
|
66
65
|
``Ascend``
|
|
@@ -220,11 +219,11 @@ def _redistribute(tensor, dst_dtensor_info):
|
|
|
220
219
|
if not comm_tensor_data_func._current_rank_has_data:
|
|
221
220
|
new_tensor_shape = tuple([tensor_data.shape[i] // tensor._dtensor_info.sharding_strategy[i]
|
|
222
221
|
for i in range(len(tensor.shape))])
|
|
223
|
-
tensor_data =
|
|
222
|
+
tensor_data = ops.zeros(new_tensor_shape, tensor.dtype)
|
|
223
|
+
_ = comm_tensor_data_func.comm_data(tensor_data)
|
|
224
224
|
else:
|
|
225
|
-
|
|
225
|
+
_ = comm_tensor_data_func.comm_data(tensor_data)
|
|
226
226
|
all_reduce_data = True
|
|
227
|
-
ms.communication.comm_func.barrier()
|
|
228
227
|
if src_layout_info['device_matrix'] == dst_layout_info['device_matrix'] and src_layout_info['tensor_map'] == \
|
|
229
228
|
dst_layout_info['tensor_map']:
|
|
230
229
|
return tensor_data
|
|
@@ -236,7 +235,7 @@ def _redistribute(tensor, dst_dtensor_info):
|
|
|
236
235
|
global REDIST_CELL_CACHE
|
|
237
236
|
redist_cache_key = (f"{src_layout_info['device_matrix']}, {src_layout_info['tensor_map']} -> "
|
|
238
237
|
f"{dst_layout_info['device_matrix']}, {dst_layout_info['tensor_map']}")
|
|
239
|
-
if redist_cache_key in REDIST_CELL_CACHE
|
|
238
|
+
if redist_cache_key in REDIST_CELL_CACHE:
|
|
240
239
|
logger.debug(f"redist_cache_key is {redist_cache_key}, match cache")
|
|
241
240
|
redist_func = REDIST_CELL_CACHE[redist_cache_key]
|
|
242
241
|
else:
|
|
@@ -17,8 +17,21 @@ Interfaces for parallel-related functionality
|
|
|
17
17
|
"""
|
|
18
18
|
from __future__ import absolute_import
|
|
19
19
|
|
|
20
|
-
from
|
|
21
|
-
|
|
20
|
+
from . import (
|
|
21
|
+
parallel_grad_reducer,
|
|
22
|
+
parallel_cell_wrapper
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
from .parallel_grad_reducer import (
|
|
26
|
+
PipelineGradReducer
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
from .parallel_cell_wrapper import (
|
|
30
|
+
PipelineCell,
|
|
31
|
+
Pipeline,
|
|
32
|
+
MicroBatchInterleaved,
|
|
33
|
+
GradAccumulation
|
|
34
|
+
)
|
|
22
35
|
|
|
23
36
|
__all__ = []
|
|
24
37
|
__all__.extend(parallel_grad_reducer.__all__)
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
from __future__ import absolute_import
|
|
18
18
|
from __future__ import division
|
|
19
19
|
|
|
20
|
+
__all__ = ['PipelineCell', 'Pipeline', 'MicroBatchInterleaved', 'GradAccumulation']
|
|
21
|
+
|
|
20
22
|
from mindspore import nn
|
|
21
23
|
from mindspore.ops import operations as P
|
|
22
24
|
from mindspore.nn.cell import Cell
|
|
@@ -24,9 +26,6 @@ from mindspore.nn.wrap.cell_wrapper import _MicroBatch
|
|
|
24
26
|
from mindspore import log as logger
|
|
25
27
|
|
|
26
28
|
|
|
27
|
-
__all__ = ['PipelineCell', 'Pipeline', 'MicroBatchInterleaved', 'GradAccumulation']
|
|
28
|
-
|
|
29
|
-
|
|
30
29
|
class PipelineCell(Cell):
|
|
31
30
|
"""
|
|
32
31
|
Slice MiniBatch into finer-grained MicroBatch for use in pipeline-parallel training.
|
|
@@ -101,15 +100,15 @@ class PipelineCell(Cell):
|
|
|
101
100
|
" config stage num:" + str(config_stage_num))
|
|
102
101
|
logger.warning("network:" + str(self.network))
|
|
103
102
|
logger.warning("cell name available:")
|
|
104
|
-
for cell_name,
|
|
103
|
+
for cell_name, _ in self.network.cells_and_names():
|
|
105
104
|
logger.warning(cell_name)
|
|
106
105
|
raise KeyError("For 'PipelineCell', the argument 'stage_config' : {} is not "
|
|
107
106
|
"found in 'network' : {}".format(config_dict, network))
|
|
108
107
|
|
|
109
|
-
def construct(self, *
|
|
108
|
+
def construct(self, *args, **kwargs):
|
|
110
109
|
ret = None
|
|
111
110
|
for i in range(self.micro_size):
|
|
112
|
-
micro_input = self.micro_inputs[i](i, *
|
|
111
|
+
micro_input = self.micro_inputs[i](i, *args, **kwargs)
|
|
113
112
|
output = self.network(*micro_input)
|
|
114
113
|
if ret is not None:
|
|
115
114
|
ret = self.add_list[i](ret, output)
|
|
@@ -197,10 +196,10 @@ class MicroBatchInterleaved(Cell):
|
|
|
197
196
|
self.interleave_inputs.append(interleave_data)
|
|
198
197
|
self._get_attr_from_cell(network)
|
|
199
198
|
|
|
200
|
-
def construct(self, *
|
|
199
|
+
def construct(self, *args, **kwargs):
|
|
201
200
|
output = 0.0
|
|
202
201
|
for i in range(self.interleave_num):
|
|
203
|
-
interleave_input = self.interleave_inputs[i](i, *
|
|
202
|
+
interleave_input = self.interleave_inputs[i](i, *args, **kwargs)
|
|
204
203
|
output = self.add(output, self.network(*interleave_input))
|
|
205
204
|
return output
|
|
206
205
|
|
|
@@ -251,10 +250,10 @@ class GradAccumulation(Cell):
|
|
|
251
250
|
self.add_list.append(self.add)
|
|
252
251
|
self._get_attr_from_cell(network)
|
|
253
252
|
|
|
254
|
-
def construct(self, *
|
|
253
|
+
def construct(self, *args, **kwargs):
|
|
255
254
|
ret = None
|
|
256
255
|
for i in range(self.micro_size):
|
|
257
|
-
micro_input = self.micro_inputs[i](i, *
|
|
256
|
+
micro_input = self.micro_inputs[i](i, *args, **kwargs)
|
|
258
257
|
output = self.network(*micro_input)
|
|
259
258
|
if ret is not None:
|
|
260
259
|
ret = self.add_list[i](ret, output)
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
"""parallel serialization"""
|
|
16
16
|
from __future__ import absolute_import
|
|
17
17
|
|
|
18
|
+
__all__ = ['PipelineGradReducer']
|
|
19
|
+
|
|
18
20
|
from mindspore import context
|
|
19
21
|
from mindspore.nn.cell import Cell
|
|
20
22
|
from mindspore.ops import functional as F, composite as C, operations as P
|
|
@@ -25,8 +27,6 @@ from mindspore.common.parameter import Parameter
|
|
|
25
27
|
from mindspore.nn.layer import Identity
|
|
26
28
|
from mindspore.parallel._utils import _get_enable_parallel_optimizer
|
|
27
29
|
|
|
28
|
-
__all__ = ['PipelineGradReducer']
|
|
29
|
-
|
|
30
30
|
|
|
31
31
|
grad_scale = C.MultitypeFuncGraph("grad_scale")
|
|
32
32
|
shard_grad_scale = C.MultitypeFuncGraph("shard_grad_scale")
|
|
@@ -81,6 +81,7 @@ class PipelineGradReducer(Cell):
|
|
|
81
81
|
>>> import mindspore as ms
|
|
82
82
|
>>> from mindspore import nn, ops, Tensor
|
|
83
83
|
>>> from mindspore.communication import init
|
|
84
|
+
>>> from mindspore.parallel.auto_parallel import AutoParallel
|
|
84
85
|
>>>
|
|
85
86
|
>>> ms.set_context(mode=ms.GRAPH_MODE)
|
|
86
87
|
>>> ms.reset_auto_parallel_context()
|
|
@@ -113,7 +114,7 @@ class PipelineGradReducer(Cell):
|
|
|
113
114
|
>>> net.layer3.pipeline_stage = 1
|
|
114
115
|
>>> loss_fn = nn.CrossEntropyLoss()
|
|
115
116
|
>>> optimizer = nn.SGD(net.trainable_params(), 1e-2)
|
|
116
|
-
>>> net_with_loss = nn.
|
|
117
|
+
>>> net_with_loss = nn.PipelineCell(nn.WithLossCell(net, loss_fn), 2)
|
|
117
118
|
>>> net_with_loss.set_train()
|
|
118
119
|
>>> def forward_fn(inputs, target):
|
|
119
120
|
... loss = net_with_loss(inputs, target)
|
|
@@ -135,7 +136,7 @@ class PipelineGradReducer(Cell):
|
|
|
135
136
|
>>> label = Tensor(np.ones([size, out_features]).astype(np.float32))
|
|
136
137
|
>>> loss, _ = train_one_step(inputs, label)
|
|
137
138
|
>>> print(loss)
|
|
138
|
-
46.
|
|
139
|
+
46.304886
|
|
139
140
|
"""
|
|
140
141
|
def __init__(self, parameters, scale_sense=1.0, opt_shard=None):
|
|
141
142
|
super(PipelineGradReducer, self).__init__(auto_prefix=False)
|
|
@@ -151,10 +152,10 @@ class PipelineGradReducer(Cell):
|
|
|
151
152
|
self.opt_shard = opt_shard
|
|
152
153
|
|
|
153
154
|
@jit
|
|
154
|
-
def construct(self,
|
|
155
|
+
def construct(self, *args, **kwargs):
|
|
155
156
|
new_grads = None
|
|
156
157
|
if self.opt_shard:
|
|
157
|
-
grads = self.grad_reducer(
|
|
158
|
+
grads = self.grad_reducer(*args, **kwargs)
|
|
158
159
|
new_grads = self.hyper_map(F.partial(shard_grad_scale, self.scale_sense * self.degree),
|
|
159
160
|
grads, self.accu_grads)
|
|
160
161
|
else:
|
mindspore/parallel/shard.py
CHANGED
|
@@ -121,8 +121,7 @@ class Layout:
|
|
|
121
121
|
>>> layout0 = layout("dp", "mp")
|
|
122
122
|
>>> print(layout0.to_dict())
|
|
123
123
|
{"device_matrix": (2, 2, 2), "tensor_map": (2, 0), "interleaved_parallel": False,
|
|
124
|
-
'alias_name': {'dp', 'sp', 'mp'}, "rank_list": [0, 1, 2, 3, 4,
|
|
125
|
-
>>> # Total device num is 4, but split the tensor in local device into two copies.
|
|
124
|
+
'alias_name': {'dp', 'sp', 'mp'}, "rank_list": [0, 1, 2, 3, 4, 5, 6, 7]}
|
|
126
125
|
>>> layout = Layout((2, 2, 2), ("dp", "sp", "interleaved_parallel"))
|
|
127
126
|
>>> layout1 = layout(("dp", "interleaved_parallel"), "sp")
|
|
128
127
|
"""
|
|
@@ -408,8 +407,8 @@ def shard(fn, in_strategy, out_strategy=None, parameter_plan=None, device="Ascen
|
|
|
408
407
|
The parallel strategies of remaining operators are derived from the strategy specified by the input and output.
|
|
409
408
|
|
|
410
409
|
Note:
|
|
411
|
-
-
|
|
412
|
-
|
|
410
|
+
- It is valid only in semi auto parallel or auto parallel mode.
|
|
411
|
+
In other parallel modes, strategies set here will be ignored.
|
|
413
412
|
- If the input contain Parameter, its strategy should be set in `in_strategy`.
|
|
414
413
|
- This method currently does not support dynamic shapes.
|
|
415
414
|
|