@MiaAI_lab: 运行更高效的 Gemma 4 31B IT NVFP4,轻松获得更强的智能体推理与工具调用能力 • 256k 上下文 • MTP • …
摘要
MiaAI Lab 发布了一份指南,用于通过 vLLM 以 NVFP4 量化方式运行 Google 的 Gemma 4 31B IT,支持 256k 上下文、MTP 推测解码、智能体推理、原生工具调用以及图像/视频支持。
查看缓存全文
缓存时间: 2026/07/16 16:21
运行更流畅的 Gemma 4 31B IT NVFP4,具备更好的智能体推理与工具调用能力,易于部署 • 256k 上下文 • MTP • 原生图像和视频支持
智能体工作流评估正在进行中,即将发布。获取地址:https://github.com/MiaAI-Lab/Gemma-4-31B-IT-NVFP4-Recipe…
MiaAI-Lab/Gemma-4-31B-IT-NVFP4-Recipe
来源:https://github.com/MiaAI-Lab/Gemma-4-31B-IT-NVFP4-Recipe
Gemma 4 31B IT — NVFP4 服务
通过 vLLM 以 4 位 NVFP4 量化形式运行 Google Gemma 4 31B IT,提供 OpenAI 兼容端点、多 Token 预测投机解码、工具调用以及思考/推理支持。自动从 Hugging Face 下载并缓存两个模型——只需设置你的 token 即可运行。
模型
| 角色 | 模型 | 大小 | 精度 |
|---|---|---|---|
| 🎯 目标模型 | nvidia/Gemma-4-31B-IT-NVFP4 (https://huggingface.co/nvidia/Gemma-4-31B-IT-NVFP4) | ~31B | NVFP4 (ModelOpt) |
| ⚡ 草稿模型 | google/gemma-4-31B-it-assistant (https://huggingface.co/google/gemma-4-31B-it-assistant) | ~0.5B | BF16 |
草稿模型运行 4 个轻量级解码器层,采用仅 Q 注意力机制,并与目标模型共享 KV 缓存。每步可生成最多 4 个草稿 Token 用于投机解码——在不牺牲输出质量的前提下加速生成。
快速开始
前提条件
- Docker 并安装 NVIDIA Container Toolkit(已完成
nvidia-ctk) - NVIDIA GPU(已在 DGX Spark——GB10 GPU + 128 GB 统一内存上测试)
- Hugging Face Token,且具有访问以下两个受限模型的权限:
- https://huggingface.co/nvidia/Gemma-4-31B-IT-NVFP4
- https://huggingface.co/google/gemma-4-31B-it-assistant
启动服务
HF_TOKEN=hf_your_token_here ./start.sh
首次运行时脚本会下载两个模型(缓存至 ~/.cache/huggingface),随后启动 vLLM 容器,并等待其就绪。
使用 API
curl http://localhost:8888/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "nvidia/Gemma-4-31B-IT-NVFP4",
"messages": [{"role": "user", "content": "Hello!"}]
}'
停止服务
./stop.sh
特性
🧠 思考/推理
默认启用。模型会在最终回复前以 thought 块输出推理过程:
<|turn|>model
<|channel|>thought
The user is asking about...
Here's the answer...
可按请求禁用:在 API 调用中传递 chat_template_kwargs: {"enable_thinking": false}。
🛠️ 工具调用
通过 gemma4 解析器原生支持工具调用。所有配置已预置——只需在请求中传入 tools:
curl http://localhost:8888/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "nvidia/Gemma-4-31B-IT-NVFP4",
"messages": [{"role": "user", "content": "What'\''s the weather in Paris?"}],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "City name"
}
},
"required": ["location"]
}
}
}]
}'
🖼️ 多模态(图像 + 视频)
模型通过共享视觉编码器支持图像和视频。音频已定义 Token ID,但 NVFP4 量化权重不包含音频编码器(audio_config: null)。
图像示例:
{
"messages": [
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}},
{"type": "text", "text": "What's in this image?"}
]
}
]
}
视频示例:
{
"messages": [
{
"role": "user",
"content": [
{"type": "video_url", "video_url": {"url": "https://example.com/video.mp4"}},
{"type": "text", "text": "Summarize this video"}
]
}
]
}
限制:每个提示最多可包含 4 张图像 或 1 个视频(如果支持则为 1 个音频)。
⚡ MTP 投机解码
多 Token 预测使用轻量级助手模型每步生成 4 个草稿 Token。在以下场景中效果最佳:
- 批量 工作负载
- 长上下文 生成
- 系统提示密集型 应用(前缀缓存同样生效)
推荐客户端设置
根据 Google 对 Gemma 4 的建议:
| 参数 | 值 |
|---|---|
temperature | 1.0 |
top_p | 0.95 |
top_k | 64 |
可在每个请求中传递,或在客户端设置为默认值。
并发与性能
在 NVIDIA DGX Spark(GB10 GPU,128 GB 统一内存)上测试。
限制
| 参数 | 值 | 描述 |
|---|---|---|
--max-num-seqs | 2 | 并发序列的硬上限 |
--max-num-batched-tokens | 8192 | 单个批次中所有序列的总 Token 数 |
--gpu-memory-utilization | 0.70 | vLLM 内存预算 |
0.70 显存利用率下的 KV 缓存
| 指标 | 值 |
|---|---|
| 可用 KV 缓存内存 | 27.96 GiB |
| 总 KV 缓存容量 | 542,037 tokens |
| 最大并发度(每个 262k 上下文) | 2.07× |
实际吞吐量
| 工作负载 | 典型并发请求数 |
|---|---|
| 短查询(每个 ≤1K tokens) | 2(达到 max-num-seqs 上限) |
| 编码 / 工具调用(500–2K tokens) | 2 |
| 长上下文(每个 32K+ tokens) | 1–2 |
调优以获得更高并发度
--gpu-memory-utilization 设为 0.70 留有余量。可以通过提高该值来增加并发度——更多的 KV 缓存块可以容纳,从而支持更多并发序列,但会占用更少的空闲 GPU 内存:
gpu-mem-util | 约 KV 缓存容量 | 最大并发度估计(262k 上下文) |
|---|---|---|
| 0.70 | 542K tokens | 2× |
| 0.85 | ~740K tokens | ~2.8× |
| 0.95 | ~870K tokens | ~3.3× |
# 在 start.sh 中,为了更高并发度:
--gpu-memory-utilization 0.95 --max-num-seqs 4 --max-num-batched-tokens 16384
使用 nvidia-smi 监控显存,确保不会 OOM。
配置
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
HF_TOKEN | — | Hugging Face token,用于访问受限模型 |
PORT | 8888 | 服务端口 |
HOST | 0.0.0.0 | 绑定地址 |
关键 vLLM 标志
| 标志 | 值 | 备注 |
|---|---|---|
--quantization | modelopt | NVIDIA ModelOpt 的 NVFP4 格式 |
--tensor-parallel-size | 1 | 多 GPU 时可增加 |
--gpu-memory-utilization | 0.70 | 根据你的显存预算调整 |
--max-model-len | 262144 | 256k 上下文窗口 |
--kv-cache-dtype | fp8 | 将 KV 缓存内存减少约 50% |
--limit-mm-per-prompt | {"image":4,"video":1,"audio":1} | 每个请求的最大图像、视频或音频数量 |
--chat-template | ./chat_template.jinja | Gemma 4 规范模板 |
--reasoning-parser | gemma4 | 解析思考块 |
--tool-call-parser | gemma4 | 原生工具调用格式 |
--attention-backend | triton_attn | 基于 Triton 的 Flash Attention |
--load-format | fastsafetensors | 快速本地模型加载 |
--speculative-config | (见 start.sh) | 使用助手模型的 MTP |
--override-generation-config | {"temperature":1.0,...} | 默认采样参数 |
每个请求的覆盖
客户端可以在每个请求中覆盖模板 kwargs:
{
"chat_template_kwargs": {
"enable_thinking": false,
"preserve_thinking": false
}
}
文件
.
├── start.sh # 启动 vLLM 容器(自动下载模型)
├── stop.sh # 优雅停止容器
├── chat_template.jinja # Gemma 4 规范聊天模板(390 行)
├── README.md # 本文件
├── .gitignore # 忽略运行时工件
├── .vllm.log # 容器日志(被 git 忽略)
├── .vllm.pid # 容器 PID(被 git 忽略)
└── .cache/ # Triton 缓存(被 git 忽略)
Python 客户端示例
OpenAI SDK
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8888/v1",
api_key="not-needed",
)
response = client.chat.completions.create(
model="nvidia/Gemma-4-31B-IT-NVFP4",
messages=[{"role": "user", "content": "Write a quick sort in Python"}],
temperature=0.2,
)
print(response.choices[0].message.content)
带工具调用
tools = [
{
"type": "function",
"function": {
"name": "run_code",
"description": "Execute Python code and return stdout",
"parameters": {
"type": "object",
"properties": {
"code": {"type": "string"}
},
"required": ["code"]
}
}
}
]
response = client.chat.completions.create(
model="nvidia/Gemma-4-31B-IT-NVFP4",
messages=[{"role": "user", "content": "Calculate 42 * 37"}],
tools=tools,
)
排错指南
| 症状 | 可能原因 | 解决方案 |
|---|---|---|
| 容器立即退出 | 显存不足 | 将 --gpu-memory-utilization 降低至 0.5 |
| 下载卡住 | 缺少 HF token | 传递 HF_TOKEN=... |
| 端口冲突 | 已占用 :8888 | PORT=8889 ./start.sh |
| 首次启动慢 | 正在下载约 19 GB | 正常——首次运行后缓存 |
Unknown vLLM env var 警告 | 镜像中的构建元数据 | 无害,可忽略 |
| MTP 未加速 | 短单轮提示 | 在批处理/长上下文场景中最有效 |
许可证
模型权重受 Gemma 许可证管理 (https://www.kaggle.com/models/google/gemma-4/license)。本仓库的脚本和配置采用 MIT 许可证。
参考
- Gemma 4 技术报告 (https://goo.gle/Gemma4Report)
- NVIDIA ModelOpt NVFP4 (https://github.com/NVIDIA/TensorRT-Model-Optimizer)
- vLLM 文档 (https://docs.vllm.ai/en/latest/)
- Hugging Face: nvidia/Gemma-4-31B-IT-NVFP4 (https://huggingface.co/nvidia/Gemma-4-31B-IT-NVFP4)
相似文章
google/gemma-4-26B-A4B-it-assistant
Google DeepMind 发布了 Gemma 4 MTP 草稿模型(drafter),适用于 Gemma 4 系列模型,通过推测解码(speculative decoding)实现显著的解码加速,同时保持完全一致的生成质量,适用于低延迟应用场景。
@MiaAI_lab:我使用Fable-5风格推理和助手轨迹对Gemma 4 12B进行了微调,并将其发布为Gemmable 4 12b。**可用…
Mia-AiLab发布了Gemmable 4 12B,这是Google Gemma 4 12B模型的微调版本,使用了Fable-5风格推理和助手轨迹,提供GGUF和MLX格式用于本地推理。
google/gemma-4-31B-it-assistant
Google DeepMind 发布了 Gemma 4,这是一个开源权重的多模态模型家族,支持文本、图像、视频和音频,具备增强的推理和编码能力,并通过多令牌预测(MTP)实现高达 2 倍的解码速度提升。
google/gemma-4-E4B-it-assistant
Google DeepMind 发布了 Gemma 4 E4B 指令微调助手模型,该模型具备多模态能力、推理改进以及针对低延迟端侧应用优化的投机解码功能。
@analogalok: 在8GB显存上以20+ token/秒运行Gemma 4 26B MoE,支持250k上下文。如果你有8GB显存显卡,停下你正在做的事……
Alok演示了使用Unsloth的QAT量化以及llama.cpp中的-cmoe标志,在8GB显存上运行Gemma 4 26B MoE,实现了250k上下文下20 token/秒的速度,这标志着廉价本地AI的一个重要里程碑。