自学内容网 自学内容网

LLama 架构一览

 


论文:LLama

论文:LLama 2

 


预训练

 


Transformer 架构

Transformer 可视化分析 + 大模型推理策略:非常新颖的题材,发展也是一步一个脚印,没有那种一蹴而就的浮躁感

Llama 架构:
在这里插入图片描述
在整体框架层面,Llama 2 仍然属于典型的 Transformer 家族(即自注意力机制 + 前馈网络的堆叠),但在具体实现细节与超参数选择上,和“标准”Transformer(例如最初的《Attention is All You Need》或 GPT 系列)相比,Llama 2 做了若干改进与调整。

以下从几个核心组件的角度来介绍它们的异同:


  1. 基本结构:编码器-解码器 vs. 仅解码器
  • 标准 Transformer
    最初提出时包含了编码器(Encoder)和解码器(Decoder)两部分,尤其在机器翻译等序列到序列 (seq2seq) 任务中同时使用。后续在大模型演进中,GPT 系列等更多聚焦于“仅解码器”结构(decoder-only),去生成下一个 token。

  • Llama 2
    与 GPT 类似,采用 decoder-only 架构,用于自回归地预测下一时刻的 token,专注于生成任务。同时在解码器的注意力结构中,一般会采用因果掩码 (causal mask) 来保证模型只能“看到”已经生成或输入的 tokens,从而执行生成任务。

小结:
Llama 2 只使用解码器堆叠,在整体思路上和 GPT 系列更相似,也与最初的“标准”Transformer 相比精简了编码器模块。


  1. 注意力机制:多头自注意力 + 因果掩码
  • 标准 Transformer
    使用多头自注意力 (Multi-Head Self-Attention)。对于解码器部分,在训练或推理时加入因果掩码 (masked self-attention) 以保证模型只能关注先前时刻的 token。

  • Llama 2
    依旧采用多头自注意力机制 + 因果掩码,但在实现中会结合一些改进:

    1. 旋转位置编码(RoPE, Rotary Positional Embedding):不使用绝对位置编码,也不是单纯的可学习位置嵌入,而是将旋转变换注入到注意力计算中,增强了模型在长序列上的建模能力。
    2. 更大上下文长度和更高效的注意力实现:相较早期模型,Llama 2 优化了序列并行计算,加大了可处理的上下文长度,以更好地适应大规模推理场景。

小结:
在自注意力计算核⼼思路不变的情况下,Llama 2 针对位置编码和大规模上下文适配做了优化,以提升长序列建模和推理效率。


  1. 前馈网络:SwiGLU / Gated 激活
  • 标准 Transformer
    最初使用的前馈网络 (Feed-Forward Network, FFN) 通常是简单的两层线性映射 + ReLU 激活,或在某些改进版本中使用 GELU、Swish 等激活函数。

  • Llama 2
    倾向于采用 SwiGLU(或其他类似的 gated 激活结构)来替代传统的 ReLU/GELU。这种 gated 激活通常能带来更好的数值稳定性和表达能力,对训练大规模模型时的收敛速度和性能有更佳的帮助。

小结:
Llama 2 通过使用更先进的激活函数 (如 SwiGLU) 提升了前馈网络部分的性能。


  1. 归一化层:RMSNorm vs. LayerNorm
  • 标准 Transformer
    默认使用 Layer Normalization (LayerNorm),在注意力和前馈网络之前/之后进行归一化。

  • Llama 2
    改用了 RMSNorm(Root Mean Square Layer Normalization)来替代常规的 LayerNorm。RMSNorm 的表达式与 LayerNorm 类似,但只使用特征向量的均方根值进行缩放,而不进行均值平移。这样做通常可以带来以下好处:

    1. 简化了归一化操作,减少参数量。
    2. 在大模型训练时可能更稳定,提高训练速度并减少梯度爆炸/消失的风险。

