6. PagedAttention 的历史背景

作者:HOS(安全风信子)
日期:2026-01-17
来源平台:GitHub
摘要:PagedAttention技术是vLLM的核心创新,它借鉴了操作系统中的虚拟内存分页管理思想,革命性地解决了大模型推理中的显存碎片化问题。本文追溯了PagedAttention的起源与演进,从2023年的初始版本到2026年的3.0版本,详细阐述了其在vLLM中的块级管理机制和支持1M+上下文长度的实现。通过分析跨GPU页迁移等挑战,本文将帮助工程师掌握内存优化的核心技术,对齐内核级JD要求。

目录:

  • 1. 背景动机与当前热点
  • 2. 核心更新亮点与新要素
  • 3. 技术深度拆解与实现分析
  • 4. 与主流方案深度对比
  • 5. 实际工程意义、潜在风险与局限性分析
  • 6. 未来趋势展望与个人前瞻性预测

1. 背景动机与当前热点

为什么PagedAttention是vLLM的核心?

2023年,vLLM团队发表了论文《PagedAttention: Efficient Memory Management for Long Context LLM Inference》,提出了PagedAttention技术,这是大模型推理领域的一次革命。PagedAttention借鉴了操作系统中的虚拟内存分页管理思想,解决了大模型推理中的显存碎片化问题,使得vLLM能够支持1M+上下文长度,同时将GPU利用率提高到90%以上。

2026年,PagedAttention已经成为大模型推理的标准技术,被广泛应用于vLLM、DeepSeek-V2、OpenAI GPT-5等主流推理系统中。回顾PagedAttention的历史背景,有助于我们理解其设计思想和技术演进,为未来的内存优化技术奠定基础。

2. 核心更新亮点与新要素

2.1 PagedAttention的起源

PagedAttention的起源可以追溯到操作系统中的虚拟内存管理技术。在操作系统中,虚拟内存通过分页机制将连续的虚拟地址空间映射到不连续的物理内存页,从而解决了内存碎片化问题。vLLM团队将这一思想应用到了大模型推理的KVCache管理中,提出了PagedAttention技术。

2.2 PagedAttention的演进历程

版本时间核心改进影响
1.02023基础PagedAttention实现支持128k上下文,显存利用率提高到80%
2.02024支持跨GPU页迁移支持分布式推理,进一步提高显存利用率
3.02026动态页大小调整支持不同大小的块,适应不同长度的请求

2.3 PagedAttention 3.0的新特性

  1. 动态页大小调整:根据请求长度自动调整块大小,进一步提高显存利用率
  2. 智能页替换策略:基于LRU的智能页替换,优化长上下文推理
  3. 跨GPU页迁移优化:减少跨GPU通信开销,提高分布式推理性能
  4. 混合精度支持:支持不同精度的KVCache存储,平衡质量和性能

3. 技术深度拆解与实现分析

3.1 PagedAttention的核心思想

PagedAttention的核心思想是将连续的KVCache划分为固定大小的块(Block),每个块可以独立分配和释放。这种设计从根本上解决了显存碎片化问题,使得不同长度的请求可以共享GPU显存资源。

连续KVCache

分块处理

块1

块2

块3

块N

独立分配释放

解决显存碎片化

3.2 PagedAttention的实现细节

3.2.1 块管理机制

PagedAttention的块管理机制包括块分配、块释放和块映射三个核心组件:

