异构双卡大模型部署指南:18GB显存突破单卡瓶颈 llama.cpp 层并行部署

前几日,偶然在柜底寻得两张蒙尘已久的旧显卡。拂去岁月的浮灰,它们静默地躺在那里,仿佛两位退隐江湖的老将,等待着重新披挂上阵的号角。今日突发奇想,何不唤它们出山,让它们在这大模型风起云涌的时代,再展一番拳脚?

以下,便是这套"双显卡跑大模型"的修炼功法。


一、筑基:环境的筹备与确认

一切修炼,皆从筑基开始。在正式召唤大模型之前,需先确保你的"修炼场"------硬件与软件环境------已准备妥当。

1. 硬件确认

首先,请确保两张显卡已稳稳地安插在主板之上,且电源功率充沛(建议 850W 以上),如同为两位战将备足粮草。

随后,在命令行中运行以下咒语,确认系统已能识别到这两张显卡:

bash 复制代码
nvidia-smi

若一切顺利,你将看到类似这样的输出:

复制代码
+-----------------------------------------------------------------------------+
| GPU  Name        |  Memory-Usage |  GPU-Util  |
+-------------------+---------------+------------+
|   0  RTX 3060    |   12288 MiB   |            |
|   1  RTX 2060    |    6144 MiB   |            |
+-----------------------------------------------------------------------------+

请记下两张卡的编号(GPU 0 和 GPU 1),它们将在后续的配置中扮演关键角色。

2. 下载 llama.cpp(推荐预编译版,免编译)

前往 GitHub Releases 页面:https://github.com/ggerganov/llama.cpp/releases

下载带有 CUDA 标识的 Windows 版本,例如:llama-bxxxx-bin-win-cuda-cu12.x.x-x64.zip

将其解压至一个路径中不含中文和空格的目录,例如 C:\llama。

解压后,请确认目录中存在 ggml-cuda.dll 文件(大小应大于 200MB),这标志着 CUDA 后端已准备就绪。

3. 下载模型文件

推荐使用 GGUF 格式的量化模型,可从 HuggingFace 或 ModelScope 下载。

根据你的双卡总显存(18GB),以下模型值得一试:

  • Qwen3.5-14B(Q4_K_M 量化,约 9GB)→ 双卡轻松驾驭
  • Qwen3.5-27B(Q4_K_M 量化,约 17GB)→ 双卡刚好能跑,略有挑战
  • DeepSeek-R1-7B(Q4_K_M 量化,约 5GB)→ 单卡即可,双卡加速更畅快

二、心法:核心参数的哲学

在深入配置之前,先理解几个关键参数的含义。它们如同调音师手中的旋钮,决定了算力交响乐的走向。

参数 全称 作用
-ngl --n-gpu-layers 指定卸载到 GPU 的模型层数,设为 99 或 999 表示尽可能全部上 GPU
--tensor-split -ts 指定各 GPU 的显存分配权重比例,用逗号分隔
--split-mode -sm 拆分模式:layer(层并行)或 tensor(张量并行)
--main-gpu -mg 指定主 GPU 编号,默认 0
CUDA_VISIBLE_DEVICES 环境变量 限制哪些 GPU 参与推理

三、抉择:3060 12G + 2060 6G 的适配之道

关键判断:异构显卡,必须用 layer 模式

3060(Ampere 架构)与 2060(Turing 架构)属于不同代架构 的异构组合。它们如同两位出身不同门派的武者,不能使用 tensor(张量并行)模式强行协同,否则可能因架构不兼容而导致启动失败。

正确做法:使用 --split-mode layer(层并行模式),将模型的不同层分别托付给两张显卡,让它们各展所长。

显存分配比例计算

两张卡的显存分别为 12GB 和 6GB,比例为 2:1。因此 --tensor-split 应设为 2,1 或等价的 0.67,0.33。

原理:--tensor-split 的值并非百分比,而是权重比例。2,1 表示 GPU 0 承担 2/3 的负载,GPU 1 承担 1/3。


四、出招:具体启动命令

方案 A:命令行直接启动(推荐先测试)

打开 CMD 或 PowerShell,进入 llama.cpp 目录,运行:

bash 复制代码
.\llama-cli.exe ^
  -m models\qwen3.5-14b-q4_k_m.gguf ^
  -ngl 99 ^
  --split-mode layer ^
  --tensor-split 2,1 ^
  --main-gpu 0 ^
  -c 4096 ^
  -t 8 ^
  -i --color

