小羊驼背后的英雄,伯克利开源LLM推理与服务库:GPU减半、吞吐数十倍猛增

简介: 小羊驼背后的英雄,伯克利开源LLM推理与服务库:GPU减半、吞吐数十倍猛增


大模型时代,各种优化方案被提出,这次吞吐量、内存占用大等问题被拿下了。


随着大语言模型(LLM)的不断发展,这些模型在很大程度上改变了人类使用 AI 的方式。然而,实际上为这些模型提供服务仍然存在挑战,即使在昂贵的硬件上也可能慢得惊人。


现在这种限制正在被打破。最近,来自加州大学伯克利分校的研究者开源了一个项目 vLLM,该项目主要用于快速 LLM 推理和服务。vLLM 的核心是 PagedAttention,这是一种新颖的注意力算法,它将在操作系统的虚拟内存中分页的经典思想引入到 LLM 服务中。


配备了 PagedAttention 的 vLLM 将 LLM 服务状态重新定义:它比 HuggingFace Transformers 提供高达 24 倍的吞吐量,而无需任何模型架构更改。



项目地址:https://github.com/vllm-project/vllm


总结而言,vLLM 具有如下特点:


  • 最先进的服务吞吐量;
  • PagedAttention 可以有效的管理注意力的键和值;
  • 动态批处理请求;
  • 优化好的 CUDA 内核;
  • 与流行的 HuggingFace 模型无缝集成;
  • 高吞吐量服务与各种解码算法,包括并行采样、beam search 等等;
  • 张量并行以支持分布式推理;
  • 流输出;
  • 兼容 OpenAI 的 API 服务。


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 等)。


值得一提的是,vLLM 已被部署在 Chatbot Arena 和 Vicuna 中。项目作者之一 Zhuohan Li 表示,自发布以来,vLLM 一直是 Chatbot Arena 和 Vicuna Demo 背后的无名英雄,它能处理高峰流量并高效地为流行模型提供服务。它已将 LMSYS(一个开放的研究组织,旨在让每个人都能访问大型模型) 使用的 GPU 数量减少了一半,同时每天平均处理 30K 次对话。



vLLM 性能如何?


该研究将 vLLM 的吞吐量与最流行的 LLM 库 HuggingFace Transformers (HF),以及之前具有 SOTA 吞吐量的 HuggingFace Text Generation Inference(TGI)进行了比较。此外,该研究将实验设置分为两种:LLaMA-7B,硬件为 NVIDIA A10G GPU;另一种为 LLaMA-13B,硬件为 NVIDIA A100 GPU (40GB)。他们从 ShareGPT 数据集中采样输入 / 输出长度。结果表明,vLLM 的吞吐量比 HF 高 24 倍,比 TGI 高 3.5 倍。


vLLM 的吞吐量比 HF 高 14 倍 - 24 倍,比 TGI 高 2.2 倍 - 2.5 倍。


vLLM 的吞吐量比 HF 高 8.5 - 15 倍,比 TGI 高 3.3 - 3.5 倍。


PagedAttention:解决内存瓶颈


该研究发现,在 vLLM 库中 LLM 服务的性能受到内存瓶颈的影响。在自回归解码过程中,所有输入到 LLM 的 token 会产生注意力键和值的张量,这些张量保存在 GPU 内存中以生成下一个 token。这些缓存键和值的张量通常被称为 KV 缓存,其具有:


  • 内存占用大:在 LLaMA-13B 中,缓存单个序列最多需要 1.7GB 内存;
  • 动态且不可预测:KV 缓存的大小取决于序列长度,这是高度可变和不可预测的。因此,这对有效地管理 KV 缓存挑战较大。该研究发现,由于碎片化和过度保留,现有系统浪费了 60% - 80% 的内存。


为了解决这个问题,该研究引入了 PagedAttention,这是一种受操作系统中虚拟内存和分页经典思想启发的注意力算法。与传统的注意力算法不同,PagedAttention 允许在非连续的内存空间中存储连续的键和值。具体来说,PagedAttention 将每个序列的 KV 缓存划分为块,每个块包含固定数量 token 的键和值。在注意力计算期间,PagedAttention 内核可以有效地识别和获取这些块。


