
1. 项目概述1.1 为什么要让 Ollama 跑在显存里用过 Ollama 本地跑大模型的朋友都应该有这种体验刚开始拿 CPU 跑跑一个 7B 模型每秒就那么两三个 token 蹦出来和 PPT 一样。日常问答还行但稍微长一点的上下文、复杂推理等待时间让人崩溃。其实大模型的推理速度瓶颈很大程度不在 CPU 算力而在内存带宽和并行计算能力。CPU 算力再强跑大模型也就是几十 GB/s 的内存带宽而且是串行的而 GPU 走的显存是 HBM 或 GDDR 颗粒带宽动辄几百 GB/s 到 TB/s 级别配合上几千个 CUDA 核心做并行计算大模型推理速度和 CPU 完全不在一个量级。我这里说个数据同一台机器CPU 跑 Llama 3.1 8B 的生成速度大概是 2-3 token/s配一张 RTX 4060 显卡之后直接来到 40-60 token/s快了二十倍不止。这就是为什么在做本地部署时让模型跑在显存里、而不是内存里是第一个要解决的关键问题。1.2 这篇博文适合谁这篇教程主要面向三类朋友刚装好 Ubuntu准备本地跑大模型但不知道怎么配 N 卡驱动的已经装好 Ollama但发现模型跑得很慢怀疑没用上 GPU 的想搞清楚驱动、CUDA、Ollama 这三者之间到底什么关系避免以后踩坑的如果你正好有 N 卡不管是最新的 RTX 40 系还是老旧的 GTX 10 系这套流程都适用区别只在驱动版本和模型选择上。我假设读者有基本的 Linux 命令行基础至少知道sudo、apt、ls这几个命令是干嘛的。如果完全没接触过也不用慌这里面每一步我都会写清楚照着敲就行。2. 先搞清楚三件事驱动、CUDA、运行时2.1 驱动、CUDA、Ollama 之间的关系很多初学者最容易搞混的一件事就是把显卡驱动、CUDA和AI 框架运行环境当成一个东西。实际上这是三个层次。最底层的是显卡驱动。它负责操作系统和 GPU 硬件之间的通信简单说就是让系统认识这张卡、能调度它。可以类比成你电脑上装的打印机驱动没有它系统根本不知道有这么个设备存在。第二层是CUDA Toolkit。它是一套开发工具包提供 CUDA 编程接口、运行时库、编译器等。绝大多数 AI 框架PyTorch、TensorFlow、Ollama 底层用的推理引擎都是依赖 CUDA 来做 GPU 计算的。不过这里有个容易误会的地方驱动本身已经包含了部分运行时库比如 libcuda.so只要驱动版本足够新有时候不装完整的 CUDA Toolkit 也能跑起来。第三层是推理运行时。Ollama 就是一个封装好的推理服务它把模型加载、KV Cache 管理、采样等逻辑全部打包了。它通过 CUDA 的运行时 API 去调用 GPU。那这三层的关系是驱动必须装否则一切免谈CUDA Toolkit 很多时候装了能省事但不装也不一定影响 Ollama 运行Ollama 是最终的目标它负责把模型加载到显存里并执行推理。2.2 先查看你手上有什么硬件在动手装驱动之前必须搞清楚三个信息显卡型号、当前驱动状态、Ubuntu 版本。打开终端输入这条命令查看显卡型号lspci | grep -i nvidia输出大概长这样01:00.0 3D controller: NVIDIA Corporation GA106 [GeForce RTX 3060 Lite Hash Rate] (rev a1)再看看当前有没有装过驱动nvidia-smi如果提示command not found说明驱动还没装如果已经输出了显卡信息说明驱动已经存在只是可能版本太老。最后确认系统版本这个直接决定驱动怎么装lsb_release -a我个人的建议是 Ubuntu 22.04 或 24.04因为它们的软件源里已经内置了相当新的驱动包装起来极其省心。要是还在用 18.04 或更老的版本建议先考虑升级系统别在旧版本上死磕老版本软件源里的驱动太旧跑新模型会遇到各种兼容问题。3. 驱动安装的三种方式与选型3.1 方式一Ubuntu 自带驱动检测工具最推荐Ubuntu 从 18.04 开始引入了一个非常好用的工具叫ubuntu-drivers。它会自动检测你的显卡型号并推荐最合适的驱动版本然后一键安装。直接执行sudo apt update sudo ubuntu-drivers autoinstall这个命令会自动安装推荐版本的驱动。如果你想先看看有哪些可用版本可以执行ubuntu-drivers devices输出结果会列出你的显卡、可用驱动版本以及哪个是推荐安装的标注recommended字样。一般输出的样子 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 modalias : pci:v000010DEd00002504sv00001462sd00008753bc03sc00i00 vendor : NVIDIA Corporation model : GA106 [GeForce RTX 3060 Lite Hash Rate] driver : nvidia-driver-470 - distro non-free recommended driver : nvidia-driver-535 - distro non-free driver : nvidia-driver-545 - distro non-free driver : xserver-xorg-video-nouveau - distro free builtin这里要注意一个细节recommended那个不一定是最新版本但它是和当前内核最匹配、最稳定的版本。新手朋友不用纠结什么最新版一定更好驱动稳定、不出问题才是最关键的。3.2 方式二图形化界面安装如果你用惯了 Windows 上的驱动安装方式Ubuntu 其实也有图形化入口。打开软件和更新Software Updates切到附加驱动Additional Drivers标签页系统会自动扫描并列出可用的显卡驱动。在这里选中要装的版本点击应用更改即可。这种方式和命令行本质相同都是调用软件源里的驱动包只是交互方式不同。我觉得对新手来说图形化界面更直观可以清楚地看到当前正在使用哪个驱动。不过有个前提这个界面需要系统能正常识别到 NVIDIA 显卡。如果系统用的还是 nouveau 开源驱动也能在列表里看到专有驱动的选项但装完要重启才能生效。3.3 方式三从 NVIDIA 官网下载 runfile 安装谨慎使用官网手动下载安装这是最灵活但也是最容易翻车的方式。我当时刚开始玩 Ubuntu 的时候就因为在官网下了个最新驱动结果装完直接黑屏最后是进 recovery 模式删掉驱动才恢复的。如果你确实需要手动安装这里有两个必须注意的地方第一必须禁用 nouveau。nouveau 是 Linux 内核自带的 NVIDIA 开源驱动它和官方的闭源驱动会冲突。禁用方法是在/etc/modprobe.d/blacklist-nouveau.conf里面写入两行blacklist nouveau options nouveau modeset0然后执行sudo update-initramfs -u重建 initramfs重启生效。第二runfile 安装前需要先停掉显示管理器GDM 或 LightDM否则会报错。一般执行sudo service gdm stop或者sudo service lightdm stop然后才是执行sudo chmod x NVIDIA-Linux-x86_64-xxx.run sudo ./NVIDIA-Linux-x86_64-xxx.run整个流程在命令行虚拟终端CtrlAltF3里操作比较靠谱。为什么我不推荐新手用官网手动装因为容易遇到驱动和内核版本不兼容、DKMS 模块编译失败、secure boot 拦路等各种问题。而ubuntu-drivers自动安装的驱动是经过 Ubuntu 测试验证的说明这个驱动在该系统版本下能正常编译、加载省去了一堆排查时间。提示如果你用的是笔记本注意一下显卡工作模式。NVIDIA Optimus 双显卡切换需要用prime-select命令管理比如prime-select nvidia强制切到独显。4. 验证驱动然后装 Ollama4.1 装完驱动怎么确认成功驱动装完重启后在终端执行nvidia-smi如果能正常输出类似信息----------------------------------------------------------------------------- | NVIDIA-SMI 545.23.08 Driver Version: 545.23.08 CUDA Version: 12.3 | |--------------------------------------------------------------------------- | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | || | 0 NVIDIA GeForce RTX 3060 Off | 00000000:01:00.0 On | N/A | | 30% 38C P8 10W / 170W | 320MiB / 12288MiB | 0% Default | -----------------------------------------------------------------------------看到右上角的CUDA Version那就说明驱动装好了而且当前驱动支持的 CUDA 版本也一起显示出来了。注意这个 CUDA Version 是指驱动支持的最高 CUDA 版本并不代表你一定装好了 CUDA Toolkit。但对 Ollama 来说基本不太需要关心这个——Ollama 自带了它需要的 CUDA 运行时组件所以只要你驱动支持足够新的 CUDA跑 Ollama 就没什么问题。如果你发现 N 卡没有输出先别急按这个顺序自查确认显卡在系统里能被识别lspci | grep -i nvidia确认内核模块加载了lsmod | grep nvidia确认没有 nouveau 顶着lsmod | grep nouveau应该无输出确认 UEFI 的 Secure Boot 没有拦截驱动签名说到 Secure Boot 这个真的有必要单独强调一下。如果你装完驱动后nvidia-smi提示类似Failed to initialize NVML: Driver/library version mismatch或者干脆找不到设备八成是 Secure Boot 把内核模块拦了。最简单粗暴的解决办法是进 BIOS 关闭 Secure Boot。如果你不想关那就得去 BIOS 里把驱动签名登记为 MOKMachine Owner Key这是在sudo ubuntu-drivers autoinstall之后、重启之前系统会提示你做的。我当时是在安装过程中按提示输入了密码重启后进了蓝屏界面选了 Enroll MOK确认签名后才能正常加载 N 卡模块。这个流程不少朋友第一次玩容易卡住。4.2 安装 Ollama 和国内镜像源问题驱动搞定后Ollama 的安装其实只是一个命令的事curl -fsSL https://ollama.com/install.sh | sh不过很多朋友会遇到一个问题下载太慢。Ollama 的主程序包本身还好真正要命的是模型下载——动辄几个 GB 起步从国外默认源拉模型真是要命。有个大坑是如果你直接执行ollama run llama3.1:8b它默认从https://registry.ollama.ai拉模型那个速度在很多时候你根本等不起。建议先设置镜像源。网上能找到不少国内可用的镜像地址大家可以搜一下ollama 镜像源相关的关键词把OLLAMA_HOST和镜像 registry 配好。另外 Ollama 主程序如果下不动可以去 GitHub Releases 页面手动下载 tar.gz 包解压后把ollama二进制放到/usr/local/bin/就行。路径放好后执行ollama --version确认。注意Ollama 默认监听 127.0.0.1:11434如果你想让局域网内的其他设备也访问大模型API需要配置环境变量OLLAMA_HOST0.0.0.0:11434。但注意如果只在本机用保持默认监听回环地址就好避免暴露给局域网里其他人。4.3 运行模型并确认是在显存上安装完成后拉一个适合你显存大小的模型比如 8G 显存跑 7B 或 8B 的 Q4_K_M 量化模型是合理选择ollama run llama3.1:8b这里说明一下模型选型逻辑以 8GB 显存为例7B/8B 的 Q4 量化模型加载权重大约占 5-6GB加上推理时的 KV Cache整好能塞进去。如果你选 13B 甚至更大的模型显存不够的时候会发生什么Ollama 会默认将部分层放到 CPU 上计算或者直接报CUDA out of memory。这也就是很多人问为什么我的 ollama 还是在用 CPU 跑的一个重要原因——模型超出显存容量Ollama 自动把部分计算下放到了 CPU。模型跑起来之后打开另一个终端ollama ps输出大概是这样NAME ID SIZE PROCESSOR UNTIL llama3.1:8b f5b8c30adf6b 6.1 GB 100% GPU 4 minutes from now看到PROCESSOR那一列是100% GPU就说明模型完全跑在显存里了这是最直接的证明。另外也可以用nvidia-smi在模型推理时查看显存占用watch -n 1 nvidia-smi你会看到MiB那列从几百蹭到 5000 以上GPU-Util 在推理时反复跳动这就是显存和算力同时工作的实时证据。4.4 如果 Ollama 显示在 CPU 上跑怎么办出现PROCESSOR显示100% CPU或部分GPU部分CPU的情况基本上离不开这几个原因驱动没装好或者版本太老。用nvidia-smi确认驱动正常。如果驱动没问题那就看下一个。模型太大显存放不下。看一下ollama ps里的 SIZE再对比显存总容量。如果差得不多可以设置OLLAMA_GPU_OVERHEAD来调整预留显存如果差太多老老实实换个更小的模型。Ollama 没有识别到 GPU 设备。执行ollama serve --verbose看启动日志里有没有inference compute id: 0这种字样以及是否打印了类似 no GPU 的日志。如果日志里说找不到 CUDA 驱动大概率是驱动版本太老。一个排查技巧先跑一个非常小的模型测试比如ollama run llama3.2:1b看ollama ps是不是100% GPU。如果小模型能上 GPU、大模型不行那基本就是显存不足的问题如果小模型也不上 GPU那基本是环境问题倒回去重新检查驱动。5. 显存不够时的优化思路5.1 降低模型量化等级显存是你硬件的天花板但模型文件本身是有压缩空间的。Hugging Face 和 Ollama 上的模型普遍提供不同量化等级的构建常见的有 Q4_K_M、Q5_K_M、Q8_0、FP16 等。以 Llama 3.1 8B 为例FP16 版本大概 16GBQ8_0 大约 8.5GBQ4_K_M 大约 5GB。同样一个模型只是量化等级不同显存占用差距能到三倍以上。代价是精度略有损失但对大多数日常问答、代码生成场景来说Q4_K_M 的损失几乎感知不到。选模型的时候先看它的量化格式再和你的显存对比留出至少 1-2GB 的余量给 KV Cache 和推理过程的中间数据这样才能跑得舒服。5.2 Ollama 环境变量调优如果模型大小合适但还是 GPU 利用率不高可以通过这几个环境变量来优化OLLAMA_NUM_PARALLEL控制同时处理的请求数默认是 1。如果并发请求多可以调大但这会同时增加显存消耗。OLLAMA_MAX_LOADED_MODELS允许同时加载几个模型。小显存建议设成 1免得多个模型一起挤爆显存。OLLAMA_FLASH_ATTENTION1开启 Flash Attention可以降低 KV Cache 的显存占用提升长上下文推理效率。这个在 8G 显存上实测挺有用。设置方法是在用户的 service 配置或环境变量文件里添加。用 systemd 管理的话一般是编辑/etc/systemd/system/ollama.service中的Environment行改完以后sudo systemctl daemon-reload sudo systemctl restart ollama。5.3 用 nvtop 实时监控显存nvtop是 Linux 下的显卡监控工具类似htop界面更直观地展示显存占用、GPU 利用率、温度、风扇转速。安装方式sudo apt install nvtop装好后直接运行nvtop就能看到实时的显存使用曲线。尤其当你在 Ollama 里并行跑多个模型的时候能立刻看清哪个进程吃掉了多少显存不用反复去执行nvidia-smi。6. 常见问题与排查实录6.1 驱动装完就黑屏这是新人最容易碰到的坑也是最吓人的屏幕瞬间黑了以为系统废了。其实处理方法很简单。黑屏的核心原因通常是驱动和内核版本不匹配或者和显示管理器冲突。处理思路重启后按住 Shift 进入 GRUB 菜单选择 Advanced options进入 recovery mode。在 recovery 菜单里选择 root 终端。手动把刚装的驱动卸载掉sudo apt purge nvidia-*。重启回到桌面换一个驱动版本重新装。还有一个常见触发点驱动安装过程要求你给 Secure Boot 设置 MOK你给它密码却又没在重启后完成确认导致模块没加载成功。然后是停在里面屏幕黑着就是因为显卡驱动模块没有正确加载。如果你不想冒险建议在装驱动之前先做好快照备份。Ubuntu 的 ZFS 文件系统支持快照但很多人的 / 目录还是 ext4。一个简单可行的备份方案是用timeshift做系统快照万一炸了 5 分钟就能恢复。6.2 nvidia-smi 报 Driver/library version mismatch这个错误经常发生在更新 N 卡驱动之后旧的内核模块还残留在内存里新驱动库文件已经换了版本对不上。一般重启就好使因为重启后所有旧模块都被清掉了。如果重启还不行那看看系统里是不是存在多个驱动包混着。干净的做法是全卸掉再来sudo apt purge nvidia-* sudo apt autoremove sudo reboot然后重新ubuntu-drivers autoinstall。6.3 Ollama 显示有 GPU 但推理依旧很慢这个情况苍蝇不叮无缝的蛋通常不是驱动层级的问题而是模型运行参数的问题。检查模型是否真正加载进显存ollama ps看 PROCESSOR 列。如果只是部分 GPU说明模型太大被拆到 CPU 算了换小模型或更低量化。如果模型没有预加载首次推理需要等待权重加载的时间这个不算慢第二次启动就会快很多。看nvidia-smi里的 GPU-Util如果推理时利用率不到 50%可能是模型并行度没上去可以试试OLLAMA_NUM_PARALLEL4这样的参数。6.4 显存不足怎么办从 8G 到 4G 的现实选择很多人的显卡其实是 4G 甚至更小的显存想跑 7B 模型就比较勉强。解决方案按优先级排序是选更小的模型比如qwen2.5:3b、llama3.2:3b或者量化更狠的qwen2.5:7b-q2_k。开启 Flash Attention降低 KV Cache 占用。调整OLLAMA_GPU_OVERHEAD默认会预留部分显存给 OpenGL 等任务适当调小能让 Ollama 把几乎所有显存都吃满。考虑升级显卡——说实话做本地大模型8G 是起点16G 起步才相对宽裕能跑 14B 甚至 32B 模型。6.5 Ollama 服务自动启动配置如果希望在系统启动时自动运行 Ollama用 systemd 管理最稳妥。安装脚本默认就会生成ollama.service但可以确认一下服务配置里有没有正确读到环境变量systemctl status ollama如果服务没起手动启动sudo systemctl enable ollama sudo systemctl start ollama改完/etc/systemd/system/ollama.service里的环境配置后务必执行systemctl daemon-reload否则服务用的还是旧配置。7. 实测记录与经验总结我这次测试的机器配置如下给大家做一个参考系统Ubuntu 22.04.4 LTS显卡NVIDIA GeForce RTX 3060 12GB驱动nvidia-driver-535通过ubuntu-drivers autoinstall安装内存32GBOllama 版本0.4.x在这个环境下用qwen2.5:7b模型做测试ollama ps显示100% GPU显存占用约 6GB单线程生成速度稳定在 35-50 token/s 区间表现非常满意。我另外在另一台装了 GTX 1080 Ti 11GB 的机器上重复了这套流程驱动版本用了 470 的 LTS 分支同样没有问题。这也验证了老卡没必要追新版驱动LTS 分支反而最稳。说到最后我个人摸索下来最重要的一个心得是先确认能用再去优化好用。很多人拿到机器第一步就想着装最新驱动、装 CUDA、配置各种环境变量但忽略了最基础的一步——先跑通一个小模型试试水。小模型能在 GPU 上正常推理再慢慢上大模型出问题时排查范围一下子就缩小了。另一个建议是在查询任何故障的时候把ollama serve --verbose和nvidia-smi的输出都保留下来绝大多数问题都能从这两段日志里找到线索。社区里提问的时候把这两段日志贴全别人帮你定位问题的效率也会高很多。