前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
返回 AI 情报前线
All News · 全部资讯8626
  • Claude Code 2月更新后复杂工程任务失效问题
  • Google Maps for Codebases:代码库 AI 导航工具
  • 迷你 LLM:语言模型工作原理从零演示项目
  • 浏览器本地运行 AI 模型:Gemma Gem 无需 API 密钥
  • Codex 团队自用产品经验:10 个要点 Spec 撑起 50 人团队
  • Claude Code Token 优化秘诀:理解提示缓存才能降成本
  • LM Studio 新 CLI 简化本地 Gemma 4 部署流程
  • Nanocode:JAX + TPU 实现的极简编码助手
  • 树莓派上的自托管 AI 代理:35 提供商 72 工具
  • 深度拆解编程智能体:6 大核心组件的架构设计
  • LLM Wiki:"想法文件" 知识管理范例
  • sllm:GPU 节点共享,实现不限量 Token 调用
  • 编程智能体如何利用工具和上下文实现高效编码
  • Claude Code发现隐藏23年的Linux漏洞
  • 用虚拟文件系统替代RAG的AI文档助手架构
  • Gemma 4开源模型发布:推理与Agent优化
  • 通义千问Qwen3.6-Plus:Agent应用专优
  • Lemonade:AMD开源本地LLM服务器
  • Claude Code安全泄露事件
  • Cursor IDE发布3代新界面
  • Gemma 4多模态模型:设备端部署优化
  • AI 落地三大洞察:帕累托法则、非确定性与早期机遇
  • Falcon Perception:Hugging Face 新开源模型
  • Claude 自动生成内核级 RCE 漏洞利用代码
  • Claude Code 完全指南:工作原理与最佳实践
  • 学习开源代码的四步递进法:从跑通到从零搭建
  • Gradio 后端驱动:快速构建自定义 AI 应用前端
  • OpenAI 领导层:自我改进、Super App 与 AGI 路径
  • Claude Dispatch:接口设计如何制约 AI 能力释放
  • PostgreSQL 的 BM25 全文搜索扩展开源
  • Granite 4.0 3B:企业文档的轻量级多模态模型
  • Claude Code 源码泄露分析:假工具、匹配坑、隐藏模式
  • Claude Code 用户遭遇使用限制提前耗尽
  • Claude Code 源码因 NPM 地图文件泄露
  • 产品思维是 AI 编程工具替不了的能力
  • 通用 Claude.md 秘诀:切减输出 Token
  • TRL 1.0:随行业发展的开源微调库
  • 做中学:Claude Code 实战教程
  • AI 代理审计发现:内容问题逐一报警
  • Zerobox:隔离运行命令的沙箱工具
  • 长链路 Agent 的能力与限制
  • Claude Code 工具 Bug:强制重置代码仓库
  • 谷歌重新想象 AI 时代的鼠标指针
  • LLM 推理优化:KV Cache 压缩方案
  • AI 辅助求解 Knuth 经典问题的进展
  • AI 破译古代亚述泥板的新尝试
  • Notion 创始人不写代码:AI 编程工具成熟见证
  • CLI 成为 AI Agent 接入产品的标准方式
  • 为什么管理层看好 AI,工程师持保留态度?
  • GitHub 活动自动转博客:MCP 工作流自动化
  • .claude/ 文件夹深度解析
  • 已加载 51 / 8626
9.0
重磅
AI SCORE
模型发布2026-04-02 08:00

Gemma 4多模态模型:设备端部署优化

Hugging Face Blog#Google#多模态#边缘计算
Editor brief · 编辑速览

Gemma 4支持多模态理解并优化了边缘设备部署,使开发者可在终端运行前沿AI能力。这是多模态开源模型的重要进展。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

这些模型真的很强劲:具有 Apache 2 许可证的真正开放模型、在排序前沿竞技场评分中保持高质量、支持音频的多模态、以及可在任何地方使用的各种尺寸,包括设备端部署。Gemma 4 建立在之前版本的进步基础上,并将它们结合在一起。在我们对预发布检查点的测试中,我们对它们的能力印象深刻,以至于我们很难找到好的微调示例,因为它们开箱即用时已经表现得非常好。