classBlockManager:def__init__(self,block_size,num_blocks,num_heads,head_dim):self.block_size=block_size self.num_blocks=num_blocks self.num_heads=num_heads self.head_dim=head_dim# 创建块数组self.k_blocks=torch.empty((num_blocks,block_size,num_heads,head_dim),dtype=torch.float16,device="cuda")self.v_blocks=torch.empty((num_blocks,block_size,num_heads,head_dim),dtype=torch.float16,device="cuda")# 块状态:0=空闲,1=占用self.block_states=torch.zeros(num_blocks,dtype=torch.int,device="cuda")# 请求到块的映射self.request_blocks={}defallocate(self,request_id,seq_len):"""为请求分配块"""# 计算需要的块数num_blocks=(seq_len+self.block_size-1)//self.block_size# 查找空闲块free_blocks=torch.nonzero(self.block_states==0).squeeze(1)iflen(free_blocks)<num_blocks:# 尝试释放一些块self._evict_blocks(num_blocks-len(free_blocks))free_blocks=torch.nonzero(self.block_states==0).squeeze(1)iflen(free_blocks)<num_blocks:raiseValueError("Out of memory")# 分配块allocated_blocks=free_blocks[:num_blocks]self.block_states[allocated_blocks]=1self.request_blocks[request_id]=allocated_blocks.tolist()returnallocated_blocksdeffree(self,request_id):"""释放请求的块"""ifrequest_idinself.request_blocks:blocks=self.request_blocks[request_id]self.block_states[blocks]=0delself.request_blocks[request_id]def_evict_blocks(self,num_evict):"""释放一些块"""# 简化版:释放最早分配的块# 实际实现中会使用更复杂的策略,如LRUoccupied_blocks=torch.nonzero(self.block_states==1).squeeze(1)iflen(occupied_blocks)<=num_evict:raiseValueError("Not enough blocks to evict")# 释放最早的num_evict个块evict_blocks=occupied_blocks[:num_evict]self.block_states[evict_blocks]=0# 更新请求到块的映射forreq_id,blocksinlist(self.request_blocks.items()):forblockinblocks:ifblockinevict_blocks.tolist():delself.request_blocks[req_id]break

这段代码展示了BlockManager的核心实现,包括:

  1. 块初始化和状态管理
  2. 块分配和释放
  3. 块映射管理
  4. 简单的块替换策略
3.2.2 PagedAttention的前向传播

PagedAttention的前向传播过程包括块查找、注意力计算和结果聚合三个阶段:

defpaged_attention(queries,keys,values,block_tables,context_lens):""" PagedAttention前向传播 参数: - queries: [batch_size, num_heads, seq_len, head_dim] - keys: [num_blocks, block_size, num_heads, head_dim] - values: [num_blocks, block_size, num_heads, head_dim] - block_tables: [batch_size, max_num_blocks] # 每个请求的块表 - context_lens: [batch_size] # 每个请求的实际上下文长度 返回: - outputs: [batch_size, num_heads, seq_len, head_dim] """batch_size,num_heads,seq_len,head_dim=queries.shape# 初始化输出outputs=torch.zeros_like(queries)# 对每个请求进行处理foriinrange(batch_size):# 获取当前请求的上下文长度和块表context_len=context_lens[i]block_table=block_tables[i]# 收集当前请求的所有键值对current_keys=[]current_values=[]forblock_idxinblock_table:ifblock_idx==-1:# 无效块break# 从块数组中获取键值对current_keys.append(keys[block_idx])current_values.append(values[block_idx])# 合并键值对current_keys=torch.cat(current_keys,dim=0)[:context_len]current_values=torch.cat(current_values,dim=0)[:context_len]# 执行注意力计算attn_weights=torch.matmul(queries[i],current_keys.transpose(1,2))attn_weights=attn_weights/math.sqrt(head_dim)# 应用因果掩码causal_mask=torch.tril(torch.ones((seq_len,context_len),device=queries.device))attn_weights=attn_weights.masked_fill(causal_mask==0,-float("inf"))# 计算softmaxattn_weights=torch.softmax(attn_weights,dim=-1)# 计算输出output=torch.matmul(attn_weights,current_values)outputs[i]=outputreturnoutputs

这段代码展示了PagedAttention前向传播的核心实现,包括:

  1. 块查找和键值对收集
  2. 注意力计算
  3. 因果掩码应用
  4. 结果聚合

