Google 發布了最新的開放大語言模型 Gemma 2,我們非常高興與 Google 合作,確保其在 Hugging Face 生態系統中的最佳集成。你可以在 Hub 上找到 4 個開源模型 (2 個基礎模型和 2 個微調模型) 。發布的功能和集成包括:
Hub 上的模型https://hf.co/collections/google/g-667d6600fd5220e7b967f315
Hugging FaceTransformers 集成https://github.com/huggingface/transformers/releases/tag/v4.42.0
與 Google Cloud 和推理端點的集成
Gemma 2 是什么?
Gemma 2 是 Google 最新的開放大語言模型。它有兩種規模:90 億參數和 270 億參數,分別具有基礎 (預訓練) 和指令調優版本。Gemma 基于 Google DeepMind 的 Gemini,擁有 8K Tokens 的上下文長度:
gemma-2-9bhttps://hf.co/google/gemma-2-9b90 億基礎模型。
gemma-2-9b-ithttps://hf.co/google/gemma-2-9b-it90 億基礎模型的指令調優版本。
gemma-2-27bhttps://hf.co/google/gemma-2-27b270 億基礎模型。
gemma-2-27b-ithttps://hf.co/google/gemma-2-27b-it270 億基礎模型的指令調優版本。
Gemma 2 模型的訓練數據量約為其第一代的兩倍,總計 13 萬億 Tokens (270 億模型) 和 8 萬億 Tokens (90 億模型) 的網頁數據 (主要是英語) 、代碼和數學數據。我們不知道訓練數據混合的具體細節,只能猜測更大和更仔細的數據整理是性能提高的重要因素之一。
Gemma 2 與第一代使用相同的許可證,這是一個允許再分發、微調、商業用途和衍生作品的寬松許可證。
立刻在 Hugging Chat 里體驗 Gemma2
https://hf.co/chat/models/google/gemma-2-27b-it
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) 來提高整體性能。
JAXhttps://jax.readthedocs.io/en/latest/quickstart.html
ML Pathwayshttps://blog.google/technology/ai/introducing-pathways-next-generation-ai-architecture/
Google Cloud TPU 27B on v5phttps://cloud.google.com/blog/products/ai-machine-learning/introducing-cloud-tpu-v5p-and-ai-hypercomputer?hl=en
9B on TPU v4https://cloud.google.com/tpu/docs/v4
與預訓練數據集混合類似,關于微調數據集或與 SFT 和RLHF相關的超參數的細節尚未共享。
RLHFhttps://hf.co/blog/rlhf
滑動窗口注意力
滑動窗口注意力是一種用于減少 Transformer 模型中注意力計算的內存和時間需求的方法,已在Mistral等模型中使用。Gemma 2 的新穎之處在于每隔一層應用滑動窗口 (局部 - 4096 Tokens) ,而中間層仍使用全局二次注意力 (8192 Tokens) 。我們推測這是為了在長上下文情況下提高質量 (半數層仍然關注所有 Tokens) ,同時部分受益于滑動注意力的優勢。
滑動窗口注意力https://hf.co/papers/2004.05150
Mistralhttps://hf.co/papers/2310.06825
軟上限和注意力實現
軟上限是一種防止 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,它們完全基于較大大語言模型的合成數據進行訓練。
Zephyrhttps://hf.co/HuggingFaceH4/zephyr-7b-beta
OpenHermeshttps://hf.co/teknium/OpenHermes-2.5-Mistral-7B
盡管有效,但這種方法存在缺點,因為學生和教師之間的模型容量不匹配可能導致 訓練-推理不匹配,即學生在推理期間生成的文本與訓練期間看到的文本不同。
為解決這個問題,Gemma 2 團隊采用了“在線蒸餾”,其中學生從 SFT 提示生成補全。這些補全用于計算教師和學生 logits 之間的 KL 散度。通過在整個訓練過程中最小化 KL 散度,學生能夠準確地模擬教師的行為,同時最小化訓練-推理不匹配。
“在線蒸餾”https://arxiv.org/pdf/2306.13649
這種方法非常有趣,正如我們在社區中看到的那樣,在線 DPO 等在線方法會產生更強的模型,而在線蒸餾的一個優勢在于只需要教師的 logits,因此無需依賴獎勵模型或大語言模型作為評審員來改進模型。我們期待看到這種方法在未來幾個月中是否會在微調人員中變得更受歡迎!
模型合并
模型合并是一種將兩個或多個大語言模型合并成一個新模型的技術。這是相對較新和實驗性的,可以不使用加速器進行。Mergekit是一個流行的開源工具包,用于合并大語言模型。它實現了線性、SLERP、TIES、DARE 和其他合并技術。
模型合并https://hf.co/blog/mlabonne/merge-models
Mergekithttps://github.com/arcee-ai/mergekit
根據技術報告,Gemma 2 使用了Warp,這是一種新型合并技術,分三個獨特階段進行合并:
Warphttps://arxiv.org/abs/2406.16768
指數移動平均 (EMA):在強化學習 (RL) 微調過程中應用。
球形線性插值 (SLERP):在多個策略的 RL 微調后應用。
向初始化線性插值 (LITI):在 SLERP 階段之后應用。
Gemma 2 的評估
Gemma 模型的表現如何?以下是根據技術報告和新版開源 LLM 排行榜對其他開源開放模型的性能比較。
開源 LLM 排行榜https://hf.co/spaces/HuggingFaceH4/open_llm_leaderboard
技術報告結果
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://hf.co/chat/models/google/gemma-2-27b-it
使用 Hugging Face Transformers
隨著 Transformers版本 4.42的發布,你可以使用 Gemma 并利用 Hugging Face 生態系統中的所有工具。要使用 Transformers 使用 Gemma 模型,請確保使用最新的 transformers
版本:
版本 4.42https://github.com/huggingface/transformers/releases/tag/v4.42.0
pip?install?"transformers==4.42.1"?--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?torchpipe?=?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 模型的更多詳細信息,請查看模型卡。
模型卡https://hf.co/gg-hf/gemma-2-9b
與 Google Cloud 和推理端點的集成
注意:我們目前正在為 GKE 和 Vertex AI 添加新的容器,以高效運行 Google Gemma 2。我們將在容器可用時更新此部分。
其他資源
Hub 上的模型https://hf.co/collections/google/g-667d6600fd5220e7b967f315
開放 LLM 排行榜https://hf.co/spaces/HuggingFaceH4/open_llm_leaderboard
Hugging Chat 上的聊天演示https://hf.co/chat/models/google/gemma-2-27b-it
Google 博客https://blog.google/technology/developers/google-gemma-2/
Google Notebook 即將推出
Vertex AI 模型花園 即將推出
致謝
在生態系統中發布此類模型及其支持和評估離不開許多社區成員的貢獻,包括Clémentine和Nathan對 LLM 的評估;Nicolas對文本生成推理的支持;Arthur、Sanchit、Joao和Lysandre對 Gemma 2 集成到 Transformers 中的支持;Nathan和Victor使 Gemma 2 在 Hugging Chat 中可用。
Clémentinehttps://hf.co/clefourrier
Nathanhttps://hf.co/SaylorTwift
Nicolashttps://hf.co/Narsil
Arthurhttps://hf.co/ArthurZ
Sanchithttps://hf.co/sanchit-gandhi
Joaohttps://hf.co/joaogante
Lysandrehttps://hf.co/lysandre
Nathanhttps://hf.co/nsarrazin
Victorhttps://hf.co/victor
感謝 Google 團隊發布 Gemma 2!