PCIe 3.0 x1 上跑 Tensor Split:实测效果不错

加第二块 GPU 时不少人警告 PCIe 3.0 x1 会是巨大瓶颈;实测即便一块 RTX 3060 只挂在 x1 上,llama.cpp 从 layer split 改为 tensor split 后生成速度仍提升 42%,解码期间每卡双向流量仅约 90–110 MB/s,远低于 x1 单向约 985 MB/s 的理论上限,但提示词处理确实存在 37–41% 的 tensor split 惩罚。
当初考虑加装第二块 GPU 时,不少人告诉我 PCIe 3.0 x1 会是巨大瓶颈,升级主板才是头等大事。我还是照样上了 x1 延长线,结果比预期好得多。分享出来,希望对其他正在规划机器配置的人有参考价值。
我的家用配置:
Intel i5-14400F
2× RTX 3060 12GB(共 24GB)
一块 GPU 走 PCIe x16,另一块走 PCIe 3.0 x1
llama.cpp,跑 Gemma 4 31b Q5(刚好塞下,上下文很紧)
从 layer split 换成 tensor split 后,t/s 提升 +42%(14 → 20),即便其中一块 GPU 是通过 PCIe 3.0 x1 连接的。不过这套精确配置我还没做充分测试,因为在狠用这两张卡之前我要先升级电源。
按大家先前的说法,我本以为它会慢得像爬,只是打算测测内存分配……结果收获了一个意外的正向结果。
租来机器上的测试
我租了一台 2× RTX 5060 Ti 16GB(共 32GB)的机器,想测几个 70b 模型,关机前决定顺带看看 tensor split 期间的 PCIe 流量。我想知道 tensor split 在 PCIe 上到底需要多少带宽。
测试配置:
模型:L3.1 Nemotron Sunfall 71B IQ3_XS
上下文:2k
开启 Flash Attention
llama.cpp
PCIe Gen 3 链路,以 x8 宽度运行
Layer split 对比 Tensor split:
测试项 | Layer | Tensor
提示词生成 | 11.7 t/s | 20.7 t/s
提示词处理 | 591.8 t/s | 464.4 t/s
tensor split 下 t/s +77%。
PCIe 带宽实测
用下面的命令监控 tensor split 推理期间的 PCIe 流量:
nvidia-smi dmon -s t -d 1
以下是生成期间的部分实际采样(MB/s):
```
GPU RX TX
0 92 102
1 96 105
0 94 108
1 107 108
0 92 100
1 94 99
0 98 107
1 105 111
0 93 103
1 95 101
0 92 99
1 94 98
```
解码期间两块 GPU 每个方向都稳定传输约 90–110 MB/s。PCIe 3.0 x1 每个方向的理论带宽约 985 MB/s,对中低端 GPU 的 tensor split 而言,这大概率不会构成瓶颈。
当然,模型加载会稍慢:加载时我看到超过 4,000 MB/s 的尖峰。显然 x1 会拖慢它,给模型加载时间增加几秒。不过我并不常换模型,加载多几秒不是问题。
这些结果并不能证明 PCIe x1 毫无性能代价。Vast 上那些卡并没有跑在 x1 上,而且平均吞吐体现不出延迟、同步开销或短促的传输突发。但结论看起来相当乐观:升级主板或牺牲一个 NVMe 槽位,很可能没有必要。
更新:正如许多人提到的,掉速最狠的是提示词处理。我在本地 2×3060 上快速测了一下。带宽占用更高,但仍远低于上限。tensor split 的代价是真实存在的,但并不能断定换更高的链路速度就一定更快。
看来我的提示词处理在 tensor parallel 下惩罚很重:
Prompt | Layer prefill | Tensor prefill | Tensor 惩罚
512 | 313.5 t/s | 184.9 t/s | −41.0%
2,048 | 341.6 | 205.4 | −39.9%
4,096 | 358.4 | 220.3 | −38.5%
6,144 | 359.5 | 225.2 | −37.4%
7,600 | 358.7 | 226.5 | −36.9%
下面是我这套配置的 PCIe 带宽,有意思的是比 5060 Ti 那台高得多……不过大部分时间仍远低于 GPU 1 的链路上限。此快照从 7600 上下文长度的提示词处理开始抓取。
```
01gpu rxpci txpci
02Idx MB/s MB/s
0 0 691
1 0 813
0 3188 450
1 141 133
0 4065 446
1 143 136
0 4061 409
1 168 136
0 3880 441
1 142 138
0 4021 446
1 142 136
0 4004 421
1 170 136
0 0 0
1 0 0
0 459 407
1 369 363
0 469 394
1 347 378
0 461 393
1 358 380
0 467 387
1 347 369
0 456 406
1 350 376
0 466 387
1 347 366
0 456 387
1 355 207
0 466 388
1 352 214
0 468 387
1 451 284
0 467 387
1 425 365
0 458 374
```
submitted by /u/Introvertosaurus [link] [comments]