参数解读:

  • -m:模型文件路径(替换为你实际下载的模型)
  • -ngl 99:尽可能将所有层卸载到 GPU
  • --split-mode layer:层并行模式(异构卡必选)
  • --tensor-split 2,1:3060 承担 2/3,2060 承担 1/3
  • --main-gpu 0:指定 3060 为主 GPU
  • -c 4096:上下文长度 4096(可根据显存调整)
  • -t 8:CPU 线程数(根据你的 CPU 物理核心数调整)
  • -i --color:交互模式,带颜色区分用户和模型输出
方案 B:启动 API 服务(供其他程序调用)
bash 复制代码
.\llama-server.exe ^
  -m models\qwen3.5-14b-q4_k_m.gguf ^
  -ngl 99 ^
  --split-mode layer ^
  --tensor-split 2,1 ^
  --main-gpu 0 ^
  -c 8192 ^
  --port 8080 ^
  --host 0.0.0.0

启动后:

方案 C:使用环境变量限制 GPU(可选)

若你只想让特定 GPU 参与推理,可在启动前设置环境变量:

Windows CMD:

bash 复制代码
set CUDA_VISIBLE_DEVICES=0,1
.\llama-cli.exe -m models\qwen3.5-14b-q4_k_m.gguf -ngl 99 --split-mode layer --tensor-split 2,1

Windows PowerShell:

powershell 复制代码
$env:CUDA_VISIBLE_DEVICES="0,1"
.\llama-cli.exe -m models\qwen3.5-14b-q4_k_m.gguf -ngl 99 --split-mode layer --tensor-split 2,1

Linux:

bash 复制代码
CUDA_VISIBLE_DEVICES=0,1 ./llama-cli -m models/qwen3.5-14b-q4_k_m.gguf -ngl 99 --split-mode layer --tensor-split 2,1

若只想用单张卡测试对比,可设 CUDA_VISIBLE_DEVICES=0 仅用 3060,或 CUDA_VISIBLE_DEVICES=1 仅用 2060。


五、验功:验证双卡是否生效

启动后,不要只看模型是否输出正常,务必检查以下两点,倾听它们协同工作的声音:

1. 查看启动日志

成功的日志应包含类似以下内容:

复制代码
llm_load_tensors: offloading 48 repeating layers to GPU
llm_load_tensors: offloaded 48/48 layers to GPU
llm_load_tensors:        CUDA0 buffer size =  8192.00 MiB
llm_load_tensors:        CUDA1 buffer size =  4096.00 MiB

关键信号:

  • 看到 CUDA0 和 CUDA1 都有 buffer size → 双卡皆在发力
  • offloaded X/X layers to GPU → 层数已全部卸载到 GPU
2. 实时监控显存占用

另开一个 CMD 窗口,运行:

bash 复制代码
nvidia-smi -l 1

每秒刷新一次,观察两张卡的显存占用是否同时增长。若只有 GPU 0 显存增加而 GPU 1 几乎纹丝不动,说明配置有误,需重新审视。


六、精进:性能优化技巧

1. 调整 -ngl 避免爆显存

若启动时报 CUDA out of memory,说明显存告急,需减少 GPU 层数:

bash 复制代码
# 从 99 逐步降低,直到不报错
-ngl 60
-ngl 40
-ngl 20
2. 量化 KV Cache 节省显存

对于长上下文场景,KV Cache 可能比模型本身还占显存。使用以下参数将其量化到 4-bit:

bash 复制代码
--cache-type-k q4_0 --cache-type-v q4_0

显存占用可减少约 66%,而精度损失微乎其微。

3. 开启 Flash Attention 加速

30 系及以上显卡支持 Flash Attention,可提升 15%~20% 的速度:

bash 复制代码
--flash-attn on

注意:2060 属于 20 系,可能不支持 Flash Attention。若启动报错,去掉此参数即可。

4. 并行加载缩短启动时间
bash 复制代码
--parallel-load

利用多 GPU 并行加载模型权重,可大幅缩短启动等待时间(不影响推理速度)。

5. 调整上下文长度

上下文长度与显存占用呈平方关系。若显存紧张,可适当降低 -c 值:

bash 复制代码
# 日常聊天
-c 4096
# 长文档处理
-c 8192
# 极限测试(可能爆显存)
-c 16384

七、大成:完整推荐配置(一键复制)

以下是针对 Qwen3.5-14B Q4_K_M 模型的完整推荐配置:

bash 复制代码
.\llama-server.exe ^
  -m models\qwen3.5-14b-q4_k_m.gguf ^
  -ngl 99 ^
  --split-mode layer ^
  --tensor-split 2,1 ^
  --main-gpu 0 ^
  -c 8192 ^
  -b 512 ^
  -t 8 ^
  --cache-type-k q4_0 ^
  --cache-type-v q4_0 ^
  --parallel-load ^
  --port 8080 ^
  --host 0.0.0.0

若是 Qwen3.5-27B Q4_K_M(显存更紧张),建议降低上下文并减少线程:

bash 复制代码
.\llama-server.exe ^
  -m models\qwen3.5-27b-q4_k_m.gguf ^
  -ngl 99 ^
  --split-mode layer ^
  --tensor-split 2,1 ^
  --main-gpu 0 ^
  -c 4096 ^
  -b 256 ^
  -t 6 ^
  --cache-type-k q4_0 ^
  --cache-type-v q4_0 ^
  --parallel-load ^
  --port 8080 ^
  --host 0.0.0.0

八、解惑:常见问题排查

问题 可能原因 解决方法
启动报 CUDA not found 未下载 CUDA 版本或 DLL 缺失 确认解压目录中有 ggml-cuda.dll,重新下载带 CUDA 标识的版本
只有单卡在跑 未设置 --tensor-split 或模式错误 确认使用 --split-mode layer 和 --tensor-split 2,1
爆显存 OOM 模型太大或上下文太长 降低 -ngl、减小 -c、或换更低量化版本
速度比单卡还慢 PCIe 带宽瓶颈或参数不当 异构卡本身加速有限,主要收益是"能跑更大模型"而非速度翻倍
中文输出乱码 终端编码问题 运行 chcp 65001 切换为 UTF-8 编码

九、广谱:万物双卡的通用之道

至此,关于 3060 12G + 2060 6G 这一对特定组合的配置之法,已讲解殆尽。然而,江湖辽阔,显卡万千,你的手中握着的,未必是这一对组合。莫慌------这套功法的核心心法,本就是通用的。无论手中是哪两张卡,只需把握两个要诀,便可融会贯通。

1. 判断同构还是异构

这是第一步,也是最重要的一步。

若两张显卡型号相同、架构相同(例如双 4090、双 3090),它们便是同门师兄弟,可以使用 --split-mode tensor(张量并行)模式。此模式下,生成速度比 layer 模式快 20%~40%,如同双剑合璧,威力倍增。

若两张显卡型号不同、架构不同(例如 4080 + 3060、4070 + 2060),它们便是出身不同门派的武者,必须使用 --split-mode layer(层并行)模式。强行使用 tensor 模式,可能因架构不兼容而启动失败。

2. 计算显存比例

无论同构还是异构,--tensor-split的值都应按两张卡的显存容量比例来设置。例如 16G + 12G 的组合,比例为 16:12 = 4:3,便设为 4,3。

计算技巧:--tensor-split 的值是权重比例,不是百分比。将两张卡的显存容量写成最简整数比即可。

3. 常见双卡组合速查

为免你逐一计算,以下列出一些常见组合的配置要点:

显卡组合 总显存 拆分模式 --tensor-split 推荐模型
3060 12G + 2060 6G 18GB layer 2,1 14B Q4
4090 24G + 4090 24G 48GB tensor 1,1 70B Q4
4080 16G + 3060 12G 28GB layer 4,3 27B Q4
3090 24G + 3090 24G 48GB tensor 1,1 70B Q4
4070 Ti 12G + 4060 Ti 16G 28GB layer 3,4 27B Q4
2080 Ti 22G + 4070 Ti 16G 38GB layer 11,8 32B Q4
A100 80G + A100 80G 160GB tensor 1,1 125B Q4
RTX 4060 8G + RTX 3060 12G 20GB layer 2,3 14B Q4
4. 不同组合的江湖规矩

同构双卡(如双 4090、双 3090):

  • 优势在于可用 tensor 模式,速度更快
  • 配置:--split-mode tensor --tensor-split 1,1
  • 注意:Windows 下消费级显卡默认 WDDM 模式,张量并行的稳定性不如 Linux。若遇崩溃,退回到 layer 模式即可

