强制 Ollama 使用多张显卡(GPU)
要强制 Ollama 使用多张显卡(GPU),核心在于配置系统环境变量。Ollama 默认倾向于将模型加载到单张显存最大的显卡上,若需利用多卡进行模型并行(Model Parallelism)或负载均衡,必须通过以下关键变量进行干预。
以下是针对 Linux/macOS 和 Windows 系统的具体配置步骤:
一、核心环境变量说明
在配置前,请理解以下三个关键变量的作用:
-
CUDA_VISIBLE_DEVICES (NVIDIA) / HIP_VISIBLE_DEVICES (AMD):- 作用:指定 Ollama 可见的 GPU ID。
- 示例:
0,1表示只使用第 0 号和第 1 号显卡。
-
OLLAMA_SCHED_SPREAD:- 作用:最关键参数。设置为
1时,强制 Ollama 将模型层均匀分布到所有可见的 GPU 上,而不是仅塞满一张卡。
- 作用:最关键参数。设置为
-
OLLAMA_NUM_GPU:- 作用:明确指定用于推理的 GPU 数量。通常设为与可见设备数一致。
二、Linux / macOS 配置方法
1. 临时生效(当前终端会话)
在启动 Ollama 服务前,在终端执行以下命令:
bash
# 设置可见显卡为 0 和 1 export CUDA_VISIBLE_DEVICES=0,1 # 启用跨 GPU 调度分布 export OLLAMA_SCHED_SPREAD=1 # (可选) 明确指定使用 2 张卡 export OLLAMA_NUM_GPU=2 # 重启 Ollama 服务 ollama serve
2. 永久生效(Systemd 服务方式,推荐)
如果你通过 systemd 管理 Ollama(大多数 Linux 发行版默认安装方式):
- 编辑服务配置:
bash
sudo systemctl edit ollama.service - 在
[Service]部分添加以下行:ini
[Service] Environment="CUDA_VISIBLE_DEVICES=0,1" Environment="OLLAMA_SCHED_SPREAD=1" Environment="OLLAMA_NUM_GPU=2" - 重载配置并重启服务:
bash
sudo systemctl daemon-reload sudo systemctl restart ollama
3. Docker 部署方式
如果在 Docker 中运行,需在 docker run 命令中添加 -e 参数:
bash
docker run -d \ --gpus all \ -e CUDA_VISIBLE_DEVICES=0,1 \ -e OLLAMA_SCHED_SPREAD=1 \ -e OLLAMA_NUM_GPU=2 \ -v ollama:/root/.ollama \ -p 11434:11434 \ ollama/ollama
三、Windows 配置方法
Windows 下主要通过“系统环境变量”进行配置。
-
打开环境变量设置:
- 右键“此电脑” -> “属性” -> “高级系统设置” -> “环境变量”。
- 或者在开始菜单搜索“编辑系统环境变量”。
-
新建/修改系统变量:
在“系统变量”区域(下方框),点击“新建”或“编辑”,添加以下变量:- 变量名:
CUDA_VISIBLE_DEVICES- 变量值:
0,1(根据你的实际显卡ID调整,用逗号分隔)
- 变量值:
- 变量名:
OLLAMA_SCHED_SPREAD- 变量值:
1
- 变量值:
- 变量名:
OLLAMA_NUM_GPU- 变量值:
2
- 变量值:
- 变量名:
-
重启 Ollama:
- 重要:修改环境变量后,必须完全退出 Ollama。
- 检查任务栏右下角托盘图标,右键 Ollama 图标选择 "Quit Ollama"。
- 重新从开始菜单启动 Ollama。
四、验证多卡是否生效
配置完成后,通过以下步骤验证多卡是否真正参与工作:
-
运行一个大模型:
选择一个参数量较大、单卡显存无法完全容纳的模型(如llama3:70b或qwen:72b),或者即使单卡能容纳,也能观察负载分布。bash
ollama run llama3:70b -
监控显卡状态:
- Linux: 打开新终端,运行
watch -n 1 nvidia-smi。 - Windows: 打开任务管理器 -> “性能”选项卡 -> “GPU”,或运行
nvidia-smi(如果已加入 PATH)。
- Linux: 打开新终端,运行
-
观察指标:
- 显存占用 (Memory-Usage):你应该看到多张显卡的显存占用同时上升。
- GPU 利用率 (GPU-Util):在推理过程中,多张显卡的利用率应均有波动,而非仅有一张卡在 100% 而其他卡为 0%。
五、常见问题与优化
- 为什么小模型还是只用单卡?
Ollama 的调度策略是:如果模型能完全放入单张显卡,它通常会优先使用单卡以减少 PCIe 通信延迟。OLLAMA_SCHED_SPREAD=1会强制拆分,但对于极小模型(如 7B 以下),强制多卡可能因通信开销导致速度变慢。建议仅对大模型或显存不足时使用多卡强制调度。 - 异构显卡(NVIDIA + AMD):
Ollama 对混合品牌显卡的支持有限。建议尽量使用同品牌显卡。如果是 NVIDIA + AMD,可能需要分别设置CUDA_VISIBLE_DEVICES和HIP_VISIBLE_DEVICES,但稳定性不如纯 NVIDIA 或纯 AMD 环境。 - PCIe 带宽瓶颈:
消费级显卡(如 RTX 4090)之间通过 PCIe 通信,速度远低于 NVLink。多卡推理速度提升并非线性(即 2 张卡不一定比 1 张快 2 倍),主要优势在于能运行更大的模型而非单纯提速。
更多推荐




所有评论(0)