大模型推理加速: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 上跑矩阵运算的。

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

 

 

 

 

 

 

 

 

 

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

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

全部评论

相关推荐

1.你这个xx实习的项目能展开讲讲吗?你主要负责哪块?为什么是你来做这块?2.自动化评估体系这里能具体说说怎么评的吗?哪些维度3. 多维度自动化评估体系,那每一个维度是怎么做的?比如你说的关键词匹配和问答对,这个流程怎么构建的4.图表的准确性你怎么评估的?怎么从markdown和HTML 里提取对应图表并比对的?有没有一些异常case举个例子?5.用了playwright去截图,那遇到报错或者渲染失败怎么办6不同设备模块比如交换机、服务器,它们的字段特征都不一样,那你怎么做统一化训练7.那你这个知识图谱底层是用什么数据结构存的8.用的是PAI吗?那有没有对比过比如说 igraph或者图数据库像GraphScope这些之间有啥区别9有没有用过一些大模型的推理?比如说用千问做辅助根因预测10你们这套系统的准确率和召回率大概是多少,那比如说没有到90%,你们是认为这个指标是OK的吗11所以它是系统推理出根因之后还需要人工check,然后才能执行故障预案,有没有哪一部分流程是完全自动化的12你们平台现在接的主要是底层设备指标,那有没有接入一些业务指标,比如订单失败率转化率这类的业务数据13我有个疑问就接入业务指标的话你需要知道整个平台的服务拓扑,那你们这个平台是怎么接入业务侧拓扑的?是自己做的吗?还是中台团队负责15.那你既然用过图数据库,你知道它底层的存储结构是怎样的吗?比如它是怎么组织边和节点的16.我们现在是两阶段推荐架构:第一阶段召回用的是embedding点积召回,第二阶段是MLP跟transformer做多目标打分。那你觉得在我们这么大规模的数据量下,如果要做real-time re-ranking,你会在架构上怎么做trade-off?怎么压低latency17.我们现在在做embedding精度提升也试过加cross tower、attention pooling 甚至meta learning,但发现一旦模型重了,就难以部署到线上实时系统。那你觉得在embedding learning的这个模块里,有哪些方案能在不严重影响线上性能的情况下提升语义表示能力
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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