小结:
Llama 2 通过 RMSNorm 提升了训练的稳定性和效率,这是和一般“标准”Transformer 最大的实现细节区别之一。


  1. 模型规模与训练细节
  • 标准 Transformer
    最初论文规模较小 (几千万到上亿参数量),后来各家在演进中不断扩展到数十亿、上千亿参数量,同时在预训练阶段使用大规模的文本数据。

  • Llama 2
    共有多种规模(7B、13B、70B 等),属于千亿级以下到数百亿级的主流大模型。其训练过程:

    1. 预训练:使用海量高质量语料进行自监督预训练,参数规模和数据规模都较大。
    2. 微调:包括监督微调(SFT)和指令微调 (Instruction Tuning) 等,以增强在问答、生成、推理等任务上的表现。
    3. 对齐与安全性:使用 RLHF(人类反馈强化学习)等技术,对模型回答的可信度、合规性进行进一步优化。

小结:
Llama 2 针对大规模数据训练,并对安全与对齐方面做了大量工程化优化,这些并不属于 Transformer 架构本身的变化,但与标准小模型或早期版本对比,Llama 2 在规模和训练策略上体现出“大模型”特征。


  1. 总结

相同点

  1. 都基于 Transformer 的自注意力机制和前馈网络堆叠,是当前主流的序列建模框架。
  2. 对解码器部分都使用了因果掩码,以保证在生成任务上只能访问历史信息。

不同点

  1. 位置编码:Llama 2 采用旋转位置编码 (RoPE) 等改进,相比最初 Transformer 的绝对或可学习位置编码,更适应长序列。
  2. 归一化层:Llama 2 使用 RMSNorm 替代 LayerNorm,简化运算并增强训练稳定性。
  3. 前馈网络:Llama 2 常用 SwiGLU 等 Gated 激活函数,较早期 Transformer 的 ReLU/GELU 有更好效果。
  4. 规模与应用:Llama 2 针对大规模参数和大规模预训练做了大量工程化和安全性方面的优化,与最初的标准 Transformer 相比,更侧重于在通用对话、文本生成任务上的性能与对齐。

简而言之,Llama 2 仍属于 Transformer 框架下的解码器模型,但通过在位置编码、归一化层、激活函数、训练规模等方面的改进,进一步提升了大模型在生成任务中的性能、稳定性和适用性。

 


RMSNorm 归一化:为什么大模型llama选RMSNorm,而不是其他?

论文:https://arxiv.org/pdf/1910.07467

归一化作用:把数据按比例缩放到特定区间,如 [0, 1],有助于训练加速。

像餐厅标准化食材处理,不管原料大小不一,最终都要切成统一大小,便于烹饪和控制火候。

太大的食材还没熟,小的食材都炖烂了。

LLama 2 论文有实验,对比各种方法,发现这个最好。

RMSNorm:比 LayerNorm 更简洁,计算代价更低,且在大模型中能带来更稳定、更高效的训练。

 

4.1 背景
归一化层(Normalization)在深度网络中至关重要,常见的方法包括 LayerNorm、BatchNorm、RMSNorm 等。

  • BatchNorm:较早在 CNN 中广泛使用,但在 NLP Transformer 中往往不如 LayerNorm 适合。
  • LayerNorm:在 NLP 领域使用非常普遍,通过对每个样本内部的特征进行均值-方差归一化,提升了训练稳定性。
  • RMSNorm:只使用向量的 均方根(Root Mean Square) 进行归一化,不执行减均值操作。

4.2 RMSNorm 的核心思路
RMSNorm 省略了对均值的计算和减去均值的步骤,只进行向量的范数(特别是 L2 范数)操作并缩放。其公式形如:

  • [ RMSNorm ( x ) = x R M S ( x ) ⊙ γ ] [ \text{RMSNorm}(x) = \frac{x}{\mathrm{RMS}(x)} \odot \gamma ] [RMSNorm(x)=RMS(x)xγ]

其中 R M S ( x ) = 1 n ∑ x i 2 \mathrm{RMS}(x) = \sqrt{\frac{1}{n}\sum x_i^2} RMS(x)=n1xi2 γ \gamma γ 为可学习的缩放参数。

