题目:LLM Inference Unveiled: Survey and Roofline Model Insights
链接:https://arxiv.org/abs/2402.16363
这也是一篇推理加速的综述,重点关注一下它的组织结构吧,也就是它对推理加速方法的分类
论文给的全文结构图,有点丑:
它把推理加速分成4个level:参数级别、算法级别、系统级别和硬件级别,与我之前分类有很多相同之处。我之前对推理加速的分类是:
将推理加速的方式按照自底向上归为:
-
优化底层运算(优化算子、优化计算图)
-
优化内存(虚拟内存、调度器、压缩KV cache,这方面借鉴了很多OS知识)
-
优化Transformer(优化attention、优化MoE、投机解码、改换架构)
-
优化输入输出模式(压缩输入、组织输出)
简要看一下这4个level都具体对应什么方法:
-
参数级别-模型压缩:也就是量化、蒸馏、剪枝这类减小参数占用内存的方法
-
算法级别-加快decoding的算法:它将相关算法分成两种,即生成单个token尽可能少地使用参数和每次前向传播解码更多数量的token,其中包含比较关注的speculative decoding
-
系统级别-系统优化:包括内存管理、算子融合等,很多推理框架做的就是这些
-
硬件级别-硬件优化
关注一下算法级别-加快decoding的算法,第一部分减少生成单个token使用的参数量。
early-exit:在decode过程中,有时候不一定非要经过每一个transformer层,对于某些令牌,隐藏状态在中间的一些层会饱和。也就是,对于某些令牌,在中间层早期退出会输出正确的top-1预测,就像完整模型运行一样。这样减少推理的层数,从而减少推理时间。这种方法在嵌入式设备上(模型参数小,batch size=1)的情况下应该会效果更明显
利用稀疏性:训练一个稀疏性的预测器,如果某些列是稀疏的,就直接在计算中舍弃他们。这种思路有点类似于直接把FFN改成Moe(MoEfication论文),但是实测下来效果应该不太好
MoE:将专家网络插入到transformer架构中以替代FFN层。此外,在多头注意力和专家网络之间引入了一个门控函数,旨在为给定的输入令牌选择最合适的专家或专家组合。个人觉得如果想做出效果,需要较大规模的训练,而且难训。
第二部分,每次前向传播解码更多数量的token。
投机解码,里面有一篇文章是适用于边缘设备的,并且用了tree attention:Llmcad: Fast and scalable on-device large language model inference
并行解码,其实大部分分类方式中,并行解码属于投机解码。