首页
/
工具
/
在 2x3090 NVLINK 上对 Qwen 3.6 27B MTP 进行基准测试
在 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是否能赢回其理论优势。
相似文章
Reddit r/LocalLLaMA
潜水多年的老用户,首次发帖。在 4 张 RTX 3090 上对三款 Qwen 模型分别进行了 20 多个会话的实时智能体工作测试——**Qwen3.5-27B** 稠密模型、**Qwen3.5-122B-A10B** MoE 和 **Qwen3.6-35B-A3B** MoE。以下数据均解析自持续真实负载下的 vLLM 日志,而非合成基准测试。**本文所有数据的关键负载背景:** 测试框架是一个多智能体编排器,同时运行 1-6 个并发的 OpenCode 会话,Prompt 长度为 30-60k token,并且强制执行**严格的 Bash 允许列表
Reddit r/LocalLLaMA
一位开发者分享了在搭载 NVIDIA RTX Pro 4500 Blackwell 显卡的服务器上,使用 llama.cpp 运行 Qwen3.6-27B 模型的本地推理基准测试数据及 systemd 配置。该帖文征集了提升吞吐量的优化建议,并探讨了更大模型的潜在应用场景。
X AI KOLs Following
A single RTX 3090 achieves 134 tok/s on the new 27B Qwen 3.5 Dense and 73 tok/s on Qwen 3.6-27B using fused kernels and speculative decoding, with same-day GGUF releases.
Reddit r/LocalLLaMA
开发者通过将 MTP(多 Token 预测)与 TurboQuant 的无损 KV缓存压缩技术相结合,在单张 RTX 4090 上实现了 Qwen3.6-27B 模型在 262K 上下文下 80+ token/秒的推理速度,并分享了实现分支和技术细节。
X AI KOLs Timeline
一位用户成功在三个 GTX 1080 Ti GPU 上对 27B 参数的 Qwen 模型进行本地推理,通过 TurboQuant 优化达到了约 28-30 tokens/秒的速度。