大模型推理加速:KVCache和Pageattendtion

首先声明不搞infra的不用看,我现在看底层了,

本篇内容基于Efficient Memory Management for Large Language Model Serving with PagedAttention》 (SOSP 2023)出处: 加州大学伯克利分校(UC Berkeley)

这篇里面讲了vllm,那么我们就先讲vllm。

LLM 模型在推理阶段的显存有三部份组成:模型权重、KVCache 显存占用以及激活值显存占用

而今天我们是速成教程,所以又要体现深度,那么就先讲KVCache,

这个本质上是一种通用的思路就是减少k,v的计算,采用缓存的机制去减少中间值,

而这个的问题是kv的乘积是会有上限的,因为本来就很大,HBM根本放不下,所以vllm提出思路去优化这个东西,去搞定显存碎片。

同样的在HBM里面存储基本上都是连续存储的,也就是说少了一个,少了10个都是少了。

而现在搞成分页存储,不会出现空缺的。

当全部的空闲HBM被塞满,

这里暂时讲Swapping:

当多余的KV Cache会被提到cpu内存里面。

然后这个是怎么实现的?

基本上逻辑是:

第一步:

当新请求, Block Table分配空闲块的编号

第二步:

定位物理地址: 物理地址 = 物理块ID * 块大小 + (35 % 16) * 每个Token的特征维度。

第三步:

在计算的时候,动态地把这些散乱的地址传给 GPU/NPU。

当同时请求时候就采取写时复制。

当大量人同时询问同一个问题时候,此时采取多序列共享机制,也就是哈希映射:

这么解释呢?就是说记录物理块的地址位置,然后新的相似的token进来,这个block table直接指过去就行。这样就不会出现kv cache无限复制的问题了。

然后同时访问,这个时候hash冲突了,也就是网络请求太多,

那么就LRU,先把最少访问的释放同时触发swapping吧没用的丢出cpu了。

现在最新的技术也就是vllm的发展思路:

1:速度推理加速:投机采样

可以用小模型先给几个词然后大模型验证,这样减少完整跑的神经网络和逻辑。

2:延迟优化减少:切块预处理

太长的token进来,就直接切块然后混在输出里面。

3:解码:多卡

等于一张卡负责算kv cache,一张卡负责decode,甚至一张卡搞promot。

最后总结一下:

Vllm启动后:

Scheduler: 负责控制哪些请求该进 Batch,哪些该排队。

Block Manager(块管理器): Block Table 所在地,负责划拨 HBM 显存块。

Worker: 负责在 NPU/GPU 上跑矩阵运算的。

一般是先跑算子这个跑通才能调内存,最后开始调策略。

 

 

 

 

 

 

 

 

 

#硬件/芯片公司工作体验#

放一些相关的,这里算是大模型的进阶版了。这个封面是吉米。

全部评论

相关推荐

12-16 15:40
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务