文章目录
vLLM中文教程地址
什么是 vLLM?
如今,大语言模型(LLM)已经在多个领域引发了革命性变化。然而,由于这些模型对计算资源的高需求,将它们部署在实际应用中可能面临挑战。这就是 vLLM 发挥作用的地方。vLLM代表虚拟大语言模型,是一个活跃的开源库,能够高效支持 LLM 的推理和模型服务。
vLLM 首次被介绍是在一篇论文中——Efficient Memory Management for Large Language Model Serving with PagedAttention,作者是 Kwon 等人。论文指出了在服务 LLM 时面临的挑战是内存分配,并评估了其对性能的影响。具体来说,它强调了当前 LLM 服务系统中管理键值(KV)缓存内存的低效。这些限制常常导致推理速度慢和高内存占用。
为了解决这个问题,论文提出了PagedAttention,这是一种受操作系统中虚拟内存和分页技术启发的注意力算法。PagedAttention 通过允许注意力键和值的非连续存储来实现高效的内存管理。基于这一理念,论文开发了 vLLM,一个基于 PagedAttention 构建的高吞吐量分布式 LLM 服务引擎。vLLM 实现了键值缓存内存的几乎零浪费,显著提高了服务性能。此外,利用虚拟内存和写时复制等技术,vLLM 高效地管理键值缓存并处理各种解码算法。与最先进的系统如 FasterTransformer 和 Orca 相比,vLLM 的吞吐量提高了 2-4 倍。这种改进在处理较长序列、较大模型和复杂解码算法时尤为显著。
vLLM 的核心思想是什么?
PagedAttention
注意力机制允许 LLM 在生成输出/响应时关注输入序列中的相关部分。在注意力机制内部,需要计算所有输入标记的注意力分数。现有系统将键值对存储在连续的内存空间中,限制了内存共享,导致低效的内存管理。
PagedAttention 是一种受操作系统中分页概念启发的注意力算法。它通过将每个序列的键值缓存划分为键值块表,允许在非连续内存空间中存储连续的键值对。这样,它使得在一个层内的多个注意力头之间以及层之间能够灵活管理键值向量,从而优化内存使用,减少碎片化,并最大限度地减少冗余复制。
vLLM 中用于高效服务的其他技术有哪些?
vLLM 不仅仅依赖于 PagedAttention。它还结合了一系列技术来进一步优化 LLM 服务。
-
持续批处理:将传入请求持续批处理在一起,以最大化硬件利用率并减少计算浪费,最大限度地减少空闲时间。
-
量化:vLLM 利用诸如 FP16 等量化技术通过以较低精度表示键值缓存来优化内存使用,从而减少内存占用并加速计算。
-
优化的 CUDA 内核:vLLM 针对在 GPU 上执行的代码进行手动调优以实现最大性能。例如,对于融合的重塑和块写入,开发了优化的内核来将新的键值缓存拆分为块,重塑以便高效的内存访问,并根据块表保存它们,所有这些都融合为一个内核以减少开销。
如何使用 vLLM?
vLLM 使用起来非常简单。以下是在 Python 中如何使用它的一个概览:
可以通过 pip 安装 vLLM:
# (推荐)创建一个新的 conda 环境。
conda create -n myenv python=3.9 -y
conda activate myenv
# 安装 vLLM 并支持 CUDA 12.1。
pip install vllm
离线推理
然后将 vLLM 模块导入代码中,并使用 vLLM 的引擎进行离线推理。LLM 类用于使用特定内置的 LLM 模型初始化 vLLM 引擎。LLM 模型默认从 HuggingFace 下载。SamplingParams 类用于设置推理参数。
from vllm import LLM, SamplingParams
然后我们定义一个输入序列并设置采样参数。使用 LLM 类和 LLM 模型初始化 vLLM 的引擎以进行离线推理:
prompts = ["The future of humanity is"]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
llm = LLM(model="meta-llama/Meta-Llama-3-8B-Instruct")
最后,可以通过以下方式生成输出/响应:
Responses = llm.generate(prompts, sampling_params)
print(f"Prompt: {
Responses[0].prompt!r}, Generated text: {
Responses[0].outputs[0].text!r}")
代码示例可以在这里找到。
在线服务
要在在线服务中使用 vLLM,可以在 vLLM 中使用 OpenAI 的 completions 和 APIs。可以使用 Python 启动服务器:
python -m vllm.entrypoints.openai.api_server --model
NousResearch/Meta-Llama-3-8B-Instruct --dtype auto --api-key
token-abc123
要调用服务器,可以使用官方的 OpenAI Python 客户端库。或者,任何其他 HTTP 客户端也可以使用。
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="token-abc123",
)
completion = client.chat.completions.create(
model="NousResearch/Meta-Llama-3-8B-Instruct",
messages=[
{
"role": "user", "content": "Hello!"}
]
)
print(completion.choices[0].message)
更多示例可以在官方的vLLM 文档中找到。
vLLM 的使用案例是什么?
vLLM 对 LLM 的高效操作开启了众多实际应用。以下是一些展示 vLLM 潜力的引人注目的场景:
-
变革聊天机器人和虚拟助手:凭借其高效的服务支持,vLLM 可以让聊天机器人和虚拟助手进行细致的对话、理解复杂的请求,并以人性化的同理心进行响应。通过实现更快的响应时间和更低的延迟,vLLM 确保了更流畅的交互。此外,vLLM 使得聊天机器人能够访问和处理大量信息,使其能够为用户提供全面和信息丰富的答案。vLLM 处理多样化创意文本格式的能力可以用于打造个性化响应,以满足用户的特定需求和偏好。这种速度、知识和适应性的结合可以将聊天机器人从简单的 FAQ 机器转变为客户服务、技术支持甚至情感咨询的宝贵工具。
-
民主化代码生成和编程协助:软件开发领域不断演变,跟上最新技术的步伐可能具有挑战性。vLLM 可以成为所有经验水平程序员的有价值伙伴。通过利用其代码理解能力,vLLM 可以建议代码补全、识别潜在错误,甚至推荐编码问题的替代解决方案。这可以显著减少开发时间并提高代码质量。vLLM 的文档生成能力也可以缓解开发人员的主要痛点。根据编写的代码自动生成清晰简洁的文档将为开发人员节省宝贵的时间和精力,并且文档的质量和一致性也可以得到控制。vLLM 可以用于创建引入编码概念的教育工具,以有趣和互动的方式,使编程对学生和有志于开发的人更加容易接触。
为什么选择 vLLM 来优化 LLM 部署?
vLLM 正迅速成为那些希望优化其大语言模型(LLM)部署的人的首选解决方案。传统的 LLM 框架通常需要大量资源和基础设施,这可能既昂贵又难以扩展。然而,vLLM 专为高效内存管理而设计,利用复杂的分页机制来减少内存占用并提高整体性能。通过采用 vLLM,团队可以降低硬件成本,同时提高推理速度和效率,特别是在扩展以满足高需求应用时。这使得 vLLM 成为那些希望在不牺牲速度或需要大量资源的情况下大规模部署 LLM 的组织的理想选择。
vLLM 如何与 Hopsworks 集成以进行 MLOps
结合 Hopsworks,vLLM 无缝集成到一个强大的 MLOps 管道中,使团队能够轻松地部署、监控和优化 LLM 应用。Hopsworks 提供了端到端的 MLOps 功能,如实验跟踪、模型版本控制和监控,这些可以直接应用于管理 vLLM 部署。此外,Hopsworks 的特征库提供了数据一致性和高性能,这对于训练和部署 LLM 至关重要。通过将 vLLM 与 Hopsworks 集成,MLOps 团队可以获得一种可扩展的、高效的方法来有效地管理和监控大规模 LLM 部署,将 vLLM 优化的好处带入更广泛的 MLOps 生态系统。使用 Hopsworks 4.0,您可以端到端构建和操作 LLM,从创建指令数据集和微调,到使用 vLLM 在 KServe 上进行模型服务,再到监控和 RAG。我们在特征库中添加了一个向量索引,因此现在在单个特征管道中,您既可以为 RAG 索引文档,也可以创建指令数据集。
总结
vLLM 解决了 LLM 部署中的一个关键瓶颈:低效的推理和服务。利用创新的 PagedAttention 技术,vLLM 在核心注意力操作期间优化内存使用,从而带来显著的性能提升。这转化为更快的推理速度和能够在资源受限的硬件上运行 LLM。除了原始性能之外,vLLM 还提供了可扩展性和成本效益等优势。凭借其开源性质和对进步的承诺,vLLM 在未来的 LLM 技术中占据了关键地位。