Gemma 4本地部署实战:Ollama与vLLM部署及多模态应用指南
2026/9/19 22:11:22 网站建设 项目流程

1. 为什么 Gemma 4 让本地部署这件事突然变得靠谱了

本地跑大模型这件事,喊了不是一年两年了。从最早拿一张 8G 显存的卡硬塞 7B 模型,到后来量化技术成熟、消费级显卡能跑 13B,再到现在动不动就有人在家里用 4090 跑 70B 量化版——这条路走得不算快,但每一步都踩得很实。Gemma 4 发布之后,我身边好几个之前一直观望的朋友都开始动手了,原因很简单:开源协议终于不再是绊脚石了

之前很多模型权重虽然能下载,但协议里总藏着一些让人心里没底的东西——商用限制、用户量门槛、衍生模型条款。你拿来做个人项目可能没人管,但一旦想放到产品里或者在公司内部用,法务那边就过不去。Gemma 4 这次直接上了Apache 2.0,这个协议在开源圈子里什么地位不用我多说,基本上就是“你随便用,出了事别找我”的意思。对于想正经把大模型集成到工作流里的人来说,这一条比模型本身涨了多少分都重要。

那 Gemma 4 到底能干什么?简单说,它是一个多模态大模型系列,覆盖了从轻量级到中等规模的多个尺寸,支持文本、图像输入,部分版本还能处理音频。你可以在自己的笔记本上跑一个 4B 左右的版本做日常问答和文档摘要,也可以在台式机上跑 26B 的 MoE 版本做更复杂的推理任务。MoE 架构的好处是推理时只激活一部分参数,所以实际计算量比同等总参数量的稠密模型小很多,显存占用和速度都更友好。

适合谁来参考这篇内容?如果你是有一定命令行基础、想在自己电脑上跑大模型但不知道从哪下手的人,这篇就是写给你的。如果你已经在用 Ollama 或者 vLLM 部署过其他模型,想看看 Gemma 4 值不值得换,我也会把对比和实测数据放出来。如果你只是好奇“本地跑大模型到底能干嘛”,我也会用实际场景告诉你,这东西现在到底能做到什么程度。

我自己的测试环境是一台 Windows 台式机,显卡是 RTX 4070 Ti Super 16G,内存 64G,另外还有一台 MacBook Pro M3 Pro 36G 用来做对比。下面所有操作和结论都基于这两个环境,你可以根据自己的硬件情况做调整。

2. 部署方案怎么选:Ollama、vLLM 还是直接上 transformers

2.1 三种主流路线的适用场景对比

本地跑大模型,目前主流就三条路:OllamavLLM直接调 transformers。这三个不是互相替代的关系,而是对应不同需求层次。我先把结论摆出来,再解释为什么。

方案适合场景上手难度推理速度显存效率多模态支持
Ollama个人日常使用、快速体验极低中等中等部分支持
vLLM服务化部署、多并发请求中等看版本
transformers研究、微调、深度定制较高完整支持

Ollama 的优势在于开箱即用。你下载安装包,一行命令拉模型,再一行命令跑起来,整个过程不超过五分钟。它内部帮你处理了量化、显存分配、对话模板这些事情,你不需要关心底层用了什么推理引擎。缺点是灵活性差,你想改个采样参数或者换个量化精度,能调的选项有限。

vLLM 是冲着生产环境去的。它的 PagedAttention 技术能把显存利用率拉高很多,并发请求下的吞吐量比朴素实现高出一个数量级。如果你想让局域网里几个人同时用同一个模型,或者想把它接进自己的应用里做 API 服务,vLLM 是首选。代价是配置稍微麻烦一点,需要自己处理模型格式转换和环境依赖。

直接上 transformers 就是研究路线了。你想做微调、想改模型结构、想深入看每一层的输出,那就得走这条路。速度慢、显存占用高,但控制力最强。Gemma 4 发布当天 Hugging Face 上就有权重了,transformers 版本跟进得很快。

提示:如果你只是想在本地体验一下 Gemma 4 的多模态能力,别犹豫,直接 Ollama。如果你打算把它做成一个内部工具给团队用,直接看 vLLM 部分。

2.2 为什么我最终选了 Ollama 做主力