4.3 RMSNorm 相比 LayerNorm 的优势

  1. 更高的训练效率:去掉对均值的计算可以减少一部分计算开销,计算和内存占用更少。
  2. 训练更稳定:一些研究和实践表明,RMSNorm 在大模型场景中往往比 LayerNorm 具备更好的梯度稳定性。
  3. 简化操作:RMSNorm 结构更简洁,减少无关的噪声干扰,有利于大模型的高效训练和推理。

因此,Llama2 选用 RMSNorm 来取代 LayerNorm,主要原因在于它在大规模模型中表现出了更好的训练稳定性与更高的计算效率,同时能保持甚至改善模型性能。

 


SwiGLU 激活函数:为什么大模型llama选SwiGLU激活函数,而不是其他?

LLama 2 论文有实验,对比各种方法,发现这个最好。

SwiGLU:相比于传统激活函数 (ReLU/GELU),SwiGLU 结合了门控和非线性,能带来更强的表达能力和更稳定的训练过程。

1.1 背景
在深度学习中,激活函数会显著影响模型的收敛速度、稳定性和表达能力。常见的激活函数包括 ReLU、GELU、SwiGLU 等。

  • ReLU:在大模型中容易出现梯度消失或“死亡 ReLU”问题,且表达能力有限。
  • GELU:在 Transformer 结构中较为常见,性能稳定,但仍有一定改进空间。
  • SwiGLU:是 SwiGLU(Switch-GLU) 的简写,属于 GLU(Gated Linear Unit)系列激活函数的一种改进形式。

1.2 SwiGLU 的核心思路

  • 和传统的 GELU 或者 ReLU 不同,SwiGLU 采用了“门控”(gating) 的思想,将输入分成两个分支:一个分支通过线性变换后直接输出,另一个分支通过激活函数(如 SiLU 等)后再相乘。
  • 这种“门控+非线性”的组合能让网络在不显著增加参数开销的情况下,获得更丰富的特征表达能力。

1.3 SwiGLU 相比其他激活函数的优势

  1. 表达力更强:门控机制可以选择性地保留或抑制部分特征,从而提升模型的表示能力。
  2. 训练更稳定:相比一些传统激活函数(如 ReLU),SwiGLU 在大规模模型中往往带来更平滑的梯度和更稳定的训练过程。
  3. 实际实验效果更好:Meta 在内部测试中发现 SwiGLU 更有助于在更大模型规模下达到较低的损失值和较好的下游任务表现。
     

 


RoPE 旋转位置编码:为什么大模型llama选RoPE 旋转位置编码,而不是其他?

LLama 2 论文有实验,对比各种方法,发现这个最好。

RoPE:与传统正余弦/可学习位置编码相比,RoPE 利用旋转嵌入能更好地处理长序列,并保留相对位置信息,具有更强的外推性。

 

2.1 背景
在 Transformer 中,需要给序列中的每个位置注入位置信息,以打破序列中向量表示的对称性。常见的位置编码方式包括:

  • 绝对位置编码 (APE):如原始 Transformer 论文中的正余弦编码
  • 可学习的位置嵌入 (Learnable PE)
  • RoPE (Rotary Position Embedding)
  • ALiBi (Attention Linear Bias) 等

2.2 RoPE 的核心思路
RoPE (Rotary Position Embeddings) 的做法是通过在多维空间中对向量进行旋转,实现与序列位置相关的相位变换。

  • 将注意力机制中的查询(Q)和键(K)向量分别乘以不同的复数旋转因子,从而在自注意力计算中编码位置信息。
  • RoPE 能够在点乘阶段自然地将位置信息纳入,而且对于序列长度的扩展更为灵活。

2.3 RoPE 相比其他位置编码的优势

  1. 更好的长序列扩展性:RoPE 不需要专门重新训练或插值,就能较好地外推到更长的序列,适用于大模型需要处理更长上下文的场景。
  2. 保留序列的相对位置信息:RoPE 的旋转机制天生保留了相对位置的结构特性,对于部分需要相对位置信息的任务更有效。
  3. 与注意力机制紧密结合:它直接作用于 Q/K 的特征向量,在多头注意力计算时自然而然保留旋转后的位置信息。