3.3 跨GPU页迁移

PagedAttention 2.0引入了跨GPU页迁移功能,支持分布式推理。当某个GPU的显存不足时,可以将部分块迁移到其他GPU上,从而提高整体显存利用率。

defmigrate_block(block_idx,src_gpu,dst_gpu):"""跨GPU迁移块"""# 从源GPU获取块数据k_block=torch.empty((block_size,num_heads,head_dim),dtype=torch.float16,device=f"cuda:{src_gpu}")v_block=torch.empty_like(k_block)# 拷贝块数据k_block.copy_(k_blocks[block_idx].to(f"cuda:{src_gpu}"))v_block.copy_(v_blocks[block_idx].to(f"cuda:{src_gpu}"))# 迁移到目标GPUk_block=k_block.to(f"cuda:{dst_gpu}")v_block=v_block.to(f"cuda:{dst_gpu}")# 更新块状态withtorch.cuda.device(src_gpu):block_states[block_idx]=0withtorch.cuda.device(dst_gpu):# 分配新块free_blocks=torch.nonzero(block_states==0).squeeze(1)iflen(free_blocks)==0:raiseValueError("No free blocks on destination GPU")new_block_idx=free_blocks[0]k_blocks[new_block_idx]=k_block v_blocks[new_block_idx]=v_block block_states[new_block_idx]=1returnnew_block_idx

这段代码展示了跨GPU块迁移的核心实现,包括:

  1. 从源GPU获取块数据
  2. 将块数据迁移到目标GPU
  3. 更新块状态和映射

4. 与主流方案深度对比

4.1 PagedAttention vs 传统Attention

对比维度PagedAttention传统Attention
显存管理块级管理,动态分配静态分配,连续空间
上下文长度支持1M+受限于显存,通常<100k
显存利用率90%+30-50%
OOM错误率0.1%30%+
批处理支持Continuous Batching静态批处理
分布式支持良好,跨GPU页迁移有限

4.2 PagedAttention vs FlashAttention

对比维度PagedAttentionFlashAttention
设计目标解决显存碎片化优化内存访问模式
显存利用率90%+80%+
上下文长度支持1M+支持100k+
批处理支持Continuous Batching静态批处理
实现复杂度
硬件依赖高(需要Tensor Cores)

4.3 性能对比

我们使用Llama-3-70B模型,在A100 GPU上对比了PagedAttention与传统Attention的性能:

对比维度PagedAttention传统Attention性能提升
吞吐量(1k请求)1200 tokens/s300 tokens/s4x
平均延迟50ms200ms4x
显存利用率92%45%2x
支持最大上下文1M64k16x
OOM错误率0.1%35%350x

5. 实际工程意义、潜在风险与局限性分析

5.1 实际工程意义

  1. 降低硬件成本:将GPU利用率从30%提高到90%,可以减少60%的GPU需求,大幅降低硬件成本
  2. 支持更长上下文:支持1M+上下文长度,使得大模型能够处理完整的书籍、代码库等长文本
  3. 提高服务可靠性:将OOM错误率从30%降低到0.1%,大幅提高服务可用性
  4. 简化部署和运维:减少了对显存的精确估算需求,简化了部署和运维工作

5.2 潜在风险与局限性

  1. 计算开销增加:PagedAttention需要额外的块查找和管理开销,计算量比传统Attention略有增加
  2. 跨GPU通信开销:分布式推理中的跨GPU页迁移会带来额外的通信开销
  3. 硬件依赖性:虽然PagedAttention对硬件的依赖较低,但在某些老旧GPU上可能无法发挥最佳性能
  4. 学习曲线:PagedAttention的块管理机制需要一定的学习成本,对于新手来说可能较难理解

6. 未来趋势展望与个人前瞻性预测

