LLaMA架构
Large Language Model Meta AI
概述
LLaMA是Meta于2023年开源的大语言模型系列,采用Decoder-only Transformer架构, 通过一系列架构优化在较小参数量下实现了出色的性能。LLaMA的开源开启了开源大模型时代, 成为后续众多开源模型的基础。
核心贡献:证明了经过充分训练的小模型可以匹敌更大的模型,推动开源大模型发展。
架构特点
1. RMSNorm归一化
LLaMA使用RMSNorm替代传统的LayerNorm:
# LayerNorm
LN(x) = (x - μ) / σ * γ + β
# RMSNorm(更简单,无需均值和方差计算)
RMSNorm(x) = x / √(mean(x²) + ε) * γ
RMSNorm计算更高效,且在LLM训练中表现稳定。
2. SwiGLU激活函数
将传统FFN的激活函数替换为SwiGLU:
# 传统FFN
FFN(x) = ReLU(xW₁ + b₁)W₂ + b₂
# SwiGLU FFN
SwiGLU(x) = Swish(xW₁) ⊙ (xW₂) * W₃
# 其中 Swish(x) = x * sigmoid(x)
注:SwiGLU增加了参数量(三个投影矩阵),但带来更好的性能。
3. 旋转位置编码 (RoPE)
使用旋转位置编码替代绝对位置编码:
- 通过旋转矩阵编码位置信息
- 支持相对位置,更好的长度外推
- 计算效率高,无需学习位置嵌入
# RoPE核心公式
R_θ,d(x) = [x1, x2] * [cos θ, -sin θ; sin θ, cos θ]
# θ = position * base^(-2i/d)
4. 分组查询注意力 (GQA)
LLaMA 2及之后版本使用GQA加速推理:
- LLaMA 1:使用标准多头注意力(MHA)
- LLaMA 2/3:使用分组查询注意力(GQA)
- KV Cache减少,推理速度提升
模型规格
| 模型 | 维度 | 层数 | 注意力头 | 参数量 |
|---|---|---|---|---|
| LLaMA-7B | 4096 | 32 | 32 | 7B |
| LLaMA-13B | 5120 | 40 | 40 | 13B |
| LLaMA-33B | 6656 | 60 | 52 | 33B |
| LLaMA-65B | 8192 | 80 | 64 | 65B |
训练数据
LLaMA使用公开数据集训练,总token数约1.4T:
| 数据来源 | Token数 | 占比 |
|---|---|---|
| CommonCrawl | 674B | 48% |
| C4 | 170B | 12% |
| Github | 95B | 7% |
| Wikipedia | 77B | 5% |
| Books | 89B | 6% |
| ArXiv | 27B | 2% |
| StackExchange | 20B | 1% |
LLaMA系列演进
| 版本 | 发布时间 | 主要改进 | 上下文长度 |
|---|---|---|---|
| LLaMA 1 | 2023.02 | 基础架构 | 2048 |
| LLaMA 2 | 2023.07 | GQA、更长上下文、对话版本 | 4096 |
| LLaMA 3 | 2024.04 | 更大词表、更强性能 | 8192 |
| LLaMA 3.1 | 2024.07 | 128K上下文、405B版本 | 128K |
代码示例
from transformers import AutoModelForCausalLM, AutoTokenizer
# 加载LLaMA模型
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b-hf",
device_map="auto",
torch_dtype="auto"
)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")
# 生成文本
prompt = "The future of artificial intelligence is"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=100,
temperature=0.7,
do_sample=True
)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))性能对比
| 基准测试 | LLaMA-7B | LLaMA-13B | LLaMA-65B | Chinchilla-70B |
|---|---|---|---|---|
| MMLU | 35.1 | 46.9 | 63.4 | 67.5 |
| HellaSwag | 76.1 | 81.1 | 85.3 | 86.2 |
| PIQA | 79.8 | 80.7 | 82.8 | 82.8 |
| WinoGrande | 70.0 | 73.0 | 77.0 | 77.5 |
架构影响
LLaMA架构已成为开源大模型的事实标准:
- Vicuna、Alpaca:基于LLaMA微调的对话模型
- Codellama:LLaMA的代码特化版本
- Mistral:继承LLaMA架构,加入创新
- Falcon、Qwen:采用类似架构设计
最佳实践
- 使用预训练模型进行微调时,保持架构不变
- 推理时利用GQA优势(LLaMA 2+)
- 使用RoPE支持更长上下文
- 量化部署时注意RMSNorm的数值稳定性
- 中文任务建议使用经过中文增强的版本
参考资料
- LLaMA: Open and Efficient Foundation Language Models (Touvron et al., 2023)
- LLaMA 2: Open Foundation and Fine-Tuned Chat Models (Touvron et al., 2023)
- Meta AI LLaMA Official Repository
----