我们与 Google 和社区合作,在各处提供这些模型:transformers、llama.cpp、MLX、WebGPU、Rust;应有尽有。这篇博文将向你展示如何使用你最喜欢的工具来构建,所以让我们知道你的想法!

Gemma 4 有什么新特性?

能力和架构概览

架构一览

Per-Layer Embeddings (PLE)

Shared KV Cache

Per-Layer Embeddings (PLE)

多模态能力

部署到任何地方

transformers

Llama.cpp

插入你的本地 Agent

transformers.js

MLX

Mistral.rs

插入你的本地 Agent

多 Token 预测 Drafters

DiffusionGemma:通过扩散进行文本生成

微调与演示

微调与 TRL

TRL 在 Vertex AI 上的微调

Unsloth Studio 微调

微调与 TRL

TRL 在 Vertex AI 上的微调

TRL 在 Vertex AI 上的微调

Unsloth Studio 微调

类似于 Gemma-3n,Gemma 4 支持图像、文本和音频输入,并生成文本响应。文本解码器基于 Gemma 模型,支持长上下文窗口。图像编码器与 Gemma 3 中的相似,但有两个关键改进:可变宽高比,以及可配置的图像 Token 输入数量,以找到速度、内存和质量之间的平衡点。所有模型都支持图像(或视频)和文本输入,而小型变体(E2B、E4B)和 12B 统一模型也支持音频。

Gemma 4 有五种尺寸,均包括基础版本和指令微调版本:

能力和架构概览

Gemma 4 利用了之前 Gemma 版本和其他开放模型中使用的多个架构组件,并排除了复杂或不确定的特性,如 Altup。这个组合是一种设计混合,具有高度的库和设备兼容性,能够有效支持长上下文和 Agent 用例,同时非常适合量化。

如上面的基准所示,这个特性组合(结合训练数据和方法)使得 31B 密集模型在 LMArena 评分(仅文本)上达到约 1452,而 26B MoE 则以仅 4B 活跃参数达到 1441 🤯。如我们将看到的那样,多模态操作的效果与文本生成相当,至少在非正式和主观测试中是如此。

这些是 Gemma 4 中的主要架构特性:

交替的本地滑动窗口和全局完整上下文注意力层。较小的密集模型使用 512 Token 的滑动窗口,而较大的模型使用 1024 Token。

双 RoPE 配置:滑动层使用标准 RoPE,全局层使用修剪的 RoPE,以支持更长的上下文。

Per-Layer Embeddings (PLE):第二个嵌入表,为每个解码层提供一个小的残差信号。

Shared KV Cache:模型的最后 N 层重用早期层的键值状态,消除冗余的 KV 投影。

Vision encoder(除 12B 外):使用学习的 2D 位置和多维 RoPE。保留原始宽高比,可以将图像编码为几种不同的 Token 预算(70、140、280、560、1120)。

Audio encoder(E2B、E4B):USM 风格的 conformer,与 Gemma-3n 中的相同。

统一无编码器多模态(仅 12B):12B 统一变体去掉了单独的 Vision 和 Audio 编码器,直接将原始图像补丁和音频波形投影到 LLM 的嵌入空间。参见 Unified Multimodal (12B)。

较小 Gemma 4 模型中最具特色的功能之一是 Per-Layer Embeddings (PLE),它之前在 Gemma-3n 中引入过。在标准 transformer 中,每个 Token 在输入时获得一个单一的嵌入向量,相同的初始表示是整个残差流在各个层中构建的基础,这强制嵌入在前期就要加载模型可能需要的所有内容。PLE 在主残差流旁边添加了一个并行的、低维度的条件通道。对于每个 Token,它通过组合两个信号为每一层产生一个小的专用向量:一个 Token 身份组件(来自嵌入查找)和一个上下文感知组件(来自主嵌入的学习投影)。然后,每个解码层使用其对应的向量通过注意力和前馈后的轻量级残差块来调制隐藏状态。这给每一层提供了自己的通道,仅在变得相关时接收 Token 特定的信息,而不是要求所有内容都打包到单个前期嵌入中。因为 PLE 维度远小于主隐藏大小,这以适度的参数成本添加了有意义的按层专门化。对于多模态输入(图像、音频、视频),PLE 在软 Token 合并到嵌入序列之前计算——因为 PLE 依赖于一旦多模态特性替换占位符就会丢失的 Token ID。多模态位置使用填充 Token ID,有效地接收中性的按层信号。