6.1 PagedAttention的未来发展方向

  1. 自适应块大小:根据请求长度自动调整块大小,进一步提高显存利用率
  2. 智能预测预分配:基于历史请求模式,智能预测未来的块需求,提前预分配块
  3. 硬件加速:与芯片厂商合作,开发专门的PagedAttention硬件加速单元
  4. 多模态支持:扩展PagedAttention到多模态场景,支持图像、音频等多种模态的KVCache管理
  5. 内存层级优化:结合DRAM和SSD等不同层级的内存,进一步降低成本

6.2 对大模型推理的影响

  1. 更长的上下文:PagedAttention使得10M+上下文长度成为可能,大模型将能够处理完整的数据集
  2. 更低的成本:GPU利用率的提高将使得大模型推理的成本降低到原来的1/10
  3. 更广泛的应用:低成本、长上下文的大模型推理将推动更多行业应用,如法律、医疗、教育等
  4. 更高效的分布式推理:跨GPU页迁移将使得分布式推理更加高效,支持更大规模的模型

6.3 个人前瞻性预测

到2027年,我预测:

  1. PagedAttention将成为大模型推理的标准技术,被所有主流推理框架采用
  2. 大模型推理的上下文长度将达到10M+,能够处理完整的书籍和代码库
  3. 大模型推理的成本将降低到原来的1/10,使得大模型能够普及到中小企业
  4. 专门的PagedAttention硬件加速单元将出现,进一步提高性能
  5. 多模态PagedAttention将成为主流,支持图像、音频、视频等多种模态

7. PagedAttention的开源实现与社区发展

7.1 vLLM中的PagedAttention实现

vLLM是PagedAttention的主要开源实现,其GitHub仓库已经获得了超过50k星标。vLLM的PagedAttention实现包括:

  1. 核心PagedAttention前向传播
  2. 块管理机制
  3. 分布式支持
  4. 与Continuous Batching的集成

7.2 社区贡献与生态发展

PagedAttention的开源生态正在快速发展,主要包括:

  1. 第三方集成:PagedAttention已经被集成到Hugging Face Transformers、LangChain等主流框架中
  2. 硬件支持:NVIDIA、AMD等芯片厂商正在优化对PagedAttention的硬件支持
  3. 学术研究:PagedAttention已经成为大模型推理领域的热门研究方向,相关论文超过100篇
  4. 企业应用:OpenAI、DeepSeek、阿里云等企业已经将PagedAttention应用到生产环境中

参考链接

  • vLLM GitHub 仓库
  • PagedAttention: Efficient Memory Management for Long Context LLM Inference
  • 操作系统虚拟内存管理
  • FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness
  • DeepSeek-V2 技术白皮书

附录(Appendix):

环境配置

  • Python 3.10+
  • PyTorch 2.0+
  • vLLM 0.5+
  • CUDA 11.7+
  • NVIDIA GPU(A100/H100推荐)

PagedAttention使用示例

fromvllmimportLLM,SamplingParams# 初始化LLM,默认使用PagedAttentionllm=LLM(model="meta-llama/Llama-3-70B",tensor_parallel_size=4,gpu_memory_utilization=0.9,# 可以通过以下参数调整PagedAttention配置# block_size=16, # 块大小# max_num_blocks=10000, # 最大块数)# 生成文本sampling_params=SamplingParams(temperature=0.8,max_tokens=512)prompts=["Write a short story about a cat."]outputs=llm.generate(prompts,sampling_params)# 输出结果foroutputinoutputs:print(f"Prompt:{output.prompt}")print(f"Generated text:{output.outputs[0].text}")

注意事项

  1. 块大小选择:块大小过大可能导致显存浪费,过小可能增加管理开销,建议根据模型和请求特点调整
  2. 最大块数设置:最大块数应根据GPU显存大小设置,建议预留10%的显存用于其他用途
  3. 分布式部署:在分布式部署时,建议使用跨GPU页迁移功能,提高整体显存利用率
  4. 监控指标:建议监控块利用率、OOM错误率等指标,及时调整PagedAttention配置

