关于 vLLM 与 DeepSpeed-FastGen 的比较说明
总结
- 在常见场景中,vLLM 的速度与 DeepSpeed-FastGen 持平,而在处理较长输出时则优于后者。
- DeepSpeed-FastGen 仅在“长提示词、短输出”的场景中胜过 vLLM,这归功于其动态 SplitFuse 优化。该优化已列入 vLLM 的开发路线图中。
- vLLM 的使命是构建最快速、最易用的开源大语言模型(LLM)推理和服务引擎。它采用 Apache 2.0 协议,由社区拥有,并提供广泛的模型和优化支持。
DeepSpeed 团队近期发表了一篇博客文章,声称通过利用动态 SplitFuse 技术,实现了相比 vLLM 2 倍的吞吐量提升。我们很高兴看到开源社区的技术进步。在本篇博客中,我们展示了动态 SplitFuse 技术具有优势的具体场景,并指出这些情况相对有限。对于大多数工作负载,vLLM 的速度都要快于(或性能相当)DeepSpeed-FastGen。
性能基准测试
我们发现在性能优化方面,vLLM 和 DeepSpeed-FastGen 存在两点主要区别:
- DeepSpeed-FastGen 采用了一种保守/次优的内存分配方案,这会在输出长度较大时浪费内存。
- DeepSpeed-FastGen 的动态 SplitFuse 调度仅在提示词长度远大于输出长度时才能提供加速。
因此,DeepSpeed-FastGen 在长提示词和短输出的工作负载下表现更好。而在其他场景中,vLLM 则表现出卓越的性能。
我们在 NVIDIA A100-80GB GPU 上使用 LLaMA-7B 模型对两个系统在以下场景进行了基准测试:
场景 1:长提示词,短输出
在这些场景中,预计 DeepSpeed-FastGen 的动态 SplitFuse 调度会表现突出。然而,我们观察到的性能提升并没有达到 2 倍那么显著。

场景 2:其他情况
而在这些情况下,vLLM 比 DeepSpeed-FastGen 快达 1.8 倍。

vLLM 的未来:一个真正的社区项目
我们致力于将 vLLM 打造成集社区最优秀模型、优化方案和硬件支持于一体的最佳开源项目。我们源自加州大学伯克利分校 Sky 计算实验室,并以 Apache 2.0 许可证在开源社区中真正地构建 vLLM。
vLLM 团队优先考虑合作,并努力保持代码库的高质量和易于贡献。我们正在积极优化系统性能,以及开发 LoRA、投机解码(Speculative Decoding)和更好的量化支持等新功能。此外,我们正在与 AMD、AWS Inferentia 和 Intel Habana 等硬件厂商合作,将 LLM 带给更广泛的社区。
针对动态 SplitFuse 优化,我们正在积极研究如何进行适当的集成。如果您有任何问题或建议,欢迎通过 GitHub 联系我们。我们还在此处发布了基准测试代码:点击这里。
附录:功能对比
DeepSpeed-FastGen 目前仅提供基础功能,仅支持三种模型类型,且缺乏停止字符串(stop strings)和并行采样(如集束搜索 beam search)等流行功能。我们期待 DeepSpeed-FastGen 能够快速跟进,同时也欢迎市场上的创新!
| vLLM | DeepSpeed-FastGen | |
|---|---|---|
| 运行时 | Python/PyTorch | Python/PyTorch |
| 模型实现 | HuggingFace Transformers | 自定义实现 + HF 模型转换器 |
| 服务器前端 | 演示用的简单 FastAPI 服务器 | 自定义 gRPC 服务器 |
| 调度 | 连续批处理 (Continuous batching) | 动态 SplitFuse |
| 注意力算子 | PagedAttention & FlashAttention | PagedAttention & FlashAttention |
| 自定义算子 (针对 LLaMA) | Attention, RoPE, RMS, SILU | Attention, RoPE, RMS, SILU, Embedding |
| KV Cache 分配 | 接近最优 | 次优/保守 |
| 支持的模型 | 16 种不同架构 | LLaMA, Mistral, OPT |
| 采样方法 | 随机、并行、集束搜索 | 随机 |
| 停止准则 | 停止字符串、停止标记、EOS | EOS |