Google 釋出了最新的開放大語言模型 Gemma 2,我們非常高興與 Google 合作,確保其在 Hugging Face 生態系統中的最佳整合。你可以在 Hub 上找到 4 個開源模型(2 個基礎模型和 2 個微調模型)。釋出的功能和整合包括:
- Hub 上的模型
- Hugging Face Transformers 整合
- 與 Google Cloud 和推理端點的整合
Gemma 2 是什麼?
Gemma 2 是 Google 最新的開放大語言模型。它有兩種規模:90 億引數和 270 億引數,分別具有基礎(預訓練)和指令調優版本。Gemma 基於 Google DeepMind 的 Gemini,擁有 8K Tokens 的上下文長度:
- gemma-2-9b: 90 億基礎模型。
- gemma-2-9b-it: 90 億基礎模型的指令調優版本。
- gemma-2-27b: 270 億基礎模型。
- gemma-2-27b-it: 270 億基礎模型的指令調優版本。
Gemma 2 模型的訓練資料量約為其第一代的兩倍,總計 13 萬億 Tokens(270 億模型)和 8 萬億 Tokens(90 億模型)的網頁資料(主要是英語)、程式碼和數學資料。我們不知道訓練資料混合的具體細節,只能猜測更大和更仔細的資料整理是效能提高的重要因素之一。
Gemma 2 與第一代使用相同的許可證,這是一個允許再分發、微調、商業用途和衍生作品的寬鬆許可證。
Gemma 2 的技術進展
Gemma 2 與第一代有許多相似之處。它有 8192 Tokens 的上下文長度,並使用旋轉位置嵌入 (RoPE)。與原始 Gemma 相比,Gemma 2 的主要進展有四點:
- 滑動視窗注意力: 交替使用滑動視窗和全二次注意力以提高生成質量。
- Logit 軟上限: 透過將 logits 縮放到固定範圍來防止其過度增長,從而改進訓練。
- 知識蒸餾: 利用較大的教師模型來訓練較小的模型(適用於 90 億模型)。
- 模型合併: 將兩個或多個大語言模型合併成一個新的模型。
Gemma 2 使用 JAX 和 ML Pathways 在 Google Cloud TPU (27B on v5p 和 9B on TPU v4) 上進行訓練。Gemma 2 Instruct 已針對對話應用進行了最佳化,並使用監督微調 (SFT)、大模型蒸餾、人類反饋強化學習 (RLHF) 和模型合併 (WARP) 來提高整體效能。
與預訓練資料集混合類似,關於微調資料集或與 SFT 和 RLHF 相關的超引數的細節尚未共享。
滑動視窗注意力
滑動視窗注意力 是一種用於減少 Transformer 模型中注意力計算的記憶體和時間需求的方法,已在 Mistral 等模型中使用。Gemma 2 的新穎之處在於每隔一層應用滑動視窗(區域性 - 4096 Tokens),而中間層仍使用全域性二次注意力(8192 Tokens)。我們推測這是為了在長上下文情況下提高質量(半數層仍然關注所有 Tokens),同時部分受益於滑動注意力的優勢。
軟上限和注意力實現
軟上限是一種防止 logits 過度增長而不截斷它們的技術。它透過將 logits 除以最大值閾值 (soft_cap
),然後透過 tanh
層(確保它們在 (-1, 1)
範圍內),最後再乘以閾值。這確保了最終值在 (-soft_cap, +soft_cap)
區間內,不會丟失太多資訊但穩定了訓練。
綜合起來,logits 的計算公式為:logits ← soft_cap ∗ tanh(logits/soft_cap)
Gemma 2 對最終層和每個注意力層都採用了軟上限。注意力 logits 上限為 50.0,最終 logits 上限為 30.0。
在釋出時,軟上限與 Flash Attention / SDPA 不相容,但它們仍可用於推理以實現最高效率。Gemma 2 團隊觀察到,在推理過程中不使用軟上限機制時,差異非常小。
注意:對於穩定的微調執行,仍需啟用軟上限,因此我們建議使用 eager
注意力進行微調,而不是 SDPA。
知識蒸餾
知識蒸餾是一種常用技術,用於訓練較小的 學生 模型以模仿較大但表現更好的 教師 模型的行為。這是透過將大語言模型的下一個 Token 預測任務與教師提供的 Token 機率分佈(例如 GPT-4、Claude 或 Gemini)結合起來,從而為學生提供更豐富的學習訊號。
根據 Gemma 2 技術報告,知識蒸餾用於預訓練 90 億模型,而 270 億模型則是從頭開始預訓練的。
在後期訓練中,Gemma 2 團隊生成了來自教師(報告中未指定,但可能是 Gemini Ultra)的多樣化補全集,然後使用這些合成資料透過 SFT 訓練學生模型。這也是許多開源模型的基礎,如 Zephyr 和 OpenHermes,它們完全基於較大大語言模型的合成資料進行訓練。
儘管有效,但這種方法存在缺點,因為學生和教師之間的模型容量不匹配可能導致 訓練-推理不匹配,即學生在推理期間生成的文字與訓練期間看到的文字不同。
為解決這個問題,Gemma 2 團隊採用了“線上蒸餾”,其中學生從 SFT 提示生成補全。這些補全用於計算教師和學生 logits 之間的 KL 散度。透過在整個訓練過程中最小化 KL 散度,學生能夠準確地模擬教師的行為,同時最小化訓練-推理不匹配。
這種方法非常有趣,正如我們在社群中看到的那樣,線上 DPO 等線上方法會產生更強的模型,而線上蒸餾的一個優勢在於只需要教師的 logits,因此無需依賴獎勵模型或大語言模型作為評審員來改進模型。我們期待看到這種方法在未來幾個月中是否會在微調人員中變得更受歡迎!
模型合併
模型合併 是一種將兩個或多個大語言模型合併成一個新模型的技術。這是相對較新和實驗性的,可以不使用加速器進行。Mergekit 是一個流行的開源工具包,用於合併大語言模型。它實現了線性、SLERP、TIES、DARE 和其他合併技術。
根據技術報告,Gemma 2 使用了 Warp,這是一種新型合併技術,分三個獨特階段進行合併:
- 指數移動平均 (EMA):在強化學習 (RL) 微調過程中應用。
- 球形線性插值 (SLERP):在多個策略的 RL 微調後應用。
- 向初始化線性插值 (LITI):在 SLERP 階段之後應用。
Gemma 2 的評估
Gemma 模型的表現如何?以下是根據技術報告和新版 開源 LLM 排行榜 對其他開源開放模型的效能比較。
技術報告結果
Gemma 2 的技術報告比較了不同開源 LLM 在之前開源 LLM 排行榜基準上的效能。
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 |
該報告還比較了小型語言模型的效能。
Benchmark | 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 |
開源 LLM 排行榜結果
注意:我們目前正在新的開源 LLM 排行榜基準上單獨評估 Google Gemma 2,並將在今天晚些時候更新此部分。
如何提示 Gemma 2
基礎模型沒有提示格式。像其他基礎模型一樣,它們可以用於繼續輸入序列的合理延續或零樣本/少樣本推理。指令版本有一個非常簡單的對話結構:
<start_of_turn>user
knock knock<end_of_turn>
<start_of_turn>model
who is there<end_of_turn>
<start_of_turn>user
LaMDA<end_of_turn>
<start_of_turn>model
LaMDA who?<end_of_turn><eos>
必須精確地複製此格式才能有效使用。稍後我們將展示如何使用 transformers
中的聊天模板輕鬆地複製指令提示。
演示
你可以在 Hugging Chat 上與 Gemma 27B 指令模型聊天!檢視此連結:
https://huggingface.co/chat/models/google/gemma-2-27b-it
使用 Hugging Face Transformers
隨著 Transformers 版本 4.42 的釋出,你可以使用 Gemma 並利用 Hugging Face 生態系統中的所有工具。要使用 Transformers 使用 Gemma 模型,請確保使用最新的 transformers
版本:
pip install "transformers==4.42.0" --upgrade
以下程式碼片段展示瞭如何使用 transformers
使用 gemma-2-9b-it
。它需要大約 18 GB 的 RAM,適用於許多消費者 GPU。相同的程式碼片段適用於 gemma-2-27b-it
,需要 56GB 的 RAM,使其非常適合生產用例。透過載入 8-bit 或 4-bit 模式,可以進一步減少記憶體消耗。
from transformers import pipeline
import torch
pipe = pipeline(
"text-generation",
model="google/gemma-2-9b-it",
model_kwargs={"torch_dtype": torch.bfloat16},
device="cuda",
)
messages = [
{"role": "user", "content": "Who are you? Please, answer in pirate-speak."},
]
outputs = pipe(
messages,
max_new_tokens=256,
do_sample=False,
)
assistant_response = outputs[0]["generated_text"][-1]["content"]
print(assistant_response)
啊哈,船長!我是數字海洋上的一艘謙卑的詞語之船。他們叫我 Gemma,是 Google DeepMind 的傑作。我被訓練在一堆文字寶藏上,學習如何像一個真正的海盜一樣說話和寫作。
問我你的問題吧,我會盡力回答,啊哈!🦜📚
我們使用 bfloat16 因為這是指令調優模型的參考精度。在你的硬體上執行 float16 可能會更快,90 億模型的結果應該是相似的。然而,使用 float16 時,270 億指令調優模型會產生不穩定的輸出:對於該模型權重,你必須使用 bfloat16。
你還可以自動量化模型,以 8-bit 甚至 4-bit 模式載入。載入 4-bit 模式的 270 億版本需要大約 18 GB 的記憶體,使其相容許多消費者顯示卡和 Google Colab 中的 GPU。這是你在 4-bit 模式下載入生成管道的方式:
pipeline = pipeline(
"text-generation",
model=model,
model_kwargs={
"torch_dtype": torch.bfloat16,
"quantization_config": {"load_in_4bit": True}
},
)
有關使用 Transformers 模型的更多詳細資訊,請檢視模型卡。
與 Google Cloud 和推理端點的整合
注意:我們目前正在為 GKE 和 Vertex AI 新增新的容器,以高效執行 Google Gemma 2。我們將在容器可用時更新此部分。
其他資源
- Hub 上的模型
- 開放 LLM 排行榜
- Hugging Chat 上的聊天演示
- Google 部落格
- Google Notebook 即將推出
- Vertex AI 模型花園 即將推出
致謝
在生態系統中釋出此類模型及其支援和評估離不開許多社群成員的貢獻,包括 Clémentine 和 Nathan 對 LLM 的評估;Nicolas 對文字生成推理的支援;Arthur、Sanchit、Joao 和 Lysandre 對 Gemma 2 整合到 Transformers 中的支援;Nathan 和 Victor 使 Gemma 2 在 Hugging Chat 中可用。
感謝 Google 團隊釋出 Gemma 2 並使其對開源 AI 社群開放!