因此,Llama2 采用 RoPE 而非传统的固定正余弦或可学习编码,主要是因为 RoPE 在更长序列上的泛化能力和相对位置建模效果更好,从而提升了对长文本场景的适应性。

 


GQA 分组查询注意力:为什么大模型llama选GQA 分组查询注意力,而不是其他?

LLama 2 论文有实验,对比各种方法,发现这个最好。

GQA:相较于标准多头注意力,GQA 在大规模场景下能减少冗余并提升内存和计算效率,同时保持良好的性能。

 
3.1 背景
在多头注意力(Multi-Head Attention)中,通常会将查询 Q、键 K、和值 V 分别切分为多个头,然后在不同的头之间并行计算注意力。随着模型规模的增大,多头注意力也带来了相应的计算和内存开销。

3.2 GQA(Grouped Query Attention)的核心思路

  • 与标准多头注意力相比,GQA 在查询维度上进行分组,对不同组的查询共享一定的投影或注意力结构,从而减少参数和计算量。
  • 其核心动机是:对大模型来说,某些头的查询向量在功能上可能存在冗余,通过分组共享,可以降低计算复杂度。

3.3 GQA 相比传统多头注意力的优势

  1. 减少参数和计算开销:GQA 将模型的多头查询参数进行分组,共享部分权重,可以有效减少内存占用与计算量。
  2. 保持或提升性能:在大模型场景中,一定程度的参数共享不会显著损害注意力的表达能力,反而可以带来训练更稳定、推理更快的收益。
  3. 更好的可扩展性:对于数百亿或千亿级别参数规模的模型,减少注意力层的冗余能使模型在相同硬件上扩展到更大规模,或者在相同规模下获得更好的效率。

因此,Llama2 之所以选择 GQA,主要是因为它在大规模环境下能有效节省资源、简化注意力结构,同时保持甚至提升在各类 NLP 任务上的效果。

 


KV Cache 推理加速

在自回归(Autoregressive)语言模型的推理(Inference)阶段,KV Cache(Key-Value Cache)是指在推理过程中将模型的「注意力键(Key)」和「注意力值(Value)」缓存起来,以减少重复计算、显著提升推理效率的一种技术手段。

它常被用于 GPT 系列、Llama 系列等 Transformer 解码器模型的推理环节,尤其在多轮对话或需要生成较长序列的场景中,能带来显著加速效果。


  1. KV Cache 的原理

  2. 自回归生成:
    语言模型在解码时,会一次只生成一个 Token,然后将这个 Token 追加到输入序列,再继续生成下一个 Token。这就导致在推理阶段,如果不加任何缓存,每个新 Token 的生成都要在注意力机制中重新计算对过去所有 Token 的注意力。

  3. 多头自注意力:
    在解码器的自注意力机制中,需要计算当前时刻 ( t ) 的查询向量 ( Q ) 与所有历史时刻(从 ( 1 ) 到 ( t-1 ))的键向量 ( K ) 的相似度,以得到注意力权重,再根据历史时刻的值向量 ( V ) 进行加权求和。这些 ( K ) 和 ( V ) 取决于历史输入的输出表示。

  4. 重复计算问题:
    当生成序列越来越长时,每新生成一个 Token,都需要重复计算之前所有位置的 ( K ) 和 ( V )。这样会导致推理开销不断累积,效率非常低。

  5. 缓存(KV Cache)思路:

    • 在每次生成新 Token 时,将上一时刻或所有已生成的 Token 对应的 ( K ) 和 ( V ) 向量缓存起来。
    • 下一个 Token 计算注意力时,不需要重新计算所有历史 Token 的 ( K ) 和 ( V ),只要在缓存中“直接读取”即可。
    • 新生成的 Token 的 ( K ) 和 ( V ) 会被追加到缓存中,供后续时刻继续复用。

