在 Ubuntu 上装完 Ollama,跑起来却还是 CPU 在扛、token 出得慢吞吞,这是最常见的卡点。多半不是模型选错,而是驱动没装全、运行时缺一块,或者你是在容器里跑、显卡根本没透进去。这篇按「先确认硬件认得显卡、再让 Ollama 用上、最后进容器也不丢」的顺序给一套排查动作,每一步都有可验证的结果,避免改一堆配置却不知道是哪步起作用。
在 Ubuntu 上装完 Ollama,跑起来却还是 CPU 在扛、token 出得慢吞吞,这是最常见的卡点。多半不是模型选错,而是驱动没装全、运行时缺一块,或者你是在容器里跑、显卡根本没透进去。先别急着换模型或调参数,按「硬件认得卡 → Ollama 用上卡 → 容器里不丢卡」这条线走一遍,每步都能看到明确结果。
这篇文章不给你抄一段配置就完事,而是给一套排查顺序。每一步都配一个可验证动作:跑完能看到设备列表、日志里有识别提示、或者同一段提示词的输出速度有变化。这样改配置时你知道是哪一步起了作用,而不是全改一遍靠碰运气。显卡型号、显存匹配这类静态口径,到站内资料页核对当时的数字,别背旧结论。
第一步:先把驱动和运行时这条路走通
系统认不到显卡,后面调 Ollama 全是白费。Ubuntu 上优先用系统包管理装显卡驱动,装完先跑一条状态命令确认:能看到设备列表和驱动版本,才算这步过了。如果命令直接报错或设备为空,先解决驱动,别往下走。
- 确认系统识别到显卡跑显卡状态命令,输出里要有设备名和驱动版本;没有设备就回到驱动安装环节查。
- 补齐运行时那一层核对显卡驱动与运行时版本的对应关系,缺哪一层用系统包管理补,别混装多套来源,混装是最常见的冲突来源。
- 验证驱动可用再跑一次状态命令,看到驱动版本和设备列表都正常,这一步才算过。过不了就先别碰 Ollama 参数。
有人喜欢从官网下.run 包手动装驱动,版本更新快但容易和系统内核升级打架,升级后黑屏或显卡掉线很常见。小团队没有专人维护跑更新日志的话,走系统包管理更稳,代价是版本不一定最新,但对 Ollama 推理够用。
第二步:让 Ollama 真的把层卸载到显卡上
驱动通了不代表 Ollama 一定用显卡。Ollama 会自己找设备,但显卡太老、驱动版本太旧或显存不够时,它会安静地退回 CPU,界面上不会弹错误,你只感觉慢。所以必须主动确认,看日志、看速度,别靠感觉。
Ollama 服务的启动日志是关键证据:有没有识别到显卡、有没有明确写出回退到 CPU。看完日志再用同一段提示词跑一次,对比改配置前后的输出速度,速度有明显变化才说明加速真的接上了。显存不够时,用环境变量控制卸载到显卡的层数,层数调低就多依赖内存,速度换稳定。
- 多卡机器要确认任务落在哪一张卡上,别派到没显存的那张
- 显存刚好卡在模型需求边缘时,先降层数试稳定,再考虑换模型
- 日志里出现回退提示就是明确信号,先从驱动和显存两个方向查
- 对照标准(显卡规格、显存与模型参数量的匹配)到站内 /compute/gpus 和 /models/deploy 核对当时的数字
什么情况下这步走不通:显卡型号本身较老,或者显存远小于模型需求,这时候调环境变量收益有限,反而可能因为层数太少把压力全甩给内存,表现更差。这种场景该回到选型环节,换个更小的量化档位更实际。
第三步:容器里跑,显卡怎么透进去
容器里没显卡,九成是容器运行时工具链没装,或者启动参数没声明显卡可用。宿主上跑得好好的,一进容器就退回 CPU,这种「表面能跑、实际没加速」最容易被忽略,因为服务照样起来,只是慢。
启动容器时要显式声明要用显卡,宿主的驱动版本和容器里的运行时版本别差太远,跨版本太大会直接报错或静默回退。挂载模型目录时注意权限,读写不对会表现为模型加载失败,很容易被误判成显卡问题,排查时先分清是加载错还是算得慢。
| 现象 | 更像哪类问题 | 先查什么 |
|---|---|---|
| 容器内跑得慢,宿主正常 | 显卡没透进去 | 启动参数是否声明显卡、工具链是否安装 |
| 模型加载直接失败 | 挂载目录权限 | 目录读写权限,不是显卡问题 |
| 日志有设备但推理仍慢 | 版本不匹配或层数过低 | 宿主与容器运行时版本,卸载层数设置 |
第四步:确认加速生效,以及不生效时按什么顺序查
最后一步不装新东西,只做验证和回退排查。验证方法很直接:同一段提示词,改配置前后各跑一次,比较输出速度。速度有明显变化说明加速接上了;如果几乎没变,说明前面某一步没生效,按固定顺序从下往上查,别乱改参数。
- 比速度同一提示词分别跑改配置前后,看输出速度有没有明显变化,这是最直接的生效证据。
- 查系统是否认卡回到第一步,确认显卡状态命令能看到设备和驱动版本。
- 查驱动与运行时版本确认两层版本对得上,没有混装多套来源。
- 查 Ollama 日志看启动日志有没有识别到显卡、有没有回退到 CPU 的提示。
- 查容器是否透卡如果跑在容器里,重新按第三步确认启动参数和工具链。
这套流程的适用边界要讲清楚:纯 CPU 机器、无独立显卡的笔记本、显存远小于模型需求的场景,它解决不了,硬走只会浪费时间,得回到选型环节。另外,如果目的是跨多个环境做性能对比,光靠本机跑提示词不够,用站内工具做标准化对比更省事,具体口径和当时的数字到站内页面核对。
下一步如果你已经跑通加速,想知道自己这套配置在同类环境里算快还是慢,或者想比较不同显卡上的推理表现,去站内工具页做一次标准化速度对比,比单机肉测更靠谱。→常见问题
装完 Ollama 还是 CPU 在跑,最先查什么?
先查系统层认不认显卡、驱动版本对不对,再看 Ollama 服务启动日志里有没有识别到显卡或出现回退提示。很多情况是驱动装了但运行时没装全,Ollama 找不到可用设备就静默退回 CPU,表现就是「能用但很慢」,不会报错。
Docker 里跑 Ollama 用不上显卡,怎么办?
大概率是容器运行时工具链没装,或者启动时没声明显卡可用。先在宿主确认显卡正常,再检查容器启动参数是否显式开放了显卡,然后进容器里重新验证一次;宿主能跑不代表容器里能跑,这两件事要分开验。
显卡显存不够,是不是只能换卡?
不一定。可以先降量化档位、减少卸载到显卡的层数,或者换更小的模型,用速度换稳定。只有当显卡型号本身太老、或者你要跑的模型规模远超显存时,换硬件才更划算;具体档位怎么选可以参照站内的显存与量化对照资料。