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 的合并技术,将模型在三个阶段进行融合:

  1. 指数移动平均 (EMA):在 RL 微调期间应用。
  2. 球面线性插值 (SLERP):在多个策略的 RL 微调之后应用。
  3. 线性插值至初始化 (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 层。

Sources