简而言之:KV Cache 能避免对已生成 Token 的重复计算,极大减少推理时的计算量。对于多轮对话或长文本生成,随着序列长度不断增长,使用 KV Cache 的加速效果会越来越明显。


  1. KV Cache 在推理中的应用场景

  2. 多轮对话场景:

    • 在对话中,模型需要多次接收新输入(包括用户多轮提问和自身生成的内容),并生成新的回答。
    • 如果没有 KV Cache,每次回答都要重新对整个对话历史进行注意力计算,浪费大量算力。
    • 使用 KV Cache 后,前面每一句对话的注意力键值都已缓存,能大幅降低每轮的推理时间。
  3. 长文本生成:

    • 如写文章、编故事、代码补全等需要一次性生成很长内容的场景。
    • 随着生成的内容越来越多,序列长度成百上千,不缓存就要不断对所有先前 Token 做重复注意力计算。
    • KV Cache 通过增量维护键值向量,使得时间复杂度从“与序列长度平方级”变为“只新增少量计算”,节省了大量推理资源。
  4. 流式推理

    • 许多在线应用采用流式方式,模型每次生成少量 Token 立即返回给用户,提高交互速度。
    • KV Cache 可以让每个增量生成的步骤在常数级别的注意力开销下完成,而不必反复计算全部上下文。

  1. KV Cache 的技术实现要点

  2. 缓存结构设计:

    • 通常将每一层多头注意力的 ( K ) 和 ( V ) 分别存储在大小为 ((\text{batch size}, \text{num heads}, \text{sequence length}, \text{head dim})) 的张量中。
    • 每生成一个新 Token,就在该张量对应位置追加新的 ( K ) 和 ( V )。
  3. 增量式更新

    • 对于第 ( t ) 个 Token,模型只需要计算第 ( t ) 的 ( Q, K, V )(针对当前 Token),然后和缓存中的前 ( t-1 ) 个 ( K, V ) 一起做注意力。
    • 计算完成后,将第 ( t ) 的 ( K, V ) 存入缓存,等待第 ( t+1 ) 次调用。
  4. 内存占用和优化

    • 虽然 KV Cache 减少了重复计算,但依然需要在内存/显存中保留所有历史 Token 的 ( K, V ) 矩阵。
    • 对于超长序列或超大模型,这个缓存可能非常大,需要结合分片存储、混合精度、量化等手段来降低内存占用。
  5. 框架支持

    • 主流深度学习推理框架(如 PyTorch、TensorFlow,以及各种推理引擎)都提供了基于 KV Cache 的推理加速 API 或示例。
    • 如在 PyTorch 中,通过 generate()past_key_values 等参数实现对历史注意力键值的缓存与复用。

  1. KV Cache 的优势与局限

4.1 优势

  1. 显著加速推理:对序列长度 ( L ) 较长或需要多轮对话时,减少了大量重复计算。
  2. 降低推理时延:能够在同等硬件条件下,为用户提供更低的响应时间,提升交互式体验。
  3. 节约计算资源:减少算力浪费,也能在相同硬件上支撑更多并发请求,提升吞吐量。

4.2 局限/问题

  1. 内存开销增加:随着序列长度增长,要保存的 ( K, V ) 矩阵也逐渐变大,占用大量 GPU/CPU 内存。
  2. 只适用于自回归推理:KV Cache 针对的是自回归生成,若是需要其他推理方式(如一次性双向编码器推理),意义不大。
  3. 实现复杂度:需要在推理框架中修改/接入缓存逻辑,对工程实现提出一定要求。

  1. 总结
  • 概念:KV Cache 即在 Transformer 解码器的自注意力中,将历史 Token 的键(Key)和值(Value)向量进行缓存,避免重复计算。
  • 好处:对长序列生成和多轮对话场景,能将推理效率显著提高,缩短响应时延。
  • 实现:在推理时增量更新 Key、Value,新的 Token 只需和缓存中已有 Token 的 Key-Value 做注意力,不必重复计算之前的表示。
  • 挑战:在大模型与超长序列情况下,KV Cache 占用内存显著,需要结合内存管理和量化等优化措施。

对于任何基于 Transformer 解码器、采用自回归生成范式的大模型(GPT、Llama 等),KV Cache 都是核心的推理加速技术,也几乎是工业界 LLM 产品在生产环境中必备的优化手段之一。
 


llama、llama2、llama3 区别

 



原文地址:https://blog.csdn.net/qq_41739364/article/details/145159050

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!