Files
2026-07-13 13:18:33 +08:00

67 lines
2.5 KiB
Python

# 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)