https://zhuanlan.zhihu.com/p/680153425
PagedAtteion就是在VLLM里面会分为逻辑内存和物理内存,物理内存是真实存放KV cache的地方,而逻辑内存可以理解为逻辑上面的存在,需要通过一个块表,去链接物理内存到逻辑内存上。
需要处理三种情况,
1)parallel sampling,意思就是一个prompt有多个输出时候,会为一个物理内存分配reference count,而reference就像一个智能指针一样,如果逻辑内存写数据时候,发现对应的物理内存有超过1的count,就需要把count减去1,并且修改块表,复制原本的物理内存到其他位置,再把逻辑内存新写入的值写进去。
2)beam search,没有特别理解,看上去就是说迭代时候只会保持top-k信息,会共享候选块,并且在不再使用块时候释放块。
3)shared prompt,意思就是提前计算system prompt的KV值缓存下来。