您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。 [百川智能]:大模型推理框架升级之路 - 发现报告

大模型推理框架升级之路

2024-12-23 肖彬 百川智能 亓qí
报告封面

肖彬 DataFunSummit#2024 01 量化作为大模型最重要的性能优化手段,能有效降低显存占用,降低访存量,充分利用计算资源以下是大模型计算流程: 量化 Weight-int8 + KV_cache_int8 最早上线的一个版本,显著降低显存占用,使得模型使用较少卡启动,增大服务承载能力,降低成本50%weight跟kv cache在推理框架占用显存为大头,优先优化能有效降低成本 Activation int8 A8是在w8/kv8基础上对gemm相关计算的输入激活进行量化,能有效降低gemm运算耗时,首token耗时下降50%,成本下降15% Weight-int4 + kv_cache-int4 Int4主要目标是将显存占用压至更低,能在低端卡型上部署并支持更长的序列,支持更大的batch,成本下降30%使用了类似quorat的技术,并结合marlin算子,针对性做了优化,已在多个业务落地,后续可能会有论文输出 Communication int8 通信量化,降低低端卡通信耗时开销,首token耗时下降30% 后续会有论文产出 Attention QKV int8 将gemm计算全线转为int8计算Q(int8)*K(int8)->softmax->V(int8) 目前处于开发中 02 投机采样就是利用decode过程算力冗余使用额外的技术生成多个候选token同时输送给大模型并行验证,充分使用算力且不会增加额外太多的时延 投机采样 1(大模型输出的最后一个token) + 4(候选token) ->一次验证通过4个token需要考虑云端大batch下候选token数量限制 Clover模型结构设计路线 单独建一层可学习的transformer block收集全局信息提升不错 尝试使用前置候选token信息辅助后续token预测 尝试attention结构qk之争,h表示全局信息,不断吸收token_emb效果不错 通过h=concat(token_emb, h)效果提升有限 Sample策略 我们的目标是大batch场景下投机有效,要求的候选token仅仅为4,此时sample策略就影响很大了开源的都是固定组合的形式,如head_0_top1+head_1_top1+head_2_top1,head_0_top2+head_1_top1+head_2_top1 核心策略: 1.单token级别(保证树深度)1.prob先进行top p丢弃2.按照top1/4长尾小概率丢弃2.token tree级别(子节点排序依据)1.从根节点的联合概率排序3.每层token预算数量(保证树最大宽度,防止计算量激增)1.去除所有父节点token数 Clover收益 命中率上提升50%+,端到端推理速度提升30%+ Clover2模型结构升级 1. loss优化 仅仅根据CrossEntropyLoss预测token偏序关系,训练多轮,过拟合会出现对一些高频token增强概率的情况增加数据蒸馏loss使得clover能更加关注与主模型的一致性上,而不是走捷径 2.主模型预测token信息前置,提前加入transformer block,帮助更远的预测 Clover2模型结构升级 3. Regressive attention block output projector结构提升后几个head预测能力 4.增加Augmenting Block层数,增强全局信息提取能力 Augmenting Block位于第一个head之前只会跑一次,增加层数不会导致跑多次的问题,eagle增加层就会导致每个head都多跑,耗时会暴增 这为clover提供更多可能,可以设计更加复杂的Augmenting Block,我们尝试最简单的加层获取收益 Clover2收益 clover为rnn为主的架构,但仍然能打败eagle这种以decode layer为主的模型结构在各个数据集上都超过eagle 命中率最大提升7.7%,端到端推理速度最大提升9.3% 03 首token耗时与decode每个token间耗时的平衡驱动来源于用户体验上优化,当一个新的用户请求进入时会导致现有做decode的请求被卡住 TTFTTPOT优化 Chunk prefill chunk prefill是将单次prefill计算拆分为多段计算的技术,能有效降低decode间隔时间 Chunk prefill Split fused技术 将chunk prefill与decode计算整合有效提升计算利用率 Chunk prefill 算子差异明显tensor core attention需要读取kv cache 第一个版本访存->反量化->计算pipeline并不能很好掩盖并且qk会切块计算,每块都需要反量化,反量化次数剧增为解决这个问题,我们还是采用了外部反量化后再计算的策略 最终收益 decode token间隔p99下降在各个业务都非常明显 PD分离 解决TTFT与TPOT的平衡,PD分离是终极方案 PD分离 较短的输入仍然采用split-fused的混合推理方案,长请求会单独扔给prefill节点完成,长请求来的时间不一定此时需要PD动态调度策略 Cache策略 Session cache缓存多轮请求kv cache结果多级动态lru排除老数据对于第二轮的请求首token延迟提升巨大同时也支持sys_prompt cache功能 很早的一个版本就支持了该功能后来出了全局前缀树cache,当时评估收益不大最近的gpt o1提出后,MCTS相关算法需求强烈最近会上线一个版本 04 在4090卡上,通信能力很弱,通信耗时占比很高,导致gpu大部分时间算力浪费 通信优化 计算通信overlap 常见方法: gemm overlap:许多场景通信耗时会长于gemm计算,导致不能很好overlap req overlap:需要组批两个请求,还需要两个请求间尽量计算量均衡 我们的设计:ISOsequence内的overlap方法 计算通信overlap 计算通信占比越均衡收益越大,最终收益上限取最小的占比在a800和4090上计算通信占比都比较极端 我们针对性的做了优化 4090通信占大头,通信>attention &&通信>mlp8bit通信,对通信进行量化 A800计算占大头,通信