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

71 lines
1.8 KiB
Python

# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: Apache-2.0
# DeepSpeed Team
from typing import Optional
from ...inference_utils import DtypeEnum, NormTypeEnum
from ...modules.ds_module import DSModuleConfig
"""
Trying to define the space we need to support here right now:
Types of embeddings I've found so far:
1. Token embedding
2. Position embedding
3. Token type embedding
4. LN
GPTNeo: 1, 2, 3 (shared with 1)
GPTNeoX: 1
GPTJ: 1, 3
LLaMA: 1
BERT: 1, 2, 3, 4
GPT2: 1, 2, 3 (shared with 1)
Sidebar for OPT:
OPT: 1, 2
1 may not actually project to the actual hidden dimension according to the raw
code, but for the model configs we care about it does.
2 has a weird offset associated with it that the others do not.
"""
class DSEmbeddingsConfig(DSModuleConfig):
"""
Config class for DSEmbeddings.
"""
residual_dtype: DtypeEnum = DtypeEnum.fp16
"""
Data type the module should use for its output.
"""
embedding_dim: int
"""
Dimensionality of the embedding projections.
"""
positional_embedding: bool = False
"""
Whether the module should expect a positional embedding matrix. The shape of this
matrix should be of shape [max_seq_len + positional_offset, embedding_dim]
"""
positional_offset: int = 0
"""
Whether the linearized token IDs should be offset by a certain amount. For an example
of this, see the OPT model implementation.
"""
use_token_type: bool = False
"""
Whether the module should expect a token type embedding matrix.
"""
output_normalization: Optional[NormTypeEnum] = None
"""
If a the output of the embedding module should be normalized, specify here. See
``inference.inference_utils.NormTypeEnum`` for supported values.
"""