Google Gemma 2 版本說明
Google Gemma 2 版本說明 Google 已發布 Gemma 2,這是一個基於 Google DeepMind Gemini 的新一代開放權重大型語言模型(LLM)家族。此發佈包含四個模型:9 億(9B)與 27 億(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 引入四項關鍵技術,以提升生成品質與訓練穩定性:
Sliding Window Attention
Gemma 2 採用混合注意力機制。它在每隔一層的全二次全域注意力(覆蓋 8,192 token)之間,交錯使用滑動視窗注意力(覆蓋 4,096 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 注意力以確保微調穩定。
Knowledge Distillation
9B 模型在預訓練階段使用知識蒸餾,由較大的教師模型提供更豐富的訊號供學生模型學習。於後訓練階段,團隊採用「在策略蒸餾」(on-policy distillation)。此過程中,學生模型根據 SFT 提示產生完成,並最小化教師與學生 logits 之間的 KL 散度,以減少訓練與推論之間的差異。
Model Merging via WARP
Gemma 2 採用稱為 WARP 的合併技術,分三個階段結合模型:
- Exponential Moving Average (EMA):於 RL 微調期間套用。
- Spherical Linear intERPolation (SLERP):於多策略 RL 微調後套用。
- Linear Interpolation Towards Initialization (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 |
實作與部署
Prompting
指令微調版使用特定的對話結構,必須完全照搬才能發揮效能:
<start_of_turn>user [Prompt]<end_of_turn> <start_of_turn>model [Response]<end_of_turn>
硬體需求與量化
- Gemma 2 9B:大約需要 18 GB 記憶體。
- Gemma 2 27B:在 bfloat16 模式下大約需要 56 GB 記憶體。
為降低記憶體占用,模型可載入 4 位元或 8 位元模式。27B 版本在 4 位元下約佔用 18 GB 記憶體。對於 27B 指令微調模型,必須使用 bfloat16,因為 float16 可能產生不穩定的輸出。
微調
微調可使用 Hugging Face 的 TRL 套件搭配 QLoRA。若針對 PEFT 調整線性層,建議聚焦於注意力模組(q_proj, k_proj, v_proj, o_proj),而非 MLP 層,因為 MLP 層較為稀疏且與 PEFT 的相容性較差。