在 2x3090 NVLINK 上对 Qwen 3.6 27B MTP 进行基准测试
摘要
对 Qwen 3.6 27B MTP 在 4 张 RTX 3090 GPU 上的基准分析表明,基于 NVLink 的张量并行相较于 PCIe 配置可实现显著的吞吐量提升(最高达 +53%)。
**TL;DR** 在4× RTX 3090上,GPU对之间绑定了NVLink(GPU0↔GPU2与GPU1↔GPU3),将TP=2固定在NVLink配对组上,与通过PCIe运行TP=2相比,并发度1时吞吐量提升**+25%**,并发度4时提升**+53%**。再加入另外两块GPU组成TP=4反而更差,得不偿失。
# 实验设置
* **硬件:** 4× RTX 3090(24 GB),GPU0↔GPU2、GPU1↔GPU3之间使用NVLink(NV4)。跨配对组的流量经PCIe主桥(PHB)传输。
```bash
$ nvidia-smi topo -m
GPU0 GPU1 GPU2 GPU3
GPU0 X PHB NV4 PHB
GPU1 PHB X PHB NV4
GPU2 NV4 PHB X PHB
GPU3 PHB NV4 PHB X
```
* **软件:** vLLM 0.20.1,transformers 5.7.0,CUDA 12.8。
* **模型:** [cyankiwi/Qwen3.6-27B-AWQ-BF16-INT4](https://huggingface.co/cyankiwi/Qwen3.6-27B-AWQ-BF16-INT4) — 27B参数密集混合模型(线性注意力 + 全注意力 + Mamba SSM),带有MTP头用于投机解码。
* **工作负载:** `vllm bench serve`,随机数据集,1024输入/256输出Token,`--ignore-eos`,`--seed 42`。每个配置运行两次:并发度1(8条提示词)和并发度4(32条提示词)。
# vLLM serve命令
除 `CUDA_VISIBLE_DEVICES` 和 `--tensor-parallel-size` 外,所有配置的命令均相同:
```bash
CUDA_VISIBLE_DEVICES=<见下> \
vllm serve cyankiwi/Qwen3.6-27B-AWQ-BF16-INT4 \
--served-model-name Qwen3.6-27B-AWQ-BF16-INT4 \
--host 0.0.0.0 --port 8000 \
--tensor-parallel-size <2 或 4> \
--max-model-len 131072 \
--gpu-memory-utilization 0.85 \
--max-num-seqs 8 \
--dtype float16 \
--attention-backend FLASHINFER \
--enable-prefix-caching \
--mamba-cache-dtype auto \
--mamba-cache-mode align \
--enable-chunked-prefill \
--max-num-batched-tokens 4096 \
--reasoning-parser qwen3 \
--default-chat-template-kwargs '{"enable_thinking": true, "preserve_thinking": true}' \
--enable-auto-tool-choice \
--tool-call-parser qwen3_xml \
--speculative-config '{"method":"qwen3_next_mtp","num_speculative_tokens":2}' \
--trust-remote-code
```
**三种配置:**
|**配置**|**CUDA\_VISIBLE\_DEVICES**|**TP**|**拓扑**|
|:-|:-|:-|:-|
|**A — TP=2 NVLink**|0,2|2|NVLink配对组(NV4)|
|**B — TP=2 非NVLink**|0,1|2|跨配对组,PCIe(PHB)|
|**C — TP=4 全部GPU**|0,1,2,3|4|混合(2条NVLink边 + 4条PCIe边)|
# 基准测试
**并发度1(单流)**
|**配置**|**输出tok/s**|**TTFT中位数**|**TPOT中位数**|**ITL中位数**|**投机接受率**|**投机接受长度**|
|:-|:-|:-|:-|:-|:-|:-|
|**A — TP=2 NVLink (0+2)**|66.0|509 ms|13.4 ms|32.1 ms|73.7 %|2.47|
|**B — TP=2 非NVLink (0+1)**|52.6|861 ms|15.7 ms|37.6 ms|70.4 %|2.41|
|**C — TP=4 全部GPU**|57.4|664 ms|14.7 ms|37.8 ms|79.2 %|2.58|
**并发度4(4个在处理请求)**
|**配置**|**输出tok/s**|**TTFT中位数**|**TPOT中位数**|**ITL中位数**|**投机接受率**|
|:-|:-|:-|:-|:-|:-|
|**A — TP=2 NVLink (0+2)**|181.9|551 ms|19.0 ms|34.3 ms|74.6 %|
|**B — TP=2 非NVLink (0+1)**|119.2|994 ms|27.1 ms|45.3 ms|75.0 %|
|**C — TP=4 全部GPU**|127.9|751 ms|24.5 ms|43.6 ms|75.6 %|
# NVLink 实际带来的好处
比较 **A vs B**(相同模型、相同TP=2,仅互联方式不同):
|**指标**|**TP=2 NVLink (0+2)**|**TP=2 非NVLink (0+1)**|**NVLink优势**|
|:-|:-|:-|:-|
|**输出tok/s,并发度=1**|66.0|52.6|**+25.4 %**|
|**输出tok/s,并发度=4**|181.9|119.2|**+52.6 %**|
|**TTFT中位数,并发度=4**|551 ms|994 ms|**-45 %**(越低越好)|
|**TPOT中位数,并发度=4**|19.0 ms|27.1 ms|**-30 %**|
**几个值得注意的点:**
* 在高并发度下,优势更大(并发度4时+53%,并发度1时+25%)。每步全规约通信量随批次大小增加;NVLink的带宽优势被放大。
* 使用NVLink后,TTFT几乎减半(并发度4时994→551 ms)。预填充阶段通信密集,因为需要在TP rank间传输大型激活矩阵。
* MTP投机解码在PCIe下仍然正常(接受率几乎不变,73%→70%),因此差距纯粹来自互联,而非草稿质量。
# 彩蛋:如果全部4块GPU一起用呢?
自然而然的后续问题是:既然NVLink这么好,如果使用全部四块GPU(TP=4)会怎样?两条NVLink边仍然起作用,但现在是跨四设备分片权重,理论上应该更快?
**并没有。** TP=4在所有指标上都比TP=2-NVLink慢。
|**指标**|**TP=2 NVLink**|**TP=4 全部GPU**|**变化**|
|:-|:-|:-|:-|
|**输出tok/s,并发度=1**|66.0|57.4|**-13.0 %**|
|**输出tok/s,并发度=4**|181.9|127.9|**-29.7 %**|
|**TPOT中位数,并发度=4**|19.0 ms|24.5 ms|**+29 %**|
|**TTFT中位数,并发度=4**|551 ms|751 ms|**+36 %**|
**原因:** TP=4需要每对GPU都参与全规约环。4块GPU共有6个唯一配对;在此拓扑中只有2个(0↔2,1↔3)是NVLink,其余4个是PCIe。因此进行的4路全规约中大多数边是慢的,而分片权重到更小块带来的节省不足以弥补这一损失。加入第二对GPU弊大于利,除非每一对之间都有快速链路。
在单流理论上,由于每GPU带宽压力降低,TP=4应带来约1.5–1.8倍的加速。**现实:-13%。** 拓扑结构胜过了理论带宽计算。
# 总结
1. **在3090上服务于TP=2时,NVLink在并发度1下带来约25%的性能提升,在高批次大小时可达50%以上。** 务必把TP=2固定在NVLink配对组上。
2. **TP=N 的好坏取决于拓扑中最慢的链路。** 在“两个NVLink配对组”的3090机箱上加入另外两块GPU(TP=4)会导致吞吐量比TP=2-NVLink降低约30%。不要因为你有4块GPU就去追求TP=4。
3. **MTP投机解码在所有拓扑下均正常工作**——接受率保持在70–79%,长度在2.4–2.6。瓶颈不在于草稿模型,而在于全规约。
4. **对于两配对组NVLink的3090盒子,最佳的 serving 模式可能是运行两个TP=2服务,** 一个在NVLink配对组0+2上,另一个在配对组1+3上(例如一个模型在0+2,另一个在1+3),而非一个TP=4。或者只运行一个TP=2,让另一对GPU托载另一个完全不同的模型。
如果有人拥有4路NVSwitch的机器(例如SXM 3090、A100或H100),并能在此进行相同的TP=4 vs TP=2对比测试,我很好奇当所有配对都通过NVLink连接时,TP=4是否能赢回其理论优势。
相似文章
Qwen 3.6 在双 RTX PRO 6000 上的基准测试
使用 VLLM 在双 RTX PRO 6000 GPU 上对 Qwen 3.6 27B 和 35B 模型进行基准测试,生成吞吐量高达每秒 3500 个令牌。
@superalesha: 别急着埋葬RTX 3090,先读完这个!@UnslothAI本周发布了qwen3.6-35b的两个新4位量化版本。我花了…
对Qwen3.6-35B在RTX 3090上的nvfp4、nvfp4-fast和AWQ 4位量化进行了基准测试,结果显示性能相近,而MTP头技巧将吞吐量提升了41%。
I benchmarked Unsloth's Qwen3.6-27B NVFP4 on 1x/2x 5090s. MTP is great until it really isn't.
详细基准测试:Unsloth的Qwen3.6-27B NVFP4模型在RTX 5090 GPU上的表现,显示MTP(多令牌预测)在短上下文的单次请求中能显著加速,但在批量并发或长上下文场景下则会带来不利影响。
在4块RTX 5060 Ti上,使用P2P和PP=4,对新的unslooth/Qwen3.6-27B-NVFP4在并发数为1、4、8、12和16下的基准测试
unslooth/Qwen3.6-27B-NVFP4模型在4块RTX 5060 Ti GPU上,使用点对点(P2P)和流水线并行(PP)在不同并发级别下的基准测试结果。
三元 Qwen3.6 27B 在 3090 上测试!
用户在 RTX 3090 上测试了三元量化版本的 Qwen3.6 27B,使用两个槽位和 100k KV 缓存,占用 21GB 显存,达到了 60 tk/s 的速度,质量良好且工具调用稳定。