PagedAttention:KV 缓存被划分成块,块不需要在内存空间中连续。


因为块在内存中不需要连续,因而可以用一种更加灵活的方式管理键和值,就像在操作系统的虚拟内存中一样:可以将块视为页面,将 token 视为字节,将序列视为进程。序列的连续逻辑块通过块表映射到非连续物理块中。物理块在生成新 token 时按需分配。


使用 PagedAttention 的请求的示例生成过程。


在 PagedAttention 中,内存浪费只会发生在序列的最后一个块中。这使得在实践中可以实现接近最佳的内存使用,仅浪费不到 4 %。这种内存效率的提升被证明非常有用,允许系统将更多序列进行批处理,提高 GPU 使用率,显著提升吞吐量。


PagedAttention 还有另一个关键优势 —— 高效的内存共享。例如在并行采样中,多个输出序列是由同一个提示(prompt)生成的。在这种情况下,提示的计算和内存可以在输出序列中共享。


并行采样示例。


PagedAttention 自然地通过其块表格来启动内存共享。与进程共享物理页面的方式类似,PagedAttention 中的不同序列可以通过将它们的逻辑块映射到同一个物理块的方式来共享块。为了确保安全共享,PagedAttention 会对物理块的引用计数进行跟踪,并实现写时复制(Copy-on-Write)机制。


对于对多输出进行采样的请求,它的示例生成过程是这样的。


PageAttention 的内存共享大大减少了复杂采样算法的内存开销,例如并行采样和集束搜索的内存使用量降低了 55%。这可以转化为高达 2.2 倍的吞吐量提升。这种采样方法也在 LLM 服务中变得实用起来。


PageAttention 成为了 vLLM 背后的核心技术。vLLM 是 LLM 推理和服务引擎,为各种具有高性能和易用界面的模型提供支持。


是什么在背后默默支撑 Vicuna 和 Chatbot Arena


今年 4 月,LMSYS 公开发布了流行的 Vicuna(小羊驼)聊天机器人模型。从那时起,Vicuna 就在 Chatbot Arena 中为数百万用户提供服务。最开始,LMSYS 的开源聊天机器人 FastChat 采用基于 HF Transformer 的服务后端来为聊天 demo 提供服务。


随着 demo 变得越来越流行,峰值流量增加了几倍,导致 HF 后端成为一个严重的瓶颈。LMSYS 和 vLLM 团队展开合作并很快开发了 FastChat-vLLM 集成,使用 vLLM 作为新的后端,从而满足不断增长的需求(5 倍流量)。在 LMSYS 早期的内部微基准测试中,vLLM 服务后端可以实现的吞吐量是初始 HF 后端的 30 倍。

此外,自 4 月中旬以来,Vicuna、Koala 和 LLaMA 等最受欢迎的模型都已经成功地使用 FastChat-vLLM 集成服务。LMSYS 以 FastChat 为多模型聊天服务前端,以 vLLM 作为推理后端,这样可以利用大学赞助的有限 GPU,高吞吐量、低延迟地为数百万用户提供 Vicuna。


目前,LMSYS 正在将 vLLM 的使用范围扩展到更广泛的大模型,包括 Databricks Dolly、LAION 的 OpenAsssiant、Stability AI 的 stableLM。对于更多模型的支持正在开发并即将到来。


4 月至 5 月,Chatbot Arena 中 FastChat-vLLM 集成服务的请求情况。事实上,Chatbot Arena 中超过一半的请求都使用 vLLM 作为推理后端。

vLLM 的使用还显著降低了运营成本。借助 vLLM,LMSYS 能够将用于处理上述流量的 GPU 数量减少 50%。vLLM 平均每天可以处理 30k 请求,峰值为 60k,这说明了 vLLM 的稳健性很强。


vLLM 的安装与使用

