跳到正文
原文
Hugging Face Blog·· 2025-03-12精选AI 评分81

Google 发布 Gemma 3:多模态、多语言、长上下文开源模型

Welcome Gemma 3: Google's all new multimodal, multilingual, long context open LLM

AI 导读

Google 发布 Gemma 3 开源权重模型家族,提供 1B、4B、12B、27B 四种规格及预训练与指令微调版本。4B、12B、27B 支持图像与文本输入、140 多种语言和 128k token 上下文,1B 版本仅支持英文文本和 32k 上下文。

推荐理由

Google 开源 Gemma 3 覆盖 1B 到 27B 四种规格,可据此判断小参数模型在多模态与长上下文上的实际边界。

正文 · AI 翻译

简而言之

今天 Google 发布了 Gemma 3,这是其 Gemma 模型系列的新一代产品。这些模型的参数范围从 1B 到 27B,具有高达 128k token 的上下文窗口,可以接受图像和文本,并支持 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 上发布,并与 HF Mirror 生态系统紧密集成。

    预训练模型和指令微调模型均已发布。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 token 可以在不从头训练模型的情况下高效实现。相反,模型以 32k 序列进行预训练,只有 4B、12B 和 27B 模型在预训练结束时扩展到 128k token,从而节省了大量计算资源。位置嵌入(如 RoPE)经过调整——从 Gemma 2 的 10k 基础频率升级到 Gemma 3 的 1M——并针对更长的上下文按 8 倍进行缩放。

    KV Cache 管理通过 Gemma 2 的滑动窗口交错注意力进行了优化。超参数经过调整,以 5 个局部层与 1 个全局层交错(此前为 1:1),并将窗口大小减小至 1024 个 token(从 4096 降低)。关键在于,内存节省的实现并未导致困惑度下降。

    多模态

    Gemma 3 模型使用 SigLIP 作为图像编码器,将图像编码为 token 后输入语言模型。视觉编码器接受调整为 896x896 的正方形图像作为输入。固定的输入分辨率使得处理非正方形宽高比和高分辨率图像更加困难。为解决这些限制,在推理过程中,图像可以被自适应裁剪,每个裁剪区域随后被调整为 896x896 并由图像编码器进行编码。这种称为平移和扫描的算法有效地使模型能够放大图像中的更小细节。

    与 PaliGemma 类似,Gemma 3 中的注意力机制对文本和图像输入的处理方式不同。文本采用单向注意力处理,模型仅关注序列中之前的单词。而图像则获得无掩码的完全注意力,允许模型以双向方式查看图像的每个部分,从而对视觉输入形成完整、不受限制的理解。

    从下图中可以看出,图像 token <img> 被赋予双向注意力(整个方块被点亮),而文本 token 则具有因果注意力。图中还展示了注意力机制如何与滑动窗口算法配合工作。

    attention visualization
    注意力可视化(带滑动窗口和不带滑动窗口)(来源:Transformers PR)

    多语言能力

    为了使 LLM 具备多语言能力,预训练数据集中纳入了更多语言。Gemma 3 的数据集包含两倍的多语言数据,以提高语言覆盖范围。

    为适应这些变化,分词器与 Gemini 2.0 相同。它是一个包含 262K 条目的 SentencePiece 分词器。新的分词器显著改善了中文、日文和韩文文本的编码,代价是英文和代码的 token 数量略有增加。

    对于想深入了解的读者,这里有 Gemma 3 技术报告,可供深入探究这些改进。

    Gemma 3 评估

    LMSys Elo 分数是一个根据语言模型在人类偏好评判的一对一竞赛中的表现进行排名的数值。在 LMSys Chatbot Arena 上,Gemma 3 27B IT 报告的 Elo 分数为 1339,位列前十最佳模型之列,包括领先的闭源模型。该 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/[email protected]
    

    使用 pipeline 进行推理

    开始使用 Gemma 3 的最简单方式是使用 transformers 中的 pipeline 抽象。

    这些模型在使用 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://hf-mirror.com/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://hf-mirror.com/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://hf-mirror.com/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://hf-mirror.com/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
    提示词 车辆上的代码是什么?
    生成结果 根据图像,该车辆是一架 Cessna 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!
    

    在 HF Mirror 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 移植方面的帮助。

    来源:Hugging Face Blog · hf-mirror.com