要强制 Ollama 使用多张显卡(GPU),核心在于配置系统环境变量。Ollama 默认倾向于将模型加载到单张显存最大的显卡上,若需利用多卡进行模型并行(Model Parallelism)或负载均衡,必须通过以下关键变量进行干预。

以下是针对 Linux/macOS 和 Windows 系统的具体配置步骤:

一、核心环境变量说明

在配置前,请理解以下三个关键变量的作用:

  1. CUDA_VISIBLE_DEVICES‌ (NVIDIA) / ‌HIP_VISIBLE_DEVICES‌ (AMD):
    • 作用‌:指定 Ollama 可见的 GPU ID。
    • 示例‌:0,1 表示只使用第 0 号和第 1 号显卡。
  2. OLLAMA_SCHED_SPREAD‌:
    • 作用‌:‌最关键参数‌。设置为 1 时,强制 Ollama 将模型层均匀分布到所有可见的 GPU 上,而不是仅塞满一张卡。
  3. 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 发行版默认安装方式):

  1. 编辑服务配置:
    
      

    bash

    sudo systemctl edit ollama.service

  2. 在 [Service] 部分添加以下行:
    
      

    ini

    [Service] Environment="CUDA_VISIBLE_DEVICES=0,1" Environment="OLLAMA_SCHED_SPREAD=1" Environment="OLLAMA_NUM_GPU=2"

  3. 重载配置并重启服务:
    
      

    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 下主要通过“系统环境变量”进行配置。

  1. 打开环境变量设置‌:

    • 右键“此电脑” -> “属性” -> “高级系统设置” -> “环境变量”。
    • 或者在开始菜单搜索“编辑系统环境变量”。
  2. 新建/修改系统变量‌:
    在“系统变量”区域(下方框),点击“新建”或“编辑”,添加以下变量:

    • 变量名‌: CUDA_VISIBLE_DEVICES
      • 变量值‌: 0,1 (根据你的实际显卡ID调整,用逗号分隔)
    • 变量名‌: OLLAMA_SCHED_SPREAD
      • 变量值‌: 1
    • 变量名‌: OLLAMA_NUM_GPU
      • 变量值‌: 2
  3. 重启 Ollama‌:

    • 重要‌:修改环境变量后,必须完全退出 Ollama。
    • 检查任务栏右下角托盘图标,右键 Ollama 图标选择 "Quit Ollama"。
    • 重新从开始菜单启动 Ollama。

四、验证多卡是否生效

配置完成后,通过以下步骤验证多卡是否真正参与工作:

  1. 运行一个大模型‌:
    选择一个参数量较大、单卡显存无法完全容纳的模型(如 llama3:70b 或 qwen:72b),或者即使单卡能容纳,也能观察负载分布。

    
      

    bash

    ollama run llama3:70b

  2. 监控显卡状态‌:

    • Linux‌: 打开新终端,运行 watch -n 1 nvidia-smi
    • Windows‌: 打开任务管理器 -> “性能”选项卡 -> “GPU”,或运行 nvidia-smi(如果已加入 PATH)。
  3. 观察指标‌:

    • 显存占用 (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 倍),主要优势在于‌能运行更大的模型‌而非单纯提速。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