重温 vLLM 中的 PagedAttention
vLLM introduced PagedAttention, which borrows the paging abstraction that operating systems use for RAM and applies it to the GPU’s KV cache. During LLM inference, the KV cache – the stored key and value tensors for all previous tokens – is the dominant memory consumer. Managing it efficiently is the central challenge of high-throughput inference.vLLM 引入了 PagedAttention 技术该技术借鉴了操作系统为内存RAM设计的分页抽象机制paging abstraction并将其应用于 GPU 的 KV 缓存。在大语言模型推理过程中KV 缓存——即所有先前 token 的存储KV张量——是主要的内存消耗者。高效管理 KV 缓存是高吞吐量推理的核心挑战KV Cache 计算公式BF16 每个数值占 2 ByteMHA → MQA → GQAMHA 多头注意力原始标准LLaMA1 7B/13B 用Multi-Head AttentionQ、K、V 头数量完全相等40 个 Q 头 40 个 K 头 40 个 V 头。推理时 KV Cache 要存和 Q 一样多的 KV 头显存占用极大就是 KV 公式里的 H 会很大MQA 多查询注意力极端简化Multi-Query Attention很多 Q 头 共享同一组 K/V 头。例40 个 Q 头共用 1 个 K 头 1 个 V 头。KV Cache 极小但精度掉得比较明显GQA 分组查询注意力LLaMA2/3 70B、大模型主流方案Grouped-Query AttentionGQA 分组查询注意力MHA 和 MQA 的折中方案把全部 Query 头分成若干组每一组内所有 Q 头共用同一对 K/V 头KV 头数量远少于 Q 头但比 MQA 的单 KV 头多精度损失可控Llama3-70B 真实配置Query 头总数128 个分成 16 组每组 8 个 Q 头每组对应 1 组 KV 头所以 KV 头 H 8GQA 优点KV 头变少KV Cache 显存占用暴跌推理吞吐大幅提升相比 MQA分组保留更多 KV 信息模型能力、生成质量衰减很小训练、推理框架原生支持vLLM、TensorRT-LLM、Transformers缺点训练成本比纯 MHA 略高小模型7B 及以下一般不用 GQA收益不明显还是 MHAKV Cache Fragmentation 的问题fragmentationˌfræɡmenˈteɪʃnn. 破碎分裂分段储存传统推理系统会为每条请求序列的 KV Cache 预分配一块连续显存contiguous memory分配大小按模型支持的最大序列长度预留。这种朴素分配方式会造成两类显存浪费内部碎片Internal fragmentation一条实际只生成 500 个 token 的对话却独占一块预留 4096 token 容量的连续显存块剩余 3596 个 token 对应的缓存空间全程闲置造成显存空洞浪费。外部碎片External fragmentation大量对话请求执行完毕释放显存后空闲显存会分裂成大量零散、不连续的小块。此时若新到来一条长序列请求即便整体空闲显存总量充足也找不到一块足够大的连续内存来完成分配导致请求无法执行。工程实测采用这种简单预分配方案时GPU 显存实际利用率通常仅 20%–40%PagedAttention – Virtual Memory for KV Cachesanalogousəˈnæləɡəsadj. 相似的类似的器官同功的PagedAttention (Kwon et al., 2023) borrows the paging abstraction from operating systems. Instead of one contiguous block per sequence, the KV cache is carved into fixed-size pages (blocks), and an indirection table—analogous to a CPU page table—translates each sequence’s logical token positions into scattered physical GPU memory addresses.PagedAttentionKwon 等2023借鉴了操作系统中的分页抽象机制。与每个序列sequence对应一个连续区块不同KV缓存被划分为固定大小的页面块并通过一个间接表类似于CPU的页表将每个序列中逻辑令牌的位置映射到分散的GPU物理内存地址上Block size块大小通常每块存储 16 个 token可配置调参。单块存储元素总量公式16 × 2 × L × H × d16块内 token 数量2Key Cache Value Cache 两份缓存Block table块映射表每条对话序列独立维护一张映射表建立逻辑块编号 → GPU 显存池内物理块编号的对应关系作用逻辑上连续的 KV 序列底层可以分散存储在不连续的物理显存块中Physical block pool物理块显存池提前预分配一批固定尺寸的显存块统一管理空闲块链表分配操作复杂度为 O(1)需要新块时直接从空闲链表头部取出一块即可无内存拷贝开销Attention kernel注意力计算内核计算注意力时依靠块映射表从多个不连续的物理显存位置收集分散的 KV 块数据完成计算Llama3-70B BF16 中L80,H8,d128BF16 每个元素占 2 Byte单块总字节为5MB4096 token 总 KV 显存单序列总块数256块PagedAttention的好处近乎零显存浪费Near-zero waste内部碎片被严格限制每条序列最多只会存在1 块未填满的分页最后一块。若分页大小为 16 token单条序列最坏仅浪费 15 个 token 对应的 KV 空间损耗可忽略不计同时彻底消除外部碎片 —— 所有分页尺寸统一、可互相复用对比传统方案传统预分配整块 4096token 缓存短会话会浪费数千 token 空间分页仅末尾一块有少量空洞动态按需分配Dynamic allocation序列随着 token 生成按需申请分页无需提前预知整条对话最终长度。这对大模型生成任务至关重要因为模型输出 token 数量无法提前确定优势不用上线前强制设定全局最大序列长度不会为未知长文本预留大量闲置显存前缀共享 Prefix sharing写时复制 copy-on-write多条拥有相同前置文本的会话例如统一系统提示词可以共用这套前缀对应的物理分页。多条会话的块映射表仅需同时指向同一批物理显存块当某条会话在前缀后生成新内容、需要修改共享分页时会触发写时复制机制单独拷贝一份分页供该会话独立使用场景固定 1000 token 系统提示词同时在线 128 位并发用户沿用 Llama3-70B 单 token 占用 327680 字节参数不开启前缀共享所有用户独立存储系统提示词 KV 缓存128 × 1000 × 327680 ÷ 10^9 ≈ 42 GB开启前缀共享仅存储 1 份系统提示词 KV 缓存 1 × 1000 × 327680 ÷ 10^9 ≈ 0.33 GB显存节省共享前缀部分显存占用直接缩减约 128 倍显存交换抢占Preemption via swapSwap 交换vLLM PagedAttention 原生支持当 GPU 显存耗尽时vLLM 可对低优先级会话执行抢占将该会话全部 KV 分页交换至 CPU 内存也可直接丢弃分页后续需要时重新计算 KV。该功能仅在分页架构下可行传统连续整块分配方案交换时必须拷贝整块巨大缓存开销极高落地价值实现 GPU 显存软扩容提升系统并发承载上限避免直接 OOM 报错GPU 显存全部物理块被占满新序列需要分配 KV 块但空闲链表为空框架挑选低优先级 / 长时间无交互的会话做抢占Preemption把该会话对应的全部物理 KV 块批量拷贝到 CPU 主内存同时在块表标记 “已交换到 CPU”释放这批 GPU 物理块分给新进来的请求若被抢占会话恢复交互再把它的 KV 块从 CPU 内存拷贝回 GPU恢复推理优缺点优点不用直接拒绝新请求提升整体并发承载上限缺点CPU ↔ GPU 内存拷贝存在 PCIe 带宽延迟恢复生成时会卡顿频繁 swap 吞吐会明显下跌重计算Recompute备选方案不长期占用 CPU 内存不把 KV 缓存存在 CPU直接丢弃被抢占序列的所有 KV 块等会话再次交互时重新前向走一遍模型从头算出全套 KV Cache代替从 CPU 加载适用上下文很短、重计算成本低于 PCIe 传输开销的场景代价需要重复执行 Transformer 层计算消耗算力PCIeThe Host-Device LinkPCIe is used for:• CPU ↔ GPU data transfers (model loading, CPU offloading)• Cross-node GPU communication when NVLink is unavailable (rare, very slow)• NVMe storage access (via CPU)Host主机端CPU 系统主内存 DRAMDevice设备端GPU、NVMe SSD、网卡等 PCIe 外设PCIeHost 和 Device 之间唯一的高速物理互联链路Host-Device Link