异构双卡(如 4080+3060、4070+2060):

  • 必须用 layer 模式,否则可能因架构不兼容导致启动失败
  • 需注意"木桶效应":最终速度受限于较慢的那张卡。例如 4090+3060 组合中,3060 便是那根短板,4090 大部分时间需在旁等候
  • 建议尽量选择算力架构相近的组合(如同为 Ada Lovelace 或同代 Ampere)

大小显存组合(如 4060 Ti 16G + 3060 12G):

  • 显存不对称并非不可逾越的鸿沟:layer 模式会根据每张卡的可用显存自动分配层数
  • 按显存比例设置 --tensor-split 即可,例如 16:12 → 4,3

跨品牌组合(如 NVIDIA + AMD):

  • 必须用 layer 模式,且编译时需同时启用 CUDA 和 ROCm 后端
  • 跨品牌通信效率较低,加速比通常只有 1.2~1.4 倍,需有此心理准备
5. Ollama 多卡配置(另一种法门)

若你偏好使用 Ollama 而非 llama.cpp 命令行,只需设置一个环境变量即可启用多卡切分:

Windows:

bash 复制代码
set OLLAMA_SCHED_SPREAD=1
ollama serve

Linux:

bash 复制代码
export OLLAMA_SCHED_SPREAD=1
ollama serve

修改后需重启 Ollama 服务方能生效。

6. 不同组合的性能预期
组合类型 加速比 核心价值
同构双卡(tensor 模式) 1.6~1.9 倍 速度提升 + 显存翻倍
异构双卡(layer 模式) 1.3~1.6 倍 显存翻倍(核心收益)
跨品牌双卡 1.2~1.4 倍 显存翻倍

关键结论 :无论何种组合,双卡部署的核心价值始终是突破单卡显存瓶颈,运行更大的模型,而非速度的线性飞跃。只要总显存够用,更大的模型便触手可及。


尾声

对于 3060 12G + 2060 6G 这一组合,核心配置口诀可凝练为:

异构双卡用 layer,显存比例 2:1,-ngl 99 全上卡,--main-gpu 0 定主卡。

若你手中的组合有所不同,只需记住两条通则:判断同构还是异构,决定用 tensor 还是 layer 模式;计算显存比例,决定 --tensor-split 的值。 其余参数-------ngl 99、--main-gpu 0、CUDA_VISIBLE_DEVICES------万变不离其宗。

双卡协同的最大价值,并非在于速度的线性飞跃,而在于突破单卡显存的桎梏,让更大的模型得以驰骋。预期速度提升在 1.3~1.6 倍左右,但能跑的模型规模却可从 7B 跃升至 14B 甚至 27B------这才是真正的质变。

愿这两张老将,在你的手中重焕新生,在大模型的江湖中,再续一段传奇。


相关推荐
写bug如流水1 小时前
【LLM】Qwen3.5 35B A3B 单卡 RTX 3090 部署教程
人工智能·llama
promanz1 天前
llamap.cpp 和 llama-index连接
人工智能·llama
GPU实战笔记8 天前
本地跑不动 llama.cpp,临时租云 GPU 怎么搭?从启动服务到环境复用
java·服务器·网络·人工智能·深度学习·llama
牛马工作号10 天前
RK3588 使用 rk-llama.cpp + RKNPU2 部署 Qwen3.5:从零开始的 NPU 本地大模型实战
人工智能·语言模型·llama
书源丶10 天前
Qwen3-Embedding-0.6B 纯 CPU
网络·语言模型·embedding·llama
论文复现现场11 天前
Llama/Qwen 70B 部署需要几张 RTX 4090?2卡、4卡、8卡显存、量化与 vLLM 选型
llama·qwen·vllm·大模型推理·大模型部署·rtx4090
谢白羽12 天前
在4×B300用SGLang部署DeepSeek-V4.1 Flash优化实录
笔记·python·llm·llama·sglang
renzao_ai15 天前
本地 35B 大模型部署实战:Ollama 跑 Ornith-35B 全流程
python·llama·免费ai大模型
Είναι η κοπέλα15 天前
本地大模型部署完全指南:Ollama / vLLM / llama.cpp / MLX 四大引擎横评与选型实战
macos·llama·vllm