EADST

Transformers Llama 参数配置代码中文注释 configuration_llama.py

# coding=utf-8
# Copyright 2022 EleutherAI and the HuggingFace Inc. team. All rights reserved.
#
# 此代码基于EleutherAI的GPT-NeoX库以及此库中的GPT-NeoX和OPT实现。
# 它已从原始形式修改,以适应与Meta AI团队训练模型时使用的GPT-NeoX和OPT相比的
# 微小架构差异。
#
# 根据Apache许可证2.0版("许可证")获得许可;
# 除非符合许可证,否则不得使用此文件。
# 您可以在以下位置获取许可证副本:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# 除非适用法律要求或书面同意,否则依据许可证分发的软件
# 是基于"按原样"分发的,没有任何明示或暗示的担保或条件。
# 有关许可证下特定语言的权限和限制,请参阅许可证。
# 中文代码注释 XD
# 源码请参考 https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/configuration_llama.py
"""LLaMA模型配置"""

from ...configuration_utils import PretrainedConfig
from ...modeling_rope_utils import rope_config_validation


class LlamaConfig(PretrainedConfig):
    r"""
    这是用于存储[`LlamaModel`]配置的配置类。它用于根据指定的参数实例化LLaMA模型,
    定义模型架构。使用默认值实例化配置将产生与LLaMA-7B类似的配置。

    配置对象继承自[`PretrainedConfig`],可用于控制模型输出。
    有关更多信息,请阅读[`PretrainedConfig`]的文档。


    参数:
        vocab_size (`int`, *可选*, 默认为32000):
            LLaMA模型的词汇表大小。定义调用[`LlamaModel`]时可以通过`inputs_ids`表示的不同标记数量。
        hidden_size (`int`, *可选*, 默认为4096):
            隐藏表示的维度。
        intermediate_size (`int`, *可选*, 默认为11008):
            MLP表示的维度。
        num_hidden_layers (`int`, *可选*, 默认为32):
            Transformer解码器中的隐藏层数。
        num_attention_heads (`int`, *可选*, 默认为32):
            Transformer解码器中每个注意力层的注意力头数。
        num_key_value_heads (`int`, *可选*):
            这是实现分组查询注意力(GQA)时应使用的key_value头数。如果
            `num_key_value_heads=num_attention_heads`,模型将使用多头注意力(MHA);如果
            `num_key_value_heads=1`,模型将使用多查询注意力(MQA);否则使用GQA。
            将多头检查点转换为GQA检查点时,每个组的key和value头应通过
            对该组内所有原始头进行平均池化来构造。更多详细信息请查看
            [这篇论文](https://arxiv.org/pdf/2305.13245.pdf)。如果未指定,将默认为
            `num_attention_heads`。
        hidden_act (`str` 或 `function`, *可选*, 默认为 `"silu"`):
            解码器中的非线性激活函数(函数或字符串)。
        max_position_embeddings (`int`, *可选*, 默认为2048):
            此模型可能曾经使用的最大序列长度。Llama 1支持最多2048个token,
            Llama 2最多4096个,CodeLlama最多16384个。
        initializer_range (`float`, *可选*, 默认为0.02):
            用于初始化所有权重矩阵的truncated_normal_initializer的标准差。
        rms_norm_eps (`float`, *可选*, 默认为1e-06):
            rms归一化层使用的epsilon值。
        use_cache (`bool`, *可选*, 默认为 `True`):
            模型是否应返回最后的key/values注意力(并非所有模型都使用)。
            仅当`config.is_decoder=True`时相关。
        pad_token_id (`int`, *可选*):
            填充标记ID。
        bos_token_id (`int`, *可选*, 默认为1):
            流开始标记ID。
        eos_token_id (`int`, *可选*, 默认为2):
            流结束标记ID。
        pretraining_tp (`int`, *可选*, 默认为1):
            实验性功能。预训练期间使用的张量并行等级。请参阅
            [此文档](https://huggingface.co/docs/transformers/main/perf_train_gpu_many#tensor-parallelism)
            以了解更多相关信息。该值对于确保预训练结果的精确复现是必要的。
            请参阅[此问题](https://github.com/pytorch/pytorch/issues/76232)。
        tie_word_embeddings (`bool`, *可选*, 默认为 `False`):
            是否绑定权重嵌入。
        rope_theta (`float`, *可选*, 默认为10000.0):
            RoPE嵌入的基本周期。
        rope_scaling (`Dict`, *可选*):
            包含RoPE嵌入缩放配置的字典。注意:如果您应用新的rope类型,
            并且您希望模型在更长的`max_position_embeddings`上工作,
            我们建议您相应地更新此值。
            预期内容:
                `rope_type` (`str`):
                    要使用的RoPE子变体。可以是['default', 'linear', 'dynamic', 'yarn', 'longrope',
                    'llama3']之一,其中'default'是原始RoPE实现。
                `factor` (`float`, *可选*):
                    除'default'之外的所有rope类型都使用。应用于RoPE嵌入的缩放因子。在
                    大多数缩放类型中,x的`factor`将使模型能够处理长度为x *
                    原始最大预训练长度的序列。
                `original_max_position_embeddings` (`int`, *可选*):
                    与'dynamic', 'longrope'和'llama3'一起使用。预训练期间使用的原始最大位置嵌入。
                `attention_factor` (`float`, *可选*):
                    与'yarn'和'longrope'一起使用。应用于注意力计算的缩放因子。
                    如果未指定,它将默认为实现推荐的值,使用`factor`字段推断建议的值。
                `beta_fast` (`float`, *可选*):
                    仅与'yarn'一起使用。参数,用于在线性斜坡函数中设置外推(仅)的边界。
                    如果未指定,默认为32。
                `beta_slow` (`float`, *可选*):
                    仅与'yarn'一起使用。参数,用于在线性斜坡函数中设置插值(仅)的边界。
                    如果未指定,默认为1。
                `short_factor` (`List[float]`, *可选*):
                    仅与'longrope'一起使用。应用于短上下文(<
                    `original_max_position_embeddings`)的缩放因子。必须是长度与隐藏
                    大小除以注意力头数除以2相同的数字列表。
                `long_factor` (`List[float]`, *可选*):
                    仅与'longrope'一起使用。应用于长上下文(<
                    `original_max_position_embeddings`)的缩放因子。必须是长度与隐藏
                    大小除以注意力头数除以2相同的数字列表。
                `low_freq_factor` (`float`, *可选*):
                    仅与'llama3'一起使用。应用于RoPE低频分量的缩放因子。
                `high_freq_factor` (`float`, *可选*):
                    仅与'llama3'一起使用。应用于RoPE高频分量的缩放因子。
        attention_bias (`bool`, *可选*, 默认为 `False`):
            是否在自注意力期间的查询、键、值和输出投影层中使用偏置。
        attention_dropout (`float`, *可选*, 默认为0.0):
            注意力概率的dropout比率。
        mlp_bias (`bool`, *可选*, 默认为 `False`):
            是否在MLP层中的up_proj、down_proj和gate_proj层中使用偏置。
        head_dim (`int`, *可选*):
            注意力头维度。如果为None,将默认为hidden_size // num_attention_heads。

    ```python
    >>> from transformers import LlamaModel, LlamaConfig

    >>> # 初始化LLaMA llama-7b风格的配置
    >>> configuration = LlamaConfig()

    >>> # 从llama-7b风格配置初始化模型
    >>> model = LlamaModel(configuration)

    >>> # 访问模型配置
    >>> configuration = model.config
    ```"""

    model_type = "llama"
    keys_to_ignore_at_inference = ["past_key_values"]
    # 基础模型`LlamaModel`的默认张量并行计划
    base_model_tp_plan = {
        "layers.*.self_attn.q_proj": "colwise",
        "layers.*.self_attn.k_proj": "colwise",
        "layers.*.self_attn.v_proj": "colwise",
        "layers.*.self_attn.o_proj": "rowwise",
        "layers.*.mlp.gate_proj": "colwise",
        "layers.*.mlp.up_proj": "colwise",
        "layers.*.mlp.down_proj": "rowwise",
    }
    base_model_pp_plan = {
        "embed_tokens": (["input_ids"], ["inputs_embeds"]),
        "layers": (["hidden_states", "attention_mask"], ["hidden_states"]),
        "norm": (["hidden_states"], ["hidden_states"]),
    }

    def __init__(
        self,
        vocab_size=32000,
        hidden_size=4096,
        intermediate_size=11008,
        num_hidden_layers=32,
        num_attention_heads=32,
        num_key_value_heads=None,
        hidden_act="silu",
        max_position_embeddings=2048,
        initializer_range=0.02,
        rms_norm_eps=1e-6,
        use_cache=True,
        pad_token_id=None,
        bos_token_id=1,
        eos_token_id=2,
        pretraining_tp=1,
        tie_word_embeddings=False,
        rope_theta=10000.0,
        rope_scaling=None,
        attention_bias=False,
        attention_dropout=0.0,
        mlp_bias=False,
        head_dim=None,
        **kwargs,
    ):
        self.vocab_size = vocab_size
        self.max_position_embeddings = max_position_embeddings
        self.hidden_size = hidden_size
        self.intermediate_size = intermediate_size
        self.num_hidden_layers = num_hidden_layers
        self.num_attention_heads = num_attention_heads

        # 为了向后兼容
        if num_key_value_heads is None:
            num_key_value_heads = num_attention_heads

        self.num_key_value_heads = num_key_value_heads
        self.hidden_act = hidden_act
        self.initializer_range = initializer_range
        self.rms_norm_eps = rms_norm_eps
        self.pretraining_tp = pretraining_tp
        self.use_cache = use_cache
        self.rope_theta = rope_theta
        self.rope_scaling = rope_scaling
        self.attention_bias = attention_bias
        self.attention_dropout = attention_dropout
        self.mlp_bias = mlp_bias
        self.head_dim = head_dim if head_dim is not None else self.hidden_size // self.num_attention_heads
        # 验证旋转位置嵌入参数的正确性
        # 向后兼容:如果存在'type'字段,将其复制到'rope_type'。
        if self.rope_scaling is not None and "type" in self.rope_scaling:
            self.rope_scaling["rope_type"] = self.rope_scaling["type"]
        rope_config_validation(self)

        super().__init__(
            pad_token_id=pad_token_id,
            bos_token_id=bos_token_id,
            eos_token_id=eos_token_id,
            tie_word_embeddings=tie_word_embeddings,
            **kwargs,
        )


