装完 ollama,拉了个模型跑起来,结果发现回答慢得像打字机,风扇也不转——多半是它在用 CPU 硬扛。这篇不聊玄学,只讲三件事:怎么确认 ollama 到底认没认到你的显卡、怎么指定它用哪块卡、显存不够时按什么顺序调参。每步都给你能直接敲的命令和判断标准,看完能自己定位问题出在哪一层。
装完 ollama,拉个模型一问一答,结果慢得像老式打字机,风扇还纹丝不动——大概率它在用 CPU 硬扛。这事不玄学,核心就三层:ollama 有没有认到你的显卡、认到的是不是你想要的那块、显存塞不下时该怎么退让。下面按这个顺序手把手走一遍,每步都给你能直接敲的命令和判断标准。
先说清一件事:ollama 只在服务启动那一刻探测加速设备,运行中途插拔卡或者改驱动,它是不知道的。所以凡是改动显卡相关的配置,改完都记得重启服务再测,否则你测的还是旧状态,白折腾。
先确认 ollama 到底有没有认到显卡
第一步不是调参,是搞清楚现状。ollama 启动时会在日志里打印它探测到的加速设备,没看到相关记录,说明它压根没认到卡,这时候改任何参数都没意义,得先回去补驱动和运行时环境。
- 看启动日志重启 ollama 服务后翻启动输出,找有没有识别到显卡的记录;找不到就是没认到,先别往下走。
- 看模型跑在哪执行 ollama ps,重点看模型当前落在 CPU 还是 GPU;落在 CPU 上就说明没吃上卡。
- 分清卡的阵营N 卡看驱动和容器工具链是否齐全,A 卡和核显走另一条路径,Intel 又是第三条。别把别人机器的结论直接套到自己头上。
还有一类坑:日志显示认到了卡,但 ps 里模型还是在 CPU。这通常是运行时组件版本对不上,或者权限没给到,属于环境问题,不是 ollama 的锅。遇到这种,先核对驱动与运行时版本,再谈调优。
指定它用哪块卡:多显卡机器的正确姿势
单卡机器这块基本不用管。多卡机器就不一样了,ollama 默认会挑它认为最合适的一块,未必是你想留给它的那块,结果可能是主力卡被占满、副卡闲着。
- 先确认现状:跑起来后用 ollama ps 看它实际用了哪块,别假设。
- 再用环境变量控制可见设备,把不想被占用的卡排除掉;改完必须重启服务才生效。
- 如果某块卡被别的程序占着,ollama 会退回 CPU 或者部分卸载,表现就是速度忽快忽慢,先把占卡的程序关掉再测。
- 不适用的情况:统一内存架构的机器上,『指定哪块卡』这个概念本身就不成立,重点变成控制整体内存占用。
| 现象 | 大概率原因 | 先做什么 |
|---|---|---|
| 日志认到卡,ps 显示 CPU | 运行时组件或权限问题 | 核对驱动与运行时版本 |
| 速度忽快忽慢 | 卡被别的程序抢占 | 关掉占卡程序再测 |
| 只想用某一块卡 | 默认选择不合预期 | 用环境变量限定可见设备并重启 |
| 多卡但只用上一块 | 未显式指定设备 | 明确指定可见设备后对比测试 |
改环境变量这步别怕麻烦,它是性价比最高的办法:一行配置就能把不该用的卡排除掉。改之前先记下当前表现,改完用同样的提示词跑一遍,两次一对比就知道有没有生效,比凭感觉靠谱。
显存不够时的调整顺序:从便宜到贵
显存不够是最常见的卡点,但很多人一上来就想着加卡。正确做法是有一个从便宜到贵的调整顺序,先把不花钱的档位试完,再考虑硬件。
- 换更小的量化档位量化档位越低,显存占用越小,质量也会有损失。这个取舍值不值得,可以到 /ai-dict/category/tech 把相关术语先看明白再决定。
- 调低驻留显存的层数让一部分层留在内存里,速度会掉但至少能跑起来,适合先验证功能能不能用。
- 缩短单次请求的上下文长上下文对显存的占用往往比模型参数本身更凶,先把上下文压下来试试。
- 换更小的模型前几档都救不回来再换模型;想算清楚差多少,去 /models/deploy 按你的模型和硬件核对当时的数字。
这四档的代价是递增的:前两档只影响速度或质量,第三档影响你一次能喂多少内容,第四档才是换思路。按顺序试,别一上来就上最贵的那档。想横向看看同类部署方案,也可以到 /rankings 看当时的对比结果。
跑起来之后怎么确认真的用上了卡
能跑不等于跑对。确认方式就三条:看 ps 里的分布字段,确认模型整体在 GPU 上而不是部分卸载;看生成速度稳不稳,忽快忽慢通常意味着有层在被反复搬运;用测速工具量一条自己的延迟基线,改配置后再测一次对比。
| 检查项 | 正常表现 | 异常时往哪查 |
|---|---|---|
| ps 分布字段 | 模型整体在 GPU | 是否部分卸载、层数设置是否合理 |
| 生成速度 | 稳定可复现 | 是否有层在显存和内存间来回搬 |
| 多卡占用 | 符合你的预期 | 可见设备配置有没有生效 |
| 对比基线 | 改配置前后有明确差异 | 测速方式是否一致、提示词是否相同 |
最后说个容易忽略的点:测速要固定变量。同样的模型、同样的提示词、同样的上下文长度,只改一个配置再对比。一次改三四个参数,速度快了也不知道是谁的功劳,出了问题也定位不到哪一层。
下一步按上面的顺序把现状确认一遍,再决定动哪一档;拿不准的模型和硬件组合,去站内部署页面按当时的数字核对一遍再动手。→常见问题
ollama 装好了但一直用 CPU 跑,最先查什么?
先看服务启动日志里有没有识别到显卡设备,这一步不对后面都不用查。日志正常但 ollama ps 显示在 CPU 上,多半是显卡被其他程序占着,或者驱动与运行时没装全。关掉占卡程序、重启 ollama 服务再试一次,多数情况就好了。
多块显卡的机器,怎么让 ollama 只用其中一块?
靠环境变量把不想用的设备排除掉,让 ollama 只能看到你留给它的那块卡,改完重启服务才生效。这样做的副作用是那张卡也不能给别的程序共用了,多任务场景下要自己权衡是独占还是共享。
显存刚好差一点,先动哪个参数?
优先降上下文长度和量化档位,这两项对显存的压缩最直接、改动成本最低。其次才是调低显存驻留层数,因为它会明显拖慢速度。换模型是最后一步,前面都试过还不行再动。