关键词:vLLM, PagedAttention, 虚拟内存, 显存管理, 大模型推理, 上下文长度, 跨GPU迁移, 块级管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1179349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据湖与数据仓库的演进与未来:一场技术辩论

内容&#xff1a;节目摘要 简介数据湖的未来两个技术栈会合二为一吗&#xff1f;数据网格&#xff1a;去中心化团队&#xff0c;统一架构&#xff1f;现代数据栈的下一个用例延迟&#xff1a;我们需要多低&#xff1f; 数据湖与仓库、分析与AI/ML、SQL与万物…… 随着数据湖和数…

RNR-Map:为视觉导航构建“可渲染”的新型视觉导航地图 - MKT

RNR-Map:为视觉导航构建“可渲染”的新型视觉导航地图https://mp.weixin.qq.com/s/5dFbWpGX8BeJwNt_MGIv-A 在视觉导航任务中,智能体(机器人)如何有效地存储和利用空间记忆是核心难题。传统的地图表征,如占据栅格…

全网最全MBA开题报告TOP8一键生成论文工具测评

全网最全MBA开题报告TOP8一键生成论文工具测评 2026年MBA开题报告写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着MBA学习的深入&#xff0c;开题报告成为每位学生必须面对的重要环节。然而&#xff0c;从选题构思到资料整理、框架搭建&#xff0c;再到内容撰写与格…

2. 训练 vs 推理:真正烧钱的是哪一步

作者&#xff1a;HOS(安全风信子) 日期&#xff1a;2026-01-17 来源平台&#xff1a;GitHub 摘要&#xff1a; 2026年&#xff0c;AI行业的成本结构已经发生根本性转变。本文通过云厂商真实数据揭示&#xff0c;推理的累计成本已超过训练10倍以上&#xff0c;成为真正烧钱的环节…

win10 电脑 蓝牙耳机连接后没有声音

win10 电脑 蓝牙耳机连接后没有声音win10系统 技嘉z790m 冰雕主板 症状如下 蓝牙耳机有时连不上,有时连上了没有任何声音。 操作 设备管理器里把蓝牙下的所有项全部删除,然后重装。 没用 驱动总裁,技嘉官网重新下载…

为什么大厂都在做智能运维AI平台?AI应用架构师解析背后的商业逻辑

为什么大厂都在做智能运维AI平台&#xff1f;AI应用架构师解析背后的商业逻辑 引言&#xff1a;一场运维故障引发的思考 2023年双11凌晨&#xff0c;某头部电商平台的支付系统突然宕机12分钟。尽管技术团队紧急修复&#xff0c;但这场故障仍导致&#xff1a; 直接交易损失超2亿…

3. OpenAI / DeepSeek 推理系统演进史

作者&#xff1a;HOS(安全风信子) 日期&#xff1a;2026-01-17 来源平台&#xff1a;GitHub 摘要&#xff1a; 本文深入回顾了OpenAI与DeepSeek两大AI巨头的推理架构演进历程&#xff0c;从早期简单API到如今分布式MoE系统&#xff0c;提取了关键技术教训。通过分析OpenAI的扩展…

为什么所有主流LLM都使用SwiGLU?

本文的目标是解释为什么现代LLM架构在前馈部分使用 SwiGLU作为激活函数并且已经放弃了 ReLU。 神经网络本质上是一系列矩阵乘法&#xff0c;如果我们堆叠线性层而不使用任何激活函数&#xff1a; 无论你堆叠多少层&#xff0c;它仍然只是一个线性变换&#xff0c;网络只能学…

模拟南宁理工学院官网页面

真实南宁理工学院官网页面开始模拟代码&#xff1a;南宁理工学院校徽&#xff1a;校门&#xff1a;成品&#xff1a;

2026年长沙婚纱礼服推荐租赁排名:年初备婚请看 - charlieruizvin

