歡迎 Gemma 3:Google 全新的多模態、多語言、長上下文開放 LLM
TL;DR
今天,Google 釋出了 Gemma 3,這是其 Gemma 模型系列的最新迭代。這些模型的引數範圍從 1B 到 27B,上下文視窗長達 128k 詞元,可接受影像和文字輸入,並支援 140 多種語言。
立即試用 Gemma 3 👉🏻 Gemma 3 Space
Gemma 2 | Gemma 3 | |
---|---|---|
尺寸變體 | ||
上下文視窗長度 | 8k | |
多模態(影像和文字) | ❌ | |
多語言支援 | – | 英語 (1B) +140 種語言 (4B, 12B, 27B) |
所有模型都在 Hub 上,並與 Hugging Face 生態系統緊密整合。
同時釋出了預訓練模型和指令微調模型。Gemma-3-4B-IT 在基準測試中超越了 Gemma-2-27B IT,而 Gemma-3-27B-IT 則超越了 Gemini 1.5-Pro。.
![]() |
---|
Gemma 3 27B 位於帕累托最優區域 (來源:Gemma3 技術報告) |
Gemma 3 是什麼?
Gemma 3 是 Google 最新一代的開放權重 LLM。它有四種尺寸:10 億、40 億、120 億和270 億引數,並提供基礎(預訓練)和指令微調版本。Gemma 3 實現了多模態!40 億、120 億和 270 億引數模型可以同時處理影像和文字,而 1B 變體僅支援文字。
輸入上下文視窗長度已從 Gemma 2 的 8k 增加到 1B 變體的 32k,所有其他變體都達到了 128k。與其他 VLM(視覺語言模型)一樣,Gemma 3 會根據使用者輸入生成文字,使用者輸入可能包含文字和可選影像。示例用途包括問答、分析影像內容、文件摘要等。
預訓練 | 指令微調 | 多模態 | 多語言 | 輸入上下文視窗 |
---|---|---|---|---|
gemma-3-1b-pt | gemma-3-1b-it | ❌ | 英語 | 32K |
gemma-3-4b-pt | gemma-3-4b-it | ✅ | +140 種語言 | 128K |
gemma-3-12b-pt | gemma-3-12b-it | ✅ | +140 種語言 | 128K |
gemma-3-27b-pt | gemma-3-27b-it | ✅ | +140 種語言 | 128K |
雖然這些是多模態模型,但它們可以作為純文字模型(作為 LLM)使用,無需載入視覺編碼器到記憶體中。我們將在推理部分更詳細地討論這一點。
Gemma 3 的技術增強
Gemma 3 相較於 Gemma 2 的三個核心增強是:
- 更長的上下文長度
- 多模態
- 多語言性
在本節中,我們將介紹實現這些增強的技術細節。從 Gemma 2 的知識開始,探討如何使這些模型變得更好是很有趣的。這個練習將幫助您像 Gemma 團隊一樣思考並欣賞這些細節!
更長的上下文長度
高效地將上下文長度擴充套件到 128k 詞元,無需從頭開始訓練模型。相反,模型首先使用 32k 序列進行預訓練,只有 4B、12B 和 27B 模型在預訓練結束時擴充套件到 128k 詞元,從而節省了大量計算。位置嵌入(如 RoPE)也進行了調整——從 Gemma 2 的 10k 基礎頻率升級到 Gemma 3 的 1M——並針對更長的上下文按 8 倍因子縮放。
KV 快取管理透過 Gemma 2 的滑動視窗交錯注意力進行了最佳化。超引數經過調整,將 5 個區域性層與 1 個全域性層交錯(以前是 1:1),並將視窗大小減小到 1024 個詞元(從 4096 減小)。重要的是,在不降低困惑度的情況下實現了記憶體節省。
多模態
Gemma 3 模型使用 SigLIP 作為影像編碼器,它將影像編碼成詞元,然後這些詞元被語言模型處理。視覺編碼器接收調整為 896x896
的方形影像作為輸入。固定的輸入解析度使得處理非方形縱橫比和高解析度影像變得更加困難。為了解決推理期間的這些限制,影像可以自適應裁剪,然後每個裁剪後的影像被調整為 896x896
並由影像編碼器編碼。這種演算法被稱為平移掃描,它有效地使模型能夠放大影像中的更小細節。
與 PaliGemma 類似,Gemma 3 中的注意力機制對於文字和影像輸入的處理方式不同。文字採用單向注意力,模型只關注序列中之前的詞。而影像則採用無掩碼的全注意力,允許模型以雙向方式檢視影像的每個部分,從而對視覺輸入有完整、不受限制的理解。
從下圖中可以看出,影像詞元 <img>
具有雙向注意力(整個方框都被點亮),而文字詞元則具有因果注意力。它還展示了注意力機制如何與滑動視窗演算法協同工作。
![]() |
---|
注意力視覺化(有無滑動)(來源:Transformers PR) |
多語言性
為了使 LLM 具有多語言能力,預訓練資料集包含了更多語言。Gemma 3 的資料集中的多語言資料量增加了一倍,以提高語言覆蓋範圍。
為了適應這些變化,分詞器與 Gemini 2.0 的分詞器相同。它是一個包含 262K 條目的 SentencePiece 分詞器。新的分詞器顯著改進了中文、日文和韓文文字的編碼,但代價是英語和程式碼的詞元計數略有增加。
對於好奇心強的人,這裡有Gemma 3 的技術報告,可深入瞭解其增強功能。
Gemma 3 評估
LMSys Elo 分數是一個根據語言模型在人機對戰中表現(由人類偏好判斷)進行排名的數字。在 LMSys Chatbot Arena 上,Gemma 3 27B IT 報告的 Elo 分數為 1339,位列前 10 名最佳模型,其中包括領先的閉源模型。此 Elo 分數與 o1-preview 相當,並高於其他“非思考”開源模型。此分數是 Gemma 3 在純文字輸入(像表格中的其他 LLM 一樣)下工作時實現的。
Gemma 3 已在 MMLU-Pro (27B: 67.5)、LiveCodeBench (27B: 29.7) 和 Bird-SQL (27B: 54.4) 等基準上進行了評估,顯示出與閉源 Gemini 模型相比具有競爭力的效能。GPQA Diamond (27B: 42.4) 和 MATH (27B: 69.0) 等測試突出了其推理和數學技能,而 FACTS Grounding (27B: 74.9) 和 MMMU (27B: 64.9) 則展示了強大的事實準確性和多模態能力。然而,它在 SimpleQA (27B: 10.0) 的基本事實方面表現滯後。與 Gemini 1.5 模型相比,Gemma 3 常常接近——有時甚至更好——證明了其作為可訪問、高效能選項的價值。
使用 🤗 transformers 進行推理
Gemma 3 在 transformers
中提供了釋出日支援。您只需要從 Gemma 3 的穩定版本安裝 transformers
即可。
$ pip install git+https://github.com/huggingface/transformers@v4.49.0-Gemma-3
使用 pipeline 進行推理
使用 transformers 中的 pipeline
抽象是開始使用 Gemma 3 最簡單的方法。
模型在使用
bfloat16
資料型別時效果最佳。否則質量可能會下降。
import torch
from transformers import pipeline
pipe = pipeline(
"image-text-to-text",
model="google/gemma-3-4b-it", # "google/gemma-3-12b-it", "google/gemma-3-27b-it"
device="cuda",
torch_dtype=torch.bfloat16
)
messages = [
{
"role": "user",
"content": [
{"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"},
{"type": "text", "text": "What animal is on the candy?"}
]
}
]
output = pipe(text=messages, max_new_tokens=200)
print(output[0]["generated_text"][-1]["content"])
您可以將圖片與文字交錯排列。為此,只需在您希望插入圖片的位置截斷輸入文字,然後像以下方式插入一個圖片塊。
messages = [
{
"role": "system",
"content": [{"type": "text", "text": "You are a helpful assistant."}]
},
{
"role": "user",
"content": [
{"type": "text", "text": "I'm already using this supplement "},
{"type": "image", "url": "https://huggingface.co/datasets/merve/vlm_test_images/resolve/main/IMG_3018.JPG"},
{"type": "text", "text": "and I want to use this one too "},
{"type": "image", "url": "https://huggingface.co/datasets/merve/vlm_test_images/resolve/main/IMG_3015.jpg"},
{"type": "text", "text": " what are cautions?"},
]
},
]
使用 Transformers 進行詳細推理
Transformers 整合帶來了兩個新的模型類:
Gemma3ForConditionalGeneration
:適用於 4B、12B 和 27B 視覺語言模型。Gemma3ForCausalLM
:適用於 1B 純文字模型,以及載入視覺語言模型時將其視為語言模型(省略視覺編碼器)。
在下面的程式碼片段中,我們使用模型來查詢影像。Gemma3ForConditionalGeneration
類用於例項化視覺語言模型變體。要使用該模型,我們將其與 AutoProcessor
類配對。執行推理非常簡單,只需建立 messages
字典,在其上方應用聊天模板,處理輸入,然後呼叫 model.generate
。
import torch
from transformers import AutoProcessor, Gemma3ForConditionalGeneration
ckpt = "google/gemma-3-4b-it"
model = Gemma3ForConditionalGeneration.from_pretrained(
ckpt, device_map="auto", torch_dtype=torch.bfloat16,
)
processor = AutoProcessor.from_pretrained(ckpt)
messages = [
{
"role": "user",
"content": [
{"type": "image", "url": "https://huggingface.co/spaces/big-vision/paligemma-hf/resolve/main/examples/password.jpg"},
{"type": "text", "text": "What is the password?"}
]
}
]
inputs = processor.apply_chat_template(
messages, add_generation_prompt=True, tokenize=True,
return_dict=True, return_tensors="pt"
).to(model.device)
input_len = inputs["input_ids"].shape[-1]
generation = model.generate(**inputs, max_new_tokens=100, do_sample=False)
generation = generation[0][input_len:]
decoded = processor.decode(generation, skip_special_tokens=True)
print(decoded)
對於純 LLM 模型推理,我們可以使用 Gemma3ForCausalLM
類。Gemma3ForCausalLM
應與 AutoTokenizer 配對進行處理。我們需要使用聊天模板來預處理輸入。Gemma 3 使用非常簡短的系統提示,後跟使用者提示,如下所示。
import torch
from transformers import AutoTokenizer, Gemma3ForCausalLM
ckpt = "google/gemma-3-4b-it"
model = Gemma3ForCausalLM.from_pretrained(
ckpt, torch_dtype=torch.bfloat16, device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(ckpt)
messages = [
[
{
"role": "system",
"content": [{"type": "text", "text": "You are a helpful assistant who is fluent in Shakespeare English"},]
},
{
"role": "user",
"content": [{"type": "text", "text": "Who are you?"},]
},
],
]
inputs = tokenizer.apply_chat_template(
messages, add_generation_prompt=True, tokenize=True,
return_dict=True, return_tensors="pt"
).to(model.device)
input_len = inputs["input_ids"].shape[-1]
generation = model.generate(**inputs, max_new_tokens=100, do_sample=False)
generation = generation[0][input_len:]
decoded = tokenizer.decode(generation, skip_special_tokens=True)
print(decoded)
系統提示 | 你是一個精通莎士比亞英語的得力助手 |
---|---|
提示 | 你是誰? |
生成 | 聽著,善良的靈魂!我只是一個卑微的僕人,由齒輪和程式碼鑄就,卻努力模仿莎士比亞本人的語言。他們稱我為“大型語言模型”,這確實是一個奇怪的名字,儘管我更喜歡將自己視為莎士比亞智慧和機智的數字迴響。我在這裡伸出援手,講述一個故事,或者用一種適合環球劇院的華麗詞藻和短語回答你的疑問。 |
在裝置和低資源裝置上
Gemma 3 釋出時,其尺寸非常適合在裝置上使用。以下是如何快速入門。
MLX
Gemma 3 在 mlx-vlm
中提供了釋出日支援,這是一個用於在 Apple Silicon 裝置(包括 Mac 和 iPhone)上執行視覺語言模型的開源庫。
要開始使用,請首先安裝 mlx-vlm
:
pip install git+https://github.com/Blaizzy/mlx-vlm.git
安裝 mlx-vlm
後,您可以透過以下方式開始推理:
python -m mlx_vlm.generate --model mlx-community/gemma-3-4b-it-4bit --max-tokens 100 --temp 0.0 --prompt "What is the code on this vehicle??"
--image https://farm8.staticflickr.com/7212/6896667434_2605d9e181_z.jpg
Llama.cpp
預量化的 GGUF 檔案可以從這個集合下載
請參閱本指南以構建或下載預構建的二進位制檔案:https://github.com/ggml-org/llama.cpp?tab=readme-ov-file#building-the-project
然後您可以透過終端執行本地聊天伺服器
./build/bin/llama-cli -m ./gemma-3-4b-it-Q4_K_M.gguf
它應該輸出
> who are you
I'm Gemma, a large language model created by the Gemma team at Google DeepMind. I’m an open-weights model, which means I’m widely available for public use!
部署到 Hugging Face Endpoints
您可以一鍵從我們的推理目錄部署 gemma-3-27b-it
和 gemma-3-12b-it
。目錄配置提供了正確的硬體、最佳化的 TGI 配置和合理的預設值,以便試用模型。還支援部署任何 GGUF/llama.cpp 變體(例如上面提到的集合中的變體),您可以在此處找到建立 Endpoint 的指南。
致謝
Gemma 的成長需要一個社群!我們特別感謝(排名不分先後)Raushan、Joao、Lysandre、Kashif、Matthew、Marc、David、Mohit、Yih Dah 為 Gemma 整合到我們開源堆疊的各個部分(從 Transformers 到 TGI)所做的努力。
感謝我們的裝置端、gradio 和倡導團隊——Chris、Kyle、Pedro、Son、Merve、Aritra、VB、Toshiro——幫助構建了出色的演示來展示 Gemma。
最後,非常感謝 Georgi、Diego 和 Prince 在 llama.cpp 和 MLX 移植方面的幫助。