我三个方案都试了一遍,最后日常使用的主力是 Ollama。原因不复杂:我的使用场景是个人问答、文档摘要、代码辅助,不需要并发,不需要服务化。Ollama 的响应速度对我来说完全够用,而且它管理模型的方式很干净——拉下来的模型统一放在一个目录里,切换模型就是换个名字的事。

vLLM 我也配好了,跑在另一台机器上做 API 服务,主要是给家里的其他设备调用。但日常坐在电脑前干活的时候,我还是直接开 Ollama 的交互界面。这不是说 vLLM 不好,而是工具要匹配场景。你让一个每天就问几个问题的人去维护一套 vLLM 服务,属于过度工程。

transformers 那条路我用来做了一些对比测试,比如看 Gemma 4 在不同量化精度下的输出差异。这个后面会细说。

2.3 硬件门槛到底在哪

很多人关心的是“我这台电脑能不能跑”。我直接给一个粗略的判断标准:

  • 8G 显存:可以跑 4B 级别的量化版本,速度尚可,上下文长度受限
  • 12G 显存:可以跑 9B 左右的量化版本,日常使用比较舒服
  • 16G 显存:可以跑 26B MoE 的量化版本,这是 Gemma 4 比较甜点的配置
  • 24G 及以上:可以跑更大尺寸或者更高精度的版本,或者做微调

内存方面,至少 32G,因为模型加载和推理过程中会有额外的内存开销。如果你的显存不够,Ollama 会自动把部分层卸载到内存里跑,速度会慢很多,但至少能跑起来。

Mac 用户这边,M 系列芯片的统一内存架构反而有优势。36G 的 M3 Pro 跑 26B MoE 量化版比我的 4070 Ti Super 还稳,因为显存和内存是一体的,不存在卸载的问题。速度上略慢一点,但体验更连贯。

3. Windows 下从零部署 Gemma 4 的完整实操

3.1 安装 Ollama 和拉取模型

Windows 下安装 Ollama 没什么好说的,去官网下载安装包,双击,下一步,完事。安装完成后打开 PowerShell 或者 Windows Terminal,输入:

ollama --version

看到版本号就说明装好了。然后拉取 Gemma 4 的模型。这里要注意,Gemma 4 有多个尺寸,命名规则一般是gemma4:尺寸-量化等级。我建议先从 4B 的默认量化版本开始:

ollama pull gemma4:4b

这个命令会下载大约 3-4G 的文件,取决于量化等级。下载完成后直接跑:

ollama run gemma4:4b

你会看到一个交互式提示符,直接输入问题就行。第一次加载模型会花几秒钟把权重读进显存,之后每次响应就很快了。

如果你想跑 26B MoE 版本,命令是:

ollama pull gemma4:26b-moe

这个下载量大概在 15-18G 左右,取决于量化版本。我的 16G 显存跑这个版本,Ollama 会自动做部分卸载,速度大概在每秒 15-20 个 token,日常对话完全够用。

注意:Ollama 默认的模型存储路径在 C 盘,如果你 C 盘空间紧张,可以先设置环境变量OLLAMA_MODELS指向其他盘符。这个变量在系统设置里加就行,不用改配置文件。

3.2 多模态输入的配置和测试

Gemma 4 的多模态能力是这次升级的重点之一。Ollama 对多模态的支持是通过--image参数或者直接在对话里引用图片路径来实现的。我实测下来,在交互模式下可以这样用:

ollama run gemma4:4b >>> 请描述这张图片的内容:/path/to/your/image.jpg

模型会读取图片并给出描述。我试了几张不同类型的图片——风景照、代码截图、表格截图——识别准确率相当不错。代码截图能读出大致的语言和结构,表格截图能提取出大部分数据,风景照的描述比较泛但基本准确。

如果你要通过 API 调用多模态,Ollama 的 API 格式是这样的:

curl http://localhost:11434/api/generate -d '{ "model": "gemma4:4b", "prompt": "描述这张图片", "images": ["base64编码的图片数据"] }'

图片需要转成 base64 编码。这个在 Python 里用base64库两行代码就能搞定。我写了一个小脚本做批量图片描述,跑了几百张图,整体稳定性很好,没有出现崩溃或者显存泄漏的情况。

3.3 用 vLLM 搭建 API 服务的详细步骤