Shared KV Cache 是一个效率优化,在推理过程中减少计算和内存。模型的最后 num_kv_shared_layers 层不计算自己的键和值投影。相反,它们重用来自同一注意力类型(滑动或完整)的最后一个非共享层的 K 和 V 张量。

实际上,这对质量的影响最小,同时在长上下文生成和设备端使用方面效率更高(就内存和计算而言)。

Gemma 4 12B 统一模型没有单独的 Vision 或 Audio 编码器。相反,原始图像补丁和音频波形通过轻量级线性层直接投影到 LLM 的嵌入空间中,所有模态流入单个仅解码器 Transformer。这减少了多模态延迟,并允许整个模型在一次传递中进行微调。检查点大小使其便于在消费者硬件上部署。

多模态能力

我们在测试中看到 Gemma 4 开箱即支持全面的多模态能力。我们不知道训练混合是什么,但我们在使用它进行 OCR、语音转文本、目标检测或指向等任务时取得了成功。它还支持仅文本和多模态函数调用、推理、代码完成和纠正。

在这里,我们展示了跨不同模型尺寸的几个推理示例。你可以用这个 notebook 方便地运行它们。我们鼓励你尝试演示并在这个博客下方分享它们!

多模态输入顺序

Gemma 4 用特定的约定进行了训练,以交错输入模态:

图像内容在你的提示中排在文本之前。

音频内容在你的提示中排在文本之后。

具体来说,这是一个正确的片段,为聊天模板准备输入:

image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/0052a70beed5bf71b92610a43a52df6d286cd5f3/diffusers/rabbit.jpg"
audio_url = "instructions.m4a"      # A recording of "describe this image"
messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "image": image_url},
            {"type": "text", "text": "Answer in French."},
            {"type": "audio", "audio": audio_url},
        ]
    }
]
# Cette image montre un personnage anthropomorphe ressemblant à un lapin, vêtu d'un manteau bleu et d'un pantalon beige, se tenant sur un chemin de terre dans un paysage rural idyllique ...

这篇文章中的音频推理片段不遵循这个约定,因为它们是在此指导被确认之前编写的。我们保持它们原本的样子,以便结果表保持可重现。对于你自己的代码,优先使用上面的顺序。

目标检测和指向

我们用以下图像和文本提示在不同尺寸上测试 Gemma 4 的 GUI 元素检测和指向:"图像中'view recipe'元素的边界框是什么?"

使用这个提示,模型原生以 JSON 格式响应,检测到的边界框——无需特定的指令或语法约束生成。我们发现坐标指的是 1000x1000 的图像大小,相对于输入维度。

我们在下面为你的便利可视化了输出。我们从返回的 JSON 中解析边界框:json\n[\n {"box_2d": [171, 75, 245, 308], "label": "view recipe element"}\n]\n

我们在测试模型以检测日常物体,这里我们要求它们检测自行车并比较不同的模型输出。与前面的情况一样,我们从 JSON 中解析边界框并转换为图像空间坐标。

多模态思考和函数调用

我们要求 Gemma 4 编写 HTML 代码来重新构建一个我们用 Gemini 3 制作的页面。下面你可以找到执行此操作的代码,我们启用思考并要求每个模型生成最多 4000 个新 Token,以确保万无一失。

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "image",
                "image": "https://huggingface.co/datasets/merve/vlm_test_images/resolve/main/landing_page.png",
            },
            {"type": "text", "text": "Write HTML code for this page."},
        ],
    }
]
inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
    add_generation_prompt=True,
    enable_thinking=True,
).to(model.device)
output = model.generate(**inputs, max_new_tokens=4000)
input_len = inputs.input_ids.shape[-1]
generated_text_ids = output[0][input_len:]
generated_text = processor.decode(generated_text_ids, skip_special_tokens=True)
result = processor.parse_response(generated_text)
print(result["content"])

