摘要:今天,谷歌发布了Gemma 3,这是 Gemma 系列模型的新版本。模型的参数范围从 1B 到 27B,上下文窗口高达 128k 个token,可以接受图像和文本,并支持 140 多种语言。
今天,谷歌发布了 Gemma 3 ,这是 Gemma 系列模型的新版本。模型的参数范围从 1B 到 27B,上下文窗口高达 128k 个token,可以接受图像和文本,并支持 140 多种语言。
所有 模型都在 Hub 上 ,并与 Hugging Face 生态系统紧密集成。
预训练和指令调整模型均已发布。Gemma-3-4B-IT 击败了 Gemma-2-27B IT,而 Gemma-3-27B-IT 在基准测试中击败了 Gemini 1.5-Pro 。
Gemma 3 是 Google 最新推出的开放权重 LLM。它有四种大小,分别为 10 亿 、 40 亿 、 120 亿 和 270 亿个 参数,并带有 基础(预训练) 和 指令调整 版本。Gemma 3 是 多模态的 !40 亿、120 亿和 270 亿个参数模型可以处理 图像 和 文本 ,而 1B 版本 只能处理文本 。
对于 1B 版本, 输入上下文窗口长度已从 Gemma 2 的 8k 增加到 32k ,对于其他所有版本,则 增加到 128k 。与其他 VLM(视觉语言模型)一样,Gemma 3 会根据用户输入生成文本,这些文本可能由文本组成,也可能由图像组成。示例用途包括问答、分析图像内容、总结文档等。
虽然这些是多模态模型,但可以将其用作 纯文本 模型(作为 LLM),而无需在内存中加载视觉编码器。
Gemma 3 相对于 Gemma 2 有三个核心增强功能:
更长的上下文长度多模态多语言能力从 Gemma 2 的知识开始,探索如何使这些模型变得更好是很有趣的。
无需从头开始训练模型,即可高效地将上下文长度扩展到 128k 个标记。相反,模型使用 32k 序列进行预训练,并且只有 4B、12B 和 27B 模型在预训练结束时扩展到 128k 个标记,从而节省大量计算。位置嵌入(如 RoPE)经过调整(从 Gemma 2 中的 10k 基频升级到 Gemma 3 中的 1M),并针对较长的上下文缩放 8 倍。
使用 Gemma 2 的滑动窗口交错注意力机制优化了 KV Cache 管理。超参数经过调整,将 5 个局部层与 1 个全局层交错(之前为 1:1),并将窗口大小减小到 1024 个 token(从 4096 个减少)。最重要的是,在不降低困惑度的情况下节省了内存。
Gemma 3 模型使用 SigLIP 作为图像编码器,将图像编码为输入到语言模型中的标记。视觉编码器将调整为 的方形图像作为输入 896x896 。固定输入分辨率使得处理非方形纵横比和高分辨率图像变得更加困难。为了 在推理过程中 解决这些限制,可以自适应地裁剪图像,然后将每个裁剪图像调整为 896x896 并由图像编码器进行编码。这种称为 平移和扫描 的算法有效地使模型能够放大图像中的较小细节。
与 PaliGemma 类似,Gemma 3 中的注意力机制对文本和图像输入的工作方式不同。文本采用单向注意力机制处理,其中模型仅关注序列中的前几个单词。另一方面,图像无需遮罩即可获得充分的注意力,从而使模型能够以 双向 方式查看图像的每个部分,从而对视觉输入有完整、不受限制的理解。
下图中可以看到,图像标记 具有双向注意力(整个方块被点亮),而文本标记具有因果注意力。它还展示了注意力如何与滑动窗口算法一起工作。
为了使 LLM 具备多语言能力,预训练数据集包含更多语言。Gemma 3 的数据集包含 两倍 多语言数据,以提高语言覆盖率。
考虑到这些变化,标记器与 Gemini 2.0 中的标记器相同。它是一个具有 262K 个条目的 SentencePiece 标记器。新的标记器显著改善了 中文 、 日文 和 韩文文 本的编码,但英语和代码的标记计数略有增加。
对于好奇的人来说,可以看 关于 Gemma 3 的技术报告 ,可以深入了解其增强功能。
LMSys Elo 分数是一个数字,根据语言模型在面对面比赛中的表现对其进行排名,并根据人类的偏好进行判断。在 LMSys Chatbot Arena 上,Gemma 3 27B IT 的 Elo 分数为 1339 ,跻身前 10 个最佳模型之列,包括领先的封闭模型。Elo 与 o1-preview 相当,并且高于其他 非思考 开放模型。与表中的其他 LLM 一样,Gemma 3 仅处理文本输入即可获得此分数。
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 通常很接近,有时甚至更好,证明了其作为可访问、高性能选项的价值。
Gemma 3 附带零日支持 transformers 。您需要做的就是 transformers 从 Gemma 3 的稳定版本进行安装。
$ pip install git+https://github.com/huggingface/transformers@v4.49.0-Gemma-3开始使用 Gemma 3 最简单的 方法是使用 pipeline 变压器中的抽象。
使用该数据类型,模型效果最佳 bfloat16 。否则,质量可能会下降。
import torchfrom transformers import pipelinepipe = 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"])图像大模型&Agent,非诚勿扰
提示词糖果上是什么动物?生成让我们分析一下图片中的糖果吧!糖果上的动物是一只 乌龟 。你可以清楚地看到龟壳和乌龟的头和腿印在表面上。
可以将图像与文本 交错 。为此,只需在要插入图像的位置截断输入文本,然后使用如下所示的图像块插入它即可。
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?"}, ] }, ]Gemma3ForConditionalGeneration :适用于4B、12B和27B视觉语言模型。Gemma3ForCausalLM :对于 1B 纯文本模型,并将视觉语言模型像语言模型一样加载(省略视觉塔)。在下面的代码片段中,我们使用模型来查询图像。 Gemma3ForConditionalGeneration 类用于实例化视觉语言模型变体。要使用模型,我们将它与类配对。运行推理就像创建 字典、在上面应用聊天模板、处理输入和调用 AutoProcessor 一样简单 。 messages model.generate
import torchfrom transformers import AutoProcessor, Gemma3ForConditionalGenerationckpt = "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 torchfrom transformers import AutoTokenizer, Gemma3ForCausalLMckpt = "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 已发布,尺寸非常适合在设备上使用。这是快速入门的方法。
Gemma 3 附带了 的零日支持 mlx-vlm ,这是一个用于在 Apple Silicon 设备(包括 Mac 和 iPhone)上运行视觉语言模型的开源库
pip install git+https://github.com/Blaizzy/mlx-vlm.gitmlx-vlm 安装 后,您可以使用以下命令开始推理:
python -m mlx_vlm.generate --model mlx-community/Gemma3-4B-Instruct-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图像可以从终端运行本地聊天服务器:
./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!来源:HuggingFace