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

相关推荐
wen_zhufeng21 小时前
vLLM-Omni TTS 推理加速实战手册
vllm
Yunzenn2 天前
强化学习1-Liu2026_GFlowRL_精读笔记
人工智能·笔记·深度学习·机器学习·transformer·集成学习·vllm
寒冰碧海2 天前
大模型部署从0到1(三):单机多卡 vLLM 部署Qwen3.6实战|Docker Compose 一键启动
docker·容器·vllm
执笔论英雄3 天前
【大模型推理 】 vllm kvconnet 学习
学习·vllm
古城小栈4 天前
vLLM 从入门到精通:企业级线上部署设置全讲解
vllm
Briwisdom4 天前
Speculative Decoding:用小模型给大模型“打草稿“,推理加速 2-3×
模型部署·vllm·eagle·llama.cpp·prefill·speculative·decoding
Briwisdom5 天前
LLM 推理引擎架构:vLLM / SGLang 的核心设计
架构·vllm·sglang·pagedattention·radixattention
陈 洪 伟6 天前
大模型推理引擎 vLLM(28):custom_all_reduce 单机/跨节点原理(IPC、Fabric、HSA)
fabric·vllm
一颗小树x8 天前
NVIDIA Jetson Thor 运行 LLM / VLM:模型全整理与 vLLM 实践
人工智能·llm·jetson·vllm
一个王同学9 天前
从零到一 | CV转多模态大模型 | week17 | LLM 推理优化 & vLLM 详解
人工智能·深度学习·算法·机器学习·计算机视觉·vllm