vllm的pageattention到底是怎么回事?

pageattention 经常听到的就是有两大优点:一个是减少 内存块浪费,另一个方面就是 减少内存碎片。

这两点 主要就是克服了传统分配方式的痛点(特别是传统方法都是连续存储),而这个方法建立了一个block table 能够查表找到存储位置,即逻辑上是连续的,物理存储上是随机的。

传统的方法,一个是对某个请求静态分配一个很大的token_length,这种对于很简单的请求的时候,就会造成大量的空间浪费(因为还有很多没用到嘛)。

还有一种方法 就是动态分配token长度, 一种方法就是有多长就分配多长。 但是有个弊端就是,对于模型来说,有可能同时有多个请求,进行并发的操作,就像开多个窗口进行提问。这就会使得原本分配空间是 AAABBBB,此时A...,B...相当于两个不同的请求框内内容,同时请求后,就会在decoder的时候,会生成新的token,这样的话,A请求继续扩展就不行了,因为下一个位置存的B请求的token,所以一般的操作就是,预先对 各个请求多分配一些空间 即 AAA_ _ _BBBB_ _ _ _ _这的弊端就也一样,导致资源可能浪费很多,还有另一种方法就是将空间不够的请求A,重新一起复制到新的位置空间进行扩展。 但这也有一个很明显的弊端,就是搬移大量数据时候的成本和时延,磨损等。

而pageattention是怎么解决这个问题的呢?

有两个关键的点,一个是 将一个请求分配n个block,每个block 的token数量相对比较小,这样一个请求可能就存成了多个block(而不是静态分配一样,存在一大张存储空间中),而这个block 并不是连续的, 哪里有对应block大小的空间都可以被分配(这就减少了存储空间碎片了)。 它能把不连续的block利用起来的原因就是,它是把存储池挨着挨着编码 为block 1,2,3...,这样分配给A的,需要多少就在A的block表中写对应的block标号就行 例如:block table:3, 17, 8, 25, 41(逻辑顺序 0~4,对应这 5 个物理块)。

综上就可以看出:pageattention 就算浪费也只是浪费最后一个block-1大小的存储空间,从而节省空间,另外,其存储并不要求连续,且把存储空间切割成多个可以独立出来的小块,这样也避免了存储碎片。

相关推荐
code2cat1 天前
【随笔】连续批处理:长短请求怎样在迭代之间补位
java·人工智能·后端·大语言模型·vllm
一枕槐安4872 天前
Qwen 通义千问本地部署与推理服务封装
fastapi·qwen·vllm·流式推理·openai兼容api·awq量化
mumu1572 天前
快速上手大模型推理vllm
人工智能·python·大语言模型·agent·vllm
code2cat3 天前
【随笔】vLLM前缀缓存:相同的开头怎样少算一次
人工智能·python·缓存·vllm
JAI科研7 天前
把一个 Qwen3.8的聊天模型改造成 JEV 决策模型
人工智能·语言模型·自然语言处理·chatgpt·transformer·vllm·sglang
谢白羽8 天前
从传统运维到 AI Infra: K8s 上调度 100 张 GPU踩坑笔记
运维·人工智能·缓存·kubernetes·vllm·sglang·vllm-omni
Hrain-AI9 天前
企业本地推理引擎选型实战:Ollama、vLLM 与 MLX 怎么挑
vllm
摸鱼仙人~9 天前
从 AI 应用开发到 GPU 计算软件:一份完整的 GPGPU、PyTorch、vLLM 与 AI Infra 学习路线
人工智能·pytorch·vllm
程序猿编码10 天前
不依赖 vLLM/llama.cpp:一套面向学习的 DeepSeek-R1 CUDA 推理实现
c++·学习·语言模型·llama·vllm·大模型推理
缘友一世10 天前
GLM5.3 CyberSec w4A16本地部署[10]:CUDA 图捕获与编译开关
ubuntu·vllm·glm5.3 cybersec