较小的 Gemma 4 模型可以接收带音频的视频,而较大的模型可以接收不带音频的视频。虽然这些模型并未明确针对视频进行后期训练,但它们可以理解带或不带音频的视频。该模型在音频方面特别强大

messages = [
    {
        "role": "user",
        "content": [
            {"type": "video", "url": "https://huggingface.co/datasets/merve/vlm_test_images/resolve/main/concert.mp4"},
            {"type": "text", "text": "What is happening in the video? What is the song about?"},
        ],
    },
]
inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
    add_generation_prompt=True,
    load_audio_from_video=True, # disable this for larger models
).to(model.device)
output = model.generate(**inputs, max_new_tokens=200)
input_len = inputs.input_ids.shape[-1]
generated_text_ids = output[0][input_len:]
generated_text = processor.decode(generated_text_ids, skip_special_tokens=True)
print(result["content"])

我们已在字幕上测试了所有模型。所有检查点表现都非常好,准确捕捉了复杂场景中的细微差别。这是我们使用的图像,提示是"为此图像写一个详细的单个字幕。"。

messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "url": "https://huggingface.co/datasets/merve/vlm_test_images/resolve/main/bird.png"},
            {"type": "text", "text": "Write single detailed caption for this image."},
        ],
    },
]
inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
    add_generation_prompt=True,
).to(model.device)
output = model.generate(**inputs, max_new_tokens=512)
input_len = inputs.input_ids.shape[-1]
generated_text_ids = output[0][input_len:]
generated_text = processor.decode(generated_text_ids, skip_special_tokens=True)
result = processor.parse_response(generated_text)
print(result["content"])

音频问答

这些模型被训练来回答关于音频中语音的问题。音乐和非语音声音不是训练数据的一部分。

messages = [
    {
        "role": "user",
        "content": [
            {"type": "audio", "url": "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/obama_first_45_secs.mp3"},
            {"type": "text", "text": "Can you describe this audio in detail?"},
        ],
    },
]

inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
    add_generation_prompt=True,
).to(model.device)

output = model.generate(
    **inputs,
    max_new_tokens=1000,
    do_sample=False,
)

print(processor.decode(output[0], skip_special_tokens=True))

如果你想进行转录,这是一个示例:

messages = [
    {
        "role": "user",
        "content": [
            {"type": "audio", "url": "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/obama_first_45_secs.mp3"},
            {"type": "text", "text": "Transcribe the audio?"},
        ],
    },
]

inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
    add_generation_prompt=True,
).to(model.device)

output = model.generate(
    **inputs,
    max_new_tokens=1000,
    do_sample=False,
)

print(processor.decode(output[0], skip_special_tokens=True))

多模态函数调用

我们通过要求获取图像中显示的地点的天气来测试模型。

import re 
WEATHER_TOOL = {
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Gets the current weather for a specific location.",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "The city name"},
            },
            "required": ["city"],
        },
    },
}
tools = [WEATHER_TOOL]
messages = [
    {"role": "user", "content": [
          {"type": "text", "text": "What is the city in this image? Check the weather there right now."},

        {"type": "image", "image": "https://huggingface.co/datasets/merve/vlm_test_images/resolve/main/thailand.jpg"},
    ]},
]
inputs = processor.apply_chat_template(
    messages,
    tools=[WEATHER_TOOL],
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
    add_generation_prompt=True,
    enable_thinking=True,
).to(model.device)
output = model.generate(**inputs, max_new_tokens=1000)
input_len = inputs.input_ids.shape[-1]
generated_text_ids = output[0][input_len:]
generated_text = processor.decode(generated_text_ids, skip_special_tokens=True)
result = processor.parse_response(generated_text)
print(result["content"])

Gemma 4 为许多开源推理引擎提供了第一天支持,是工具调用和 Agent 的理想选择!我们还发布了可在许多硬件后端上运行的 ONNX 检查点,允许在边缘设备或浏览器中的用例!

Gemma 4 从一开始就具有一流的 transformers 支持 🤗。此集成允许将模型与其他库(如 bitsandbytes、PEFT 和 TRL)一起使用。确保安装最新版本的 transformers。

