ollama 使用gpu linux

模型与算力

讲清 Ollama 在桌面 Linux 与 Windows 上怎么真正吃到 GPU 加速,以及不生效时按什么顺序排查。

在 Linux 桌面或 Windows 上装了 Ollama,跑起来却发现速度跟纯 CPU 差不多,或者显卡明明有货却只用了一块——这类问题多半不是模型选错了,而是驱动、运行时或显存分配没对上。这篇按「先确认有没有用上 GPU,再确认用得对不对,最后排查不吃 GPU 的常见原因」的顺序走一遍,并给一份可直接照做的排查清单。

在 Linux 桌面或 Windows 上装好 Ollama,跑第一句提示词却发现慢得像纯 CPU,或者机器上明明插了两张卡却只有一张在干活——这类问题基本不是模型选错,而是驱动、运行时或者显存分配没对上。下面按「先确认有没有用上 GPU,再确认用得对不对,最后排查为什么不吃 GPU」的顺序走一遍,每一步都给判断依据,不做玄学猜测。

先说明适用范围:这篇针对的是桌面环境,也就是你自己有一台机器、装了图形界面、偶尔还要看视频打游戏那种。服务器无头环境、容器集群里的批量推理,关注点不一样,下面有些步骤不适用,遇到时我会标出来。

第一步:确认 Ollama 到底有没有用上 GPU

很多人是从「感觉快不快」来判断的,这不靠谱。同一台机器上跑同一个模型,GPU 和 CPU 的生成速度差距通常是数量级的,但你得先有个基线。做法是先把 GPU 关掉跑一次,记下每秒生成的字数,再开 GPU 跑同一个提示词,两次都用短提示词、别让上下文涨上去,对比倍数。倍数很小说明根本没挂上,倍数可观但离预期差得远,说明挂上了但没跑满,这是两种不同的病。

  • 看服务启动日志里有没有显卡识别、显存大小、计算能力这几类条目,一条都没有就是没挂上,不是慢的问题
  • 看运行中的动态占用:显存和核心利用率要在生成过程中持续波动,只看任务管理器或者 nvidia-smi 的一次快照说明不了问题
  • 把同一提示词在开 GPU 与关 GPU 两种状态下各跑一次,用生成速度的倍数差做判断
  • Linux 上用带刷新间隔的监控命令连续看几秒,比截一张图有用
  • Windows 上用任务管理器性能页切到独显那一栏,集显那一栏动了不代表 GPU 加速生效
# Linux 上连续观察显卡占用,每 1 秒刷新一次
watch -n 1 nvidia-smi
# 如果没有 nvidia-smi,先确认你用的是哪家卡、驱动装没装

驱动与运行时:Linux 和 Windows 卡点不一样

确认没挂上 GPU 之后,问题多半在驱动或运行时这一层。这层的麻烦在于它经常静默失败:Ollama 不会报错说「我没找到你的卡」,而是直接回落到 CPU,日志里看起来一切正常,只是慢。所以判断标准是日志里有没有明确的显卡条目,而不是进程有没有崩。

平台常见卡点怎么验证
Linux内核驱动与用户态运行时没对齐,缺一个都会回落 CPU日志里是否识别到卡;监控命令能否读到显存
Linux装了驱动但版本与卡不匹配,能识别却跑不起来看运行时报错,而不是看有没有装包
Windows驱动版本偏旧或卡太老,不在当前支持范围去显卡厂商官方渠道核对驱动与型号支持情况
双显卡机器默认设备选成集显,独显闲置任务管理器里看是哪一块在动

需要提醒的是,这套判断标准在无头服务器或者容器里不完全适用:容器要额外确认设备有没有透传进去,宿主机有卡不代表容器里有卡。桌面环境一般不用操心这个。

多卡与显存卸载:让模型真正装得下

GPU 挂上了,不代表用得对。最常见的两种情况:一是显存装不下整个模型,系统把一部分层卸载到内存或 CPU 上跑,整体速度被拖下来;二是多卡机器上只用了其中一张,另一张在待机。这两种表现都是「有加速但不够快」,和「完全没加速」完全不同,别混为一谈。

判断方法很直接:先看你的显存上限,再看你选的模型规模,两者差多少心里要有数。显存刚好装下、留一点余量,是最舒服的状态;差得比较多,就得接受速度下滑,或者换更小的量化版本。多卡的话,确认是分摊层数还是只用了一张,表现差异很大,改配置之前先把这一点确认清楚。

显存卸载
模型装不下时把一部分层放到内存或 CPU 上跑,能跑但会慢
多卡分摊
把模型的层分到多张卡上,需要显存总量够且配置正确
上下文长度
上下文越长占用的显存越多,长对话更容易触发卸载

模型规模、量化程度、上下文长度和显存之间的对应关系,各家说法不一,别硬记数字。可以到 部署测算(/models/deploy) 页面按你手上的卡和想跑的模型对一遍,也可以到 几张卡够用(/compute/sizing) 看看同级别的组合怎么选,当时的数字以页面为准。

不生效时的排查顺序与验证方法

排查最忌讳一次改一堆参数再跑一遍,最后也不知道是谁起的作用。正确做法是固定一个顺序,每次只动一个变量,用同一个提示词对比生成速度。下面这个顺序是从底层往上层走的,跳过任何一步都可能白忙。

  1. 先确认驱动与运行时看日志有没有显卡条目,监控命令能不能读到显存。这一步不过,后面全是空谈。
  2. 再确认服务状态改完配置重启 Ollama 服务,确认新进程起来了,旧进程没有残留占着显卡。
  3. 然后重新加载模型服务重启不等于模型重载,显式把模型再拉起来一次,确认加载日志里显示的是 GPU 而不是 CPU。
  4. 接着看并发与上下文同一时间多个请求、上下文开得很大,都会吃显存并可能触发卸载。先降到单请求、短上下文测基线。
  5. 最后做对照验证改回上一个状态再跑一遍,确认速度差异确实来自你刚动的那一项,而不是环境波动。

这套顺序的例外是无头服务器和容器:容器里要先确认设备透传,再谈驱动和运行时,顺序要往前挪一步。桌面用户按上面走就够了。

判断 GPU 有没有生效,靠的是日志条目和动态占用,不是靠手感。
下一步想让判断更有依据,可以拿站内的测速工具跑一次基线,再对照部署测算和显卡选型页面,把「我这台机器该跑什么模型、留多少显存」这件事一次算清楚。

常见问题

Linux 上装了 Ollama,怎么快速判断有没有走 GPU?

先看服务启动日志里有没有显卡与显存识别记录,再跑同一提示词,对比有无 GPU 时的生成速度差异。如果两者差不多、显存占用几乎不动,基本就是回落到 CPU 了,接着按驱动、运行时、默认设备三项往下查。

Windows 上用 Ollama 需要单独装什么吗?

装好官方程序后,关键在显卡驱动是否够新、型号是否被支持,以及机器是不是把集显当成了默认设备。装完先用启动日志确认识别结果,再用同一提示词跑一遍看速度,别只凭任务管理器里显卡有占用就认定加速生效了。

模型太大装不进显存,还值得开 GPU 吗?

部分加速仍然比纯 CPU 快,但一旦大量层卸载到内存,速度会掉得很难看。先算清显存能装下多少,再决定是换更小的量化档位还是换更小的模型。相关规格与显存对照可到 部署测算(https://aitest123.com/models/deploy) 核对当时的数字。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。