在混合Blackwell/Ada集群上对vLLM、SGLang和llama.cpp进行基准测试

Reddit r/LocalLLaMA 工具

摘要

本文在混合Blackwell/Ada GPU集群上对vLLM、SGLang和llama.cpp进行长上下文预填充基准测试,发现vLLM在异构设置上显著优于其他引擎,而SGLang由于FP4支持限制,在使用Ada显卡时会崩溃。

我在一个异构的7-GPU集群上运行了一些基准测试,以观察不同推理引擎在使用流水线并行处理长上下文预填充时的表现。我的配置混合了Blackwell和Ada显卡:一张RTX PRO 6000 96GB、一张PRO 5000 48GB、两张5090 32GB和三张改装过的4090 48GB。所有测试均使用4位权重,其中vLLM和SGLang使用NVFP4,而llama.cpp使用MXFP4。主要结论是:在混合多GPU设置下,vLLM在长上下文预填充方面显著优于其他引擎。Llama.cpp在此条件下的流水线并行表现非常吃力,速度落后4到6倍。这似乎是由于执行图在多设备上的处理方式,CPU端嵌入导致图分裂和流水线气泡。SGLang在纯Blackwell环境中表现出色,几乎与vLLM持平。但一旦在流水线中加入Ada显卡,它会立即崩溃,因为当前缺乏FP4权重的软件回退,严格需要计算能力10.0。而vLLM通过旧卡上的FP4模拟无缝处理了这一问题。另一个有趣的发现是vLLM处理不均匀GPU分片的能力。通过使用VLLM_PP_LAYER_PARTITION环境变量手动调整层分布,我能够在快速的Blackwell和进行FP4模拟的较慢4090之间平衡计算负载。这消除了流水线瓶颈,即使在397B模型上也带来了巨大的速度提升。以下是基准测试结果摘要。 模型和上下文 | GPU配置 | 引擎 | TTFT | 预填充速度 ---|---|---|---|--- Qwen3.6-35B-A3B (184k tokens) | 2 GPUs (6000 + 5090) | vLLM | 10.2s | 18060 t/s Qwen3.6-35B-A3B (184k tokens) | 2 GPUs (6000 + 5090) | llama.cpp | 24.9s | 7405 t/s MiniMax-M2.7 (82k tokens) | 6 GPUs (Mixed) | vLLM | 13.2s | 6212 t/s MiniMax-M2.7 (82k tokens) | 6 GPUs (Mixed) | llama.cpp | 77.0s | 1065 t/s MiniMax-M2.7 (82k tokens) | 6 GPUs (Mixed) | SGLang | 崩溃 | N/A Qwen3.5-122B-A10B (75k tokens) | 4 GPUs (Pure Blackwell) | vLLM | 5.0s | 15084 t/s Qwen3.5-122B-A10B (75k tokens) | 4 GPUs (Pure Blackwell) | SGLang | 5.3s | 14177 t/s Qwen3.5-122B-A10B (75k tokens) | 4 GPUs (Pure Blackwell) | llama.cpp | 20.6s | 3662 t/s Qwen3.5-397B-A17B (75k tokens) | 7 GPUs (Uneven PP split) | vLLM | 9.8s | 7683 t/s Qwen3.5-397B-A17B (75k tokens) | 7 GPUs (Uneven PP split) | llama.cpp | 57.2s | 1319 t/s 如果你正在搭建混合集群或严重依赖流水线并行来处理大模型,vLLM的分块预填充和手动层分区非常有用。希望这些数据对规划硬件拓扑或解决多GPU设置下的预填充时间问题有所帮助。我不是英语母语者,因此使用了LLM进行翻译。编辑:修正了拼写错误。
查看原文

相似文章

ggml-org/llama.cpp

GitHub Trending (daily)

llama.cpp 是一个开源 C/C++ 库,用于在本地硬件上高效运行 LLM 推理,支持多种量化方法和多后端(CPU、GPU 等)。