歡迎 Gemma 3:Google 全新的多模態、多語言、長上下文開放 LLM

釋出日期:2025 年 3 月 12 日
在 GitHub 上更新

TL;DR

今天,Google 釋出了 Gemma 3,這是其 Gemma 模型系列的最新迭代。這些模型的引數範圍從 1B 到 27B,上下文視窗長達 128k 詞元,可接受影像和文字輸入,並支援 140 多種語言。

立即試用 Gemma 3 👉🏻 Gemma 3 Space

Gemma 2 Gemma 3
尺寸變體
  • 2B
  • 9B
  • 27B
  • 1B
  • 4B
  • 12B
  • 27B
  • 上下文視窗長度 8k
  • 32k (1B)
  • 128k (4B, 12B, 27B)
  • 多模態(影像和文字)
  • ❌ (1B)
  • ✅ (4B, 12B, 27B)
  • 多語言支援 英語 (1B) +140 種語言 (4B, 12B, 27B)

    所有模型都在 Hub 上,並與 Hugging Face 生態系統緊密整合。

    同時釋出了預訓練模型和指令微調模型。Gemma-3-4B-IT 在基準測試中超越了 Gemma-2-27B IT,而 Gemma-3-27B-IT 則超越了 Gemini 1.5-Pro。.

    pareto graph
    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> 具有雙向注意力(整個方框都被點亮),而文字詞元則具有因果注意力。它還展示了注意力機制如何與滑動視窗演算法協同工作。

    attention visualization
    注意力視覺化(有無滑動)(來源: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 一樣)下工作時實現的。

    chat bot arena
    Gemma 3 27B IT 模型在 Chatbot Arena 中的評估 (2025 年 3 月 8 日)

    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 常常接近——有時甚至更好——證明了其作為可訪問、高效能選項的價值。

    performance of it models
    IT 模型的效能

    使用 🤗 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"])
    
    影像 candies on hand
    提示 糖果上是什麼動物?
    生成 讓我們來分析圖片中的糖果!糖果上的動物是烏龜。您可以清楚地看到烏龜的殼、頭部和腿印在糖果表面。

    您可以將圖片與文字交錯排列。為此,只需在您希望插入圖片的位置截斷輸入文字,然後像以下方式插入一個圖片塊。

    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 整合帶來了兩個新的模型類:

    1. Gemma3ForConditionalGeneration:適用於 4B、12B 和 27B 視覺語言模型。
    2. 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)
    
    影像 receipt of wifi
    提示 密碼是什麼?
    生成 根據圖片,密碼是 aaeu

    對於純 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
    
    影像 airplane
    提示 車上的程式碼是什麼?
    生成 根據圖片顯示,該飛行器是一架塞斯納 172 Skyhawk。機尾上的註冊程式碼是 D-EOJU

    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-itgemma-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 移植方面的幫助。

    社群

    我會等 Fireship 的影片。

    ·

    沒有 fireship 影片

    好棒!

    期待它在 Ollama 上可用!

    ·

    Ollama 已經可用

    終於,這是我期待已久的 Google 詩意迴歸。

    聽起來很棒 😘

    此評論已被隱藏

    無法從這裡建立 sagemaker 端點。

    我不知道為什麼,但在我的 macos 上我無法執行它……
    ```
    python -m mlx_vlm.generate --model mlx-community/gemma-3-4b-it-4bit --max-tokens 100 --temperature 0.0 --prompt "Describe this image." --image https://farm8.staticflickr.com/7212/6896667434_2605d9e181_z.jpg
    未找到 PyTorch、TensorFlow >= 2.0 或 Flax。模型將不可用,只能使用分詞器、配置和檔案/資料工具。
    未找到 PyTorch、TensorFlow >= 2.0 或 Flax。模型將不可用,只能使用分詞器、配置和檔案/資料工具。
    正在獲取 9 個檔案:100%|████████████████████████████████████████████████████| 9/9 [00:00<00:00, 90742.15it/s]

    檔案:['https://farm8.staticflickr.com/7212/6896667434_2605d9e181_z.jpg']

    提示:描述此影像。
    追溯(最近一次呼叫在最後)
    檔案 "",第 198 行,在 _run_module_as_main 中
    檔案 "",第 88 行,在 _run_code 中
    檔案 "/Users/xxxxxx/Projects/mlx/venv-3.12/lib/python3.12/site-packages/mlx_vlm/generate.py",第 156 行,在
    主函式()
    檔案 "/Users/xxxxx/Projects/mlx/venv-3.12/lib/python3.12/site-packages/mlx_vlm/generate.py",第 141 行,在 main 中
    輸出 = 生成(
    ^^^^^^^^^
    檔案 "/Users/xxxx/Projects/mlx/venv-3.12/lib/python3.12/site-packages/mlx_vlm/utils.py",第 1117 行,在 generate 中
    對於 stream_generate(model, processor, prompt, image, **kwargs) 中的響應
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    檔案 "/Users/xxxx/Projects/mlx/venv-3.12/lib/python3.12/site-packages/mlx_vlm/utils.py",第 1018 行,在 stream_generate 中
    輸入 = 準備_輸入(
    ^^^^^^^^^^^^^^^
    檔案 "/Users/xxxx/Projects/mlx/venv-3.12/lib/python3.12/site-packages/mlx_vlm/utils.py",第 814 行,在 prepare_inputs 中
    輸入 = 處理器(
    ^^^^^^^^^^
    檔案 "/Users/xxxxx/Projects/mlx/venv-3.12/lib/python3.12/site-packages/transformers/tokenization_utils_base.py",第 2877 行,在 call
    編碼 = self._call_one(text=text, text_pair=text_pair, **all_kwargs)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    檔案 "/Users/xxxx/Projects/mlx/venv-3.12/lib/python3.12/site-packages/transformers/tokenization_utils_base.py",第 2987 行,在 _call_one 中
    返回 self.encode_plus(
    ^^^^^^^^^^^^^^^^^
    檔案 "/Users/xxxx/Projects/mlx/venv-3.12/lib/python3.12/site-packages/transformers/tokenization_utils_base.py",第 3063 行,在 encode_plus 中
    返回 self._encode_plus(
    ^^^^^^^^^^^^^^^^^^
    檔案 "/Users/xxxx/Projects/mlx/venv-3.12/lib/python3.12/site-packages/transformers/tokenization_utils_fast.py",第 613 行,在 _encode_plus 中
    batched_output = self._batch_encode_plus(
    ^^^^^^^^^^^^^^^^^^^^^^^^
    TypeError: PreTrainedTokenizerFast._batch_encode_plus() 收到意外的關鍵字引數 'images'
    ```

    ·

    嗯,追溯資訊本身就很清楚了,不是嗎?

    是否有可用的微調筆記本?

    有沒有用於使用 Gemma 3 微調影像-文字對或影像-對話的示例筆記本?

    ·

    看看 unsloth,他們已經集成了它

    文章作者

    如何使用 Gemma 3 和 langchain,並透過傳遞 image_url 作為輸入獲取影像描述?有人能幫幫我嗎!

    感謝這篇文章!我在這裡有一個關於 Gemma 的完整教程:https://youtu.be/_IzgKu0xnmg?si=BMnYf_E5V5wrGuZC 😉

    我在這裡記錄了我對 Gemma 3 模型的探索:https://entron.github.io/posts/Try-Gemma3-using-Hugging-Face-Part-1/ 分享出來,希望能幫助到其他人。

    我們建立了一份完整的《使用 SFT(單圖或多圖資料集)微調多模態模型》
    指南,其中使用了 Gemma 3,如果您有興趣,可以檢視!

    這是我用過(用於研究)的最強大的開源 LLM。非常感謝!!

    一堆垃圾。無法識別哪些是字母,哪些是數字。無法計算字元。無法重新評估響應的準確性。無法記住之前糾正過的錯誤。這是我很久以來見過的最差的 LLM。

    註冊登入以發表評論

    © . This site is unofficial and not affiliated with Hugging Face, Inc.