pip install -U transformers

使用小型 Gemma 4 模型进行推理的最简单方法是通过任意对任意管道。你可以按如下方式初始化它。

from transformers import pipeline
pipe = pipeline("any-to-any", model="google/gemma-4-e2b-it")

然后你可以传入图像和文本如下。

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "image",
                "image": "https://huggingface.co/datasets/merve/vlm_test_images/resolve/main/thailand.jpg",
            },
            {"type": "text", "text": "Do you have travel advice going to here?"},
        ],
    }
]
output = pipe(messages, max_new_tokens=100, return_full_text=False)
output[0]["generated_text"]
# Based on the image, which appears to show a magnificent, ornate **Buddhist temple or pagoda**, likely in Southeast Asia (such as Thailand, Myanmar, or Cambodia), here is some general travel advice..

在推理视频时,你可以使用 load_audio_from_video 参数包含音轨。

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "video",
                "image": "https://huggingface.co/datasets/merve/vlm_test_images/resolve/main/rockets.mp4",
            },
            {"type": "text", "text": "What is happening in this video?"},
        ],
    }
]
pipe(messages, load_audio_from_video=True)

在更低层级上,你可以使用 AutoModelForMultimodalLM 类加载 Gemma 4,特别适合微调。内置的聊天模板负责正确格式化输入,请确保使用它以防止手动构建提示时的细微错误。

from transformers import AutoModelForMultimodalLM, AutoProcessor
model = AutoModelForMultimodalLM.from_pretrained("google/gemma-4-E2B-it", device_map="auto")
processor = AutoProcessor.from_pretrained("google/gemma-4-E2B-it")
messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "video",
                "image": "https://huggingface.co/datasets/merve/vlm_test_images/resolve/main/rockets.mp4",
            },
            {"type": "text", "text": "What is happening in this video?"},
        ],
    }
]
inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    return_dict=True,
    return_tensors="pt"
).to(model.device)

generated_ids = model.generate(**inputs, max_new_tokens=128)
generated_ids_trimmed = [
    out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]
output_text = processor.batch_decode(
    generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text)

Gemma 4 模型在 llama.cpp 中开箱即支持图像和文本!这解锁了在你所有最喜欢的本地应用程序中使用 Gemma 4:llama-cpp 服务器、lmstudio、Jan 以及编码 Agent(如 Pi)在许多后端(如 Metal 和 CUDA)上。

你可以按如下方式安装 llama-cpp。

curl -LsSf https://llama.app/install.sh | sh

然后你可以启动一个与 OpenAI API 兼容的服务器,用你选择的精度替换命令末尾的量化方案。

llama serve -hf ggml-org/gemma-4-E2B-it-GGUF

查看此链接以了解更多关于将 llama.cpp 与不同编码 Agent 和本地应用程序结合的选项。在此集合中找到所有 GGUF 检查点。

插入你的本地 Agent

我们致力于确保新模型在本地与 openclaw、hermes、pi 和 open code 等 Agent 一起工作。这一切都要感谢 llama.cpp!运行以下命令立即尝试 Gemma 4。

首先,启动你的本地服务器:

llama serve -hf ggml-org/gemma-4-26b-a4b-it-GGUF:Q4_K_M
hermes model
openclaw onboard

对于 pi,定义一个 ~/.pi/agent/models.json:

{
  "providers": {
    "llama-cpp": {
      "baseUrl": "http://localhost:8080/v1",	
      "api": "openai-completions",
      "apiKey": "none",
      "models": [
        {
          "id": "ggml-org-gemma-4-26b-4b-gguf"
        }
      ]
    }
  }
}

对于 open code,定义一个 ~/.config/opencode/opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "llama.cpp": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "llama server (local)",
      "options": {
        "baseURL": "http://127.0.0.1:8080/v1"
      },
      "models": {
        "gemma-4-26b-4b-it": {
          "name": "Gemma 4 (local)",
          "limit": {
            "context": 128000,
            "output": 8192
          }
        }
      }
    }
  }
}

transformers.js

