比较 llama.cpp 行/张量分割与 ik_llama 图分割的双GPU推理速度
摘要
一位用户使用llama.cpp(行/张量切分)和ik_llama(图切分)在两张RTX 3080 20GB上对双GPU推理速度进行了基准测试,使用Qwen3.6-27B GGUF模型,比较了token生成和提示处理速度。
## 设置:
```
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 610.43.02 KMD 版本: 610.43.02 CUDA UMD 版本: 13.3 |
+-----------------------------------------+------------------------+----------------------+
| GPU 名称 持久性模式 | 总线-ID 显示状态 | 易失性未纠正 ECC |
| 风扇 温度 性能 功耗:使用/上限 | 内存使用 | GPU 利用率 计算模式 |
| | | MIG 模式 |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 3080 关闭 | 00000000:01:00.0 关闭 | N/A |
| 40% 30C P8 10W / 320W | 238MiB / 20480MiB | 0% 默认 |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA GeForce RTX 3080 关闭 | 00000000:03:00.0 关闭 | N/A |
| 40% 29C P8 8W / 320W | 17MiB / 20480MiB | 0% 默认 |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
```
是的,这是刚刚到货的阿里云 3080 20GB 显卡。说实话,买得很值。我使用了 llama-benchy 来测试提示处理速度和令牌生成,分别采用 ik_llama 和 llama.cpp 的行分割(row)、张量分割(tensor)和图分割(graph)模式。使用的模型:https://huggingface.co/unsloth/Qwen3.6-27B-GGUF/blob/main/Qwen3.6-27B-Q8_0.gguf 本次基准测试未使用 MTP。使用了今天最新版本的 ik_llama 和 llama.cpp,并在基准测试前更新并重新编译。所有三次运行使用的参数:
```
-m '<...>/Qwen3.6-27B-Q8_0.gguf' \
--temp 0.6 --top-p 0.95 --top-k 20 --min-p 0.0 \
-np 1 -c 135000 -ngl 99
```
llama.cpp 使用的参数:
```
-sm row
```
```
-sm tensor
```
ik_llama 使用的参数:
```
-sm graph
```
## -sm row:
VRAM 使用情况:GPU0:18.2 / GPU1:18.5
结果:
| 模型 | 测试 | t/s | 峰值 t/s | ttfr (ms) | est_ppt (ms) | e2e_ttft (ms) |
|:-----------------|-----------------:|----------------:|-------------:|-------------------:|-------------------:|-------------------:|
| Qwen/Qwen3.6-27B | pp4096 @ d4000 | 1732.89 ± 14.86 | | 4673.37 ± 40.08 | 4673.07 ± 40.08 | 4673.37 ± 40.08 |
| Qwen/Qwen3.6-27B | tg128 @ d4000 | 23.03 ± 0.01 | 24.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d8000 | 1766.49 ± 7.45 | | 6848.27 ± 29.08 | 6847.97 ± 29.08 | 6848.27 ± 29.08 |
| Qwen/Qwen3.6-27B | tg128 @ d8000 | 22.83 ± 0.01 | 23.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d16000 | 1756.67 ± 9.84 | | 11441.05 ± 63.85 | 11440.74 ± 63.85 | 11441.05 ± 63.85 |
| Qwen/Qwen3.6-27B | tg128 @ d16000 | 22.44 ± 0.00 | 23.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d32000 | 1670.17 ± 7.88 | | 21613.73 ± 101.44 | 21613.42 ± 101.44 | 21613.73 ± 101.44 |
| Qwen/Qwen3.6-27B | tg128 @ d32000 | 21.71 ± 0.01 | 22.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d64000 | 1481.15 ± 4.23 | | 45976.46 ± 130.94 | 45976.15 ± 130.94 | 45976.46 ± 130.94 |
| Qwen/Qwen3.6-27B | tg128 @ d64000 | 20.41 ± 0.00 | 21.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d128000 | 1195.01 ± 2.36 | | 110541.23 ± 217.70 | 110540.93 ± 217.70 | 110541.23 ± 217.70 |
| Qwen/Qwen3.6-27B | tg128 @ d128000 | 18.23 ± 0.00 | 19.00 ± 0.00 | | | |
## -sm tensor:
VRAM 使用情况:GPU0:18.1 / GPU1:17.9
| 模型 | 测试 | t/s | 峰值 t/s | ttfr (ms) | est_ppt (ms) | e2e_ttft (ms) |
|:-----------------|-----------------:|----------------:|-------------:|-------------------:|-------------------:|-------------------:|
| Qwen/Qwen3.6-27B | pp4096 @ d4000 | 1412.73 ± 15.38 | | 5732.50 ± 61.94 | 5732.15 ± 61.94 | 5732.50 ± 61.94 |
| Qwen/Qwen3.6-27B | tg128 @ d4000 | 38.95 ± 0.05 | 40.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d8000 | 1400.96 ± 5.46 | | 8635.04 ± 32.88 | 8634.68 ± 32.88 | 8635.04 ± 32.88 |
| Qwen/Qwen3.6-27B | tg128 @ d8000 | 38.68 ± 0.10 | 39.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d16000 | 1381.89 ± 4.16 | | 14543.59 ± 43.73 | 14543.23 ± 43.73 | 14543.59 ± 43.73 |
| Qwen/Qwen3.6-27B | tg128 @ d16000 | 38.14 ± 0.11 | 39.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d32000 | 1328.03 ± 2.82 | | 27181.67 ± 57.72 | 27181.31 ± 57.72 | 27181.67 ± 57.72 |
| Qwen/Qwen3.6-27B | tg128 @ d32000 | 37.13 ± 0.01 | 38.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d64000 | 1219.17 ± 2.61 | | 55856.47 ± 119.00 | 55856.12 ± 119.00 | 55856.47 ± 119.00 |
| Qwen/Qwen3.6-27B | tg128 @ d64000 | 35.18 ± 0.01 | 36.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d128000 | 1036.75 ± 1.70 | | 127414.43 ± 208.98 | 127414.08 ± 208.98 | 127414.43 ± 208.98 |
| Qwen/Qwen3.6-27B | tg128 @ d128000 | 31.72 ± 0.12 | 32.00 ± 0.00 | | | |
## -sm graph (ik_llama):
VRAM 使用情况:GPU0:17.8 / GPU1:19.2
| 模型 | 测试 | t/s | 峰值 t/s | ttfr (ms) | est_ppt (ms) | e2e_ttft (ms) |
|:-----------------|-----------------:|----------------:|-------------:|-------------------:|-------------------:|-------------------:|
| Qwen/Qwen3.6-27B | pp4096 @ d4000 | 1420.56 ± 17.77 | | 5700.41 ± 70.54 | 5699.81 ± 70.54 | 5700.41 ± 70.54 |
| Qwen/Qwen3.6-27B | tg128 @ d4000 | 32.15 ± 0.03 | 33.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d8000 | 1387.88 ± 13.61 | | 8716.90 ± 84.91 | 8716.29 ± 84.91 | 8716.90 ± 84.91 |
| Qwen/Qwen3.6-27B | tg128 @ d8000 | 31.81 ± 0.01 | 33.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d16000 | 1362.43 ± 8.36 | | 14751.24 ± 90.08 | 14750.64 ± 90.08 | 14751.24 ± 90.08 |
| Qwen/Qwen3.6-27B | tg128 @ d16000 | 31.13 ± 0.01 | 32.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d32000 | 1318.72 ± 9.42 | | 27373.72 ± 195.00 | 27373.12 ± 195.00 | 27373.72 ± 195.00 |
| Qwen/Qwen3.6-27B | tg128 @ d32000 | 30.32 ± 0.02 | 31.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d64000 | 1216.07 ± 8.43 | | 55999.88 ± 388.37 | 55999.27 ± 388.37 | 55999.88 ± 388.37 |
| Qwen/Qwen3.6-27B | tg128 @ d64000 | 28.86 ± 0.04 | 30.00 ± 0.00 | | | |
| Qwen/Qwen3.6-27B | pp4096 @ d128000 | 1055.71 ± 7.36 | | 125132.30 ± 869.60 | 125131.69 ± 869.60 | 125132.30 ± 869.60 |
| Qwen/Qwen3.6-27B | tg128 @ d128000 | 26.35 ± 0.00 | 27.00 ± 0.00 | | | |
相似文章
双GPU llama.cpp加速
llama.cpp的一个分支修复了量化KV缓存中的--split-mode tensor问题,在双GPU配置上实现高达40%的速度提升,且无质量损失。
双GPU下流水线与张量并行的llama.cpp中测量PCIe传输
在双GPU下使用流水线和张量并行运行llama.cpp时的PCIe传输性能分析。
@analogalok:别再盲目信任本地 LLM 的默认多 GPU 设置了,你实际上正浪费 25% 的性能……
基准测试结果对比了 llama.cpp 中针对双 GPU 设置的层并行与张量并行:层模式在预填充(RAG 管道)中快 25%,而张量模式在解码(交互式聊天)中快 16%。
双3090配置:Qwen 3.6 27B 上从 400 pp tokens/s 提升到 1600 pp tokens/s... 但 tps 略降。
使用双 RTX 3090 配置的用户发现,llama.cpp 的 `--split-mode tensor` 会在 CPU 上运行提示处理(约 400 t/s),而切换到 `--split-mode layer` 则可解锁 GPU 提示处理,速度超过 1600 t/s,且 token 生成速度仅略有下降。
GLM-5.2 UD-IQ1_M 在 llama.cpp 上的运行 — 5090 + 3090 Ti 速度测试 (~ 579 t/s 预填充 @ 8k 上下文, ~324 t/s 预填充 @ 57k 上下文, ~10.6 t/s 解码)
GLM-5.2 在 llama.cpp 上使用 RTX 5090 和 RTX 3090 Ti 运行的速度测试结果,显示在 8k 上下文中预填充速度高达 579 t/s,解码速度约为 10.6 t/s。