如果你需要服务化部署,vLLM 是更好的选择。Windows 下 vLLM 的安装稍微麻烦一点,因为它对 CUDA 版本有要求。我建议用 WSL2 来跑,比直接在 Windows 上折腾省事得多。

在 WSL2 的 Ubuntu 环境里,先装好 CUDA 驱动和 Python 环境,然后:

pip install vllm

Gemma 4 的权重可以从 Hugging Face 下载,也可以用 vLLM 直接在线拉取。启动服务的命令:

python -m vllm.entrypoints.openai.api_server \ --model google/gemma-4-9b-it \ --dtype auto \ --max-model-len 8192 \ --gpu-memory-utilization 0.9

这里几个参数解释一下。--dtype auto让 vLLM 自动选择合适的数据类型,一般是 bfloat16 或者 float16。--max-model-len控制最大上下文长度,设得越大显存占用越高,8192 是一个比较平衡的值。--gpu-memory-utilization 0.9表示用 90% 的显存来加载模型和 KV Cache,留 10% 给系统和其他进程。

启动之后,vLLM 会暴露一个兼容 OpenAI API 格式的接口,默认端口 8000。你可以用任何 OpenAI 客户端来调用:

from openai import OpenAI client = OpenAI(base_url="http://localhost:8000/v1", api_key="dummy") response = client.chat.completions.create( model="google/gemma-4-9b-it", messages=[{"role": "user", "content": "你好"}] ) print(response.choices[0].message.content)

我实测下来,vLLM 在并发 4 个请求的情况下,总吞吐量比 Ollama 单请求模式高出三倍多。如果你只是自己用,这个差距感知不明显;但如果有多个设备或者多个用户同时访问,vLLM 的优势就体现出来了。

3.4 量化版本的选择和实测对比

Gemma 4 的量化版本主要有 Q4_K_M、Q5_K_M、Q8_0 这几种。数字越大精度越高,文件也越大。我在 4070 Ti Super 上做了对比测试,用同一组问题分别跑不同量化版本,记录响应质量和速度。

量化版本文件大小显存占用生成速度质量主观评分
Q4_K_M约 2.5G约 3.5G45 tok/s8/10
Q5_K_M约 3.2G约 4.2G38 tok/s8.5/10
Q8_0约 5.1G约 6.5G28 tok/s9/10

Q4_K_M 和 Q5_K_M 的差距在日常对话中几乎感觉不到,但在需要精确推理的任务上——比如数学计算或者代码生成——Q5 明显更稳。Q8_0 的质量最好,但速度下降比较明显。我的建议是:日常使用 Q4_K_M 就够了,做正经工作用 Q5_K_M,Q8_0 除非你有特殊需求否则没必要

26B MoE 版本的量化选择逻辑类似,但因为 MoE 架构的特性,量化对质量的影响比稠密模型小一些。我跑 Q4_K_M 的 26B MoE,在很多任务上的表现比 Q8_0 的 9B 稠密版还好,速度也更快。这就是 MoE 的优势所在。

4. 实际使用中会遇到的问题和排查方法

4.1 显存不足的典型表现和处理

显存不足是本地部署最常见的问题。表现一般是:模型加载到一半卡住、推理过程中突然报错、或者系统变得极其卡顿。Ollama 在显存不足时会自动把部分层卸载到内存,但这个过程不是无感的——你会看到生成速度断崖式下降。

判断是不是显存问题,最直接的方法是看任务管理器里的 GPU 显存占用。如果接近满载,那就是了。解决办法有几个:

  • 换更小的量化版本:从 Q5 降到 Q4,显存占用能减少 20% 左右
  • 缩短上下文长度:Ollama 可以通过--num-ctx参数控制,默认是 2048,设成 1024 能省不少显存
  • 关闭其他占用显存的程序:浏览器、游戏、视频播放器都会占显存,跑模型之前最好关掉
  • 设置OLLAMA_GPU_LAYERS环境变量:手动控制卸载到 GPU 的层数,找到一个速度和显存的平衡点

我自己的经验是,16G 显存跑 26B MoE 的 Q4_K_M,把上下文设成 4096,GPU 层数设成 28,剩下的卸载到内存,速度大概在 12-15 tok/s,可以接受。如果你追求速度,那就得降模型尺寸或者升硬件。

