基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
  • 知识卡片碎片时间过考点
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
    • AI 热点每日 AI 资讯与动向
AI 工作台
简历
旧版
AIHT
内容
精选全部 AI 动态热点榜AI 日报收藏
分类
模型行业编程产品技术观点开源
更多
Agent 接入
返回首页开发者导航
AIHT
精选 / 资讯详情
8.0
热点
AI SCORE
技术实践2026-11-11 04:38

从内存分页理解 vLLM 的显存管理

dev.to · AI#推理优化#显存管理#vLLM
Editor brief · 编辑速览

文章从 KV 缓存的预分配与显存碎片问题切入,解释 vLLM 的 PagedAttention 如何借鉴操作系统分页思想。重点帮助读者理解高吞吐推理服务中的缓存管理瓶颈。

文章思维导图
Knowledge map
拖拽缩放
AI deep read

AI 深度解读

高并发部署 LLM,卡住服务的未必是算力,也可能是 KV Cache 把显存占满了。原文介绍的 vLLM 突破,是把操作系统的虚拟内存分页思路搬到推理服务中:按需分配缓存,让物理上不连续的显存也能高效参与注意力计算。

这篇值得读的地方,是它解释了一个工程问题:模型不变,为什么调整缓存管理就能容纳更多并发请求?不过,文中几组醒目的收益数字缺少测试条件,理解机制和接受结论,需要分开看。

为什么还没生成多少内容,显存就被占住了

LLM 自回归生成时,每次接着已有内容生成下一个 token。为了避免反复计算历史 token 的 Key、Value,服务会把它们保存为 KV Cache。请求越长、同时处理的请求越多,这部分缓存就越大。

原文认为,在高吞吐服务中,GPU 高带宽显存(VRAM)往往比浮点算力(FLOPs)更先成为瓶颈。它将传统分配方式的问题归结为:不知道请求何时输出 <EOS> 停止标记,只好提前预留一段连续空间,例如按最大长度 2,048 或 4,096 tokens 分配。

这里有两种浪费:

  • 内部碎片:为一个请求预留 2,048 tokens,实际生成到 150 tokens 就结束,剩余 1,898 个位置仍被占着。
  • 外部碎片:请求不断进入和结束,显存里留下零散空洞。空闲容量加起来可能够用,却找不到足够大的连续区域接纳新请求。

前者是「领了用不完」,后者是「剩下的拼不起来」。两者都会限制可同时处理的请求数量。

原文称,2023 年 PagedAttention 出现之前,HuggingFace 和文中所谓「v1 inference engines」等传统系统浪费了 60% 至 80% 的 GPU 显存。但它没有明确引擎版本、显存统计口径和测试负载,这个范围不能直接套到所有部署上。

分页怎样让零散显存也能算注意力

PagedAttention 借用了约 50 年前的操作系统思路:程序看到的连续地址,不必对应物理上连续的存储。

具体到 KV Cache,它做了三件事:

  • 把缓存切成固定大小的物理块,原文举例为每块 16 tokens。
  • 用块表(Block Table)记录逻辑 token 位置与物理显存块的映射,作用类似操作系统页表。
  • 随着 token 生成逐块分配空间,不必一开始就占满最大请求长度。

逻辑顺序保持连续,物理存储可以分散。

关键不只是多了一张映射表。计算新 token 的注意力时,定制 CUDA kernel 要查询块表,再从不连续的地址读取 Key、Value。内存管理方式和计算内核必须一起配合,普通连续内存内核不会自动获得这种能力。

分页也没有让碎片完全消失。固定大小的块仍可能没被填满,但浪费被限制在更小的分配单位内。

原文还介绍了写时复制(Copy-on-Write,COW)。同一个 prompt 需要并行采样多个答案,或者执行束搜索(beam search)时,各分支可以共享 prompt 对应的物理 KV 块;分支生成各自内容时,再分配私有块。

共享的是相同前缀的缓存,不是不同答案的后续状态。原文没有展开部分填满的共享块如何处理,也没有给出相关实现代码。

我的判断

这篇最有价值的判断是:推理服务的容量问题,值得先从缓存分配和复用方式排查。它展示了系统工程如何改善模型服务,而不需要修改模型本身。

但「标准自注意力要求物理连续存储」说得过满。结合文章后面的方案,更准确的理解是:文中讨论的传统实现依赖连续布局来方便 CUDA kernel 高效执行,连续布局不是注意力算法不可改变的前提。

收益数字也要保留条件。原文称,显存浪费可从 80% 降至不足 4%,活跃批次规模可扩大到 2 倍或 4 倍,却没有提供硬件、模型、序列长度、对照引擎和测量方法。这些是文章报告的效果,不能当成一般团队的性能承诺;批次变大,也不能直接推导出单个请求响应更快。

相较于预留最大长度的连续空间,分页的优势在于按需分配和减少碎片;涉及共享 prompt 时,还能减少重复缓存。但文章没有量化块表查询和非连续访问的开销,尚不足以完整比较两种实现的成本。

能拿来做什么

  • 如果你维护 Node 接入层背后的自部署 LLM 服务,遇到显存满、并发上不去时,可以先检查 KV Cache 的分配方式,以及最大请求长度是否造成大量预留。
  • 如果业务会为同一个 prompt 生成多个候选答案,可以核实推理引擎是否支持前缀 KV 块共享和 COW,而不是默认每个分支都要复制整份缓存。
  • 评估 vLLM 时,用自己的输入长度、输出长度和并发请求验证效果,同时观察吞吐、响应延迟与显存占用;原文的 2 倍或 4 倍适合作为待验证的收益,不能直接写进容量预算。
Original source

本文由 AI 通读原文后重新编写,观点部分为站内判断,细节以原文为准,来源 dev.to · AI,原文版权归原作者所有。

阅读原文
上一篇
Claude Code 持久授权可能留下明文密钥
下一篇
大模型量化入门:降低推理显存开销

资讯速览

dev.to · AI · 2026-11-11 04:38

AI 评分 8.0 / 10

相关标签

#推理优化#显存管理#vLLM

继续阅读

  • Agent 显示成功,任务为何没完成
  • Claude Code 持久授权可能留下明文密钥
  • 大模型量化入门:降低推理显存开销
  • AI 写出应用之后,架构如何跟上增长
  • 从工程团队起步,分批推广企业 Agent