相关新闻

Vscode 如何配置远程环境的 ssh 连接

Vscode 如何配置远程环境的 ssh 连接

1. 在 Vscode 的扩展插件安装栏内,检索并安装 Remote - SSH,未安装过该插件的 Vscode 编辑器左侧将出现用于管理远程连接 SSH 的新图标(见步骤 2):2. 点击左侧用于管理远程连接 SSH 的新图标,再点击 SSH 栏…

2026/7/20 16:50:42阅读更多 →
Poller模块的设计与实现

Poller模块的设计与实现

前言: 在上一文中,我们完成了 Channel 模块的代码设计与实现。通过 Channel,我们优雅地将文件描述符(fd)、感兴趣的事件掩码以及对应的业务回调函数绑定在了一起。 但是,当我们审视 Channel 的代码时&#…

2026/7/20 16:50:42阅读更多 →
TI Mailbox硬件寄存器解析与驱动开发实战指南

TI Mailbox硬件寄存器解析与驱动开发实战指南

1. 从硬件寄存器到软件驱动:理解TI Mailbox的通信本质在嵌入式多核系统里,让几个“大脑”(处理器核心)高效地对话,从来都不是一件简单的事。你可能会想到共享内存,但谁来管理访问权限?用软件锁&…

2026/7/22 0:02:51阅读更多 →
Mac下Jupyter Notebook安装与高效启动全攻略