4.2 模型输出质量不稳定的排查思路

有时候你会发现模型突然开始胡言乱语,或者回答质量明显下降。这种情况一般不是模型本身的问题,而是对话模板或者采样参数出了问题

Gemma 4 有自己特定的对话模板格式,如果你通过 API 调用时没有正确设置,模型可能会把系统提示和用户输入混淆。Ollama 内部帮你处理了模板,但如果你用 transformers 直接加载,就需要自己确保格式正确。检查方法是看模型的 tokenizer 配置里有没有chat_template字段。

采样参数方面,temperature 设得太高会导致输出发散。Gemma 4 的推荐 temperature 是 0.7 左右,top_p 0.9,top_k 40。如果你做的是需要确定性的任务,比如代码生成或者数据提取,把 temperature 降到 0.2 甚至 0.1 会稳定很多。

还有一个容易被忽略的点是上下文长度超限。当对话历史超过模型的最大上下文长度时,有些实现会直接截断,有些会报错。Ollama 默认会保留最近的若干轮对话,但如果你手动拼接了很长的 prompt,就可能出问题。养成习惯,长对话定期清理或者开新会话。

4.3 多模态输入常见错误和解决

多模态输入报错主要集中在图片格式和大小上。Gemma 4 支持的图片格式包括 JPEG、PNG、WebP 等常见格式,但图片尺寸太大会导致显存暴涨。我试过一张 4000x3000 的照片,直接让 16G 显存爆了。解决办法是在输入前把图片缩放到合理尺寸,一般长边不超过 1024 像素就够了。

另一个常见问题是图片编码错误。通过 API 传图片时,base64 编码不能有换行符或者多余的空格。Python 的base64.b64encode()默认不会加换行,但如果你从文件读取时用了readlines()就可能引入问题。用read()一次性读取二进制数据再编码,基本不会出错。

如果模型对图片内容识别不准,可以尝试在 prompt 里给一些引导。比如“这是一张代码截图,请提取其中的函数名”比“描述这张图片”能得到更精确的结果。Gemma 4 的多模态理解能力在同类尺寸的模型里算不错的,但它毕竟不是专门的 OCR 模型,对密集文字的识别还有提升空间。

4.4 性能调优的几个实用技巧

想让 Gemma 4 跑得更快,有几个立竿见影的调整:

第一,用 GPU 而不是 CPU。这个不用多说,差距是数量级的。确保 Ollama 检测到了你的显卡,ollama run的时候看日志里有没有CUDA或者Metal的字样。

第二,调整批处理大小。vLLM 里可以通过--max-num-batched-tokens来控制,设大一点能提高吞吐,但会增加显存占用和首 token 延迟。我一般设成 4096,平衡得比较好。

第三,用更快的存储。模型加载速度受硬盘影响很大,NVMe SSD 比 SATA SSD 快一倍以上,比机械硬盘快一个数量级。如果你经常切换模型,这个差距很明显。

第四,关掉不必要的后台程序。浏览器是显存和内存大户,跑模型的时候关掉能腾出不少资源。我实测关掉 Chrome 之后,26B MoE 的生成速度从 12 tok/s 提升到了 16 tok/s。

5. Gemma 4 在实际场景中到底能做什么

5.1 文档摘要和知识提取

这是我用得最多的场景。把一份几十页的 PDF 转成文本,丢给 Gemma 4 做摘要,效果比我预期的好。4B 版本就能抓住主要论点,26B MoE 版本能给出更结构化的摘要,甚至能按照我指定的格式输出。

具体操作上,我一般会把长文档切成 2000 字左右的片段,分别做摘要,然后再把摘要合并做二次摘要。这样做的原因是模型的上下文长度有限,一次性塞太多内容反而会丢失细节。切分的时候注意按段落或者章节切,不要从句子中间断开。

知识提取方面,Gemma 4 对结构化信息的抽取能力不错。我试过从合同文本里提取甲乙方、金额、日期这些字段,准确率在 90% 以上。对于格式比较规范的文档,基本可以直接用。格式混乱的就需要加一些 few-shot 示例来引导。

5.2 代码辅助和调试

Gemma 4 在代码任务上的表现比上一代有明显提升。我主要用它做三件事:解释代码、生成单元测试、排查报错

