我单位的笔记本上跑着一个本地模型:Ollama 加 qwen3.5 4B,显卡是 RTX 3050 Laptop,4GB 显存,32GB 内存。平时工作台的项目顾问通过 API 调它,一次短 JSON 调用 0.6 到 1.4 秒,一直很顺。
有一天我想在命令行里确认一下模型还活着,敲了一句 ollama run qwen3.5:4b "回复OK" --verbose,结果等了一分半钟,才收到一句“好的,OK!”。同一个模型、同一块卡,为什么差这么多?顺着这次排查,正好把小显卡跑本地模型的三个常见坑都碰了一遍。
一、思考模式:1357 个 token 换一句“OK”
第一次的统计是这样的:
| 指标 | 数值 |
|---|---|
| 总耗时 | 1 分 36 秒 |
| 加载耗时 | 约 5 毫秒(模型已在内存里) |
| 生成 token 数 | 1357 |
| 生成速度 | 14.18 token/秒 |
答案只有几个字,却生成了 1357 个 token。翻回输出才看到,模型先“想”了一大段:用户是不是在测试我、只回 OK 会不会太生硬、要不要加“好的”……反复推敲了十几轮,最后才落笔。
这是带思考能力的模型在命令行里的默认行为:先输出推理过程,再给答案。对复杂问题它有用,对“回复 OK”这种指令完全是浪费。关掉再测:
ollama run qwen3.5:4b "回复OK" --think=false --verbose
OK
total duration: 7.41s
load duration: 7.07s
eval count: 2 token(s)
eval duration: 57ms
eval rate: 34.91 tokens/s
真正生成只用了 57 毫秒。程序里调用时同理:Ollama 的 /api/chat 请求里带上 "think": false,再用 "format": "json" 限定输出,就是我的顾问平时只要一秒左右的原因。命令行测得慢,不代表程序里慢,先确认两边是不是同一种调用方式。
二、冷启动:7 秒花在加载上
第二次的 7.4 秒里,7.07 秒是加载模型。Ollama 默认在模型闲置 5 分钟后把它从显存里卸掉,下一次调用就要重新加载。
- 每天跑一次的批处理(比如我的顾问和日报):多等 7 秒无所谓,反而应该让它卸载,把显存还给别的程序。
- 需要即时响应的场景(比如以后想接到界面上做报警解释):第一次调用多等 7 秒是不能接受的。可以在请求里带
"keep_alive": "30m",或者设置环境变量OLLAMA_KEEP_ALIVE,让模型常驻;也可以在程序启动时先发一个空请求预热。
三、显存放不下:一半在 CPU 上跑
14 token/秒对一个 4B 模型来说偏慢。ollama ps 给出了原因:
NAME SIZE PROCESSOR CONTEXT
qwen3.5:4b 3.7 GB 50%/50% CPU/GPU 4096
模型文件 3.4GB,加上 4096 上下文的 KV 缓存,运行时要 3.7GB。显卡标称 4GB,但 Windows 桌面、浏览器和其他程序也要占一部分显存,剩下的放不下整个模型,Ollama 就把一半的层放到 CPU 上算。只要有层在 CPU 上,整体速度就由慢的那一半决定。
能做的事情按代价从低到高排:
- 先看谁占着显存:
nvidia-smi列出占用显存的进程,浏览器的硬件加速经常是大户。 - 缩小上下文:短 JSON 任务用不到 4096,请求里把
num_ctx调到 2048,KV 缓存跟着变小。 - 打开 Flash Attention 并量化 KV 缓存:环境变量
OLLAMA_FLASH_ATTENTION=1、OLLAMA_KV_CACHE_TYPE=q8_0,重启 Ollama 生效。 - 换更小的量化版本:精度会下降,要先用自己的评测集确认效果没变差。
前三项我还没在这块卡上逐一实测,改完以后看 ollama ps 的 PROCESSOR 列有没有变成 100% GPU 就知道效果。第四项要谨慎:我在同一块卡上测过 2B 模型,项目顾问的漏报率高达 70%,小不等于能用。
四、一分钟自检清单
以后觉得本地模型“慢”,我按这个顺序看:
- eval count 是不是远大于答案长度?是,就是思考模式或输出没约束,关掉思考、限定格式。
- load duration 是不是占了大头?是,就是冷启动,按场景决定要不要常驻。
ollama ps是不是100% GPU?不是,就是显存不够,先清显存、缩上下文。- 都正常还是慢?再考虑换硬件或换模型。
小结
4GB 显卡能跑 4B 模型,但只适合“事件触发、短输出”的用法:关掉思考、限定格式、控制上下文,一次调用一秒左右,足够做提醒、摘要、报警解释这类辅助工作;想要并发或长文本生成,就该考虑专门的模型机了。关于在这块卡上怎么把小模型调到稳定可用,可以看《规则定底线,模型来措辞》。