transformers.js 使得在浏览器中直接运行 Gemma 4 成为可能。你可以查看模型卡以详细了解仅文本、图像和文本、音频和文本推理。我们还为你发布了一个演示来测试模型。

MLX

使用开源 mlx-vlm 库可以获得 Gemma 4 的完整多模态支持。以下是如何要求模型描述图像的方法:

pip install -U mlx-vlm
mlx_vlm.generate \
--model google/gemma-4-E4B-it \
--image https://huggingface.co/datasets/huggingface/documentation-images/resolve/0052a70beed5bf71b92610a43a52df6d286cd5f3/diffusers/rabbit.jpg \
--prompt "Describe this image in detail"

mlx-vlm 支持 TurboQuant,它提供与未压缩基线相同的准确性,同时使用约 4 倍更少的活跃内存,并且端到端运行速度更快。这使得在 Apple Silicon 上进行长上下文推理变得实用,而无需牺牲质量。使用方法如下:

mlx_vlm.generate \
--model "mlx-community/gemma-4-26b-a4b-it-4bit" \
--prompt "Your prompt here" \
--kv-bits 3.5 \
--kv-quant-scheme turboquant

有关音频示例和更多详细信息,请查看 MLX 集合。

Mistral.rs

mistral.rs 是一个 Rust 原生推理引擎,对所有模态(文本、图像、视频、音频)的 Gemma 4 提供第一天支持,并内置工具调用和 Agent 功能。安装 mistral.rs:

curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/EricLBuehler/mistral.rs/master/install.sh | sh # Linux/macOS

irm https://raw.githubusercontent.com/EricLBuehler/mistral.rs/master/install.ps1 | iex # Windows

然后你可以启动一个 OpenAI 兼容的 HTTP 服务器:

mistralrs serve mistralrs-community/gemma-4-E4B-it-UQFF --from-uqff 8

或者,使用交互模式:

mistralrs run -m google/gemma-4-E4B-it --isq 8 --image image.png -i "Describe this image in detail."

mistralrs run -m google/gemma-4-E4B-it --isq 8 --audio audio.mp3 -i "Transcribe this fully."

在这里找到所有模型。请按照模型卡中的说明了解安装和推理指南。

多 Token 预测 Drafters

Google 为 Gemma 4 家族发布了多 Token 预测(MTP)drafters:可以通过推测解码加速推理的小型助手模型。Drafter 一次提议多个未来 Token,目标模型在单个前向传递中验证它们。你获得与目标模型相同的输出,只是速度更快——没有质量损失,没有推理行为的改变。报告的端到端加速达到 ~3 倍,取决于硬件、批量大小和工作负载。

Assistant 可用于所有四个 Gemma 4 尺寸(E2B、E4B、26B A4B、31B)。它们与目标模型共享 KV 缓存以避免重新计算上下文,较小的边缘变体还额外使用嵌入器聚类技巧来保持设备端的内存和计算较低。

在 Gemma 4 集合和 mlx-community 集合中找到检查点。

DiffusionGemma:通过扩散进行文本生成

除了自回归 Gemma 4 家族外,Google DeepMind 正在发布 DiffusionGemma,一个使用离散扩散而不是逐 Token 自回归生成文本的多模态模型。它建立在相同的 26B A4B 混合专家基础上(25.2B 总计 / 3.8B 活跃参数,128 个中有 8 个活跃专家加 1 个共享),接受文本和图像输入,生成文本,并支持最多 256K 上下文——全部在相同的 Apache 2.0 许可证下。

在标准因果 LM 一次发出一个 Token 的地方,DiffusionGemma 并行去噪整个 Token 块。架构是编码器-解码器:自回归编码器预填充提示并构建 KV 缓存,而解码器在 256 Token 的"画布"上应用双向注意力。在多画布采样期间,模型通过扩散采样器迭代地去噪完整画布;一旦画布最终确定,它就被编码并附加到 KV 缓存,然后

Original source

本文由 AI 翻译整理自 Hugging Face Blog,原文版权归原作者所有。

阅读英文原文
上一篇
Cursor IDE发布3代新界面
下一篇
AI 落地三大洞察:帕累托法则、非确定性与早期机遇