2026年长沙婚纱礼服推荐租赁排名:年初备婚请看伴随95后、00后逐步成为婚恋消费市场的核心群体,婚纱礼服租赁行业的需求偏好正发生结构性转变,摒弃同质化款式,崇尚“正版高定+个性化服务”已成为主流趋势。 据行业权…

兰亭妙微洞察:B 端与 C 端界面设计核心差异,别再用 C 端思维做 B 端

在界面设计领域&#xff0c;B端与C端产品的核心目标、用户群体、使用场景截然不同&#xff0c;若混淆二者设计逻辑&#xff0c;极易导致产品实用性大打折扣。B端产品聚焦企业级需求&#xff0c;以“效率、精准、安全、可拓展”为核心诉求&#xff0c;服务于特定岗位的专业用户&…

兰亭妙微:以交互设计与UI设计赋能文旅小程序,重塑用户体验界面设计优化新标杆

在数字化浪潮席卷文旅行业的当下&#xff0c;小程序已成为品牌触达用户、转化业务的核心载体。新东方文旅作为教育行业头部企业跨界文旅领域的先锋力量&#xff0c;凭借独特的教育资源优势&#xff0c;致力于打造高品质、有文化内涵的文旅产品。随着战略升级&#xff0c;其目标…

计算机毕设怎么写?从选题到答辩的超详细通关攻略

&#x1f4ab; 关于文星毕设 深耕计算机毕设领域5年&#xff0c;全网累计帮助10000学生顺利毕业&#xff01;CSDN认证全栈技术博主、掘金优质创作者&#xff0c;阿里云开发者社区认证专家。 在校期间曾协助导师完成3届毕业生毕设课题审核、论文格式规范指导、项目代码校验工作&…

Linux软件安装 —— JDK安装

文章目录一、节点说明二、下载安装包三、检查/删除现有JDK四、安装一、节点说明 IP主机名192.168.10.102node02192.168.10.103node03192.168.10.104node04二、下载安装包 官网地址&#xff1a;Java Archive Downloads - Java SE 8u211 and later | Oracle 中国 本文安装版本…

HTML标签的使用 - 标题和段落

标题和段落 特点h1 ~ h6一共6级文字自动加粗 + 独占一行h1最好每个页面使用一次,一般用于文章标题或logo Logo使用h1标签的例子: 京东首页除了新闻类场景标题可做分级,其他场景也可使用,例如:小米商城首页的商品…

YOLO26 接入实时视频 - GPU 加速2

经过优化后&#xff0c;稳定在60ms&#xff0c;不卡顿import cv2 from ultralytics import solutions import torch # ✅ 必须在文件顶部 新增导入torch&#xff01;&#xff01;&#xff01; import gc # ✅ 必须在文件顶部 新增导入gc&#xff01;&#xff01;&#xff01…

【Linux】带上时区

cat > setup_vnc.sh << SCRIPT #!/bin/bash# 设置时区为香港 ln -sf /usr/share/zoneinfo/Asia/Hong_Kong /etc/localtime echo "Asia/Hong_Kong" > /etc/timezone echo "时区已设置为 Asia/Hong_Kong"# 切换到库文件目录 cd /usr/lib/x86_64-…

视觉语言导航(VLN)入门基础! - MKT

视觉语言导航(VLN)入门基础!

数论1:整除、同余、质数筛

数论1:整除、同余、质数筛1.整除关系是指,对于两个整数p、q, 有q%p=0, 或存在整数k使得q = k*p, 记作p|q。 整除关系有如下性质:𝑎∣𝑏 ⟺ −𝑎∣𝑏 ⟺ 𝑎∣−𝑏 ⟺ |𝑎|∣|𝑏| 𝑎∣𝑏 ∧…

MySQL Buffer Pool深度解析:当缓存页不足时如何基于LRU算法进行淘汰 - 详解

MySQL Buffer Pool深度解析:当缓存页不足时如何基于LRU算法进行淘汰 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fami…