关于 vLLM 与 DeepSpeed-FastGen 的比较说明

4 分钟阅读
vLLM 团队

总结

  • 在常见场景中,vLLM 的速度与 DeepSpeed-FastGen 持平,而在处理较长输出时则优于后者。
  • DeepSpeed-FastGen 仅在“长提示词、短输出”的场景中胜过 vLLM,这归功于其动态 SplitFuse 优化。该优化已列入 vLLM 的开发路线图中。
  • vLLM 的使命是构建最快速、最易用的开源大语言模型(LLM)推理和服务引擎。它采用 Apache 2.0 协议,由社区拥有,并提供广泛的模型和优化支持。

DeepSpeed 团队近期发表了一篇博客文章,声称通过利用动态 SplitFuse 技术,实现了相比 vLLM 2 倍的吞吐量提升。我们很高兴看到开源社区的技术进步。在本篇博客中,我们展示了动态 SplitFuse 技术具有优势的具体场景,并指出这些情况相对有限。对于大多数工作负载,vLLM 的速度都要快于(或性能相当)DeepSpeed-FastGen。

性能基准测试

我们发现在性能优化方面,vLLM 和 DeepSpeed-FastGen 存在两点主要区别:

  1. DeepSpeed-FastGen 采用了一种保守/次优的内存分配方案,这会在输出长度较大时浪费内存。
  2. 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 能够快速跟进,同时也欢迎市场上的创新!

vLLMDeepSpeed-FastGen
运行时Python/PyTorchPython/PyTorch
模型实现HuggingFace Transformers自定义实现 + HF 模型转换器
服务器前端演示用的简单 FastAPI 服务器自定义 gRPC 服务器
调度连续批处理 (Continuous batching)动态 SplitFuse
注意力算子PagedAttention & FlashAttentionPagedAttention & FlashAttention
自定义算子 (针对 LLaMA)Attention, RoPE, RMS, SILUAttention, RoPE, RMS, SILU, Embedding
KV Cache 分配接近最优次优/保守
支持的模型16 种不同架构LLaMA, Mistral, OPT
采样方法随机、并行、集束搜索随机
停止准则停止字符串、停止标记、EOSEOS