__all__ = ["LlamaConfig"]
相关标签
About Me
XD
Goals determine what you are going to be.
Category
标签云
Gemma Jupyter 多进程 PyCharm InvalidArgumentError 报税 图形思考法 C++ 第一性原理 Use GoogLeNet Attention Template Paper Shortcut 域名 TensorRT 算法题 关于博主 CSV FP32 签证 IndexTTS2 OCR Linux Transformers Search AI diffusers Input GIT Jetson BeautifulSoup Safetensors icon GGML Git Conda Image2Text OpenCV Ubuntu 多线程 FP16 继承 Bin HuggingFace 版权 FP64 Statistics 净利润 ms-swift FP8 SQL Docker SAM Miniforge Django 云服务器 API XML ChatGPT Vmess GPT4 顶会 HaggingFace CV Rebuttal Bitcoin Sklearn Michelin Website transformers Python NLP Plotly Permission mmap UI COCO Dataset PyTorch torchinfo RL Land Firewall uwsgi RGB logger TTS Video Claude Numpy Anaconda VSCode JSON Hungarian Bert VPN CTC FastAPI hf Diagram PDB Llama Web Excel PDF EXCEL Paddle PIP LeetCode Review Github Quantize llama.cpp FlashAttention Ptyhon LLAMA Plate Logo VGG-16 Knowledge Mixtral scipy 证件照 Pytorch Vim Tracking Cloudreve 论文速读 Windows DeepStream 搞笑 WAN git-lfs 阿里云 ModelScope Color Clash Pillow CLAP 论文 ResNet-50 WebCrawler QWEN Quantization Proxy LoRA 公式 NLTK Freesound Base64 NameSilo Qwen 飞书 Random Algorithm Pandas BTC tqdm Nginx OpenAI v0.dev SPIE 强化学习 TSV Pickle UNIX v2ray DeepSeek Google 音频 CEIR Password Data Tensor TensorFlow 腾讯云 printf Food RAR Tiktoken Animate LaTeX git Crawler News Datetime Augmentation Domain XGBoost Agent Markdown Card Interview CC 递归学习法 Bipartite Zip uWSGI YOLO Translation MD5 Magnet Baidu Hotel GPTQ SVR Math tar Breakpoint LLM Streamlit 财报 Qwen2 SQLite CAM Heatmap Distillation 图标 Qwen2.5 Hilton Disk BF16 CUDA ONNX
站点统计

本站现有博文333篇,共被浏览918753

本站已经建立2624天!

热门文章
文章归档
回到顶部