Efficient Memory Management for Large Language Model Serving with PagedAttention
TL;DR 精炼摘要
本文提出受操作系统虚拟内存启发的PagedAttention算法,实现了LLM服务系统vLLM中近零内存浪费与跨请求KV缓存共享,显著提升大语言模型推理吞吐量2-4倍。此方法对长序列、大模型及复杂解码场景表现尤为突出。
摘要
High throughput serving of large language models (LLMs) requires batching sufficiently many requests at a time. However, existing systems struggle because the key-value cache (KV cache) memory for each request is huge and grows and shrinks dynamically. When managed inefficiently, this memory can be significantly wasted by fragmentation and redundant duplication, limiting the batch size. To address this problem, we propose PagedAttention, an attention algorithm inspired by the classical virtual memory and paging techniques in operating systems. On top of it, we build vLLM, an LLM serving system that achieves (1) near-zero waste in KV cache memory and (2) flexible sharing of KV cache within and across requests to further reduce memory usage. Our evaluations show that vLLM improves the throughput of popular LLMs by 2-4 with the same level of latency compared to the state-of-the-art systems, such as FasterTransformer and Orca. The improvement is more pronounced with longer sequences, larger models, and more complex decoding algorithms. vLLM's source code is publicly available at https://github.com/vllm-project/vllm
思维导图
论文精读
中文精读
1. 论文基本信息 (Bibliographic Information)
- 标题 (Title): Efficient Memory Management for Large Language Model Serving with PagedAttention (使用 PagedAttention 实现大语言模型服务的高效内存管理)
- 作者 (Authors): Woosuk Kwon, Zhuohan Li, Siyuan Zhuang, Ying Sheng, Lianmin Zheng, Cody Hao Yu, Joseph E. Gonzalez, Hao Zhang, Ion Stoica
- 隶属机构 (Affiliations): UC Berkeley, Stanford University, Independent Researcher, UC San Diego
- 发表期刊/会议 (Journal/Conference): 本文为预印本 (Preprint),提交于 arXiv。arXiv 是一个开放获取的学术论文存档库,常用于在正式同行评审前快速发布研究成果。
- 发表年份 (Publication Year): 2023
- 摘要 (Abstract): 大语言模型 (LLM) 的高吞吐量服务需要在一次请求中批处理足够多的请求。然而,现有系统在实现这一点上遇到了困难,因为每个请求的键值缓存 (KV cache) 内存占用巨大且动态增缩。如果管理不善,这部分内存会因碎片化和冗余复制而大量浪费,从而限制了批处理的大小。为解决此问题,我们提出了
PagedAttention,这是一种受操作系统中经典的虚拟内存和分页技术启发的注意力算法。在此基础上,我们构建了vLLM,一个 LLM 服务系统,它实现了 (1) KV 缓存内存的近乎零浪费,以及 (2) 在请求内部和跨请求之间灵活共享 KV 缓存以进一步减少内存使用。我们的评估表明,与FasterTransformer和Orca等最先进的系统相比,在同等延迟水平下,vLLM将流行 LLM 的吞吐量提高了 2-4 倍。在序列更长、模型更大、解码算法更复杂的情况下,这种提升更为显著。 - 原文链接 (Source Link):
-
arXiv 链接: https://arxiv.org/abs/2309.06180v1
-
发布状态:预印本 (Preprint)。
-
2. 整体概括 (Executive Summary)
-
研究背景与动机 (Background & Motivation - Why):
- 核心问题: 在为大语言模型 (LLM) 提供推理服务时,一个关键的性能瓶颈是 GPU 内存。具体来说,模型在生成文本过程中需要存储大量的中间状态,即键值缓存 (KV Cache)。这个缓存的大小与生成序列的长度成正比,且在生成过程中动态增长。
- 重要性与挑战: LLM 服务成本高昂,提升吞吐量(单位时间内处理的请求数)是降低成本的关键。提高吞吐量的主要方法是批处理 (batching),即同时处理多个请求。然而,
KV Cache的巨大内存占用和动态性给批处理带来了巨大挑战:- 内存浪费严重: 现有系统(如
FasterTransformer,Orca)为每个请求预先分配一块连续的、能容纳最大可能序列长度的内存。这导致了严重的内部碎片化(实际生成长度远小于最大长度)和外部碎片化(不同大小的内存块难以整合利用)。论文指出,在这些系统中,内存的有效利用率可能低至 20%。 - 无法有效共享内存: 在并行采样或束搜索等解码策略中,多个候选序列的前缀部分是相同的,其
KV Cache理论上可以共享。但由于现有系统采用连续内存存储,使得这种跨序列的内存共享难以实现,造成了冗余存储。
- 内存浪费严重: 现有系统(如
- 切入点与创新思路: 论文作者从经典的操作系统 (Operating Systems, OS) 技术中获得灵感,将虚拟内存 (Virtual Memory) 和分页 (Paging) 的思想引入到
KV Cache的管理中。其核心思路是:不再要求KV Cache物理上连续存储,而是将其分割成固定大小的“块” (blocks),通过一个映射表来管理这些逻辑上连续、物理上分散的块。
-
核心贡献/主要发现 (Main Contribution/Findings - What):
-
提出了
PagedAttention算法: 这是一种新的注意力机制实现,它可以在非连续的内存块上执行注意力计算。这是实现高效内存管理的技术基石,因为它解除了KV Cache必须连续存储的限制。 -
设计并实现了
vLLM服务引擎: 这是一个基于PagedAttention构建的高吞吐量 LLM 服务系统。它包含一个中央调度器和KV Cache管理器,实现了:- 近乎零的内存浪费: 通过按需分配小块内存,
vLLM极大地减少了内部和外部碎片化,将KV Cache内存的有效利用率提升至 96% 以上。 - 灵活的内存共享:
vLLM能够轻松实现跨序列的KV Cache共享。例如,在并行采样中,多个输出序列可以共享提示 (prompt) 部分的缓存;在束搜索 (beam search) 中,可以实现更复杂的动态共享。这通过写时复制 (Copy-on-Write) 机制高效完成。
- 近乎零的内存浪费: 通过按需分配小块内存,
-
显著的性能提升: 实验证明,与现有最先进系统相比,
vLLM在同等延迟下将吞吐量提升了 2-4 倍。特别是在长序列、大模型和复杂解码场景下,优势更加明显。
-
3. 预备知识与相关工作 (Prerequisite Knowledge & Related Work)
-
基础概念 (Foundational Concepts):
- 大语言模型 (Large Language Models, LLM): 指的是参数量巨大(通常数十亿到数万亿)的深度学习模型,如 GPT-3、LLaMA 等。它们通过在海量文本数据上训练,学习到了强大的语言理解和生成能力。
- 自回归生成 (Autoregressive Generation): 这是 LLM 生成文本的标准方式。模型逐个令牌 (token) 地生成输出,每生成一个新令牌,都以上下文(即输入提示+已生成的令牌)为条件。其概率模型可以表示为:。
- Transformer 与自注意力 (Transformer & Self-Attention): Transformer 是当前 LLM 的主流架构。其核心是自注意力机制 (Self-Attention),该机制允许模型在计算一个令牌的表示时,权衡输入序列中所有其他令牌的重要性。对于每个令牌,模型会计算出三个向量:查询 (Query, )、键 (Key, ) 和值 (Value, )。注意力得分是通过查询向量与所有键向量的点积计算得出的,然后用这些得分对值向量进行加权求和,得到输出。
- 键值缓存 (Key-Value Cache, KV Cache): 在自回归生成中,为了生成第 个令牌,模型需要用到前面所有
i-1个令牌的键 () 和值 () 向量。为了避免每次生成新令牌时都重复计算前面所有令牌的k,v向量,系统会将它们缓存起来。这个缓存就是KV Cache。随着生成序列变长,KV Cache也不断增大,成为内存占用的主要部分。 - LLM 服务的两个阶段:
- 提示阶段 (Prompt Phase / Prefill): 处理用户输入的提示文本。由于整个提示是已知的,可以并行计算所有令牌的
KV Cache。这个阶段计算密集,能有效利用 GPU 的并行能力。 - 生成阶段 (Generation Phase): 逐个生成输出令牌。每次只处理一个新令牌,计算是串行的,这使得该阶段是内存带宽受限 (memory-bound) 的,GPU 计算单元利用率低。
- 提示阶段 (Prompt Phase / Prefill): 处理用户输入的提示文本。由于整个提示是已知的,可以并行计算所有令牌的
- 批处理 (Batching): 为了提高 GPU 利用率和系统吞吐量,服务系统会将多个用户的请求合并成一个批次进行处理。然而,由于不同请求的长度和生成速度不同,简单的批处理效率低下。
迭代级调度 (iteration-level scheduling)是一种更高级的策略,它在每个生成步骤后动态地更新批次,加入新请求或移除已完成的请求。
-
前人工作 (Previous Works):
- FasterTransformer: 由 NVIDIA 开发的高性能推理引擎。它为 Transformer 模型提供了高度优化的 CUDA 核函数,但其内存管理依赖于为每个请求预分配一块连续的内存空间,这导致了严重的内存碎片化。
- Orca: 一个旨在通过
迭代级调度和更好的内存管理来提高 LLM 服务吞吐量的系统。尽管它比FasterTransformer更先进,但它仍然为每个序列分配连续的内存块,只是块的大小可以更灵活。这虽然缓解了部分问题,但仍无法根除碎片化,也无法实现本文提出的那种灵活的内存共享。
-
技术演进 (Technological Evolution): LLM 服务的优化可以看作一个不断对抗内存瓶颈的历程:
- 朴素批处理: 将多个请求填充到相同长度,一起处理。计算和内存效率都很低。
- 动态批处理/迭代级调度: 如
Orca所做,允许不同长度的序列在一个批次中,并在每一步动态调整批次内容,显著提升了吞吐量。 - 内存管理优化 (本文工作): 认识到即使有动态批处理,内存本身的管理方式(连续分配)已成为新的瓶颈。
vLLM通过引入分页机制,从根本上解决了内存碎片化和共享难题,将优化推向了新的高度。
-
差异化分析 (Differentiation):
vLLM与FasterTransformer和Orca的核心区别在于 KV 缓存的存储方式:-
现有系统:
KV Cache必须存储在物理连续的内存中。这就像给每个程序分配一大块固定且连续的内存,不管它是否用得完,也不能与其他程序共享未使用的部分。 -
vLLM:
KV Cache可以存储在物理非连续的内存块中。这就像操作系统的虚拟内存,程序看到的是连续的逻辑地址空间,而操作系统则将这些逻辑页面映射到物理内存中任意可用的物理页面。这种方式从根本上解决了碎片化并天然地支持了共享。
-
4. 方法论 (Methodology - Core Technology & Implementation Details)
本部分详细解析 PagedAttention 算法和 vLLM 系统的工作原理。
-
方法原理 (Methodology Principles):
- 核心思想: 模仿操作系统的虚拟内存分页机制来管理
KV Cache。- 类比:
- KV Cache 块 (KV Blocks) <-> 页面 (Pages)
- 序列 (Sequences) <-> 进程 (Processes)
- 令牌 (Tokens) <-> 字节 (Bytes)
- 块表 (Block Tables) <-> 页表 (Page Tables)
- 类比:
- 通过这种方式,
vLLM将一个逻辑上连续的KV Cache存储在物理上分散的、固定大小的块中。这带来了两大好处:- 消除碎片化: 由于所有内存块大小相同,系统不再有外部碎片。同时,因为内存是按需分配的(只有当一个块写满后才分配下一个),内部碎片被限制在每个序列最后一个未写满的块内,浪费极小。
- 实现高效共享: 不同的逻辑块可以映射到同一个物理块。这使得内存共享变得非常简单,只需在块表中将多个条目指向同一个物理块地址即可。
- 核心思想: 模仿操作系统的虚拟内存分页机制来管理
-
方法步骤与流程 (Steps & Procedures):
1.
PagedAttention算法:这是整个系统的技术核心。传统的注意力算法要求
Key和Value张量是连续的。PagedAttention修改了注意力计算的核函数,使其能够从一个“块表”中读取地址,然后访问分散在内存各处的KV块。
上图(Figure 5)展示了 PagedAttention的工作原理。一个序列的KV Cache被分成了多个块(Block 0, 1, 2),这些块在物理内存中(如 GPU DRAM)是不连续的。在计算注意力时,PagedAttention核函数会根据块表,逐个获取这些物理块,并与当前的查询向量 进行计算。2.
vLLM系统架构与工作流程:
该图像是图表,展示了vLLM与Orca在不同并行生成和束搜索条件下的标准化延迟与请求率的关系,多个子图比较了不同并行大小和平行宽度对性能的影响。
上图(Figure 4)是 vLLM的系统概览。它由一个中央调度器 (Centralized Scheduler) 和多个 GPU 工作节点 (Workers) 组成。调度器内的 KV 缓存管理器 (KV Cache Manager) 负责所有内存块的分配、释放和映射。工作流程示例 (结合 Figure 6):
上图(Figure 6)展示了 vLLM中块表的转换过程。- 步骤 ① (提示处理): 一个包含 7 个令牌的提示进入系统。假设块大小为 4。系统需要 2 个逻辑块来存储这 7 个令牌的
KV Cache。KV Cache管理器分配了两个物理块(例如物理块 7 和物理块 1),并在该序列的块表中记录下映射关系:逻辑块 0 -> 物理块 7,逻辑块 1 -> 物理块 1。 - 步骤 ② (生成第 1 个新令牌): 模型生成了一个新令牌。它的
KV Cache需要存储。管理器检查最后一个逻辑块(逻辑块 1),发现它还有空位(已用 3/4)。于是,新的KV Cache被存入物理块 1 的剩余空间。块表中该条目的“已填充数”更新为 4。 - 步骤 ③ (生成第 2 个新令牌): 模型又生成一个新令牌。此时,最后一个逻辑块(逻辑块 1)已满。管理器会为序列分配一个新的逻辑块(逻辑块 2),并从空闲物理块池中取出一个新的物理块(例如物理块 3)与之映射。新的
KV Cache被存入物理块 3。块表新增条目:逻辑块 2 -> 物理块 3。
3. 复杂解码场景的应用:
-
并行采样 (Parallel Sampling):
该图像是论文中的图表,展示了注意力核的延迟及不同块大小下的端到端延迟对比。左图(a)说明了vLLM和FasterTransformer在不同上下文长度与批大小下的内核延迟表现,右图(b)展示了ShareGPT和Alpaca模型在不同块大小的归一化延迟情况。
上图(Figure 8)展示了并行采样的例子。两个输出序列(Sample A1, A2)共享同一个提示。在 vLLM中,它们的逻辑块 0 和 1 都映射到相同的物理块 7 和 1。物理块的引用计数 (reference count) 会被设为 2。当 Sample A1 需要写入最后一个共享块(物理块 1)时,系统检测到引用计数 > 1,触发写时复制 (Copy-on-Write):系统分配一个新物理块(物理块 3),将物理块 1 的内容复制过去,然后让 Sample A1 的逻辑块 1 指向这个新块。原物理块 1 的引用计数减 1。这样,只有在必要时才发生数据复制,且仅复制一个块,开销极小。 -
束搜索 (Beam Search):
上图(Figure 9)展示了束搜索的复杂共享模式。不同的候选序列(beams)可能共享不同长度的前缀。vLLM的块共享机制可以完美地映射这种树状的父子关系。当一个候选序列被丢弃时,其占用的逻辑块被释放,对应物理块的引用计数减 1。当引用计数归零时,物理块被回收。这避免了传统实现中大量、频繁的KV Cache内存拷贝。 -
共享前缀 (Shared Prefix):
上图(Figure 10)展示了一个例子,许多翻译请求可能共享一个包含指令和示例的系统提示 (system prompt)。vLLM可以预先计算并缓存这个共享前缀的KV Cache到一组固定的物理块中。当新请求到来时,只需将其逻辑块直接映射到这些预缓存的物理块上,从而免去了对前缀的重复计算,实现了跨请求的共享。4. 调度与抢占 (Scheduling and Preemption): 当系统过载时,
vLLM需要做出调度决策。 -
调度策略: 采用先到先服务 (First-Come-First-Serve, FCFS),保证公平性。
-
抢占: 当 GPU 内存耗尽时,系统需要抢占(暂停)一些正在运行的请求。
vLLM会选择最近到达的请求进行抢占。被抢占请求的KV Cache有两种处理方式:- 交换 (Swapping): 将被抢占序列的
KV Cache物理块从 GPU 内存复制到 CPU 内存。当 GPU 释放出空间后,再将其换回。 - 重计算 (Recomputation): 直接丢弃被抢占序列的
KV Cache。当该序列恢复运行时,将其已生成的部分和原始提示拼接起来,通过一次高效的提示阶段(并行计算)重新生成KV Cache。
- 交换 (Swapping): 将被抢占序列的
- 步骤 ① (提示处理): 一个包含 7 个令牌的提示进入系统。假设块大小为 4。系统需要 2 个逻辑块来存储这 7 个令牌的
-
数学公式与关键细节 (Mathematical Formulas & Key Details): 论文将传统注意力计算公式进行了块化重构。原始的注意力计算(对单个查询 )如下:
- 符号解释:
-
: 分别是位置 的查询向量,位置 的键向量和值向量。
-
: 向量的维度。
-
: 注意力分数,表示位置 对位置 的关注程度。
-
: 位置 的输出向量。
PagedAttention将其改写为块级计算 (blockwise computation)。设块大小为 ,第 个键块和值块分别为 和 :
-
- 符号解释:
-
: 第 个键块,包含 个键向量。
-
: 第 个值块,包含 个值向量。
-
: 查询 对第 个键块 中所有键向量的注意力分数行向量。
-
: 计算位置 之前总共有多少个块。
-
核心: 这个公式表明,注意力计算可以被分解为对一系列独立的
KV块的操作,从而允许这些块存储在非连续的内存位置。
-
- 符号解释:
5. 实验设置 (Experimental Setup)
-
数据集 (Datasets):
-
ShareGPT: 用户与 ChatGPT 的真实对话记录。特点是输入提示长,输出也长,且长度变化范围大。
-
Alpaca: 由 GPT-3.5 生成的指令遵循数据集。特点是输入提示短,输出也相对较短。
上图(Figure 11)展示了两个数据集的输入输出长度分布。ShareGPT (a) 的平均输入长度为 8.4k 令牌,输出为 5.8k 令牌,远长于 Alpaca (b)。这两种不同特点的数据集能更全面地评估系统在不同负载下的性能。
-
-
评估指标 (Evaluation Metrics):
- 归一化延迟 (Normalized Latency):
- 概念定义: 该指标衡量的是生成每个输出令牌平均所需的端到端时间。它被定义为从请求到达系统到最后一个令牌生成完成的总时间,除以该请求生成的输出令牌总数。这个指标比单纯的总延迟更能反映系统的实际生成效率,因为它消除了不同输出长度对延迟的影响。一个高吞吐量的系统应该在请求速率增加时,仍然能保持较低的归一化延迟。
- 数学公式: 论文中未给出严格的数学公式,但其定义可表述为:
- 符号解释:
- : 指一个请求从进入系统队列到最后一个输出令牌生成完成的总耗时。
- : 指该请求最终生成的输出令牌的数量。
- 归一化延迟 (Normalized Latency):
-
对比基线 (Baselines):
- FasterTransformer: NVIDIA 官方的高性能推理库,代表了高度优化的底层实现。
- Orca: 当时最先进的 LLM 服务系统,以高吞吐量为目标。由于其未开源,作者复现了其核心思想。为了公平比较,作者实现了三个版本的 Orca:
Orca (Oracle): 理论上限。假设系统能预知每个请求确切的输出长度,并只分配刚好的内存。这在现实中无法做到。Orca (Pow2): 一种较实际的策略。按 2 的幂次方来向上取整分配内存。例如,若实际需要 25 个令牌空间,则分配 32 个。Orca (Max): 最保守也最浪费的策略。为每个请求都分配模型支持的最大序列长度(如 2048)的空间。
-
模型与硬件配置: 实验使用了不同尺寸的
OPT和LLaMA模型,运行在 NVIDIA A100 GPU 上。以下是 Table 1 的转录数据,展示了详细配置:模型尺寸 13B 66B 175B GPUs A100 4×A100 8×A100-80GB 总 GPU 内存 40 GB 160 GB 640 GB 参数大小 26 GB 132 GB 346 GB 用于 KV 缓存的内存 12 GB 21 GB 264 GB 最大 KV 缓存槽数 15.7K 9.7K 60.1K
6. 实验结果与分析 (Results & Analysis)
-
核心结果分析 (Basic Sampling):
上图(Figure 2)直观地展示了 vLLM在内存管理上的巨大优势。在基线系统中,高达 60-80% 的KV Cache内存被浪费在碎片化和预留空间上,而vLLM的浪费率仅为 3.7%。
该图像是图4,vLLM系统概览的示意图,展示了调度器、KV缓存管理器、CPU和GPU块分配器与多个Worker节点之间的交互结构,体现了系统中缓存引擎与模型分片的协调工作。
上图(Figure 12)展示了在不同模型和数据集上的核心性能对比。曲线的“拐点”代表了系统的最大吞吐量,超过该请求速率后,延迟会急剧上升。可以看到,vLLM的拐点远在其他系统的右侧,意味着它能承受更高的请求速率。具体来说,在 ShareGPT 数据集上,vLLM的吞吐量比FasterTransformer高 1.7-2.7 倍,比Orca高 1.8-2.5 倍。在 Alpaca 数据集上,提升同样显著。
该图像是图5的示意图,展示了PagedAttention算法中,注意力的key和value向量存储为内存中的非连续块的结构。
上图(Figure 13)揭示了 vLLM高吞吐量的原因:更高的批处理大小。由于极高的内存效率,vLLM可以在 GPU 中容纳更多的请求,从而实现更大的批处理量,这直接转化为更高的 GPU 利用率和系统吞吐量。 -
复杂解码场景分析:
该图像是论文中图6的示意图,展示了vLLM中逻辑KV块到物理KV块的映射过程,包含请求A的各个逻辑块、块表映射与对应的GPU DRAM物理块分布,描述了KV缓存的分页管理机制。
上图(Figure 14)展示了在并行采样和束搜索场景下的性能。随着并行路数()或束宽(beam width)的增加,需要管理的序列数量和内存共享机会也随之增加。vLLM的优势变得更加突出。例如,在束宽为 4 的束搜索中,vLLM的吞吐量是Orca的 2.4 倍,因为vLLM的内存共享机制避免了大量的内存拷贝和冗余存储。
上图(Figure 15)量化了内存共享带来的节省。在并行采样中,随着采样数量增加,内存节省逼近 12%;在束搜索中,随着束宽增加,内存节省最高可达 55%。这证明了 vLLM的共享机制非常有效。 -
消融实验/参数分析 (Ablation Studies / Parameter Analysis):
该图像是一个示意图,展示了机器翻译任务中共享提示(prompt)的示例。图中比较了两个序列的输入提示及对应的模型输出,强调共享的前缀提示对不同任务输入的影响。
上图(Figure 18)进行了消融实验。图 (a) 比较了 PagedAttention核函数与FasterTransformer的核函数在不同批次和序列长度下的延迟。结果表明,PagedAttention的核函数本身就具有与高度优化的FasterTransformer相媲美甚至更优的性能。图 (b) 探讨了块大小 (block size) 的影响。块太小会增加元数据开销,块太大则会引入少量内部碎片。实验表明,块大小为 16 是一个很好的平衡点。
该图像是图表,展示了图11中(a) ShareGPT和(b) Alpaca数据集的输入与输出长度分布,横轴为词元数量,纵轴为密度,图中分别标注了输入输出的平均值。
上图(Figure 19)比较了交换 (swapping) 和重计算 (recomputation) 这两种抢占策略的开销和性能。图 (a) 显示,对于较小的块,重计算比交换更快,因为 PCIe 带宽成为瓶颈;对于较大的块,交换则更有优势。图 (b) 的端到端性能表明,在长序列场景(ShareGPT)下,重计算策略性能更优,因为它避免了大量的内存拷贝。这为系统根据负载动态选择抢占策略提供了依据。
7. 总结与思考 (Conclusion & Personal Thoughts)
-
结论总结 (Conclusion Summary): 该论文成功地识别出 LLM 服务中
KV Cache管理是核心性能瓶颈,并创造性地借鉴了操作系统的虚拟内存和分页技术来解决此问题。- 主要贡献: 提出了
PagedAttention算法和vLLM服务引擎。 - 主要发现:
vLLM通过将KV Cache存储在非连续的内存块中,实现了近乎零的内存浪费,并支持跨序列的高效内存共享(通过写时复制)。 - 主要意义: 实验结果表明,
vLLM相比现有最先进系统,能在同等延迟下将吞吐量提升 2-4 倍,极大地提高了 LLM 服务的效率和经济性。
- 主要贡献: 提出了
-
局限性与未来工作 (Limitations & Future Work): 尽管论文本身未明确列出“局限性”一节,但从其设计和实验中可以推断出一些潜在的思考点和未来方向:
- 调度器开销:
vLLM采用中央调度器管理所有内存,在未来更大规模的分布式集群中,这个中央调度器可能会成为新的瓶颈。 - 核函数复杂性:
PagedAttention依赖于定制的 CUDA 核函数。这增加了系统的复杂性,并且需要持续的维护以适应新的硬件架构(如新的 GPU 型号)。 - 动态块大小: 论文中的块大小是固定的。未来的工作可以探索根据负载动态调整块大小的策略,以在元数据开销和内部碎片之间取得更好的平衡。
- 更智能的调度/抢占策略: 论文中比较了交换和重计算,但调度策略(如何时抢占、抢占哪个请求)仍可进一步优化,例如结合请求的优先级、预估的生成长度等信息。
- 调度器开销:
-
个人启发与批判 (Personal Insights & Critique):
-
启发:
- 跨学科借鉴的力量: 这篇论文是计算机系统(特别是操作系统)与机器学习交叉的典范。它证明了许多在其他领域被认为是“经典”或“基础”的理念,在新的应用场景下可以爆发出巨大的创新潜力。
- 抓准核心瓶颈: 优秀的系统研究往往始于对性能瓶颈的深刻洞察。作者没有停留在微观的算法优化,而是从宏观的内存管理架构入手,一举解决了多个相关问题(碎片化、共享难),展现了系统性思维的重要性。
- 优雅的解决方案:
PagedAttention的设计非常优雅。它没有引入复杂的逻辑,而是通过一个简单的类比(虚拟内存)和核心技术(非连续注意力计算),自然地解决了问题。写时复制等机制的运用也恰到好处。
-
批判性思考:
-
该方法虽然高效,但其实现依赖于对底层硬件和 CUDA 编程的深入理解,这为在不同硬件平台或深度学习框架上复现和推广带来了一定的门槛。
-
论文的评估主要集中在吞吐量和延迟上。对于一些对延迟极其敏感的实时应用场景(例如,交互式打字),
vLLM的调度和可能的抢占机制是否会引入不可预测的延迟抖动,这一点值得进一步探究。 -
vLLM的成功也凸显了当前主流深度学习框架(如 PyTorch)在动态张量管理方面的不足。这项工作可能会推动框架本身向更灵活的内存管理方向发展。总而言之,这篇论文是一项里程碑式的工作,它不仅提出了一个在工程实践中极其有效的解决方案,也为未来 LLM 服务系统的设计提供了全新的思路。
vLLM已经成为业界广泛采用的开源项目,这本身就是对其价值的最好证明。
-
-
相似论文推荐
基于向量语义检索推荐的相关论文。