Google Gemma 2 发布说明
Google 已发布 Gemma 2,这是一系列开放权重的大语言模型,提供 9B 和 27B 参数规模,采用蒸馏和注意力机制等技术创新以提升性能。
模型规格与训练
Gemma 2 提供两种主要规模,上下文长度为 8,192 token,使用 Rotary Position Embedding (RoPE)。相较于首代 Gemma,模型在更大规模的数据上进行训练:27B 模型使用 13 万亿 token,9B 模型使用 8 万亿 token,数据来源包括网页、代码和数学。
- gemma-2-9b:基础 9B 模型
- gemma-2-9b-it:指令微调 9B 模型
- gemma-2-27b:基础 27B 模型
- gemma-2-27b-it:指令微调 27B 模型
技术创新
Gemma 2 引入四项关键技术进步,以提升生成质量和训练稳定性:
滑动窗口注意力
Gemma 2 采用混合注意力机制。它在每隔一层的情况下交替使用滑动窗口注意力(覆盖 4,096 token)和全二次全局注意力(覆盖 8,192 token)。此设计旨在在长上下文场景下保持高质量,同时获得滑动窗口注意力的效率优势。
Logit Soft-Capping
为防止 logits 过度增长并稳定训练,Gemma 2 使用软上限。Logits 通过公式 logits → soft_cap * tanh(logits/soft_cap) 缩放到固定范围。
- Attention layers:上限 50.0
- Final layer:上限 30.0
需注意,软上限目前与 Flash Attention/SDPA 在训练期间不兼容;因此,推荐使用 eager 注意力以实现稳定的微调。
知识蒸馏
9B 模型在预训练阶段采用知识蒸馏,由更大的教师模型提供更丰富的信号供学生模型学习。后期训练使用“on-policy 蒸馏”。在此过程中,学生模型根据 SFT 提示生成完成文本,并最小化教师与学生 logits 之间的 KL 散度,以降低训练‑推理不匹配。
通过 WARP 合并模型
Gemma 2 使用一种名为 WARP 的合并技术,将模型在三个阶段进行融合:
- 指数移动平均 (EMA):在 RL 微调期间应用。
- 球面线性插值 (SLERP):在多个策略的 RL 微调之后应用。
- 线性插值至初始化 (LITI):在 SLERP 阶段之后应用。
性能评估
根据技术报告,Gemma 2 在与其他开源模型的对比中表现出竞争力。
大模型对比
| 基准 | Llama 3 (70B) | Qwen 1.5 (32B) | Gemma 2 (27B) |
|---|---|---|---|
| MMLU | 79.2 | 74.3 | 75.2 |
| GSM8K | 76.9 | 61.1 | 75.1 |
| ARC-c | 68.8 | 63.6 | 71.4 |
| HellaSwag | 88.0 | 85.0 | 86.4 |
| Winogrande | 85.3 | 81.5 | 83.7 |
小模型对比
| 基准 | Mistral (7B) | Llama 3 (8B) | Gemma (8B) | Gemma 2 (9B) |
|---|---|---|---|---|
| MMLU | 62.5 | 66.6 | 64.4 | 71.3 |
| GSM8K | 34.5 | 45.7 | 50.9 | 62.3 |
| ARC-C | 60.5 | 59.2 | 61.1 | 68.4 |
| HellaSwag | 83.0 | 82.0 | 82.3 | 81.9 |
| Winogrande | 78.5 | 78.5 | 79.0 | 80.6 |
实现与部署
提示
指令微调版本使用特定的对话结构,必须严格复现才能发挥效果:
<start_of_turn>user [Prompt]<end_of_turn> <start_of_turn>model [Response]<end_of_turn>
硬件需求与量化
- Gemma 2 9B:需要约 18 GB RAM。
- Gemma 2 27B:需要约 56 GB RAM(bfloat16)。
为降低内存占用,模型可在 4 位或 8 位模式下加载。27B 版本在 4 位模式下约占用 18 GB 内存。对 27B 指令微调模型必须使用 bfloat16,因为 float16 可能导致输出不稳定。
微调
微调可使用 Hugging Face TRL 库配合 QLoRA 实现。针对 PEFT 时,建议将注意力块(q_proj, k_proj, v_proj, o_proj)作为线性层的目标,而非稀疏且与 PEFT 兼容性差的 MLP 层。