vllm的pageattention到底是怎么回事?

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

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

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

还有一种方法 就是动态分配token长度, 一种方法就是有多长就分配多长。 但是有个弊端就是,对于模型来说,有可能同时有多个请求,进行并发的操作,就像开多个窗口进行提问。这就会使得原本分配空间是 [AAA][BBBB],此时[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大小的存储空间,从而节省空间,另外,其存储并不要求连续,且把存储空间切割成多个可以独立出来的小块,这样也避免了存储碎片。

相关推荐
我叫Double1 天前
本地服务器部署vllm+Qwen3-Coder-Next的模型
vllm
AI视觉网奇2 天前
docker vllm 开机启动
docker·容器·vllm
做个文艺程序员5 天前
vLLM 部署大模型推理服务完全教程:吞吐量是 Ollama 的 10 倍,生产环境首选
vllm·vllm教程
liuyunshengsir5 天前
LMCache + vLLM 部署指南(以 Qwen3-0.6B 为例)
vllm
诸葛老刘5 天前
在PC机上 使用docker vLLM镜像部署Qwen3-1.7B
docker·vllm
Soonyang Zhang6 天前
vllm分析(二)——http request的入口处理
人工智能·vllm·推理框架
xyhshen6 天前
如何两台atlas-a2服务器物理机,基于vllm-ascend部署qwen3.5 397b-w8a8-mtp大模型
vllm
zadyd6 天前
vLLM Linux 双卡部署大模型服务器指南
linux·人工智能·python·机器学习·vllm