client-models / venv /lib /python3.10 /site-packages /deepspeed /runtime /tensor_parallel /config.py
| # Copyright (c) Microsoft Corporation. | |
| # SPDX-License-Identifier: Apache-2.0 | |
| # DeepSpeed Team | |
| from enum import Enum | |
| from deepspeed.runtime.config_utils import DeepSpeedConfigModel | |
| import torch | |
| from pydantic import Field | |
| from typing import Optional | |
| class AUTOTP_MODE(Enum): | |
| TRAINING = "TRAINING" | |
| INFERENCE = "INFERENCE" | |
| class TPConfig(DeepSpeedConfigModel): | |
| """ Configure tensor parallelism settings """ | |
| tp_size: int = 1 | |
| """ Number of devices to split the model across using tensor parallelism. """ | |
| tp_grain_size: int = 1 | |
| "The variable required by the autoTP parser has not been activated in training yet" | |
| "as it depends on the gather logic that supports uneven partitioning. " | |
| "Desired MLP/lm_head tp size granularity. DNN library favors tensor size in granularity of power of 2, we pick 64 as a default size." | |
| mpu: object = None | |
| """ | |
| A model parallelism unit object that implements | |
| ``get_{model,data}_parallel_{rank,group,world_size}()``. | |
| """ | |
| tp_group: object = None | |
| class TPTrainingConfig(DeepSpeedConfigModel): | |
| dtype: torch.dtype = torch.float16 | |
| """ | |
| Desired model data type, will convert model to this type. | |
| """ | |
| autotp_size: int = 0 | |
| """ | |
| In automatic tensor-parallelism training, 'tensor_parallel_size' | |
| When set to 0, indicates that it is disabled. | |
| """ | |
| tp_overlap_comm: bool = False | |
| """ Whether to overlap communication with computation. Currently, only allreduce supports overlap. """ | |
| tensor_parallel: TPConfig = Field({}, alias="tp") | |
| """ | |
| Configuration for tensor parallelism used to split the model across several | |
| GPUs. Expects a dictionary containing values for :any:`DeepSpeedTPConfig`. | |
| """ | |
| injection_policy_tuple: Optional[tuple] = None | |
| #The following parameters are required by autoTP parser. | |
| ######################################## | |
| keep_module_on_host: bool = False | |
| """ | |
| When loading checkpoints to model parameters, they are moved to the device. In very large models | |
| this might fill the device and cause OOM. Setting this flag to true, will keep checkpoints on | |
| host and not move them directly to the device (giving an option to quantize checkpoint data before | |
| moving it to the device for example). | |
| """ | |
| replace_with_kernel_inject: bool = Field(False, alias="kernel_inject") | |
| """ | |
| Set to true to inject inference kernels for models such as, Bert, GPT2, | |
| GPT-Neo and GPT-J. Otherwise, the injection_dict provides the names of two | |
| linear layers as a tuple: | |
| `(attention_output projection, transformer output projection)` | |
| """ | |
| ######################################## | |
| def get_tensor_parallel_config(ds_config): | |
| if 'tensor_parallel' in ds_config: | |
| return TPTrainingConfig(**ds_config['tensor_parallel']) | |
| return TPTrainingConfig() | |