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

73 lines
2.1 KiB
Python

# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: Apache-2.0
# DeepSpeed Team
from abc import abstractmethod
from typing import Any, Dict, Optional, Type
import torch
from deepspeed.runtime.config_utils import DeepSpeedConfigModel
from ..ds_module import DSModuleBase
from ..module_registry import DSModuleRegistryBase
from ..configs import DSLinearConfig
from ...inference_parameter import InferenceParameter
class DSLinearBase(DSModuleBase):
"""
Base mixin for all Linear modules. The interface represented by this module
is:
hidden_out = activation(hidden_in * weight + bias)
The format and dtype of the weight and bias tensors are not defined and implementations
may compress as necessary. Must support a bias.
"""
@staticmethod
def config_class() -> Type[DeepSpeedConfigModel]:
return DSLinearConfig
def __init__(self, config: DSLinearConfig, implementation_config: Dict[str, Any]) -> None:
super().__init__(config, implementation_config)
@abstractmethod
def transform_param(self, param: torch.Tensor) -> InferenceParameter:
"""
Perform any necessary transformations of the parameters of this module.
Parameters:
param (torch.Tensor): Weight or bias tensor.
"""
...
def forward(self, hidden_states: torch.Tensor, w: torch.Tensor, b: Optional[torch.Tensor] = None) -> torch.Tensor:
"""
Parameters:
hidden_states (torch.Tensor): Hidden states tensor. Expected shape is either
[batch, seq_len, in_channels] or [batch, in_channels].
Returns:
torch.Tensor: Output tensor. Tensor should have same number of dimensions as
input tensor.
"""
raise NotImplementedError()
@property
@abstractmethod
def output(self) -> torch.Tensor:
"""
Return the padded, pre-allocated output Tensor.
"""
...
class DSLinearRegistry(DSModuleRegistryBase):
registry: Dict = {}
@staticmethod
def associated_class() -> Type[DSModuleBase]:
return DSLinearBase