你可以通过以下 pip 命令安装 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 的相关研究论文也即将放出。


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
2月前
|
机器学习/深度学习 自然语言处理 测试技术
CoT神话破灭,并非LLM标配!三大学府机构联手证实,CoT仅在数学符号推理有用
【10月更文挑战第17天】链式思维(CoT)曾被认为是大型语言模型(LLM)激发推理能力的关键方法,但最新研究显示,CoT仅在数学和符号推理任务中有效,其他任务中效果不明显。加州大学伯克利分校、斯坦福大学和卡内基梅隆大学的联合研究打破了CoT作为LLM标配的神话,为重新评估LLM的推理能力提供了新视角。
39 1
|
24天前
|
人工智能 自然语言处理
重要的事情说两遍!Prompt复读机,显著提高LLM推理能力
【10月更文挑战第30天】本文介绍了一种名为“问题重读”(Question Re-reading)的提示策略,旨在提高大型语言模型(LLMs)的推理能力。该策略受人类学习和问题解决过程的启发,通过重新审视输入提示中的问题信息,使LLMs能够提取更深层次的见解、识别复杂模式,并建立更细致的联系。实验结果显示,问题重读策略在多个推理任务上显著提升了模型性能。
35 2
|
1月前
|
JSON 人工智能 算法
探索LLM推理全阶段的JSON格式输出限制方法
文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
|
1月前
|
人工智能 运维 Serverless
Serverless GPU:助力 AI 推理加速
近年来,AI 技术发展迅猛,企业纷纷寻求将 AI 能力转化为商业价值,然而,在部署 AI 模型推理服务时,却遭遇成本高昂、弹性不足及运维复杂等挑战。本文将探讨云原生 Serverless GPU 如何从根本上解决这些问题,以实现 AI 技术的高效落地。
|
2月前
|
机器学习/深度学习 自然语言处理 测试技术
CoT神话破灭,并非LLM标配!三大学府机构联手证实,CoT仅在数学符号推理有用
【10月更文挑战第16天】近期,加州大学伯克利分校、斯坦福大学和卡内基梅隆大学联合研究发现,链式思维(CoT)方法在数学和符号推理任务中表现优异,但在其他类型任务中效果不明显。这一研究打破了CoT作为大型语言模型(LLM)标配的神话,为重新审视LLM的推理能力提供了新视角。
32 2
|
27天前
|
机器学习/深度学习 人工智能 弹性计算
阿里云AI服务器价格表_GPU服务器租赁费用_AI人工智能高性能计算推理
阿里云AI服务器提供多种配置选项,包括CPU+GPU、CPU+FPGA等组合,支持高性能计算需求。本文汇总了阿里云GPU服务器的价格信息,涵盖NVIDIA A10、V100、T4、P4、P100等多款GPU卡,适用于人工智能、机器学习和深度学习等场景。详细价格表和实例规格见文内图表。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
【AI大模型】LLM主流开源大模型介绍
【AI大模型】LLM主流开源大模型介绍
|
3月前
|
人工智能 Prometheus 监控
使用 NVIDIA NIM 在阿里云容器服务(ACK)中加速 LLM 推理
本文介绍了在阿里云容器服务 ACK 上部署 NVIDIA NIM,结合云原生 AI 套件和 KServe 快速构建高性能模型推理服务的方法。通过阿里云 Prometheus 和 Grafana 实现实时监控,并基于排队请求数配置弹性扩缩容策略,提升服务稳定性和效率。文章提供了详细的部署步骤和示例,帮助读者快速搭建和优化模型推理服务。
188 7
使用 NVIDIA NIM 在阿里云容器服务(ACK)中加速 LLM 推理
|
3月前
|
人工智能 Prometheus 监控
使用NVIDIA NIM在阿里云ACK中加速LLM推理
介绍在阿里云ACK集群上结合AI套件能力快速部署NVIDIA NIM模型推理服务,同时提供全面的监控指标和实现弹性伸缩。
使用NVIDIA NIM在阿里云ACK中加速LLM推理
|
2月前
|
计算机视觉
Deepseek开源多模态LLM模型框架Janus,魔搭社区最佳实践
deepseek近期推出了简单、统一且灵活的多模态框架Janus,它能够统一处理多模态理解和生成任务。让我们一起来了解一下吧。