一张 4090 显卡,离线跑 31B 参数的多模态模型,一秒能分析两三张图片,还直接给出文字描述——这就是 Google 的 Gemma 4 在你本地电脑上的真实表现。
你手里有一批产品图、扫描件,甚至手写在便签上的草图,想用 AI 批量生成说明文字,但又不想把商业图丢给云服务。Gemma 4 正好解决了这个矛盾:模型文件和推理全部在本地完成,网络断开照样跑,数据永远不会离开你的硬盘。
不过,让一个能“看懂”图片的 31B 模型跑起来,比装个普通聊天模型要多绕几个弯。这篇文章带你从头走通:环境准备 → 安装 → 拉取模型 → 启动服务 → 多模态验证 → 调优,每一步都给出可以直接复制运行的命令,并且提前标出你 90% 会碰到的坑。
1. 环境准备:你的电脑扛得住吗?
Gemma 4 的官方多模态版本是 google/gemma-4-31B-it(310 亿参数,图像 + 文本输入,纯文本输出)。完整跑 16 位精度大约需要 20 GB 显存——一张 RTX 4090 刚好装下,RTX 3090 也可以用,但只剩 4 GB 开销,稍微大一点的图片就可能爆显存。
别担心,我们还能量化——就像把无损照片压成高质量 JPG,肉眼几乎看不出区别,但模型体积能缩小一半以上。量化后,它在 16 GB 显存 的卡上可以稳定运行,甚至 Apple Silicon 的 MacBook(M3 Max 64 GB 统一内存)也能跑到可用的速度。
确定好自己的显卡/内存后,我们选择 Ollama 0.24.0 作为部署工具。原因很简单:它把模型下载、量化、API 打包成一个命令,而且对多模态的支持在 0.24.0 已经相当成熟,不需要你再手动写 Python 加载代码。不过,如果你后面需要更高的并发吞吐,可以再切到 vLLM,那是后话。
2. 安装 Ollama(5 分钟搞定)
不管你是 Windows、macOS 还是 Linux,Ollama 都提供了原生安装包。这里以 Linux/macOS 的命令行为例:
# macOS
brew install ollama
# Linux (使用官方安装脚本)
curl -fsSL https://ollama.com/install.sh | sh
Windows 用户直接到 ollama.com 下载 .exe 安装包,一路下一步即可。安装完别急着运行,先确认版本:
ollama --version
# 输出应为 ollama version 0.24.0
3. 拉取 Gemma 4 多模态模型
Ollama 的模型库里已经收录了 Gemma 4,直接 pull:
ollama pull gemma4:31b
# 如果你显存较小,可以指定量化版本,例如:
# ollama pull gemma4:31b-q4_K_M
这里 gemma4:31b 默认是官方 4-bit 量化(其实带量化,名字里没显示)。下载后会自动创建一个可以调用的模型副本,之后就可以像使用普通对话模型一样调用它,区别在于 API 请求里多了一个 images 字段。
你可能踩的第一个坑:国内网络下载 Hugging Face 模型可能很慢。可以在终端里设置镜像代理,或者在
ollama pull前设置环境变量OLLAMA_MODELS指向你已经提前下载好的模型目录。不过,最省事的办法还是挂一个稳定代理,一晚上就能下完 15 GB 左右的文件。
4. 启动服务 & 配置(可选)
Ollama 默认会在后台自动启动服务,但如果你手动停止了,可以再开:
# 启动服务(后台模式)
ollama serve
# 或者在启动时就开放外部访问(适合在局域网内其他设备调用)
OLLAMA_HOST=0.0.0.0 ollama serve
其他重要环境变量:
OLLAMA_NUM_PARALLEL:最大并行请求数,默认 1,如果你的显卡够强可以调到 4。OLLAMA_MAX_LOADED_MODELS:最多同时保留几个模型在显存里,建议就 1。OLLAMA_CONTEXT_LENGTH:上下文长度,Gemma 4 默认 8192,处理多图对话时可能需要翻倍。
5. 验证多模态调用
服务启动后(默认监听 localhost:11434),用 curl 发一次“带图提问”,看看它能不能把图片内容变成文字:
# 准备一张测试图片(比如当前目录的 photo.jpg)
# 将图片转为 base64,注意去掉换行
IMAGE_BASE64=$(base64 -i photo.jpg | tr -d '\n')
# 调用多模态接口
curl http://localhost:11434/api/generate \
-d "{
\"model\": \"gemma4:31b\",
\"prompt\": \"描述这张图片的内容,用中文回答\",
\"images\": [\"$IMAGE_BASE64\"],
\"stream\": false
}"
正常情况下,你会立刻收到一个 JSON,里面的 response 字段就是模型生成的描述文字。
常见报错 1:返回
"model 'gemma4:31b' not found"
→ 可能是拉取时用了不同的标签,用ollama list查看已下载模型的确切名字,确认用的是gemma4:31b。常见报错 2:
"images: unsupported image format"
→ Ollama 只接受jpeg和png格式的 base64 字符串,且不能包含data:image/...;base64,前缀。换一张标准图片,或者检查 base64 转义。
6. 调优:让响应更快、更省显存
6.1 调整上下文长度
多发图片或多轮对话时,默认的 8192 长度可能溢出。创建自定义模型文件扩大它:
# 创建一个 Modelfile
cat > Modelfile.gemma4 <<EOF
FROM gemma4:31b
PARAMETER num_ctx 16384
EOF
ollama create gemma4-long -f Modelfile.gemma4
# 之后用 gemma4-long 调用即可
6.2 启用 Flash Attention(减少显存 & 加速)
Ollama 0.24.0 已默认开启,但如果你用的是较老的驱动,可以在 Modelfile 中显式设置:
PARAMETER num_gpu 1
PARAMETER flash_attn true
6.3 批量处理时的并发
如果你的任务是批量生成(比如 1000 张产品图),可以起多个请求并行发送。Ollama 默认串行处理;想并发,可以启动多个模型实例(通过 ollama serve 的不同端口,但不太优雅),更推荐切换到 vLLM(本文不展开,但记住 vLLM 0.22.0 对多模态和 PagedAttention 支持已经很完善)。
最小可行配置:一键启动
下面这个命令块,直接复制到终端,就能在你的电脑上启动 Gemma 4 多模态服务,并跑一个简单的图片测试(前提是 Ollama 已安装,且 photo.jpg 在当前目录):
# 1. 确保服务在跑
ollama serve &
sleep 2
# 2. 下载模型(如果还没下)
ollama pull gemma4:31b
# 3. 验证多模态
IMAGE_BASE64=$(base64 -i photo.jpg | tr -d '\n')
curl http://localhost:11434/api/generate \
-d "{
\"model\": \"gemma4:31b\",
\"prompt\": \"描述这张图片的内容,用中文回答\",
\"images\": [\"$IMAGE_BASE64\"],
\"stream\": false
}"
看到中文描述返回,就算部署成功了。
到此,你就拥有了一个完全离线的多模态引擎。它的局限也诚实摆在这里:速度比不上云端 API(一张 4090 大约 2 token/秒),处理高分辨率大图时需要先自动缩放(约 672×672),而且一次只能集中看一张图。但对中小团队的产品描述生成、辅助标注、隐私场景下的图片理解,已经足够实用——关键是,数据永远不离开你的桌面,这在 2026 年的合规趋势下,能省掉一大笔法务沟通成本。
