发表时间: 2024-02 · arXiv:2402.16363 (Infinigence-AI, CMU, PKU, UC Berkeley 等)
原文: https://arxiv.org/abs/2402.16363
作者/机构:Zhihang Yuan (Infinigence-AI), Yuzhang Shang (Illinois Institute of Technology), Yang Zhou (Carnegie Mellon University), Zhen Dong (University of California, Berkeley), Zhe Zhou (Peking University), Chenhao Xue (Peking University), Bingzhe Wu (Tencent AI Lab), Zhikai Li (Institute of Automation, CAS), Qingyi Gu (Institute of Automation, CAS), Yong Jae Lee (University of Wisconsin, Madison), Yan Yan (Illinois Institute of Technology), Beidi Chen (Carnegie Mellon University), Guangyu Sun (Peking University), Kurt Keutzer (University of California, Berkeley).
一句话结论 本文提出了一个基于 Roofline 模型的系统性分析框架及开源工具 LLM-Viewer,精准量化了大型语言模型在预填充和解码阶段的计算与显存访问瓶颈,并以此为基准系统梳理了当前四大类推理优化技术的实际收益与局限。
要解决什么问题 大型语言模型(LLM)的推理过程极度消耗计算和内存资源,但现有研究大多缺乏一个统一且实用的底层分析框架来精确定位性能卡点。具体而言,LLM 推理分为处理输入提示的预填充阶段和逐个生成词元的解码阶段,这两个阶段的底层算术强度(即每字节内存访问对应的计算操作数)存在天壤之别。如果不能在具体硬件上准确区分当前层是受限于计算能力(计算量大但内存访问少)还是受限于内存带宽(内存访问量大但计算量少),工程师就无法对症下药。例如,盲目地在计算受限的场景下应用旨在减少内存占用的量化技术,或者在内存受限的场景下堆叠算力,都会导致优化策略失效。因此,亟需一个能结合具体模型架构与特定硬件设备,直观揭示数据搬运与计算执行之间矛盾的系统性工具。
怎么做的 核心思路是引入计算机体系结构中经典的 Roofline 模型,将 LLM 的推理过程拆解并映射到硬件的峰值计算性能和峰值内存带宽这两条理论边界上。首先,框架从机制上区分了推理的两个阶段。在预填充阶段,多头注意力模块一次性处理长度为 $n$ 的输入序列 $\mathbf{X}_{\mathrm{pre}}$,通过矩阵乘法生成并保存键值缓存(KV cache),其核心查询计算为 $\mathbf{Q}_{\mathrm{pre}} = \mathbf{X}_{\mathrm{pre}} \cdot \mathbf{W}_q$,此时算术强度较高。而在解码阶段,模型每次只处理单个词元 $\mathbf{X}_{\mathrm{dec}}$,并需要拼接历史缓存: $$ \mathbf{K}_{\mathrm{cat}} = [\mathbf{K}_{\mathrm{cache}}, \mathbf{X}_{\mathrm{dec}} \cdot \mathbf{W}_k] $$ $$ \mathbf{V}_{\mathrm{cat}} = [\mathbf{V}_{\mathrm{cache}}, \mathbf{X}_{\mathrm{dec}} \cdot \mathbf{W}_v] $$ 这导致解码阶段需要加载庞大的历史缓存来完成极少量的计算,算术强度极低。基于这一底层逻辑,作者开发了全网络分析工具 LLM-Viewer。该工具接收 LLM 层级配置和特定硬件参数,绘制出 Roofline 图表,计算每一层的算术强度。如果算术强度低于图表上的转折点,说明该层处于内存受限区,工具会引导开发者采用模型压缩(如将浮点数转为低位宽整数的量化、剔除冗余参数的剪枝)、系统级优化(如将多个相连算子合并以减少中间激活读写的算子融合,或 PagedAttention 等内存分页管理技术)以及快速解码算法(如引入小模型提前预测并由大模型验证的投机解码,或跳过部分层的提前退出)。如果算术强度高于转折点,说明处于计算受限区,则需考虑启用低比特计算或引入新型空间架构硬件。通过这种方式,LLM-Viewer 将原本零散的四大类优化路线统一到了基于算术强度的指导框架下。
效果如何 实验主要通过 LLM-Viewer 工具在 NVIDIA A6000 GPU 上对 LLaMA-2-7B 和 LLaMA-2-13B 架构进行理论与环境分析。对比基线为未经优化的 FP16 精度标准推理,评估的优化路线包括代表模型压缩的量化技术(如 W8、W4、W2 等位宽)、代表系统级算子融合的 FlashAttention,以及代表并行服务的动态批处理。量化分析结果显示,在 LLaMA-2-7B 的预填充阶段,大多数线性投影层的算术强度高达 1024 至 1215,完全处于计算受限区;而解码阶段的所有算子算术强度仅为 1 左右,深陷内存受限区。在此基准下,量化技术在解码阶段能成比例地显著降低推理时间,但在预填充阶段,将权重从 4-bit 进一步压低对推理时间几乎没有改善。对于长上下文场景(如序列长度达到 50k 以上),KV cache 占据了绝对主导的内存,采用权重与缓存同为 4-bit 的 W4KV4 量化能释放巨大内存空间。在算子融合方面,FlashAttention 使解码阶段的内存访问和推理时间同步减少了近 40%,但在计算受限的预填充阶段,尽管内存访问减少了近 30%,推理时间却仅减少了约 25%。此外,增加批处理大小能显著提升吞吐量,但代价是单次响应延迟和显存占用呈线性暴增。作者也指出了这些优化路线的局限性:压缩方法会削弱模型抑制幻觉的能力,基于知识转移的蒸馏会大幅破坏模型的安全对齐(使其更容易受到越狱攻击),而 KV cache 压缩中随机丢弃词元的做法会严重损害模型在长尾数据上的分布外泛化能力。
大型语言模型(LLM)因其庞大的参数规模,在计算能力受限的设备甚至最先进的硬件上都面临着巨大的推理挑战。这种资源密集型的特性引发了对能耗、可扩展性和可访问性的担忧。尽管高效LLM推理领域发展迅速,但现有文献缺乏一个系统且实用的框架来进行统一分析和全面开发解决方案。
本文的核心目标是提供一个基于Roofline模型的系统性框架,用于分析各种LLM推理方法。其主要创新点包括:
1. 引入Roofline模型进行瓶颈分析:不同于传统的文献综述,本文不仅总结了当前的研究现状,还引入了专门开发的Roofline模型。该框架能够精准识别LLM在硬件设备上部署时的瓶颈(如内存受限或计算受限),并量化其对内存访问和计算的影响。
2. 系统梳理最新进展:将提高LLM推理效率的策略系统地分类为四个主要领域:模型压缩(如量化)、快速解码算法设计(如投机解码)、系统级优化(如算子融合)以及硬件级优化(如空间架构)。
3. 开源分析工具:开发并开源了一个名为LLM-Viewer的分析工具,帮助研究人员直观地分析任何LLM架构在各种硬件平台上的部署性能。
LLM推理架构
目前大多数LLM采用Transformer解码器架构。该结构包含一个嵌入层(Embedding layer)、一系列顺序的Transformer层和一个预测头(Prediction head)。嵌入层将输入token转换为隐藏状态并送入Transformer层。每个Transformer层由掩码多头注意力模块(MHA)和多层感知机子模块(MLP)组成。最后一层的输出被送入预测头以预测下一个token。
推理过程的两个阶段
推理过程分为预填充阶段(Prefill Stage)和解码阶段(Decode Stage)。预填充阶段是初始步骤,模型接收提示(prompt)序列作为输入,并为LLM中的每个Transformer层生成键值缓存(KV cache)。KV cache存储了模型认为对后续token生成相关的信息。
预填充阶段计算逻辑
在预填充阶段,MHA创建将存储在KV cache中的键值(KV)对。假设输入为 $\mathbf{X}_{\mathrm{pre}} \in \mathbb{R}^{n \times d}$ ,其中 $d$ 是隐藏层大小, $n$ 是提示token序列长度。权重表示为 $\mathbf{W}_q$ 、 $\mathbf{W}_k$ 、 $\mathbf{W}_v$ 和 $\mathbf{W}_o$ 。计算过程如下:
生成的 $\mathbf{K}_{\mathrm{pre}}$ 和 $\mathbf{V}_{\mathrm{pre}}$ 存储在KV cache中。MHA的其他计算公式为:
解码阶段计算逻辑
解码阶段是推理的核心,模型逐步生成token。MHA加载先前存储的 $\mathbf{K}_{\mathrm{cache}}$ 和 $\mathbf{V}_{\mathrm{cache}}$ ,输入为 $\mathbf{X}_{\mathrm{dec}} \in \mathbb{R}^{1 \times d}$ 。计算新的KV对并拼接到现有缓存中:
MHA的输出计算为:
Roofline模型基础
评估LLM在特定硬件上的部署效率需要综合考虑硬件和模型特性。在硬件上执行神经网络层需要将数据从内存(DDR或HBM)传输到片上缓冲区,由处理单元计算,再写回内存。如果计算量大但内存访问少,称为计算瓶颈(compute bottleneck);如果内存访问量大但计算量少,称为内存瓶颈(memory bottleneck)。
Roofline模型使用步骤
使用Roofline模型分为两步:首先,绘制目标硬件的峰值计算性能(OPS)水平线和峰值内存带宽对角线。其次,评估每一层的算术强度(Arithmetic intensity,OPs/byte)。根据算术强度在图表上的位置,可以确定系统当前是受限于内存还是受限于计算。
瓶颈优化策略
当算术强度低于转折点(红色区域)时,层受限于内存访问,此时应考虑量化、内核融合和增加批量大小等技术来减轻内存占用。当算术强度高于转折点(绿色区域)时,层受限于计算,应考虑启用低比特计算来提高计算效率。以Llama-2-7b在Nvidia A6000上的分析为例(表1),预填充阶段大多是计算受限的,而解码阶段全是内存受限的。
LLM-Viewer工具
由于LLM包含多个Transformer层且存在数据依赖,本文提出了LLM-Viewer工具进行全网络分析。工作流包括:输入LLM层信息、输入硬件信息生成Roofline模型、配置推理设置(如批量大小、序列长度)、配置优化设置(如量化、FlashAttention)、利用Roofline模型分析各层性能和内存占用、生成报告并可视化。
量化概述
量化通过将原始LLM中的浮点值转换为整数或其他离散形式,显著降低存储需求和计算复杂性。量化主要分为两个方向:用于压缩预训练LLM的量化(包括量化感知训练QAT和训练后量化PTQ)以及用于参数高效微调的量化(Q-PEFT)。
LLM-Viewer的量化分析案例
在LLM中,张量包括权重和激活(临时激活和KV cache)。使用LLM-Viewer从计算、内存消耗和内存访问三个角度分析量化效果。在计算方面,硬件处理较小位宽数据时性能更好(如图6所示,INT8的理论上限高于FP16),但必须确保所有操作数都在支持的位宽格式中。
内存消耗与访问分析
量化不同张量带来的内存减少各异。临时激活内存占用低,而KV cache内存占用高且随批量大小和序列长度增加(如图7所示)。量化可以减少内存访问,提高算术强度。如果量化后仍处于内存受限区,理论性能会提升(如图8小批量解码阶段);如果进入或原本就在计算受限区(如图9大序列预填充阶段),则量化权重可能不会带来显著的推理时间减少。
量化感知训练 (QAT)
QAT将量化无缝集成到LLM的训练或微调中。LLM-QAT通过无数据蒸馏解决了训练数据获取问题,并将量化扩展到KV cache。为了实现低于2-bit的量化,TSLD引入了基于token置信度的自适应知识蒸馏。PB-LLM通过保留高位宽的关键权重,有效保持了严重量化LLM的推理能力。
训练后量化 (PTQ)
PTQ在训练后对参数进行量化,无需重新训练,是处理十亿级参数LLM的实用方案。仅权重优化的方法包括:LUTGEMM优化矩阵乘法;LLM.int8()采用8-bit量化并保持精度;ZeroQuant结合层级知识蒸馏;GPTQ基于近似二阶信息实现3-4 bit量化;AWQ和OWQ通过保护激活幅度较大的显著权重来减少误差;SpQR隔离异常权重;QuantEase使用坐标下降法。为了实现更低位宽(低于2-bit),QuIP引入了自适应舍入程序,Norm Tweaking通过对齐量化激活分布来恢复精度,BiLLM将权重推至接近1-bit。
权重与激活的联合PTQ
SmoothQuant引入每通道缩放转换来平滑激活幅度。RPTQ通过聚类通道来减少范围差异。OliVe采用异常值-受害者对(OVP)策略处理局部异常值。Outlier Suppression+引入通道级移位和缩放。ZeroQuant-FP探索了FP8和FP4格式。FPTQ采用分层策略处理不同的量化难度。
KV Cache量化
随着上下文长度增加(如Gemini 1.5支持100万token),KV cache量化变得至关重要。KIVI将KV cache推至2-bit。WKVQuant联合优化权重和KV cache。如图11所示,当序列长度超过50k时,KV cache占据了大部分内存,量化可显著降低内存消耗。
用于参数高效微调的量化 (Q-PEFT)
在LoRA的基础上,Q-PEFT将量化集成到微调中。PEQA采用双阶段过程量化全连接层并微调标量向量。DFT采用Lion优化器。QLORA引入双重量化和分页优化器,实现了单GPU上的大模型微调。为了突破QLORA 4-bit的限制,LQ-LoRA引入迭代算法动态配置量化参数,Loft-Q同时量化LLM并建立低秩初始化,QA-LoRA生成轻量级微调模型以避免精度损失。
剪枝概述
剪枝通过消除不必要或冗余的模型参数来压缩LLM,分为非结构化剪枝和结构化剪枝。
非结构化剪枝
非结构化剪枝选择性地消除单个权重或神经元,导致网络稀疏但不规则。SparseGPT是为LLM量身定制的单次剪枝方法,可将剪枝重构为稀疏回归问题,在不微调的情况下实现50%稀疏度。Wanda通过评估权重幅度和输入范数来提高计算效率。Flash-LLM提出了非结构化稀疏矩阵乘法方法以支持GPU Tensor Core。
结构化剪枝
结构化剪枝移除整个神经元或层,结构更规则但对性能影响较大。LLM-Pruner采用单次剪枝技术并使用LoRA进行微调恢复。Sheared Llama结合了目标结构化剪枝和动态批量加载算法。Compresso建立了一个协同学习框架,使LLM与资源高效的剪枝算法协同工作。
知识蒸馏概述
知识蒸馏将能力从大模型(教师)转移到小模型(学生)。分为白盒和黑盒蒸馏。
白盒知识蒸馏
白盒蒸馏可完全访问教师的架构和权重。MiniLLM提出反向KL散度更适合生成任务。GKD通过让学生模型在自己创建的序列上训练来对齐监督训练。Homotopic distillation逐步减少学生模型的神经元以匹配教师。AD-KD转移教师的token级归因知识,让学生模仿底层推理。
黑盒知识蒸馏
黑盒蒸馏仅依赖教师的输入输出对。Multitask-ICT引入上下文学习蒸馏。LaMini-LM使用GPT-3.5生成指令响应来微调学生模型。PromptMix使用提示创建边界示例增强知识转移。Lion引入对抗性蒸馏框架。SCOTT和Distilling step-by-step转移思维链(CoT)能力,利用LLM理由作为额外训练材料。
分解技术
低秩矩阵分解是一种有效的DNN压缩技术。ASVD是首个使用分解压缩LLM的工作,它根据激活分布调整权重矩阵以管理异常值。LASER通过选择性移除权重矩阵的高阶分量来提高性能。TensorGPT通过张量列分解(TTD)压缩嵌入层。
动态参数减少概述
在解码每个token时,并非所有参数都是必需的。通过输入依赖的动态权重丢弃方案,可以减少加载的参数子集。
提前退出 (Early Exiting)
提前退出(或跳层)基于观察:对于某些token,隐藏状态在中间层就已饱和。CALM研究了三种输出置信度分数的方法(softmax响应、隐藏状态饱和度、线性分类器)。ConsistentEE使用RL策略网络直接输出退出决策。隐藏状态传播是一个挑战,CALM采用复制早期隐藏状态的方法,而后续工作发现这会导致性能下降,主张即时重新计算或使用线性层跨越(Din等人)。SkipDecode放宽了性能保持目标,强制最大使用层数单调递减。
上下文稀疏性 (Contextual Sparsity)
Deja Vu研究了LLM宽度维度的动态稀疏性,发现上下文稀疏性可达80%。它训练了一个小型MLP作为稀疏预测器来寻找最相似的注意力头和MLP列。PowerInfer将此扩展到异构设备,将频繁激活的权重留在GPU,其他放在CPU。MatFormer仅在FFN上添加动态结构,根据目标硬件属性在行维度上采样MLP层。
混合专家模型 (MoE)
MoE解耦了参数量和计算FLOPs。专家网络取代了FFN层,门控函数选择最合适的专家。Sparse Mixer、ST-MoE和Mixtral证明了MoE在保持高性能的同时显著减少了推理激活的参数。RECOMPILE为MoE构建了高效的编译器库,ZeRO扩展了分布式推理。
打破自回归限制
通过让一次LLM前向传播解码多个token,可以显著降低推理延迟。
投机解码 (Speculative Decoding)
引入计算高效的草稿模型(小模型)来提议后续几个token的候选,LLM仅用于评估这些草稿。为了保持分布一致性,Leviathan等人引入了重采样技术。为了提高加速比,研究者提出构建草稿Token树,让LLM并行验证(如SpecInfer多模型树,或基于top-k采样的树)。知识蒸馏和自投机解码(从大模型中采样小模型)也被用于提高草稿模型的接受率。
并行解码 (Parallel Decoding)
并行解码不依赖小型Transformer模型。Medusa在最后一层插入线性投影层,根据当前隐藏状态同时预测多个未来token。LLMA和REST利用自然语言中的频繁N-gram,通过检索匹配历史上下文直接复制token供LLM评估。Skeleton-of-Thoughts利用语言的层次结构并行生成大纲的各个论点。Lookahead decoding利用Jacobi和Gaussian-Seidel迭代算法并行化自回归解码。非自回归Transformer(NAT)在机器翻译中通过输入掩码序列并迭代解码所有token,但这难以直接扩展到仅解码器架构。
算子融合原理
算子融合是深度学习框架中的编译时优化技术,将计算图中直接连接的多个算子合并,消除冗余的数据移动和中间表示。如图14所示,线性算子和SiLU算子融合后,避免了存储和加载中间激活。Roofline模型表明,融合可以提高内存受限区域的算术强度(图15)。
注意力机制的融合
对于LLM固定的架构,特定的融合模式更有效。FlashAttention和Flash-Decoding将自注意力中的矩阵乘法和softmax融合为一个算子,消除了存储大型中间注意力矩阵的需要。如图16所示,在解码阶段,内存访问和推理时间同步减少;而在预填充阶段(计算受限),时间减少幅度低于内存访问减少幅度。DeepSpeed-inference引入了Deep-Fusion,TensorRT-LLM结合了强大的模式匹配算法来检测融合。
内存管理
由于提示长度和生成token数可变,激活张量形状不固定。PagedAttention通过将KV cache划分为块(block)来高效管理内存,每个块包含固定数量token的键值,并使用映射表管理逻辑块到物理块的映射,类似于虚拟内存。
工作负载卸载
当GPU内存不足以容纳网络时,需将工作负载卸载到CPU DDR或硬盘。如图18所示,大批量大算术强度下,将数据卸载到CPU内存并在需要时传至GPU计算,优于直接在CPU上计算。DeepSpeed-inference的ZeRO-Inference机制通过大批量处理掩盖了获取权重的延迟。FlexGen使用线性规划搜索算法在GPU、CPU和磁盘间寻找最佳卸载策略。
批处理与吞吐量
并行服务旨在平衡响应延迟和吞吐量。批处理是提高吞吐量的基本方法,图19显示增加解码阶段的批量大小可显著提高吞吐量,但会增加延迟和内存消耗。ORCA引入了连续批处理(迭代批处理)来结合不同用户的推理。SARATHI采用分块预填充和解码最大化批处理,结合预填充块和解码请求以提高算术强度。
解码阶段的内存墙
预填充阶段采用GEMM算子,算术强度高;而解码阶段逐个计算输出token,采用GEMV或精简的GEMM算子,算术强度低,且受批量大小和序列长度影响。
空间架构设计
空间架构不依赖处理单元(PE)与主存的多次交互,而是将计算分布在多个PE上。中间数据在相邻PE间流动,避免了写回DRAM。每个PE可直接访问内存,提高了内存带宽和推理性能。如图20所示,内存带宽增加可显著提升解码阶段线性层的性能。Groq的LPU和Graphcore的IPU均采用了此类架构。
PIM技术
为了解决低算术强度导致的“内存墙”,PIM将计算单元直接置于内存芯片中,以利用高内部带宽。三星的HBM-PIM将MAC单元放入HBM中,实现2TB/s内部带宽和1.2TFLOPS吞吐量,适合加速算术强度为1-2 OPs/Byte的算子。SK-hynix的AiM基于GDDR6,采用BF16数据格式,提供1TFLOPS算力。
PIM的局限性
1)计算能力有限:DRAM工艺导致晶体管速度慢、逻辑密度低,PIM仅适合小批量或KV cache处理。2)容量限制:计算单元占用空间导致总内存容量减少。3)PIM间通信不足:缺乏强大的互连,依赖主机CPU/GPU进行数据交换。
低精度浮点格式
统一量化难以兼顾精度和范围,非统一量化难以在通用硬件上部署。工业界开始采用低分辨率浮点格式,如NVIDIA H100的FP8 Tensor Core和Tesla Dojo的CFloat8。学术界提出了FP4和FP6的量化方案(如ZeroQuant-FP、FP6-LLM)。
改进的编码方案
研究者探索了单值表示内的新编码:1)可变长度编码(如ALPS、ANT、Dybit)允许动态调整指数和尾数的位宽。2)异常值感知量化(如OliVe)为重要大值分配更高位宽。3)位共享编码(如MX的BDR框架)在块内共享公共信息以平衡精度和效率。
为了满足计算需求,出现了专用的处理单元。NVIDIA H100中的Transformer Engine使用统计分析为每层确定最佳精度(FP16或FP8)。研究者还设计了专门加速注意力机制的硬件,以及利用FPGA加速LLM的方案(如DFX和LightLLM)。
幻觉 (Hallucination)
压缩方法会影响模型抑制幻觉的能力。事实知识通常存储在Transformer的FFN中。在量化或剪枝时,应识别关键的FFN层,并选择性地提高这些层的量化精度或予以保留,以防止输出幻觉。
安全对齐 (Safety Alignment)
适度的压缩(如8-bit量化)不会显著损害安全性,但可能使模型更容易受到越狱攻击。基于知识转移的蒸馏方法会大幅削弱安全性,建议在蒸馏后对小模型重新微调。
分布外泛化 (OOD Generalization)
量化压缩会导致长尾子组中依赖决策捷径的错误增加。KV cache压缩(随机丢弃token)进一步加剧了这种依赖。建议在下游场景中集成测试时优化技术以增强鲁棒性。
大型多模态模型(LMM)以LLM为核心,面临着跨模态协作推理的计算成本挑战。Google的Gemini在高效LMM方面领先。开源方案如LLaVA-v1.5利用4/8 bit量化。MobileVLM开发了紧凑的LLM和高效投影仪。TinyGPTV、TinyLLaVA等通过优化数据和训练策略,使小模型达到大模型性能。MoE-LLaVA采用MoE架构缓解稀疏性导致的性能下降。
替代注意力设计
为了缓解计算和内存瓶颈,提出了多种块级或局部注意力机制,如Landmark Attention、Funnel-Transformer、Longformer、ETC和LongT5。StreamingLLM和LM Infinite引入了注意力池(sink)加滑动窗口模式,无需微调即可提升长上下文能力。H2O通过经验预言机选择性地关注重要token。
循环与检索
Transformer-XL引入段级循环结构。Segatron和Compressive Transformer进一步压缩并存储历史上下文。RAG(检索增强生成)技术(如LangChain)通过将长文档向量化并在生成时检索最相关内容,有效缓解了长对话上下文的限制。
位置编码调整
由于预训练未见过超长序列,传统位置编码无法外推。ALiBi引入了注意力偏置。此外,多项工作调整了RoPE(旋转位置编码),如NTK-aware Scaled RoPE、YaRN和Giraffe,通过线性缩放或功率定律机制保护高频信息,从而实现长度外推。
本文主要通过开发的LLM-Viewer工具进行理论与环境分析,而非传统的模型训练。
- 分析模型:主要以 LLaMA-2-7B 和 LLaMA-2-13B 架构为分析对象。
- 硬件配置:基准分析主要在 NVIDIA A6000 GPU(峰值算力155 TOP/s [FP16], 310 TOP/s [INT8])上运行Roofline模型分析。部分系统级探讨涉及CPU DDR、GDDR/HBM以及磁盘的带宽层级。
- 推理配置:分析涉及不同的推理阶段(预填充 Prefill / 解码 Decode)、不同的序列长度(如 256, 512, 1024, 2048 等)以及不同的批量大小(如 bs=1, 16, 64)。
- 优化配置:评估了 FP16, W8, W4, W4KV4, W4A4, W2, W1 等不同量化位宽,以及 FlashAttention 等算子融合技术。
本文针对高效大语言模型(LLM)推理领域进行了全面且实用的综述。不同于传统文献综述,本文创新性地引入了Roofline模型,构建了一个系统分析LLM部署瓶颈(内存受限与计算受限)的框架,并开源了LLM-Viewer分析工具。文章系统梳理了模型压缩(量化、剪枝、蒸馏、分解)、快速解码算法(提前退出、稀疏性、MoE、投机解码、并行解码)、系统/编译器优化(算子融合、内存卸载、并行服务)以及硬件级优化(空间架构、PIM、新数据格式)等前沿技术,并探讨了这些技术对模型可靠性、长上下文建模及多模态扩展的影响。这项工作为初入该领域的研究人员和寻求深化高效LLM部署实践的专家提供了不可或缺的参考资源,该项目也将持续更新和维护。
本文在各个技术细节的描述中引用了大量关键文献,以下为部分核心引用的展开说明:
* 【1, A survey of large language models, 2023, arXiv】Zhao等人提供了LLM基础架构的全面综述。
* 【Flashattention: Fast and memory-efficient exact attention with io-awareness, 2022, NeurIPS】Dao等人提出了FlashAttention,通过融合矩阵乘法和softmax来减少中间内存读写。
* 【Llm.int8(): 8-bit matrix multiplication for transformers at scale, 2022, arXiv】Dettmers等人提出了LLM.int8(),采用8-bit量化减半GPU内存使用。
* 【Qlora: Efficient finetuning of quantized llms, 2023, arXiv】Dettmers等人提出了QLORA,引入双重量化和分页优化器实现单卡大模型微调。
* 【Sparsegpt: Massive language models can be accurately pruned in one-shot, 2023, ICML】Frantar等人提出了SparseGPT,实现了无需微调的50%单次非结构化剪枝。
* 【Deja vu: Contextual sparsity for efficient llms at inference time, 2023】Liu等人研究了上下文稀疏性,通过小型MLP预测器动态跳过注意力头和MLP列。
* 【Fast inference from transformers via speculative decoding, 2023】Leviathan等人提出了投机解码中的重采样技术,确保大模型输出分布一致性。
* 【Medusa: Simple llm inference acceleration framework with multiple decoding heads, 2024, arXiv】Cai等人提出了Medusa,通过在最后一层插入线性投影层实现多token并行解码。
* 【Efficient memory management for large language model serving with pagedattention, 2023, SOSP】Kwon等人提出了PagedAttention,利用分页机制高效管理变长KV cache。
* 【StreamingLLM: Efficient streaming language models with attention sinks, 2023, arXiv】Xiao等人提出了StreamingLLM,利用注意力池机制解决长上下文外推问题。