Shenghong's picture
Add files using upload-large-folder tool
b8c8910 verified
Raw
History Blame Contribute Delete
2.86 kB
# 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()