需配置CUDA_VISIBLE_DEVICES和OLLAMA_SCHED_SPREAD环境变量,前者指定可见GPU编号(如0,1),后者启用跨卡负载均衡,二者缺一不可,否则仅单卡工作。

你想让两块甚至更多显卡同时分担AI推理、视频生成或图像渲染任务,而不是总有一块满载另一块闲置,就得绕过驱动默认的“单卡霸权”模式,把算力真正摊开用。
确认硬件与驱动基础状态
打开终端或命令提示符,运行 nvidia-smi(NVIDIA)或 amdgpuproinfo(AMD),确认所有显卡都被系统识别且状态为“正常”。【GPU编号顺序由PCIe插槽物理位置决定,不是按性能排序】。若某张卡显示“N/A”或温度为0℃,说明供电未接稳、插槽松动或驱动未加载成功,此时跳过后续所有配置步骤。
访问NVIDIA官网或AMD官网,下载并安装对应显卡型号的最新Studio驱动(NVIDIA)或Adrenalin Edition(AMD)。禁用Windows更新自动推送的驱动——它常会降级关键多GPU支持模块。
NVIDIA显卡:通过CUDA_VISIBLE_DEVICES控制可见设备范围
这一步是Ollama、ComfyUI、WAN2.2等工具能调用多卡的前提。不设这个变量,程序永远只看到GPU 0。
方法一:临时测试(仅当前终端生效)
Linux/macOS下执行:export CUDA_VISIBLE_DEVICES=0,1;Windows PowerShell中执行:$env:CUDA_VISIBLE_DEVICES="0,1"。之后再启动Ollama或ComfyUI,它们就能感知到两张卡了。
方法二:永久注入(推荐用于服务部署)
编辑Ollama的systemd服务文件:sudo nano /etc/systemd/system/ollama.service,在[Service]段落内添加:Environment="CUDA_VISIBLE_DEVICES=0,1"Environment="OLLAMA_SCHED_SPREAD=1"
保存后运行 sudo systemctl daemon-reload && sudo systemctl restart ollama。
注意:设置 CUDA_VISIBLE_DEVICES=1,0 后,原GPU 1会变成程序里的device 0,原GPU 0变成device 1。顺序影响模型加载路径,若报错“device not found”,先用 nvidia-smi -L 查清物理编号再调整顺序。
AMD显卡:启用CrossFire或ROCm多卡调度
消费级Radeon显卡需启用CrossFire才能实现帧交替渲染(AFR),但仅限全屏DirectX应用,AI工具链基本不兼容。真正可行的是ROCm平台下的多卡支持——仅适用于RX 7900 XTX、MI300系列等专业卡。
第一步:确认ROCm版本与Linux内核兼容。Ubuntu 22.04需ROCm 5.7+,且内核不能高于5.15。
第二步:运行 sudo apt install rocm-dkms 安装驱动栈,重启后执行 rocminfo 查看是否列出全部GPU。
第三步:在Python脚本中显式指定设备,例如PyTorch代码里加:torch.set_default_device("hip:0") 和 model.to("hip:1") 手动拆分模型层。
消费级Radeon用户若想跑Anything XL或AnimateDiff,目前唯一稳定路径是切换至DirectML后端(如HG-ha/MTools),它能跨品牌调度,无需CrossFire。
Windows平台通用方案:DirectML多GPU自动负载均衡
不用折腾CUDA或ROCm,只要系统是Windows 10 21H2或更高版本,就能用微软原生接口调度多卡。
① 下载HG-ha/MTools安装包,双击运行,跳过所有Python环境提示——它是自包含应用。
② 启动后进入「设置」→「AI加速引擎」,勾选「启用多GPU任务分发」。
③ 在「图像超分」或「语音转文字」功能页点击运行,观察任务管理器「性能」页签:你会看到Intel核显、NVIDIA独显、AMD集显三条曲线同步波动,而非只有一条飙升。
④ 若某张卡始终不动,右键任务栏图标→「诊断显卡状态」,工具会自动检测DirectML设备枚举失败点,并给出修复建议(常见为旧版显卡驱动未开启DirectML支持)。
这一步不需要修改任何环境变量,也不依赖CUDA版本,MTools内部已封装好设备发现、显存预分配和任务队列动态路由逻辑。
验证负载是否真正均衡
启动Ollama后运行 ollama run llama3.1:8b,同时打开另一个终端持续执行 nvidia-smi --query-gpu=utilization.gpu,temperature.gpu,memory.used --format=csv,noheader,nounits。观察输出中两行数据:如果GPU 0利用率78%,GPU 1利用率75%,且显存占用差值小于500MB,说明负载均衡已生效。
若GPU 0始终99%而GPU 1长期低于5%,检查是否漏设 OLLAMA_SCHED_SPREAD=1——这是Ollama开启跨卡调度的开关,缺了它,CUDA_VISIBLE_DEVICES 只是让程序“看见”多卡,但不会“使用”多卡。


















