3 张卡到底能不能跑大模型推理?从 vLLM、llama.cpp 到 TensorSharp 的多卡真相 - 张善友

3 张卡到底能不能跑大模型推理?从 vLLM、llama.cpp 到 TensorSharp 的多卡真相 - 张善友

💡 原文中文,约1800字,阅读约需5分钟。
📝

内容提要

vLLM的并行限制源于注意力头数需被TP大小整除,而非固定1/2/4/8卡;llama.cpp采用层切分,通信量小,卡数影响不大,关键在互联类型。TensorSharp引擎同时支持层切分和张量并行,3卡跑744B模型性能超llama.cpp,但TP对互联敏感,2卡仅提升1.4倍。核心结论:层切分对卡数免疫,TP对互联敏感。

🔎

延伸解读

vLLM 的“3卡限制”是整除约束,不是硬性规定

vLLM 并非固定只支持 1、2、4、8 卡,真正的限制是注意力头数必须能被 TP size 整除。主流模型头数多为 2 的幂,导致 3 卡无法整除而报错,但若模型头数能被 3 整除,3 卡也能运行。因此,选择并行度时需关注模型结构,而非盲目套用常见卡数。

层切分对卡数不敏感,互联才是关键

llama.cpp 的层切分模式通信量极小,卡数增加不会显著影响性能,因此 3 卡、4 卡甚至更多卡都能流畅运行。真正的瓶颈在于显存容量,而非通信。但互联类型影响显著:2 卡以上就能从高速互联中受益,PCIe 等慢速互联会限制性能,所以“高速互联”的门槛比想象中更早出现。

TensorSharp 的对比:层切分与张量并行的实际表现

TensorSharp 同时支持层切分和张量并行,其测试显示:3 卡层切分跑 744B 模型性能超过 llama.cpp,证明层切分对卡数免疫;而张量并行在 2 卡时仅提升 1.4 倍,远低于理想 2 倍,凸显了通信开销。这量化了 TP 对互联的敏感性,也印证了“互联质量决定 TP 上限”的结论。

Q&A

vLLM 是否硬性规定张量并行只能使用 1、2、4、8 卡?

不是。vLLM 的真实约束是注意力头数(包括 KV 头数)必须能被张量并行大小整除。主流模型头数多为 2 的幂,导致 3 卡等无法整除而报错,但并非框架写死。

为什么 3 卡能跑 llama.cpp 而 vLLM 不行?

llama.cpp 默认采用层切分(Layer Split),通信量小,对卡数没有整除要求,因此 3 卡可以运行。vLLM 采用张量并行,受注意力头数整除限制,主流模型头数无法被 3 整除,所以 3 卡会报错。

llama.cpp 的层切分在 4 卡、6 卡、8 卡时通信量会显著增加吗?

不会。层切分只在层边界传输激活值,通信量很小,卡数增加不会显著增加通信量。真正的瓶颈是显存是否足够,而非通信。

TensorSharp 引擎如何支持多卡推理?

TensorSharp 同时支持层切分和张量并行。默认按层自动切分权重到所有可见 GPU,无整除要求;也提供 Megatron 风格的张量并行,支持单机多卡和跨机 TCP 集群。

TensorSharp 在 3 卡上跑 744B 模型的效果如何?

TensorSharp 在 3 张 RTX PRO 6000 上跑 744B 参数的 GLM-5.2 MoE,采用层切分和 CPU MoE offload,prefill 2048 tokens 达到 918.9 tok/s,超过 llama.cpp 的 763.1 tok/s。

张量并行(TP)对互联的敏感程度如何?

张量并行对互联非常敏感。例如 TensorSharp 的 TP 在 2 卡时理想加速比应为 2 倍,实际只有约 1.4 倍,损失来自 all-reduce 通信和同步开销。跨机 TP 走普通 TCP 网络时性能更差,需要 NVLink 级别的高速互联才能发挥优势。

决定多卡推理能否运行和性能的关键因素是什么?

关键因素是并行方式:层切分对卡数免疫,通信量小,卡数多少影响不大;张量并行对互联敏感,需要高速互联才能获得良好扩展性。因此,不是卡数本身(如 3 卡还是 4 卡)决定成败,而是并行方式和互联质量。

🏷️

标签

➡️

继续阅读