LLama 架构一览
- 预训练
- Transformer 架构
- RMSNorm 归一化:为什么大模型llama选RMSNorm,而不是其他?
- SwiGLU 激活函数:为什么大模型llama选SwiGLU激活函数,而不是其他?
- RoPE 旋转位置编码:为什么大模型llama选RoPE 旋转位置编码,而不是其他?
- GQA 分组查询注意力:为什么大模型llama选GQA 分组查询注意力,而不是其他?
- KV Cache 推理加速
- llama、llama2、llama3 区别
论文:LLama
论文:LLama 2
Transformer 可视化分析 + 大模型推理策略:非常新颖的题材,发展也是一步一个脚印,没有那种一蹴而就的浮躁感
Llama 架构:
在整体框架层面,Llama 2 仍然属于典型的 Transformer 家族(即自注意力机制 + 前馈网络的堆叠),但在具体实现细节与超参数选择上,和“标准”Transformer(例如最初的《Attention is All You Need》或 GPT 系列)相比,Llama 2 做了若干改进与调整。
以下从几个核心组件的角度来介绍它们的异同:
标准 Transformer
最初提出时包含了编码器(Encoder)和解码器(Decoder)两部分,尤其在机器翻译等序列到序列 (seq2seq) 任务中同时使用。后续在大模型演进中,GPT 系列等更多聚焦于“仅解码器”结构(decoder-only),去生成下一个 token。
Llama 2
与 GPT 类似,采用 decoder-only 架构,用于自回归地预测下一时刻的 token,专注于生成任务。同时在解码器的注意力结构中,一般会采用因果掩码 (causal mask) 来保证模型只能“看到”已经生成或输入的 tokens,从而执行生成任务。
小结:
Llama 2 只使用解码器堆叠,在整体思路上和 GPT 系列更相似,也与最初的“标准”Transformer 相比精简了编码器模块。
标准 Transformer
使用多头自注意力 (Multi-Head Self-Attention)。对于解码器部分,在训练或推理时加入因果掩码 (masked self-attention) 以保证模型只能关注先前时刻的 token。
Llama 2
依旧采用多头自注意力机制 + 因果掩码,但在实现中会结合一些改进:
小结:
在自注意力计算核⼼思路不变的情况下,Llama 2 针对位置编码和大规模上下文适配做了优化,以提升长序列建模和推理效率。
标准 Transformer
最初使用的前馈网络 (Feed-Forward Network, FFN) 通常是简单的两层线性映射 + ReLU 激活,或在某些改进版本中使用 GELU、Swish 等激活函数。
Llama 2
倾向于采用 SwiGLU(或其他类似的 gated 激活结构)来替代传统的 ReLU/GELU。这种 gated 激活通常能带来更好的数值稳定性和表达能力,对训练大规模模型时的收敛速度和性能有更佳的帮助。
小结:
Llama 2 通过使用更先进的激活函数 (如 SwiGLU) 提升了前馈网络部分的性能。
标准 Transformer
默认使用 Layer Normalization (LayerNorm),在注意力和前馈网络之前/之后进行归一化。
Llama 2
改用了 RMSNorm(Root Mean Square Layer Normalization)来替代常规的 LayerNorm。RMSNorm 的表达式与 LayerNorm 类似,但只使用特征向量的均方根值进行缩放,而不进行均值平移。这样做通常可以带来以下好处:
小结:
Llama 2 通过 RMSNorm 提升了训练的稳定性和效率,这是和一般“标准”Transformer 最大的实现细节区别之一。
标准 Transformer
最初论文规模较小 (几千万到上亿参数量),后来各家在演进中不断扩展到数十亿、上千亿参数量,同时在预训练阶段使用大规模的文本数据。
Llama 2
共有多种规模(7B、13B、70B 等),属于千亿级以下到数百亿级的主流大模型。其训练过程:
小结:
Llama 2 针对大规模数据训练,并对安全与对齐方面做了大量工程化优化,这些并不属于 Transformer 架构本身的变化,但与标准小模型或早期版本对比,Llama 2 在规模和训练策略上体现出“大模型”特征。
相同点
不同点
简而言之,Llama 2 仍属于 Transformer 框架下的解码器模型,但通过在位置编码、归一化层、激活函数、训练规模等方面的改进,进一步提升了大模型在生成任务中的性能、稳定性和适用性。
论文:https://arxiv.org/pdf/1910.07467
归一化作用:把数据按比例缩放到特定区间,如 [0, 1],有助于训练加速。
像餐厅标准化食材处理,不管原料大小不一,最终都要切成统一大小,便于烹饪和控制火候。
太大的食材还没熟,小的食材都炖烂了。
LLama 2 论文有实验,对比各种方法,发现这个最好。
RMSNorm:比 LayerNorm 更简洁,计算代价更低,且在大模型中能带来更稳定、更高效的训练。
4.1 背景
归一化层(Normalization)在深度网络中至关重要,常见的方法包括 LayerNorm、BatchNorm、RMSNorm 等。
4.2 RMSNorm 的核心思路
RMSNorm 省略了对均值的计算和减去均值的步骤,只进行向量的范数(特别是 L2 范数)操作并缩放。其公式形如:
其中 R M S ( x ) = 1 n ∑ x i 2 \mathrm{RMS}(x) = \sqrt{\frac{1}{n}\sum x_i^2} RMS(x)=n1∑xi2, γ \gamma γ 为可学习的缩放参数。
4.3 RMSNorm 相比 LayerNorm 的优势
因此,Llama2 选用 RMSNorm 来取代 LayerNorm,主要原因在于它在大规模模型中表现出了更好的训练稳定性与更高的计算效率,同时能保持甚至改善模型性能。
LLama 2 论文有实验,对比各种方法,发现这个最好。
SwiGLU:相比于传统激活函数 (ReLU/GELU),SwiGLU 结合了门控和非线性,能带来更强的表达能力和更稳定的训练过程。
1.1 背景
在深度学习中,激活函数会显著影响模型的收敛速度、稳定性和表达能力。常见的激活函数包括 ReLU、GELU、SwiGLU 等。
1.2 SwiGLU 的核心思路
1.3 SwiGLU 相比其他激活函数的优势
LLama 2 论文有实验,对比各种方法,发现这个最好。
RoPE:与传统正余弦/可学习位置编码相比,RoPE 利用旋转嵌入能更好地处理长序列,并保留相对位置信息,具有更强的外推性。
2.1 背景
在 Transformer 中,需要给序列中的每个位置注入位置信息,以打破序列中向量表示的对称性。常见的位置编码方式包括:
2.2 RoPE 的核心思路
RoPE (Rotary Position Embeddings) 的做法是通过在多维空间中对向量进行旋转,实现与序列位置相关的相位变换。
2.3 RoPE 相比其他位置编码的优势
因此,Llama2 采用 RoPE 而非传统的固定正余弦或可学习编码,主要是因为 RoPE 在更长序列上的泛化能力和相对位置建模效果更好,从而提升了对长文本场景的适应性。
LLama 2 论文有实验,对比各种方法,发现这个最好。
GQA:相较于标准多头注意力,GQA 在大规模场景下能减少冗余并提升内存和计算效率,同时保持良好的性能。
3.1 背景
在多头注意力(Multi-Head Attention)中,通常会将查询 Q、键 K、和值 V 分别切分为多个头,然后在不同的头之间并行计算注意力。随着模型规模的增大,多头注意力也带来了相应的计算和内存开销。
3.2 GQA(Grouped Query Attention)的核心思路
3.3 GQA 相比传统多头注意力的优势
因此,Llama2 之所以选择 GQA,主要是因为它在大规模环境下能有效节省资源、简化注意力结构,同时保持甚至提升在各类 NLP 任务上的效果。
在自回归(Autoregressive)语言模型的推理(Inference)阶段,KV Cache(Key-Value Cache)是指在推理过程中将模型的「注意力键(Key)」和「注意力值(Value)」缓存起来,以减少重复计算、显著提升推理效率的一种技术手段。
它常被用于 GPT 系列、Llama 系列等 Transformer 解码器模型的推理环节,尤其在多轮对话或需要生成较长序列的场景中,能带来显著加速效果。
KV Cache 的原理
自回归生成:
语言模型在解码时,会一次只生成一个 Token,然后将这个 Token 追加到输入序列,再继续生成下一个 Token。这就导致在推理阶段,如果不加任何缓存,每个新 Token 的生成都要在注意力机制中重新计算对过去所有 Token 的注意力。
多头自注意力:
在解码器的自注意力机制中,需要计算当前时刻 ( t ) 的查询向量 ( Q ) 与所有历史时刻(从 ( 1 ) 到 ( t-1 ))的键向量 ( K ) 的相似度,以得到注意力权重,再根据历史时刻的值向量 ( V ) 进行加权求和。这些 ( K ) 和 ( V ) 取决于历史输入的输出表示。
重复计算问题:
当生成序列越来越长时,每新生成一个 Token,都需要重复计算之前所有位置的 ( K ) 和 ( V )。这样会导致推理开销不断累积,效率非常低。
缓存(KV Cache)思路:
简而言之:KV Cache 能避免对已生成 Token 的重复计算,极大减少推理时的计算量。对于多轮对话或长文本生成,随着序列长度不断增长,使用 KV Cache 的加速效果会越来越明显。
KV Cache 在推理中的应用场景
多轮对话场景:
长文本生成:
流式推理
KV Cache 的技术实现要点
缓存结构设计:
增量式更新
内存占用和优化
框架支持
generate()
、past_key_values
等参数实现对历史注意力键值的缓存与复用。4.1 优势
4.2 局限/问题
对于任何基于 Transformer 解码器、采用自回归生成范式的大模型(GPT、Llama 等),KV Cache 都是核心的推理加速技术,也几乎是工业界 LLM 产品在生产环境中必备的优化手段之一。