打「排位赛」的大模型们背后秘密武器曝光!UC伯克利重磅开源神级LLM推理系统——vLLM,利用PagedAttention,比HuggingFace/Transformers快24倍,GPU数量减半。
【资料图】
过去2个月,来自UC伯克利的研究人员给大语言模型们安排了一个擂台——Chatbot Arena。
GPT-4等大语言模型玩家打起了「排位赛」,通过随机battle,根据Elo得分来排名。
这一过程中,每当一个用户访问并使用网站,就需要同时让两个不同的模型跑起来。
他们是如何做到的?
这不,就在今天,UC伯克利重磅开源了世界最快LLM推理和服务系统vLLM。
简之,vLLM是一个开源的LLM推理和服务引擎。它利用了全新的注意力算法「PagedAttention」,有效地管理注意力键和值。
配备全新算法的vLLM,重新定义了LLM服务的最新技术水平:
与HuggingFace Transformers相比,它提供高达24倍的吞吐量,而无需进行任何模型架构更改。
值得一提的是,「小羊驼」Vicuna在demo中用到的就是FastChat和vLLM的一个集成。
正如研究者所称,vLLM最大的优势在于——提供易用、快速、便宜的LLM服务。
这意味着,未来,即使对于像LMSYS这样计算资源有限的小型研究团队也能轻松部署自己的LLM服务。
项目地址:https://github.com/vllm-project/vllm
现在,所有人可以在GitHub仓库中使用一个命令尝试vLLM了。论文随后也会发布。
性能全面碾压SOTA
今天,这个由UC伯克利创立的开放研究组织LMSYS介绍道:
「一起来见证vLLM:Chatbot Arena背后的秘密武器。FastChat-vLLM的集成使LMSYS使用的GPU数量减少了一半,同时每天平均提供3万次请求。」
vLLM的性能具体如何?
UC伯克利团队将vLLM的吞吐量与最受欢迎的LLM库HuggingFace Transformers(HF),以及HuggingFace文本生成推理(TGI),先前的最新技术水平进行了比较。
团队在两个设置中进行评估:在NVIDIA A10G GPU上运行LLaMA-7B模型,在NVIDIA A100 GPU(40GB)上运行LLaMA-13B模型。
然后,研究人员从ShareGPT数据集中抽样请求的输入/输出长度。
在实验中,vLLM的吞吐量比HF高达24倍,并且比TGI高达3.5倍。
在每个请求只需要一个输出完成时的服务吞吐量。vLLM比HF的吞吐量高出14倍-24倍,比TGI的吞吐量高出2.2倍-2.5倍
在每个请求需要3个并行输出完成时的服务吞吐量。vLLM比HF的吞吐量高出8.5倍-15倍,比TGI的吞吐量高出3.3倍-3.5倍
秘密武器:PagedAttention
在vLLM中,团队发现LLM服务的性能受到内存的限制。
在自回归解码过程中,LLM的所有输入token都会生成注意力键(key)和值(value)张量,并且这些张量被保留在GPU内存中以生成下一个token。
这些缓存的键和值张量通常被称为KV缓存。KV缓存具有以下特点:
1. 内存占用大:在LLaMA-13B中,单个序列的KV缓存占用高达1.7GB的内存。
2. 动态化:其大小取决于序列长度,而序列长度高度易变,且不可预测。
因此,有效管理KV缓存是一个重大挑战。对此,研究团队发现现有系统由于碎片化和过度保留而浪费了60%至80%的内存。
用团队的导师Joey Gonzalez的一句话来讲:GPU内存碎片化=慢。
为了解决这个问题,团队引入了PagedAttention,一种受到操作系统中虚拟内存和分页经典概念启发的注意力算法。
与传统的注意力算法不同,PagedAttention允许在非连续的内存空间中存储连续的键和值。
具体来说,PagedAttention将每个序列的KV缓存分为若干块,每个块包含固定数量token的键和值。在注意力计算过程中,PagedAttention内核能够高效地识别和提取这些块。
PagedAttention:KV缓存被分割成块,这些块在内存中不需要连续
由于这些块在内存中不需要连续,因此也就可以像操作系统的虚拟内存一样,以更灵活的方式管理键和值——将块看作页,token看作字节,序列看作进程。
序列的连续逻辑块通过块表映射到非连续的物理块。随着生成新的token,物理块会按需进行分配。
使用PagedAttention的请求生成过程示例
PagedAttention将内存浪费控制在了序列的最后一个块中。
在实践中,这带来了接近最优的内存使用——仅有不到4%的浪费。
而这种内存效率的提升,能让系统将更多的序列进行批处理,提高GPU利用率,从而显著提高吞吐量。
此外,PagedAttention还具有另一个关键优势:高效的内存共享。
比如在并行采样中,就能从相同的提示生成多个输出序列。在这种情况下,提示的计算和内存可以在输出序列之间共享。
并行采样的示例
PagedAttention通过块表自然地实现了内存共享。
类似于进程共享物理页的方式,PagedAttention中的不同序列可以通过将它们的逻辑块映射到相同的物理块来共享块。
为了确保安全,PagedAttention会跟踪物理块的引用计数,并实现了写时复制机制。
采样多个输出的请求示例生成过程
PagedAttention的内存共享极大减少了复杂采样算法(如并行采样和束搜索)的内存开销,将它们的内存使用量减少了高达55%。这可以将吞吐量提高多达2.2倍。
总结而言,PagedAttention是vLLM的核心技术,它是LLM推断和服务的引擎,支持各种模型,具有高性能和易于使用的界面。
GitHub上,团队也介绍了vLLM能够无缝支持的HuggingFace模型,包括以下架构:
– GPT-2(gpt2、gpt2-xl等)
– GPTNeoX(EleutherAI/gpt-neox-20b、databricks/dolly-v2-12b、stabilityai/stablelm-tuned-alpha-7b等)
– LLaMA(lmsys/vicuna-13b-v1.3、young-geng/koala、openlm-research/open_llama_13b等)
– OPT(facebook/opt-66b、facebook/opt-iml-max-30b等)
小羊驼和排位赛的「幕后英雄」
4月初,UC伯克利学者联手UCSD、CMU等,最先推出了一个开源全新模型——130亿参数的Vicuna,俗称「小羊驼」。
从那时起,Vicuna已在Chatbot Arena为数百万用户提供服务。
最初,LMSYS的FastChat采用基于HF Transformers的服务后端来提供聊天demo。
但随着demo变得越来越受欢迎,峰值流量猛增了好几倍,而HF后端也因此成了一个重大的瓶颈。
为了解决这一挑战,LMSYS与vLLM团队紧密合作,全力开发出了全新的FastChat-vLLM集成——通过将vLLM作为新的后端,来满足不断增长的需求(最多增加5倍的流量)。
根据LMSYS内部微基准测试的结果,vLLM服务后端可以实现比初始HF后端高出30倍的吞吐量。
4月-5月期间,Chatbot Arena的后端已经部落了FastChat-vLLM的集成。实际上,有超过一半的Chatbot Arena请求都使用FastChat-vLLM集成服务的
自4月中旬以来,最受欢迎的语言模型,如Vicuna、Koala和LLaMA,都已成功使用FastChat-vLLM集成提供服务。
FastChat作为多模型聊天服务前端,vLLM作为推理后端,LMSYS能够利用有限数量的GPU(学校赞助的),以高吞吐量和低延迟为数百万用户提供Vicuna服务。
现在,LMSYS正在将vLLM的使用扩展到更多的模型,包括Databricks Dolly、LAION的OpenAsssiant和Stability AI的StableLM等。
vLLM使用教程
使用以下命令安装vLLM(另可查看安装指南了解更多信息):
$ pip install vllm
vLLM可用于离线推理和在线服务。要使用vLLM进行离线推理,你可以导入vLLM并在Python脚本中使用LLM类:
from vllm import LLMprompts = ["Hello, my name is", "The capital of France is"] # Sample prompts.llm = LLM(model="lmsys/vicuna-7b-v1.3") # Create an LLM.outputs = llm.generate(prompts) # Generate texts from the prompts.
要使用vLLM进行在线服务,你可以通过以下方式启动与OpenAI API兼容的服务器:
$ python -m vllm.entrypoints.openai.api_server --model lmsys/vicuna-7b-v1.3
你可以使用与OpenAI API相同的格式查询服务器:
$ curl http://localhost:8000/v1/completions \-H "Content-Type: application/json" \-d "{ "model": "lmsys/vicuna-7b-v1.3", "prompt": "San Francisco is a", "max_tokens": 7, "temperature": 0 }"
有关使用vLLM的更多方法,请查看快速入门指南:
https://vllm.readthedocs.io/en/latest/getting_started/quickstart.html
团队介绍
Zhuohan Li
Zhuohan Li是加州大学伯克利分校计算机科学专业的博士生,研究兴趣是机器学习和分布式系统的交叉领域。
在此之前,他在北京大学获得了计算机科学学士学位,指导老师是王立威和贺笛。
Woosuk Kwon
Woosuk Kwon是加州大学伯克利分校的博士生,研究兴趣是为大语言模型等新兴应用建立实用、灵活和高性能的软件系统。
团队其他成员包括庄思远、盛颖、郑怜悯、Cody Yu。团队导师包括Joey Gonzalez,Ion Stoica和张昊。
其中,团队的大部分成员同时也是LMSYS成员。