Mac下Jupyter Notebook安装与高效启动全攻略

1. Mac OS下Jupyter Notebook的快速启动指南作为一名长期在Mac环境下进行数据分析的从业者,我深知Jupyter Notebook作为交互式编程环境的重要性。它不仅支持实时代码执行,还能将代码、可视化内容和说明文本整合在一个文档中,特别适合数据探索…

2026/7/22 7:17:13阅读更多 →
VirtualBox与Linux开发环境配置全攻略

VirtualBox与Linux开发环境配置全攻略

1. 虚拟机与Linux入门全景指南VirtualBox作为Oracle推出的开源虚拟化解决方案,已经成为开发者学习和测试Linux系统的首选工具。相比商业化的VMware,它完全免费且跨平台支持Windows、macOS和Linux主机系统。我在过去五年中帮助超过200名新手通过VirtualBo…

2026/7/22 7:17:13阅读更多 →
HelloGitHub第113期:轻量级开源工具与中文社区新趋势

HelloGitHub第113期:轻量级开源工具与中文社区新趋势

1. HelloGitHub 第113期:开源世界的月度精选作为一个长期关注开源生态的技术博主,我每个月都会准时打开HelloGitHub的更新通知。这个平台已经持续运营了113期,始终保持着对新手友好又有趣的开源项目的敏锐嗅觉。不同于其他技术媒体&#xff0…

2026/7/22 7:17:13阅读更多 →
【Go语言入门学习笔记】Part14.嵌入

【Go语言入门学习笔记】Part14.嵌入

一、前言 这个也是结构体相关内容,以及接口,本来可以和上一个内容放到一块来写的。 二、学习代码 package mainimport "fmt"type Actor interface {SayHello() int }type Person struct {Name stringAge int }func (p Person) SayHello() i…

2026/7/22 7:17:13阅读更多 →
绿氢炼钢技术解析与Stegra融资里程碑

绿氢炼钢技术解析与Stegra融资里程碑

1. 瑞典绿氢钢铁先锋企业Stegra的融资里程碑今天要聊的这个消息,绝对能让关注绿色工业的朋友们兴奋——瑞典绿氢钢铁企业Stegra(原名H2 Green Steel)刚刚完成了14亿欧元的巨额融资。这笔由瓦伦堡家族投资公司领投的资金,标志着全球…

2026/7/22 7:17:13阅读更多 →
C++函数编程:从基础语法到现代特性的全面解析

C++函数编程:从基础语法到现代特性的全面解析

1. 从“黑盒”到“积木”:理解C函数的核心价值干了这么多年C,我越来越觉得,函数这玩意儿,远不止是教科书里那个“实现特定功能的代码块”那么简单。它更像是一个个精心设计的“积木块”,而写程序,本质上就是…

2026/7/22 7:15:13阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →