Ollama GPU 加速配置指南 (Windows & Linux),让 AI 推理快到飞起!
感觉 Ollama 只用 CPU 跑模型有点慢吞吞?想不想体验那种秒回的 AI 速度?好消息!如果你的电脑有块不错的 NVIDIA 显卡(GPU),那它就是你的秘密武器!GPU 天生就是并行计算小能手,让它来处理 AI 推理,速度能甩 CPU 好几条街!
这篇指南,就是带你一步步解锁 Ollama 的 GPU 加速能力,无论你是 Windows 党还是 Linux 控,都能轻松搞定!
为啥要用 GPU 加速?简单说就是:
- 快!快!快! 大幅缩短等待时间,模型响应速度肉眼可见地提升。
- 体验更丝滑: 实时聊天、代码生成?GPU 让交互更流畅,告别卡顿。
- 驾驭更大模型: GPU 有更大的“肚子”(显存),能跑得动那些更复杂、更厉害的大家伙。
动手前的准备工作 (请确认!)
在咱们开始之前,请确保你的“装备”符合要求:
- 你有块 NVIDIA 显卡: 这是必须的!AMD 或 Intel 核显暂时还不行哦。
- 装好了最新的 NVIDIA 驱动: 这是让系统和显卡正常沟通的关键。怎么检查?
- 打开 命令提示符 (Windows) 或 终端 (Linux)。
- 输入
nvidia-smi
然后回车。- 成功: 如果你看到一堆关于你显卡型号、驱动版本、温度、显存占用等信息,恭喜,驱动没问题!
- 失败: 如果提示“不是内部或外部命令”或类似错误,说明你得去 NVIDIA 官网下载并安装最新的驱动程序了。
- CUDA 工具包?(通常不用你操心): CUDA 是 NVIDIA 搞的一套让程序能利用 GPU 计算的东西。好在 Ollama 通常很聪明,能自己搞定这部分依赖。你可以用
nvcc --version
检查下(方法同上)。- 如果能看到 CUDA 版本号,说明你装过。
- 如果提示找不到命令,也别急着装!Ollama 很可能不需要你手动安装。只有在后面配置完 GPU 加速,发现还是用不了时,再考虑是不是需要手动装一下 CUDA Toolkit。
- (可选) 知道你的 GPU“身份证号”(UUID): 如果你有不止一块 NVIDIA 显卡,想指定 Ollama 用哪一块,就需要知道它的 UUID(唯一标识符)。
- 还是在 命令提示符/终端 里,输入
nvidia-smi -L
回车。 - 你会看到类似
GPU 0: NVIDIA GeForce RTX 3080 (UUID: GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
这样的信息。把那个GPU-
开头的长串字符串记下来,这就是你想指定的那块卡的 UUID。
- 还是在 命令提示符/终端 里,输入
准备好了?我们分系统开搞!
Windows 系统:让 GPU 发光发热!
第一步:设置“魔法开关”环境变量
我们要通过设置一个叫“环境变量”的东西,告诉 Ollama:“嘿,用 GPU 干活!”
找到“环境变量”设置:
- 最快的方法:按
Win
键,直接搜“环境变量”,然后选“编辑系统环境变量”。 - 在弹出的“系统属性”窗口里,点右下角的“环境变量(N)...”按钮。
- 最快的方法:按
创建
OLLAMA_GPU_LAYER
变量:- 在下方的“系统变量(S)”区域(这样对所有用户生效),点“新建(W)...”。
- 填入以下信息:
- 变量名:
OLLAMA_GPU_LAYER
- 变量值:
cuda
(小写,这就是告诉 Ollama 使用 CUDA 路径来启用 GPU)
- 变量名:
- 点“确定”保存。
小科普:系统变量 vs 用户变量? 系统变量对电脑上所有用户都生效,用户变量只对当前登录的用户生效。一般建议设为系统变量。如果同一个变量名在两处都设置了,用户变量的优先级更高。
(可选) 如果你有多个 GPU,指定用哪块:
- 还记得前面查到的 UUID 吗?派上用场了!
- 同样在“系统变量”区域,再新建一个变量:
- 变量名:
CUDA_VISIBLE_DEVICES
- 变量值: 粘贴你之前记下的 GPU UUID,比如
GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- 变量名:
- 点“确定”保存。
为啥用 UUID 不用数字编号 (0, 1, 2...)? 强烈推荐用 UUID!因为 GPU 的数字编号(像
nvidia-smi
里显示的 0, 1)可能会因为驱动更新、重启甚至插拔硬件而改变,导致你的设置失效。UUID 是显卡独一无二的“身份证”,稳定可靠!
第二步:重启!重启!重启!(重要的事情说三遍)
- 超级关键: 为了让 Windows 和 Ollama 完全识别并应用你刚才设置的环境变量,强烈建议你重启电脑!虽然有时只重启 Ollama 或终端也行,但重启电脑是最保险、最彻底的方式,确保万无一失。
第三步:验证 GPU 是否已被“征用”
- 运行 Ollama 模型:
- 打开一个新的 命令提示符 窗口。
- 随便运行一个模型,比如:
ollama run llama3
(或者你常用的模型)。让它跑起来。
- 召唤
nvidia-smi
监控:再打开一个 命令提示符窗口。
输入
nvidia-smi
并回车。观察输出:
- 看到 GPU 利用率 (GPU-Util) 不再是 0% 了吗?
- 看到显存使用量 (Memory-Usage) 有明显增加了吗?
- 在下方的 Processes 部分,能看到有
ollama
或类似进程在使用 GPU 显存吗? - 如果以上几点都满足,那么恭喜!你的 Ollama 已经成功用上 GPU 加速了!享受速度的提升吧!
你也可以尝试运行
ollama ps
,虽然它不直接显示 GPU 信息,但确认 Ollama 进程在运行是前提。主要还是靠nvidia-smi
来确认 GPU 是否在工作。
Linux 系统:释放企鹅的 GPU 潜力!
Linux 下,如果 Ollama 是通过 systemd 服务运行的(很多安装方式默认是这样),我们需要修改服务配置文件来指定 GPU。手动改容易出错,我们用个小脚本来帮忙。
第一步:用脚本智能配置 GPU
这个脚本能帮你自动找到 Ollama 的 systemd 服务文件,并安全地添加或修改 CUDA_VISIBLE_DEVICES
设置。
创建脚本文件:
- 打开终端,用你喜欢的编辑器(比如
nano
或vim
)创建一个文件,名字叫ollama_gpu_selector.sh
:bashnano ollama_gpu_selector.sh
- 打开终端,用你喜欢的编辑器(比如
复制粘贴脚本代码:
- 把下面的整段代码复制粘贴到编辑器里:
bash#!/bin/bash # --- Ollama GPU Selector Script --- # Purpose: Safely sets CUDA_VISIBLE_DEVICES for the Ollama systemd service. OLLAMA_SERVICE_FILE="/etc/systemd/system/ollama.service" # Function to validate input (must be comma-separated numbers, e.g., 0 or 0,1) validate_input(){ local input="$1" # Basic check: allow digits, commas, and ensure it doesn't start/end with a comma or have consecutive commas if [[ ! "$input" =~ ^[0-9]+(,[0-9]+)*$ ]]; then echo "Error: Invalid input '$input'. Please enter GPU indices (like 0, or 0,1) separated by commas, no spaces." exit 1 fi # You could add more checks here, e.g., verify indices against nvidia-smi -L output if needed } # Function to update the systemd service file update_service(){ local devices="$1" local env_line="Environment=\"CUDA_VISIBLE_DEVICES=$devices\"" echo "Attempting to update $OLLAMA_SERVICE_FILE..." echo "Setting CUDA_VISIBLE_DEVICES to: $devices" # Check if the service file exists if [ ! -f "$OLLAMA_SERVICE_FILE" ]; then echo "Error: Ollama service file not found at $OLLAMA_SERVICE_FILE" echo "Please ensure Ollama is installed correctly as a systemd service." exit 1 fi # Use sudo tee to write the changes with proper permissions # Try to replace the line if it exists, otherwise add it under [Service] if grep -q '^Environment="CUDA_VISIBLE_DEVICES=' "$OLLAMA_SERVICE_FILE"; then echo "Updating existing CUDA_VISIBLE_DEVICES line..." sudo sed -i 's|^Environment="CUDA_VISIBLE_DEVICES=.*|'"$env_line"'|' "$OLLAMA_SERVICE_FILE" else echo "Adding new CUDA_VISIBLE_DEVICES line under [Service]..." # Insert the line after the [Service] tag sudo sed -i '/\[Service\]/a '"$env_line"'' "$OLLAMA_SERVICE_FILE" fi if [ $? -ne 0 ]; then echo "Error: Failed to modify $OLLAMA_SERVICE_FILE. Check permissions or file content." exit 1 fi echo "Reloading systemd daemon and restarting Ollama service..." sudo systemctl daemon-reload sudo systemctl restart ollama.service if [ $? -eq 0 ]; then echo "Successfully updated and restarted Ollama service." echo "Run 'systemctl status ollama.service' and 'nvidia-smi' while running a model to verify." else echo "Warning: Ollama service might not have restarted correctly. Check 'systemctl status ollama.service'." fi } # --- Main script logic --- # Display available GPUs using nvidia-smi -L for user reference echo "Available GPUs on this system:" nvidia-smi -L echo "-------------------------------------" # Check if arguments are passed if [ "$#" -eq 0 ]; then # Prompt user for CUDA_VISIBLE_DEVICES values if no arguments are passed read -p "Enter the GPU index/indices you want Ollama to use (e.g., 0 or 0,1): " cuda_values validate_input "$cuda_values" update_service "$cuda_values" else # Use the first argument as CUDA_VISIBLE_DEVICES values cuda_values="$1" echo "Using provided argument for GPU indices: $cuda_values" validate_input "$cuda_values" update_service "$cuda_values" fi exit 0
- 保存并退出编辑器 (nano:
Ctrl+X
,Y
,Enter
)。
这段脚本干了啥? 它会先用
nvidia-smi -L
显示你有哪些 GPU 和它们的编号,然后问你要用哪个(或哪些,用逗号隔开)。接着,它会用sudo
权限帮你修改/etc/systemd/system/ollama.service
这个文件,添加或更新Environment="CUDA_VISIBLE_DEVICES=你输入的编号"
这一行。最后,它会自动帮你重新加载配置并重启 Ollama 服务。比手动改安全方便!给脚本加上执行权限:
bashchmod +x ollama_gpu_selector.sh
运行脚本 (需要 sudo):
bashsudo ./ollama_gpu_selector.sh
- 脚本会先显示你的 GPU 列表。
- 然后提示你输入想用的 GPU 编号 (index)。看
nvidia-smi -L
的输出,通常是从 0 开始。想用第一块卡就输入0
,想同时用第一和第二块(如果你的卡支持且驱动配置允许多卡并行)就输入0,1
。 - 按回车,脚本会自动完成剩下的工作。
第二步:(可选) 检查一下配置文件
如果你不放心,可以看看配置文件是不是真的改对了:
cat /etc/systemd/system/ollama.service
在输出的内容里找找,应该能看到类似 Environment="CUDA_VISIBLE_DEVICES=0"
(或者你输入的其他编号)这一行。
第三步:(脚本已做) 重启 Ollama 服务
上面那个脚本在最后已经帮你执行了重启服务的命令:
sudo systemctl daemon-reload
sudo systemctl restart ollama.service
如果你是手动修改的配置文件,或者想再次确认,可以手动运行这两条命令。
第四步:验证 GPU 是否在工作
和 Windows 一样:
- 运行一个 Ollama 模型:
ollama run llama3
- 在另一个终端窗口运行
nvidia-smi
,观察 GPU 利用率、显存占用和进程列表。看到 Ollama 在用 GPU 就对了!
现在,你的 Ollama 应该已经成功切换到 GPU 加速模式了!去试试看,感受一下 AI 推理速度的飞跃吧!