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大小的存储空间,从而节省空间,另外,其存储并不要求连续,且把存储空间切割成多个可以独立出来的小块,这样也避免了存储碎片。

相关推荐
我叫张土豆11 小时前
V100 显卡部署 Qwen3-ASR-1.7B 语音识别模型(vLLM + Docker 完整教程)
docker·语音识别·vllm
碳基硅坊16 小时前
MTP在vLLM与llama.cpp上的性能对比:Qwen3.6与Gemma4实测
人工智能·vllm·llama.cpp·模型加速·mtp
Soonyang Zhang19 小时前
vllm分析(八)——deepseek v4 Attention (SWA + CSA + HCA)
vllm·推理框架·kv cache
Soonyang Zhang2 天前
vllm分析(七)——模型结构分析(llama, qwen3moe)
vllm·推理框架
陈 洪 伟2 天前
大模型推理引擎vLLM(25): 从--kv-cache-dtype fp8_e5m2时gsm8k答非所问的bug梳理kv cache相应代码片段
vllm·kvcache
zjun30212 天前
【昇腾950】如何在昇腾950pr的容器环境上部署vllm
vllm·vllm-ascend·torch_npu·昇腾950
小何code3 天前
人工智能【第55篇】大模型推理优化:vLLM与推理加速技术
vllm·大模型部署·推理优化·pagedattention
清风lsq6 天前
大模型-vllm 自投机解码可行性分析
vllm·大模型推理
大模型推理6 天前
《Nano-vLLM 源码解读》第 12 篇 · ModelRunner:从 prompt 到 token(二)
vllm
清风lsq7 天前
大模型-解析vllm lora 模块
人工智能·vllm·大模型推理