解释代码这个场景,4B 版本就够用了。把一段函数贴进去,问“这段代码在做什么”,它能给出比较准确的描述。生成单元测试的话,26B MoE 版本更好,它能考虑到更多的边界情况。排查报错是我觉得最实用的——把错误信息和相关代码一起贴进去,它经常能指出问题所在,比我自己翻文档快。

不过要注意,Gemma 4 不是专门的代码模型,在复杂算法题上不如专门的代码大模型。日常的脚本编写、bug 修复、代码审查这些任务,它完全能胜任。但如果你要做 LeetCode 难题或者复杂的系统设计,还是得用更大的模型或者专门的代码模型。

5.3 多模态场景的落地尝试

多模态是 Gemma 4 的亮点,我试了几个实际场景:

截图问答:截一张软件界面,问“这个按钮在哪”,模型能根据截图给出位置描述。这个在写操作手册或者做教程的时候很有用。

图表解读:把数据图表截图丢进去,问“这个趋势说明了什么”,模型能给出基本的趋势分析。对于简单的折线图和柱状图,解读准确率不错。复杂的多轴图表就需要更详细的引导。

图片内容审核:批量跑图片,让模型判断内容类型和是否包含敏感元素。这个场景对准确率要求高,Gemma 4 的表现中规中矩,适合做初筛,最终判断还是需要人工。

手写笔记识别:我试了几张手写笔记的照片,识别率一般。工整的印刷体没问题,潦草的手写体错误率比较高。这个场景建议还是用专门的 OCR 工具。

5.4 和其他本地模型的对比感受

我同时也在用 Llama 系列和 Qwen 系列的本地版本,简单说一下 Gemma 4 的差异。

和 Llama 3 相比,Gemma 4 的多模态能力是明显优势,Llama 3 的纯文本版本在多语言任务上更强一些。如果你主要做中文任务,Qwen 系列可能更合适,因为它的中文语料更丰富。Gemma 4 的中文能力比上一代好很多,但和专门优化中文的模型比还是有差距。

和 Qwen 2.5 相比,Gemma 4 在英文任务和代码任务上互有胜负,Qwen 2.5 的中文理解和生成更自然。MoE 架构上,Gemma 4 的 26B MoE 和 Qwen 2.5 的 MoE 版本思路类似,实际表现也接近。

选择建议:如果你的场景以英文为主、需要多模态、看重开源协议,Gemma 4 是很好的选择。如果以中文为主、不需要多模态,Qwen 系列可能更合适。如果要做微调,Gemma 4 的 Apache 2.0 协议让你没有后顾之忧。

6. 关于本地大模型的一些个人体会

我从最早用 8G 显卡硬跑 7B 模型开始,到现在家里两台机器分别跑不同尺寸的模型,中间踩过的坑不少。最大的感受是:本地跑大模型这件事,硬件门槛在下降,但软件门槛还在。Ollama 这类工具已经把门槛降得很低了,但遇到问题的时候,还是需要一些基础知识才能排查。

另一个感受是,不要追求一步到位。很多人一上来就想跑最大的模型,结果显存不够、速度太慢,体验很差就放弃了。正确的做法是从小模型开始,先跑通流程,再根据自己的硬件和需求逐步升级。Gemma 4 的 4B 版本在 8G 显存的机器上就能跑,体验已经比很多在线服务好了。

还有一点,本地部署的价值不在于替代在线服务,而在于补充。在线服务在模型能力、响应速度、稳定性上通常更好,但本地部署在隐私、成本、可控性上有优势。我的做法是:日常问答用本地模型,复杂任务用在线服务,敏感数据绝对不走云端。这样组合下来,既保证了效率,又兼顾了隐私。

最后说一个实际的小技巧:给模型写一个好的系统提示。Gemma 4 对系统提示的遵循度不错,你可以在系统提示里定义它的角色、输出格式、语言风格。比如“你是一个技术文档助手,回答要简洁,代码示例用 Markdown 格式”,这样出来的结果会规整很多。这个技巧在 Ollama 里通过 Modelfile 实现,在 vLLM 里通过 messages 数组的第一条 system 消息实现。花十分钟调好系统提示,后面能省很多事。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询