chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
# DeepSpeed Team
|
||||
|
||||
import torch
|
||||
from .config import TPTrainingConfig, TPConfig
|
||||
from deepspeed.utils import groups
|
||||
import deepspeed.comm as dist
|
||||
|
||||
|
||||
class TpTrainingManager():
|
||||
|
||||
def __init__(self, model, tp_size, dtype):
|
||||
self.module = model
|
||||
self.config = self._initialize_config(dtype)
|
||||
|
||||
from deepspeed.module_inject.auto_tp import AutoTP
|
||||
from deepspeed import get_accelerator
|
||||
|
||||
# Parse model configuration
|
||||
parser_dict = AutoTP.tp_parser(model)
|
||||
print("AutoTP: ", parser_dict)
|
||||
|
||||
# Initialize TP configuration and model
|
||||
self._initialize_tp_config(tp_size)
|
||||
self._get_model_config_generate()
|
||||
|
||||
# Synchronize random number generator state across devices
|
||||
_rng_state = get_accelerator().get_rng_state().to(get_accelerator().current_device_name())
|
||||
dist.broadcast(_rng_state, groups.get_tensor_model_parallel_src_rank(), self.tp_config.tp_group)
|
||||
get_accelerator().set_rng_state(_rng_state.cpu())
|
||||
|
||||
# Apply injection policies
|
||||
self._apply_policies(parser_dict)
|
||||
|
||||
def _initialize_config(self, dtype):
|
||||
"""Initialize and return the DeepSpeed TP training configuration."""
|
||||
config = TPTrainingConfig()
|
||||
config.dtype = dtype
|
||||
return config
|
||||
|
||||
def _apply_policies(self, parser_dict):
|
||||
"""Apply injection policies to the parsed modules."""
|
||||
for client_module, injection_policy in parser_dict:
|
||||
self.config.injection_policy_tuple = injection_policy
|
||||
self._apply_injection_policy(self.config, client_module)
|
||||
|
||||
def _apply_injection_policy(self, config, client_module=None):
|
||||
from deepspeed.module_inject import replace_transformer_layer
|
||||
"""Apply the given injection policy to a client module."""
|
||||
if isinstance(self.module, torch.nn.Module):
|
||||
replace_transformer_layer(client_module, self.module, None, self.config, self.model_config)
|
||||
|
||||
def _initialize_tp_config(self, tp_size):
|
||||
"""Perform TP configuration initialization."""
|
||||
self.tp_config = TPConfig()
|
||||
self.tp_config.tp_size = tp_size
|
||||
|
||||
groups._init_tp_mesh_device(tp_size)
|
||||
self.tp_config.tp_group = groups.get_tensor_model_parallel_group()
|
||||
self.config.tensor_parallel = self.tp_config
|
||||
|
||||
def _get_model_config_generate(self):
|
||||
"""Generate and apply HF model configuration."""
|
||||
self.model_config = getattr(self.module, 'config', None)
|
||||
Reference in New Issue
Block a user