在 2x3090 NVLINK 上对 Qwen 3.6 27B MTP 进行基准测试

Reddit r/LocalLLaMA 工具

摘要

对 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是否能赢回其理论优势。
查看原文

相似文章

4x RTX 3090 上的 Qwen3.5-27B、Qwen3.5-122B 和 Qwen3.6-35B —— MoE 模型在严格全局规则下的表现困境

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 允许列表

RTX Pro 4500 Blackwell - Qwen 3.6 27B?

Reddit r/LocalLLaMA

一位开发者分享了在搭载 NVIDIA RTX Pro 4500 Blackwell 显卡的服务器上,使用 llama.cpp 运行 Qwen3.6-27B 模型的本地推理基准测试数据及 systemd 配置。该帖文征集了提升吞吐量的优化建议,并探讨了更大模型的潜在应用场景。