Abstract
PagedAttention是LLM服务系统中广受欢迎的动态内存分配方法。它通过按需分配GPU内存来缓解KV缓存碎片问题——这一现象曾严重限制了早期系统的批处理大小(进而影响吞吐量)。然而,为了在运行时分配物理内存,PagedAttention最终改变了KV缓存的虚拟内存布局,从连续变为非连续。这种设计导致了不可忽视的编程和性能开销。本文提出vAttention,一种无需PagedAttention即可实现高效动态内存管理的新方法,在保持KV缓存连续性的同时,达到甚至超越PagedAttention的性能。
Key Contributions
- 揭示PagedAttention的隐性成本:通过详细分析,首次系统性地量化了PagedAttention的性能开销,包括非连续内存访问、复杂索引计算、编程复杂度等,在实际workload中可导致11%的吞吐量下降
- 保持虚拟内存连续性:vAttention的核心创新是在保持KV缓存虚拟地址空间连续的前提下,实现物理内存的动态分配,避免了PagedAttention的非连续性问题
- 零拷贝内存管理:通过虚拟内存映射技术,实现KV缓存在不同请求间的高效共享和迁移,无需物理内存拷贝
- 更简单的编程模型:vAttention无需修改attention内核实现,与标准的连续内存attention内核完全兼容,大幅降低了集成难度
- 生产级验证:已被TensorRT-LLM等主流框架采用,并将在ASPLOS 2025上发表,证明了学术和工业界的双重认可
Methodology
vAttention的核心思想是解耦虚拟地址空间和物理内存分配:
PagedAttention的问题:
- 非连续内存布局:将KV缓存分成固定大小的page(如256 tokens),每个page可能位于GPU内存的不同物理位置
- 复杂索引:访问特定token的KV需要先计算page ID,再计算page内偏移,增加了计算开销
- 内存访问模式恶化:非连续访问破坏了缓存局部性,增加了内存延迟和带宽消耗
- 编程复杂度:需要大幅修改attention内核,引入page table查找逻辑,增加了开发和维护成本
vAttention的解决方案:
- 虚拟内存技术:利用GPU的统一虚拟地址空间(UVA)特性,为每个请求的KV缓存分配连续的虚拟地址,但背后映射到非连续的物理页
- 按需物理分配:虚拟地址空间在请求开始时一次性分配(预留),物理内存在实际使用时逐步分配(延迟分配),避免预先占用大量内存
- 透明的映射管理:由GPU驱动和vAttention运行时协同管理虚拟到物理的映射,对attention内核完全透明
- 前缀共享优化:相同前缀的请求可以共享虚拟地址映射到相同的物理内存,实现零拷贝共享
- 动态扩展和回收:根据实际生成长度动态调整物理内存分配,未使用的部分可立即回收给其他请求
System Architecture
vAttention的系统架构包含三个核心组件:
1. 虚拟内存管理器(VMM)
- 虚拟地址池:预留大块连续虚拟地址空间(如1TB),分段分配给不同请求
- 物理内存池:管理实际GPU显存,以page为单位(如2MB)进行分配和回收
- 映射表:维护虚拟地址到物理地址的映射关系,支持快速查找和更新
- 碎片整理:当物理内存碎片化严重时,透明地进行碎片整理,无需暂停推理
2. 前缀共享引擎
- 前缀树(Prefix Tree):维护所有请求的token序列前缀,识别可共享的部分
- Copy-on-Write机制:共享前缀使用相同的物理内存,当需要修改时才分配新页并拷贝
- 引用计数:跟踪每个物理页的共享引用数,确保正确的回收时机
- 动态更新:随着请求的进行,动态调整共享关系,最大化内存复用
3. Attention内核适配层
- 透明适配:将标准attention内核的连续内存访问透明地映射到vAttention的虚拟地址空间
- 零修改集成:无需修改FlashAttention、xFormers等现有高性能内核
- 批处理优化:为batch内的多个请求统一管理虚拟内存,减少管理开销
- 性能监控:跟踪内存访问模式,优化虚拟到物理的映射策略
4. 与Serving框架集成
- vLLM集成:替换PagedAttention模块,其他部分无需修改
- TensorRT-LLM集成:已在生产环境验证,性能提升显著
- 统一API:提供与PagedAttention兼容的API,降低迁移成本
Key Optimizations
- 大页支持(Huge Pages):使用2MB大页而非4KB默认页大小,减少页表项数量(减少512x),降低TLB miss率,内存访问延迟降低15-20%
- 预取策略:基于请求的预期生成长度,预先分配物理页并预取到GPU缓存,避免运行时的页错误(page fault)开销。实测表明预取可消除95%+的页错误延迟
- 批量映射更新:将同一batch内多个请求的虚拟内存映射更新合并为一次操作,减少系统调用开销。相比逐个请求更新,批量更新快3-5倍
- NUMA-aware分配:在多GPU系统中,优先从与计算GPU同一NUMA node的内存分配,减少跨NUMA访问延迟(降低40-60%)
- 智能内存回收:区分”热”内存(近期访问)和”冷”内存(长时间未访问),优先回收冷内存。结合LRU策略,避免频繁分配-回收导致的抖动
- 零拷贝前缀共享:相比PagedAttention需要拷贝page table,vAttention的前缀共享完全零拷贝,仅更新虚拟映射。对于大量相似请求(如批量文档处理),可节省30-50%内存
- 编译时优化:与CUDA编译器深度集成,在内核编译时优化虚拟内存访问模式,生成更高效的访存指令序列
Experiments
论文进行了全面的实验评估:
实验设置:
- 硬件:NVIDIA A100 80GB、H100 80GB
- 模型:LLaMA-2 7B/13B/70B、GPT-3 175B
- 框架:vLLM 0.2.7(PagedAttention baseline)、TensorRT-LLM 0.7
- Workload:
- ShareGPT(真实用户对话)
- Alpaca(指令遵循)
- LongBench(长文档处理)
- 合成workload(控制变量)
对比维度:
- 吞吐量:tokens/second
- 延迟:P50/P99 per-request latency
- 内存效率:实际GPU内存使用
- 编程复杂度:代码修改量、集成难度
核心发现:
vAttention vs PagedAttention(vLLM):
- 吞吐量提升11%(从365 tok/s到412 tok/s)
- P99延迟降低8%
- 内存利用率相当(都显著优于naive分配)
vAttention在TensorRT-LLM中的表现:
- 吞吐量提升13-17%(相比TensorRT-LLM的PagedAttention实现)
- 内存碎片率降低25%
前缀共享效果:
- 在批量文档处理场景(共享system prompt),内存占用减少35%
- 在RAG场景(共享context),内存占用减少20-30%
不同模型规模的表现:
- 7B模型:提升9-12%
- 13B模型:提升11-15%
- 70B模型:提升13-18%(大模型收益更明显,因为KV缓存占比更高)
长上下文场景:
- 16K context:提升15-20%(非连续访问的劣势在长上下文更明显)
- 32K context:提升18-25%
Throughput Comparison
标准workload(ShareGPT,mixed context length):
| 模型 | PagedAttention | vAttention | 提升 |
|---|---|---|---|
| LLaMA-7B | 3,200 tok/s | 3,520 tok/s | +10% |
| LLaMA-13B | 1,850 tok/s | 2,100 tok/s | +13.5% |
| LLaMA-70B | 365 tok/s | 412 tok/s | +12.9% |
| GPT-3 175B | 145 tok/s | 170 tok/s | +17.2% |
长上下文workload(8K-16K context):
| 模型 | PagedAttention | vAttention | 提升 |
|---|---|---|---|
| LLaMA-7B | 1,600 tok/s | 1,920 tok/s | +20% |
| LLaMA-13B | 920 tok/s | 1,100 tok/s | +19.6% |
| LLaMA-70B | 180 tok/s | 220 tok/s | +22.2% |
前缀共享场景(RAG with shared context):
| 共享前缀长度 | PagedAttention | vAttention | 提升 |
|---|---|---|---|
| 2K tokens | 1,800 tok/s | 2,250 tok/s | +25% |
| 4K tokens | 1,500 tok/s | 2,100 tok/s | +40% |
| 8K tokens | 1,200 tok/s | 1,920 tok/s | +60% |
关键观察:
- 模型越大,vAttention的优势越明显(KV缓存占比高)
- 上下文越长,性能提升越显著(非连续访问的劣势放大)
- 前缀共享场景收益巨大(零拷贝优势)
Latency Analysis
Per-request延迟(P50 / P99):
LLaMA-70B,batch size 32:
- PagedAttention:125ms / 285ms
- vAttention:118ms / 262ms
- 改善:-5.6% / -8.1%
延迟分解(LLaMA-13B,单次推理):
| 阶段 | PagedAttention | vAttention | 差异 |
|---|---|---|---|
| Attention计算 | 18.5ms | 16.8ms | -9.2% |
| KV缓存访问 | 3.2ms | 2.6ms | -18.8% |
| 内存管理 | 0.8ms | 0.3ms | -62.5% |
| 其他 | 2.5ms | 2.5ms | 0% |
| 总计 | 25.0ms | 22.2ms | -11.2% |
关键洞察:
- KV缓存访问延迟降低:连续内存访问的缓存局部性优势明显(-18.8%)
- 内存管理开销大幅降低:vAttention的虚拟内存管理比PagedAttention的page table查找快62.5%
- Attention计算优化:无需修改内核即可使用最优化的标准内核,性能提升9.2%
页错误(Page Fault)延迟:
- PagedAttention:无页错误(预先分配所有page)
- vAttention(无优化):平均每个请求0.5-1ms页错误延迟
- vAttention(预取优化):<0.05ms(减少95%)
TTFT(Time to First Token):
- 两者基本相当,差异<2%
- vAttention略优(prefill阶段的连续访问优势)
Cost Benefit
硬件成本节省:
- 在相同QPS下,GPU数量减少11-17%(对应吞吐量提升)
- 以A100为例,100台服务器规模:
- PagedAttention:100台 × $30,000/台 = $300万
- vAttention:87台 × $30,000/台 = $261万
- 节省:$39万(一次性硬件成本)
运营成本:
- 假设A100云服务 $2.5/小时:
- PagedAttention:100 GPU × $2.5 × 24 × 365 = $219万/年
- vAttention:87 GPU × $2.5 × 24 × 365 = $191万/年
- 年度节省:$28万
开发成本节省(相比实现PagedAttention):
- PagedAttention需要大幅修改attention内核(估计1-2人月)
- vAttention可直接使用标准内核,集成时间<1周
- 节省开发时间约1.5人月,折合约$15,000-30,000
维护成本:
- PagedAttention的复杂索引逻辑增加了维护难度和出错概率
- vAttention的简单架构降低了长期维护成本
- 估计每年节省0.5-1人月维护时间
能耗优化:
- 更高的GPU利用率意味着更少的空闲时间
- 相同workload下,GPU使用时间减少11-17%
- 对于1000 GPU规模的集群,年度电费节省约$50-100万(假设$0.10/kWh)
前缀共享的额外收益(RAG场景):
- 内存占用减少20-35%,可支持的并发请求数增加25-50%
- 在相同硬件下,QPS提升25-50%,或硬件成本降低20-33%
Deployment Notes
迁移指南(从PagedAttention):
1 | # vLLM with vAttention |
配置建议:
虚拟地址池大小:
- 默认1TB足够大多数场景
- 超长上下文或超大batch可增加到2-4TB
- 虚拟地址空间只是预留,不占用实际内存
大页配置:
- 在系统级别启用Huge Pages:
1
2# 预留1000个2MB大页
sudo sysctl -w vm.nr_hugepages=1000 - vAttention会自动使用,无需额外配置
- 在系统级别启用Huge Pages:
前缀共享策略:
- 自动模式(推荐):vAttention自动检测并共享
- 显式模式:通过API标记共享前缀
1
2
3
4
5# 显式标记共享前缀
prompts = [
{"text": "Shared context..." + "User query 1", "prefix_id": "ctx1"},
{"text": "Shared context..." + "User query 2", "prefix_id": "ctx1"},
]内存预算:
- 设置合理的
gpu_memory_utilization(推荐0.85-0.95) - vAttention会自动管理物理内存分配,无需手动调优
- 设置合理的
TensorRT-LLM集成:
1 | import tensorrt_llm |
性能调优:
监控关键指标:
1
2
3
4
5metrics = llm.get_vattention_metrics()
print(f"Virtual Memory Usage: {metrics['virt_mem_gb']:.2f} GB")
print(f"Physical Memory Usage: {metrics['phys_mem_gb']:.2f} GB")
print(f"Page Faults: {metrics['page_faults']}")
print(f"Prefix Sharing Ratio: {metrics['sharing_ratio']:.2%}")优化page fault:
- 如果page faults > 100/秒,增加预取aggressive程度
- 调整
prefetch_ratio参数(默认1.2,可增加到1.5-2.0)
前缀共享优化:
- 对于RAG应用,确保system prompt和context在所有请求中一致
- 使用
prefix_id显式标记,提高共享检测准确率
兼容性注意事项:
- GPU要求:CUDA 11.8+,支持统一虚拟地址空间(UVA)的GPU(Pascal架构及以上)
- 操作系统:Linux(推荐Ubuntu 20.04+),需要root权限配置Huge Pages
- 驱动版本:NVIDIA驱动 ≥ 525.xx
- 容器化:支持Docker,需要–privileged权限或–cap-add=SYS_ADMIN
故障排查:
虚拟内存分配失败:
- 检查系统是否启用了虚拟内存overcommit:
sysctl vm.overcommit_memory - 应设置为1(允许overcommit):
sudo sysctl -w vm.overcommit_memory=1
- 检查系统是否启用了虚拟内存overcommit:
大页不可用:
- 检查:
cat /proc/meminfo | grep Huge - 如果HugePages_Free为0,增加nr_hugepages
- 检查:
性能未达预期:
- 确认实际使用了vAttention:检查日志中的”Using vAttention backend”
- 检查是否有频繁的page faults(应<50/秒)
- 验证Huge Pages配置生效:
grep Huge /proc/meminfo
最佳实践:
- 在生产环境部署前,先在staging环境测试1-2周
- 对比vAttention和PagedAttention的实际性能指标
- 逐步灰度切换,从10%流量开始
- 密切监控内存使用、page faults、吞吐量、延迟等关键指标
- 建立性能baseline和报警阈值
Evaluation Notes
技术创新性(9.0/10):vAttention通过虚拟内存技术解决了PagedAttention的根本性问题,这是一个优雅的系统级创新。虽然虚拟内存本身不是新技术,但将其巧妙应用于LLM推理的KV缓存管理是原创性很强的想法。零拷贝前缀共享和透明的内存管理都展现了深刻的系统洞察。
实用价值(9.5/10):vAttention已被TensorRT-LLM等主流框架采用,并将在ASPLOS 2025(系统顶会)发表,证明了其实用价值。11-17%的吞吐量提升、更简单的编程模型、零修改的内核集成,这些都是实实在在的工程收益。对于大规模LLM部署,这些改进可转化为显著的成本节省。
工程质量(9.5/10):从系统设计到实现细节,vAttention都展现了顶级的工程水准。大页支持、NUMA-aware分配、预取优化等都是深思熟虑的工程决策。与vLLM和TensorRT-LLM的无缝集成证明了接口设计的成熟度。ASPLOS的accept也侧面验证了工程质量。
理论深度(8.5/10):论文对PagedAttention的性能开销进行了深入的理论分析,包括缓存局部性、TLB miss、索引计算等。虚拟内存管理的设计有扎实的操作系统理论支撑。虽然不是纯理论工作,但在系统设计中融入了丰富的理论洞察。
性能表现(9.0/10):在各种场景下都实现了稳定的性能提升,特别是在大模型、长上下文、前缀共享等场景。11-17%的吞吐量提升看似不大,但考虑到PagedAttention本身已是优化后的方案,能在其基础上进一步提升是很不容易的。前缀共享场景的60%提升更是亮眼。
可复现性(7.5/10):论文描述详细,但虚拟内存管理涉及底层系统编程,复现有一定难度。论文未提供开源代码(但TensorRT-LLM已集成,可参考)。需要较深的CUDA和操作系统知识才能完整实现。
学术影响力(9.5/10):即将在ASPLOS 2025发表,已被TensorRT-LLM采用,这些都证明了很高的学术和工业影响力。vAttention为LLM serving的内存管理树立了新的标准,预计会引发后续研究。
适用场景:
- ✅ 强烈推荐:大规模生产部署、长上下文应用、RAG系统(前缀共享)、大模型推理(70B+)
- ✅ 推荐:标准LLM服务、需要高吞吐量的场景、使用TensorRT-LLM的团队
- ⚠️ 谨慎评估:小规模部署(<10 GPU,收益有限)、非NVIDIA GPU(不支持UVA)、边缘设备(系统要求较高)
- ❌ 不推荐:旧GPU(Pascal之前)、Windows系统(Linux only)、不需要动态内存管理的场景
与竞品对比:
- vs PagedAttention:吞吐量+11-17%,编程更简单,内核无需修改
- vs 固定内存分配:内存效率相当(都动态分配),但vAttention吞吐量高
- vs Flashattention:互补技术,vAttention管理内存,Flashattention优化计算,可联合使用
局限性:
- 依赖GPU的UVA特性,旧GPU不支持
- Linux only,Windows暂不支持(虚拟内存API差异)
- 需要root权限配置Huge Pages(容器化部署需要额外权限)
- 虚拟内存管理有一定学习曲线,出问题时排查较难
未来方向:
- 跨GPU内存管理:将虚拟内存技术扩展到多GPU、多节点场景
- 异构内存支持:利用虚拟内存透明地使用CPU内存、NVMe SSD作为扩展
- 自动调优:基于workload特征自动优化虚拟内存配置
- 与KV缓存压缩结合:虚拟内存管理 + 量化/压缩的协同优化
部署建议:
vAttention是PagedAttention的优秀替代方案,特别是对于已经使用TensorRT-LLM的团队,切换成本几乎为零。对于vLLM用户,建议:
- 先在测试环境验证性能提升是否符合预期
- 确认系统满足要求(Linux、新GPU、可配置Huge Pages)
- 小流量灰度验证稳定性
- 全量切换并持续监控
对于新项目,优先选择支持vAttention的框架(TensorRT-LLM、新版vLLM)。
总评:vAttention是LLM serving系统内存管理的重要进步,将在ASPLOS 2025发表进一步证明了其学术价值。通过虚拟内存技术解决PagedAttention的根本性问题,同时保持简单的编程模型,这是系统设计的典范。11-17%的性能提升和更低的开发维护成本,使其成为大规模LLM部署的优选方案。强烈推荐所有LLM服务提供商评估和采用vAttention。评分4.5/5.0。