【文献阅读】Towards Efficient Generative Large Language Model Serving: A Survey from Algorithms to Systems

论文《Towards Efficient Generative Large Language Model Serving: A Survey from Algorithms to Systems》由Xupeng Miao等人撰写,核心聚焦于大语言模型高效服务,从算法到系统层面进行全面综述,涵盖背景、分类、框架、基准测试等内容,并展望未来方向。以下是对论文各部分内容的翻译:
迈向高效生成式大语言模型服务:从算法到系统的综述

Xupeng Miao,美国卡内基梅隆大学,xupeng@cmu.edu Gabriele Oliaro,美国卡内基梅隆大学,goliaro@cs.cmu.edu Zhihao Zhang,美国卡内基梅隆大学,zhihaoz3@cs.cmu.edu Xinhao Cheng,美国卡内基梅隆大学,xinhaoc@andrew.cmu.edu Hongyi Jin,美国卡内基梅隆大学,hongyij@cs.cmu.edu Tianqi Chen,美国卡内基梅隆大学,tqchen@cmu.edu Zhihao Jia,美国卡内基梅隆大学,zhihao@cmu.edu

摘要

在人工智能(AI)快速发展的领域中,生成式大语言模型(LLMs)处于前沿位置,彻底改变了我们与数据交互的方式。然而,部署这些模型所需的计算量和内存消耗,在服务效率方面带来了巨大挑战,特别是在要求低延迟和高吞吐量的场景中。本综述从机器学习系统(MLSys)研究的角度出发,探讨了高效大语言模型服务方法的迫切需求,该研究处于先进人工智能创新与实际系统优化的交叉点。我们进行了深入分析,涵盖了一系列解决方案,从前沿的算法改进到创新性的系统设计变革。本综述旨在全面解读高效大语言模型服务的现状和未来方向,为研究人员和从业者提供有价值的见解,帮助他们克服有效部署大语言模型的障碍,从而重塑人工智能的未来。
关键词:大语言模型;效率;算法;系统;推理;服务

1. 引言

生成式大语言模型(LLMs)已成为人工智能(AI)重大进展的驱动力,在广泛的语言相关任务中展现出卓越性能。从机器翻译到情感分析、问答系统和文本生成,这些模型在理解、生成和处理人类语言方面展现出强大能力。基于Transformer的架构,如GPT系列(生成式预训练变换器)、LLaMA系列以及其他最新的公开大语言模型(如OPT、BLOOM、Mistral、DeciLM、Baichuan、GLM)的出现,在这一范式转变中发挥了关键作用,彻底改变了自然语言处理(NLP)任务的处理方式。除了自然语言处理领域,这些模型还在更广泛的应用中发挥着变革性作用,包括自动编程、科学发现、个性化数字助理、创意艺术和下一代计算架构,展示了它们在各个行业的通用性和深远影响。

然而,大语言模型前所未有的成功也带来了一些挑战,其中最显著的是在服务过程中对计算资源的巨大需求。庞大的模型规模和复杂性,加上对大量计算资源的需求,阻碍了它们在实际应用中的广泛部署。这些模型对资源的高度依赖引发了对能源消耗、可扩展性和可及性的担忧,使得缺乏丰富计算资源的小型机构和开发者难以应用这些模型,限制了大语言模型在更广泛社区的普及。

本综述论文旨在解决高效大语言模型服务的关键需求,并全面探讨研究界为应对这一挑战提出的多方面策略。我们深入研究了从算法创新到新型系统架构的各种解决方案,所有这些都旨在优化大语言模型的推理过程。 8.

1.1 目标

本综述的主要目标是全面概述大语言模型服务和推理的最新进展。我们将根据现有技术的基本方法对其进行系统回顾和分类,突出它们的优势和局限性。本综述将涵盖广泛的方法,包括解码算法、架构设计、模型压缩、低比特量化、并行计算、内存管理、请求调度和内核优化。 9.

1.2 结构

本文结构如下:第2节介绍大语言模型服务的背景信息。第3节给出我们对现有高效大语言模型服务方法的分类,并从算法创新(§ 3.1)和系统优化(§ 3.2)两个方面回顾相关工作。之后,我们在第4节列出一些有代表性的大语言模型服务框架并进行分析。第5节讨论大语言模型服务系统的基准测试。第6节阐明本综述与其他相关文献的联系。最后,我们在第7节提出一些有前景的探索方向,以提高生成式大语言模型服务的效率,为未来研究提供方向。 10.

2. 背景

2.1 基于Transformer的大语言模型

基于Transformer的大语言模型(LLMs)在自然语言处理领域引发了重大变革,引入了一种理解和生成人类语言的新范式。这一创新的核心是Transformer架构,它基于自注意力机制构建,使模型在进行预测时能够权衡输入数据不同部分的重要性。从数学角度来看,Transformer中的自注意力机制可以这样描述:对于输入序列\(X=[x_{1}, x_{2}, ..., x_{n}]\) ,Transformer通过对X进行线性变换计算出一组查询Q、键K和值V。然后,自注意力分数计算如下: \[Attention(Q, K, V)=softmax\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V \] 其中\(d_{k}\)是键的维度。这种机制使模型能够为输出的每个元素关注输入序列的不同部分,捕捉复杂的依赖关系,而不受它们在输入序列中距离的影响。 Transformer的另一个重要结构是前馈网络(FFN),它存在于Transformer的每一层中,对其计算强度有显著贡献。FFN通常由两个线性变换和中间的非线性激活函数组成,通常表示为: \[FFN(x)=max \left(0, x W_{1}+b_{1}\right) W_{2}+b_{2}\] 这里,\(W_{1}\) 、\(W_{2}\) 、\(b_{1}\) 和\(b_{2}\)是FFN的可学习参数,非线性函数max(0,·)(这里是ReLU函数)为模型引入了必要的非线性,使其能够学习更复杂的模式。

FFN在模型的参数数量中占很大比例因此也对模型的内存占用和计算负载有重要影响。在每个Transformer层中,多头注意力(MHA)从输入的不同部分聚合信息后,FFN会对每个位置的聚合信息进行独立处理。这种并行处理能力是Transformer的关键优势,使其能够有效处理序列。然而,这也意味着计算负载和内存需求会随着输入序列的长度和网络深度而增加。 基于Transformer的大语言模型中,自注意力机制和FFN的结合使这些模型能够捕捉广泛的语言上下文和细微差别,在各种自然语言处理任务中树立了新的标杆。

然而,训练和推理所需的大量计算资源已成为一个关键研究领域,重点在于在不显著牺牲性能的情况下优化这些方面。Transformer模型还包括其他关键组件,如位置编码,它添加了序列中每个标记位置的信息,以及多头注意力机制,它使模型能够在不同的表示空间中关注序列的不同部分。

2.2 GPU和其他加速器

大语言模型的快速发展在很大程度上归功于GPU架构和其他加速器的演进,它们对于提高模型性能和效率至关重要。GPU(图形处理单元)已成为该领域的基石,主要是因为其卓越的并行处理能力。与专为顺序处理设计的传统CPU不同,GPU由数千个小型高效核心组成,旨在同时处理多个任务。这使得它们非常适合深度学习计算中普遍存在的矩阵和向量运算,特别是对于基于Transformer的模型。 

典型的GPU架构由一组流式多处理器(SMs)组成,每个SM包含几个共享一个公共指令单元但可以并行执行独立线程的核心。此外,每个SM内的共享内存(SRAM)允许线程之间进行高效的数据交换和同步,显著优化了大语言模型计算所需的内存访问模式。这种设计对于大语言模型中计算密集型任务特别有益,例如Transformer中自注意力和前馈网络的计算。GPU还配备了高带宽内存(HBM),可实现更快的数据传输速率,显著减少了大规模计算期间与内存访问相关的瓶颈。此外,最新的GPU架构,如NVIDIA的Ampere和Hopper架构,不断进行改进,突破大语言模型计算的界限,例如提高内存带宽和容量、增加每秒浮点运算次数FLOPS)、配备专门的混合精度计算单元(即Tensor Core)以及更高效地利用资源,进一步加速了大语言模型的性能。

其中一些架构支持各种精度格式,包括FP32(32位浮点)、TF32(TensorFloat 32)、FP16(16位浮点)、BF16(脑浮点),甚至INT8/INT4,允许在计算速度和数值精度之间进行灵活权衡,这对于优化大语言模型性能至关重要。 

除了GPU,人们还探索了大量硬件平台用于大语言模型的部署,包括CPU、移动和边缘设备、ASIC,以及专门的加速器,如TPU、FPGA和各种制造商推出的新兴AI芯片(例如Apple M2 Ultra、AWS Inferentia、SambaNova、Cerebras、Graphcore IPUs)。

本综述主要强调基于GPU使用的研究,这一重点的确定有几个技术动机。由于其架构创新和卓越的计算能力,GPU在过去几年中主导了大规模深度学习的研究领域。此外,GPU的编程语言,如NVIDIA的CUDA和AMD的ROCm,便于对线程层次结构进行细粒度控制,使研究人员能够利用GPU固有的大规模并行性。这吸引了众多开发者在这些GPU之上构建成熟的软件生态系统,推动了大多数开创性和先进的大语言模型研究。虽然其他硬件平台在特定场景中确实具有独特优势,但围绕GPU的大量研究、开发和部署,使其成为深入理解大语言模型推理方法不可或缺的参考。考虑到硬件的相似性,其他硬件平台也可以从本综述中讨论的设计理念、见解和方法中受益。

2.3 大语言模型推理

大语言模型推理,特别是在像GPT(生成式预训练变换器)这样的模型中,通常采用自回归解码方法。这种方法是这些模型生成文本的核心,确保生成的每个新单词或标记都考虑到目前生成的整个序列。自回归解码基于在给定前面所有标记的情况下,顺序预测序列中下一个标记的原则,如算法1所示。 

算法1:大语言模型推理的自回归解码

用给定的上下文或起始标记初始化输入序列\(X_0\)

对于\(t = 1\)到\(T\)执行以下操作:

预测下一个标记\(y_t = argmax_y P(y|X_{t 1})\)

更新输入序列\(X_t = X_{t 1} \oplus y_t\)

如果\(y_t\)是EOS(结束标记),则中断

这里,\(P(y | X_{t-1})\)表示在给定当前序列\(X_{t 1}\)的情况下,下一个标记\(y\)的概率,\(\oplus\)表示连接操作。argmax函数用于在每一步选择最可能的下一个标记。 这种自回归方法在大语言模型推理中对于生成连贯且符合上下文的文本至关重要。它确保生成的每个标记都基于对之前生成内容的全面理解,使大语言模型能够生成高度相关且流畅的文本序列。

先前的研究已经对基于Transformer的大语言模型推理的算法复杂度(例如,计算FLOPS、I/O和内存消耗)进行了深入分析,并根据自回归解码算法的执行,对成本估计(例如,建模推理延迟)提供了广泛的实证结果。大语言模型推理的优化是一个复杂的问题,因为不同的算法配置和系统设置可能有不同的最优策略。


2.4 挑战

本节描述了高效大语言模型服务面临的各种挑战。 延迟和响应时间:高效的大语言模型推理需要实现低延迟和快速响应时间,特别是在聊天机器人、虚拟助手和交互式系统等实时应用中。在不牺牲准确性的前提下,平衡模型复杂性与推理速度是一项关键挑战,这需要优化算法和系统架构以最小化响应时间。 

内存占用和模型大小:大语言模型由于其规模和包含的大量参数,对内存有很高的要求。在内存受限的设备上部署此类模型是一个挑战,需要开发有效的模型压缩技术和系统优化方法,以在不牺牲性能的情况下减少内存占用。 

可扩展性和吞吐量:推理系统在生产环境中通常面临不同级别的请求负载。确保可扩展性和高吞吐量以有效处理多个同时请求,需要并行计算、请求调度和其他系统级优化,以在资源之间有效分配计算工作量。 硬件兼容性和加速:有效利用硬件资源对于大语言模型推理至关重要。使大语言模型适应各种硬件平台和架构,包括CPU、GPU和专门的加速器,需要硬件感知的算法设计和优化,以充分发挥底层硬件的潜力。

准确性和效率之间的权衡:优化大语言模型推理的效率有时可能需要在模型准确性上进行权衡。在模型大小、计算复杂性和性能之间找到正确的平衡是一项具有挑战性的任务,需要仔细考虑和评估各种算法和系统级技术。

3. 分类

现有提高大语言模型服务效率的工作大致可分为两类,即算法创新和系统优化,下面将分别进行讨论。

3.1 算法创新

本节全面分析为优化语言模型推理效率而提出的各种算法和技术。这些工作旨在通过算法改进解决大规模Transformer模型的固有性能缺陷。

3.1.1 解码算法

图2解码算法

在本节中,我们回顾如图2所示的新颖解码算法,这些算法优化了大语言模型的推理过程。这些算法旨在降低计算复杂度,提高语言模型在生成任务中的推理整体效率。 

非自回归解码:现有大语言模型的一个主要限制是默认的自回归解码机制,它逐个顺序生成输出标记。为了解决这个问题,一类有代表性的工作是放弃自回归生成范式,并行解码输出标记。非自回归解码最初是为加速机器翻译而提出的,通过打破解码过程中的单词依赖关系,并假设一定程度的条件独立性。

为了减轻翻译质量的下降,一些后续研究,如半自回归解码,通过对输出依赖关系进行建模或迭代细化输出标记,进一步扩展了这些非自回归方法,以达到自回归模型的质量。

块并行解码在基础大语言模型中插入一个前馈层,以并行预测多个未来位置,然后回退到基础模型验证的最长前缀。然而,这些方法需要花费大量成本重新训练带有新依赖关系的大语言模型,或者调整原始大语言模型的部分层,这并不总是可行的。

最近的一些工作致力于在解码步骤中一次生成多个标记,而无需对模型进行任何训练或修改。并行解码将贪婪自回归解码重新表述为一个可以使用雅可比(Jacobi)和高斯 赛德尔(Gauss Seidel)定点迭代方法并行求解的非线性方程组,以实现快速推理。已有一篇关于非自回归翻译的全面综述,总结了该方向的最新进展。到目前为止,由于大多数非自回归方法没有考虑输出标记之间的条件依赖关系,尽管解码速度有所提高,但其输出质量仍然不如自回归方法可靠。

推测解码:另一类工作通过利用推测执行提高解码并行性来解决顺序执行的限制。自回归大语言模型推理过程中的每个解码步骤都可以看作是执行一个带有条件分支的程序,例如决定下一个生成哪个标记。推测解码被提出用于以高效的方式(例如,使用参数较少的较小草稿模型)先对多个步骤进行解码预测,然后使用大语言模型同时验证这些预测。然而,将推测解码应用于大语言模型仍然存在一些实际挑战,例如如何使解码预测足够轻量和准确,以及如何使用大语言模型实现高效的并行验证。SpecInfer首先通过引入多个小草稿模型,结合新颖的基于树的推测推理和标记验证机制(这些机制被多篇文献直接采用),解决了这些挑战,并提出了一种低延迟的大语言模型服务系统实现(§ 4)。推测解码的主要优点是在不改变输出的情况下增加了并行性。这种保证来自于预测输出总是由原始大语言模型进行验证,并且在预测错误时回退机制会生效。 

早期退出:其他一些研究试图利用现有大语言模型的深度多层架构,并利用早期退出机制来加速解码过程。其基本思路是,模型早期层输出有潜力可靠地推断出目标分布。它们可以基于内部分类器进行预测,而无需运行整个大语言模型,并且人们已经探索了各种退出条件。由于这些方法会根据每个请求调整计算量以分摊总推理成本(即对于较易的推理请求计算量更少),所以它们也被称为自适应计算。一般来说,这些方法大多受限于内部表示所携带的信息不足,可能无法准确地进行可靠预测。

级联推理:受推理请求复杂度差异的驱动,级联推理使用一系列不同规模的大语言模型来最小化响应时间。CascadeBERT并没有对每个查询都直接使用大型模型,而是涉及一系列与不同模型深度对应的内部分类器,以级联方式组织它们,并根据实例的难度自适应地选择合适的分类器。        Tabi针对判别式模型(即非生成式大语言模型)的服务进行了优化,但它采用了类似的方法,结合小型模型和大语言模型来处理具有不同置信度(如何区分不同置信度?)的查询。        FrugalGPT利用基于学习的方法,自适应地将查询分配给不同的大语言模型API,优化了成本和性能。一项同期研究联合优化了模型复用查询缓存,并分析了最小化推理成本的最优性。思维混合将级联思想扩展到大语言模型的推理任务以节省成本,它从思维链和思维程序提示中采样答案。总体而言,级联推理是提高推理效率的一个有前景的方向,但设计一个准确的调度机制以避免降低模型质量仍然具有挑战性。

3.1.2 架构设计

本小节探索为大语言模型量身定制的创新架构设计。研究人员提出了超越原始Transformer的新型模型架构,在模型大小、性能和效率之间取得平衡,为更快且更节省资源的推理开辟了新途径。

配置缩减:为了降低大语言模型推理的计算成本,一种直接的方法是缩减模型配置,例如使用浅层编码器或解码器、权重共享和词汇表缩减。然而,减少模型参数的数量也会影响下游任务的性能。

注意力简化:自注意力计算面临的一个突出挑战是计算复杂度为\(O(L^{2})\),它会随着输入序列长度\(L\)的增加而呈二次增长。人们已经提出了许多Transformer变体,将标准注意力简化为更高效的替代方案,以处理非常长的序列任务,如稀疏化、核化和因式分解。最近,有一种趋势是借鉴先前注意力简化方法的思路,对其进行推广和组合,以缩短上下文、减小键值(KV)缓存的大小,并降低注意力复杂度,不过这会带来轻微的解码质量下降(例如,滑动窗口注意力、基于哈希的注意力、扩张注意力)。这类方法中的一种是通过将上下文压缩为更少的软标记(例如,用摘要标记或地标标记替换,利用额外的自动编码器方案),或根据不同的重要性指导直接丢弃或重新表述不重要的上下文标记(也称为语义压缩)来进行上下文压缩。例如,自适应稀疏注意力采用基于学习的方法,为每个标记动态地消除无信息的上下文标记。Scissorhands和\(H_{2}O\)选择少数可能对未来解码过程有重大影响的重要标记,并保存它们的KV缓存。StreamingLLM重视初始标记,并通过滑动窗口维护它们,这与先前的工作也类似。FastGen允许不同的注意力头自适应地采用不同的强调模式。表1展示了四类代表性方法的稀疏注意力模式及其应用。然而,由于上下文不完整,这些方法在具有更复杂注意力分布的实际工作负载中可能会面临不可避免的信息丢失问题。

激活共享:另一个方向是共享中间激活,以提高注意力计算效率。注意力共享方法观察到不同层的注意力矩阵分布之间的相似性,并重用这些注意力矩阵来降低计算成本。多查询注意力(MQA)使不同的头共享一组键和值,以减少增量推理中的内存带宽需求。组查询注意力(GQA)放宽了对单组键和值的限制,改为多组,每组与一组查询相关联。它们已被最近的一些公开大语言模型成功采用,并显示出优越的性能,包括基于MQA的模型(如Falcon、PaLM、ChatGLM2 - 6B)和基于GQA的模型(如LLaMA - 2、Mistral - 7B )。

条件计算:稀疏激活的专家混合(MoE)范式将模型的能力分散到各个“专家”中,这些“专家”是较小的神经网络,每个都专门处理数据的不同子集。它允许系统根据特定的路由机制,仅为给定输入调用必要的专家,而不是对整个大型模型进行计算,从而提高了计算和内存效率。例如,TaskMoE表明,与基于令牌的路由相比,任务级路由在提高推理吞吐量的同时,还能增加模型的能力。随着大语言模型的不断发展,MoE架构成为确保未来大语言模型可扩展性和效率的一个有前途的途径。同时,MoE的动态特性也需要从分布式通信GPU内核实现两方面进行特殊的系统优化,以提高MoE推理效率。

循环单元:虽然循环神经网络(RNN)(例如LSTM)在捕捉序列中的长期依赖关系方面存在困难,但仍有一些方法使用循环单元来替代Transformer模块,并在推理过程中实现线性的计算和内存复杂度,如RWKVRetNet。具体来说,与先前的方法不同,这些最新的探索大多建立在线性注意力(即线性Transformer、无注意力Transformer)表示的基础上。在进行改造后,它们通过使用线性循环单元(例如状态空间模型、LRU)对令牌之间的交互进行建模,克服了注意力的\(O(L^{2})\)瓶颈,并且这些循环单元更容易保持可并行化的训练特性。它们的设计还包含各种位置编码模块、指数衰减机制以及一系列基于令牌的非线性MLP或GLU,以提高模型的表示能力。最近,它们在模型性能和计算效率方面都显示出了有前景的结果。然而,循环单元是否能够成功替代Transformer用于大语言模型(特别是对于长序列)仍然是一个未解决的问题。

3.1.3 模型压缩

在这里,我们深入探讨模型压缩技术,其目的是通过创建更高效、更紧凑的模型,在不显著降低性能的情况下,减少大语言模型的内存占用和计算需求。

知识蒸馏:一类工作是知识蒸馏,它在大型教师模型的监督下训练小型学生模型。以前这个方向的大多数方法都在探索白盒蒸馏,这需要访问教师模型的所有参数。由于基于API的大语言模型服务(例如ChatGPT)的出现,一些黑盒蒸馏模型受到了很多关注,如Alpaca、Vicuna、WizardLM等。这些模型通常参数较少,但与原始大语言模型(例如GPT - 4)相比,在各种下游任务中表现出了有前景的性能。

网络剪枝:网络剪枝方法在过去几年中得到了广泛研究,但并非所有方法都能直接应用于大语言模型。必须考虑重新训练可能带来的高昂计算成本,并根据底层系统的实现评估剪枝是否能在推理效率上带来明显提升。最近的一些方法对大语言模型应用了结构化剪枝方法,去除大语言模型的整个结构化组件(哪些属于结构化组件?,有助于实现高效的GPU加速。例如,Deja Vu在不修改预训练模型的情况下,根据上下文稀疏性假设切断特定的注意力头和MLP参数。非结构化方法也有一些最新进展,通常可以实现大语言模型50 - 60%的稀疏度压缩。值得注意的是,它们可以进一步推广到半结构化的N:M稀疏度(即2:4和4:8),在NVIDIA稀疏张量核的加速下,显著提高推理速度。LoSparse和DSFormer使用低秩分解,用一个小的密集矩阵和一个稀疏半结构化矩阵近似模型权重。Flash - LLM通过使用张量核为非结构化剪枝提供一种内存高效的矩阵乘法(SpMM)实现,放宽了这一要求。PowerInfer假设对这些稀疏激活的神经元进行斜向访问,并提出了一种GPU - CPU混合推理引擎,使GPU和CPU处理不同的神经元。

3.2 系统优化

本节研究大语言模型推理系统的优化技术,这些技术在不修改大语言模型计算语义的前提下加速推理。这类工作的目标是通过优化用于大语言模型推理的底层系统和框架,提高系统效率。

3.2.1 低比特量化

本节探索最先进的低比特量化技术,这些技术能够对模型权重和激活进行高效表示。通过使用较少的比特数(即小于32位)来表示数值,这些方法显著降低了内存消耗,并在硬件平台上加速了推理。一种方法是对大语言模型进行量化,这些量化方法可以简要分为两个方向:量化感知训练(QAT)和训练后量化(PTQ。PTQ通过使用定制的CUDA内核或编译,将模型权重甚至激活的计算精度降低到INT8或INT4,以获得效率提升,例如W8A16(即仅对权重进行INT8量化,激活使用FP16或BF16)、GPTQ中的W4A16、SmoothQuant中的W8A8和W4A4。硬件的发展也满足了这些需求。一个有力的证据是,NVIDIA最近的架构(如Turing和Ampere)已经包含了INT8和INT4张量核,而最新的Hopper架构虽然取消了INT4支持,但引入了FP8张量核以获得更好的数值精度(例如,H100 GPU在FP8精度下的计算能力可达60× TFLOPS,而FP32精度下较低)。现有方法通常采用各种量化函数,包括均匀量化方法(即四舍五入到最近值)和非均匀量化方法。为了减轻低精度带来的性能损失,QAT在模型训练过程中集成了量化。值得注意的是,由于底层系统实现方面的挑战,与传统精度(如FP16)相比,低精度量化方法可能会导致推理速度变慢。虽然低精度方法显著降低了模型部署的资源需求,但也有研究表明,由于存在缩放定律,量化方法可能会对模型的推理性能产生显著影响。此外,量化还被应用于上下文压缩(例如CacheGen)和内存高效的微调(例如QLoRAPEQA),从而降低了大语言模型推理的内存消耗。

3.2.2 并行计算

本节研究为大语言模型量身定制的并行计算策略。这些方法利用现代硬件架构的并行处理能力,将计算分布到多个核心或设备上,从而在推理过程中实现显著的加速。

模型并行:大多数模型并行方法最初是为大规模深度神经网络(DNN)分布式训练提出的,特别是基于Transformer的模型。例如,张量模型并行(TP)将模型层(如注意力层、前馈网络层)从内部维度(如头、隐藏层)分割成多个部分,并部署在不同的设备(如GPU)上。它可以通过并行计算显著减少推理延迟,广泛应用于同一机器内的多个GPU,特别是在具有高速NVLink连接的场景中。PaLM推理在大规模Transformer推理中扩展了TP,引入了2D张量并行,并声称在大型集群(超过256个设备)中具有更低的理论通信复杂度。对于只有一个键值头的多查询注意力,它进一步将数据并行集成到混合张量分区策略中。流水线模型并行(PP)将模型层按顺序分布在多个设备上。每个设备负责一个流水线阶段,该阶段由多个连续的模型层组成。虽然PP可以显著提高单位时间内处理的输入数量(吞吐量),但它不像TP那样从本质上减少处理单个输入从开始到结束的时间(延迟)。序列并行在大语言模型推理中的关键思想是,通过将长序列的处理沿着序列长度维度分布到多个GPU上,来分担计算和存储负载。不同的并行技术会引入不同程度的通信开销和计算延迟。为了实现最佳性能和资源利用率,先前的方法在分布式训练中广泛研究了自动并行(例如Alpa、FlexFlow、Galvatron)。通过将它们的成本模型替换为适合Transformer模型自回归推理可预测运行时的模型,很容易将先前的自动搜索算法(例如动态规划、整数线性规划)应用于大语言模型服务(例如AlpaServe、FlexFlow - Serve、SpotServe),从而在无需人工干预的情况下确定最有效的并行策略。还有一些方法启用了卸载技术,使用更大但速度较慢的内存(如CPU DRAM)来存储模型参数和KV缓存,以节省有限的设备内存(如GPU DRAM)。

去中心化推理:这类方法结合了模型并行和数据并行,多个去中心化的自愿节点协作处理数据并推断输出。这种方法在硬件资源地理分布的场景中特别有用。受众包计算的启发,Petals通过互联网上协作的商用GPU为BLOOM176B模型提供服务。去中心化推理为利用被忽视的消费级GPU运行大语言模型开辟了新方向,但也面临一些实际挑战,如设备异构性、有限的计算和内存容量、低带宽网络、容错和隐私保护。

3.2.3 内存管理

高效的内存管理在大语言模型服务中仍然是首要挑战之一,特别是考虑到Transformer架构固有的内存密集型特性。随着对长序列推理需求的增长,与模型权重其他激活所需的工作空间相比,KV缓存的内存占用成为主要的优化目标。在增量解码过程中,KV缓存的内存会动态且不可预测地增长和收缩,简单的方法(如FasterTransformer)会基于最大序列长度假设预分配一块连续的内存。这会严重浪费内存,一是因为输入批次的请求长度各不相同,二是因为在复杂的解码场景中(如束搜索、并行解码)会并行生成多个输出序列。

vLLM提出了分页注意力机制,将KV缓存划分为不连续的内存块,显著提高了批次大小和吞吐量。SpecInfer提出了树注意力深度优先树遍历,以消除共享相同前缀的多个输出序列的冗余KV缓存分配。LightLLM采用了更细粒度的基于令牌的内存管理机制,进一步减少了内存使用。然而,这种碎片化内存管理机制带来的开销也带来了新的挑战。特别是在采用其他优化方法来提高批次大小的情况下,这些细粒度的内存管理方法可能只会带来边际的吞吐量提升,同时却大幅增加推理延迟。显然,大语言模型推理中的内存减少与其他算法创新和系统级优化密切相关。虽然某些方法在特定工作负载中可能效果良好,但它们可能相互抵消,导致整体性能下降。在大语言模型推理系统的内存效率和计算性能之间找到正确的平衡,仍然是该领域一个开放且紧迫的挑战。

3.2.4 请求调度

高效调度传入的推理请求对于优化大语言模型服务至关重要。本节回顾了请求调度算法,这些算法旨在最大化资源利用率,确保响应时间在延迟服务级别目标(SLO)内,并有效处理变化的请求负载。大语言模型服务的请求调度与一般的机器学习服务技术有一些共同之处,两者都旨在高效管理传入请求优化资源利用。这些共同方面包括动态批处理抢占、优先级、交换、模型选择、成本效率、负载平衡和资源分配。然而,大语言模型服务因其独特的特点(如巨大的模型规模、迭代自回归解码机制、未知的可变输出长度以及上下文信息的状态管理)也带来了独特的挑战.

早期的大语言模型服务系统(如基于NVIDIA Triton的FasterTransformer)仅支持类似于先前方法的请求级调度。Orca首先注意到生成式大语言模型与先前机器学习推理系统的请求级调度之间的差距。考虑到可变的输出序列长度,它以先来先服务(FCFS)的顺序在迭代粒度上调度引擎的执行,并对选定的一组操作进行批处理,以更好地利用硬件。许多后续方法继承了选择性批处理和迭代级调度策略,如vLLM和RayLLM中的连续批处理以及TensorRT - LLM中的飞行中批处理。此外,SpecInfer通过迭代选择一批请求来执行一轮推测推理和验证,将其扩展到了推测解码。FastServe专注于作业完成时间(JCT),并引入迭代级抢占,优先处理输入长度较短的请求,而不是采用FCFS策略。SARATHI针对分布式推理中由于输入请求的初始迭代长度不同而导致的流水线空闲问题,通过将输入提示分割为均匀的块,并在可能的情况下将块槽与其他请求的解码迭代捆绑,以充分利用GPU计算资源,这一方法也被DeepSpeed - FastGen称为动态分割融合(Dynamic SplitFuse)。\(S^{3}\)引入了一个输出序列长度预测器,有助于在GPU内存约束内调度更多并发请求,以实现更大的批次大小和更高的推理吞吐量。

3.2.5 内核优化

在本小节中,我们深入研究内核级优化,其目标是提高语言模型推理流程中特定操作的性能。这些优化利用硬件特定的特性和软件技术来加速关键计算内核。

内核融合:为了减少内核启动和内存访问的开销,内核融合被先前的深度神经网络框架和编译器广泛采用。由于大语言模型推理不需要反向计算,因此存在更多的内核融合机会。一些当代的Transformer推理引擎(如FasterTransformer、TenTrans、TurboTransformers、LightSeq、ByteTransformer)和编译器(如Welder)提议融合具有相同形状的通用矩阵乘法(GEMMs)(例如,查询、键和值的三个线性变换),以及将添加偏置操作与其他非GEMM内核(如残差连接、层归一化和激活函数(例如ReLU))进行融合。其中,融合多头注意力内核的优化得到了广泛研究,将在以下方面进行讨论。

定制注意力:为了使注意力操作在GPU上高效运行,为注意力计算定制GPU内核至关重要。例如,cuDNN提供了一个融合多头注意力内核API。同时,一些实现已经开源以获得更高的性能。由于特殊的自回归解码机制,这些实现大致可分为两类。一类用于第一次迭代(即初始/预填充/上下文/提示阶段,该阶段会并行处理输入提示中的所有标记。比如,xFormers利用CUTLASS将在线softmax技巧应用于整个注意力计算过程。另一类用于后续迭代(即增量/解码/生成阶段),此阶段内核每次迭代仅生成一个输出标记。在自回归解码中,常见做法是保存先前计算的键和值,这样在生成新标记时,只需计算单个查询,而无需重新运行整个序列。该领域的主要优化方向是最大化线程占用率,并尽量减少设备上高带宽内存(HBM)的访问(即使用共享内存或寄存器)。它们通常在批次大小和头维度上进行并行化(如FasterTransformer)以分配工作负载。一些方法进一步通过将KV缓存划分为块来实现序列长度维度的并行化,但最后需要对块级结果进行归约,例如FlashDecoding。后续工作FlashDecoding++通过引入预先已知的统一最大值,消除了部分softmax的同步操作。根据工作负载选择合适的并行维度对于提高线程利用率至关重要。

采样优化采样算法的选择对大语言模型的生成质量影响重大。默认的贪心采样总是选择概率最高的标记。并行采样技术,如束搜索,通过在每次迭代中保留固定数量(即束宽)的得分最高的序列,有效地解码出近似最优的序列。多种随机采样技术(如top k、top P、温度控制)被提出,以引入随机性从而获得更多样化的输出。然而,它们仍面临一些实际系统挑战。一是冗余KV缓存导致的内存压力增加(§3.2.3),二是由于大语言模型的词汇量较大(即数万级别)带来的采样效率问题。例如,LightSeq提供了一种高效的分层实现,将词汇表划分为k组,使用少量GPU指令在每组中检索候选标记,然后重新对标记进行排序。

可变序列长度:大语言模型推理的另一个独特挑战是序列的输入长度和输出长度均可变,且输出长度事先未知。一种加速推理的方法是一次批量处理多个序列(§3.2.4)。但是,当一批序列的输入长度不同时,通常会使用填充操作使它们长度相同以便进行批量处理,这会浪费计算和内存资源。为缓解这些低效问题,可以采用多种策略。打包技术将序列存储在连续内存空间中而不进行填充,仅在注意力计算前进行解包。不规则张量通过编译器生成的内核支持以最小填充进行计算。将序列分桶为较小的计算粒度(如块)也是减少填充标记内存使用的一种可能解决方案。由于初始阶段和增量阶段的混合执行,对输入提示进行分桶(§3.2.4)也给内存管理和请求调度带来了新挑战。

自动编译:大多数现有的大语言模型推理系统使用特定供应商的库作为后端,如cuBLAS、cuDNN和CUTLASS,这些库提供了优化的内核实现。为进一步提高推理效率,它们还针对NVIDIA GPU上的特定大语言模型操作符(如注意力)手动优化内核。尽管如此,使用自动DNN编译器的趋势依然存在,如TVM(即Unity、Relax和TensorIR)MLIR、JAX、OpenAI Triton、TASO和TorchInductor。编译方法有助于发现潜在更高效的操作符实现(如表达式推导),更重要的是,便于适配包括移动和边缘设备、CPU、深度学习加速器以及其他类型GPU(如AMD GPU和Apple M2 Ultra)在内的替代硬件平台。

4. 软件框架

生成式大语言模型服务需要进行全栈优化,近期许多工作开始开发软件框架,以提供高效的大语言模型推理部署服务。在下面的内容中,我们重新审视这些系统,并对表2中几个具有代表性的基于GPU的开源大语言模型服务系统进行全面分析。该分析不包括一些流行的相关项目,包括1)针对其他硬件的专用解决方案(如PopTransformer、CTranslate2、lammap.cpp和ggml)和2)基于其他系统构建的部署解决方案,如OpenLLM(基于vLLM)、xinference(基于ggml + vLLM + xFormers)、LMDeploy(基于FasterTransformer)、gpt fast(基于PyTorch)、DeepSpeed MII和DeepSpeed FastGen(基于DeepSpeed Inference),以及RayLLM和RayServe(基于vLLM)。

我们比较了这些最先进的大语言模型服务系统,并从几个方面总结了它们的差异。首先,这些系统大多支持张量并行,以实现多GPU推理并提高系统性能。其中一些系统还分别支持流水线并行或卸载,以支持在多节点或资源受限环境中的推理。其次,部分系统借鉴Orca的思路,实现了迭代级调度。第三,我们研究了这些系统的注意力内核,并分别介绍了它们在初始阶段和增量阶段的实现方式。

在初始阶段,它们通常采用批量通用矩阵乘法(GEMM)方法(如cuBLAS、torch、Relay),一些系统还利用在线softmax技巧减少HBM访问(如Flash attentionxFormers)。增量阶段更具挑战性,因为每个标记的生成方案导致计算强度较低。为提高GPU利用率,FasterTransformer手动将注意力计算(如线性投影、位置偏差、点积、softmax等)融合为一个高性能内核模板,并采用了多种内核优化技术,如使用共享内存进行缓存、利用warp shuffle指令进行归约、使用张量核进行半矩阵乘法和累加(HMMA)以及支持多种精度。FlexFlow Serve支持推测解码,并提供基于的并行解码内核,以零内存冗余和最大线程并行性验证来自多个序列(即来自多个小草稿模型、不同束或并行采样)的推测标记。vLLM扩展了FasterTransformer的融合多头注意力(MHA)内核,通过将KV缓存划分为来消除冗余内存使用,尤其适用于并行采样场景LightLLM采用了更细粒度的基于标记的方法对KV缓存进行分区。

需要注意的是,还有其他一些值得关注的方面未在上述讨论中涵盖。例如,即使是最流行的Flash和分页注意力内核,在不同系统中的实现方式也通常不同。TGI直接导入原始的Flash/分页注意力库,LightLLM采用OpenAI Triton实现的内核,MLC LLM通过TVM生成内核,TensorRT LLM则在FasterTransformer融合注意力内核基础上进行修改以支持分页注意力。另一个例子是输入感知的内核选择。在初始阶段,TensorRT LLM会根据上下文长度在cuBLAS和Flash注意力之间进行选择。

除了注意力计算,对于线性投影操作符,最近也有一种趋势是用通用矩阵向量积(GEMV)替代GEMM,以更高效地处理小批次(即批次大小为1)的情况。这些系统还有许多其他不同的特性,如编程语言(如C++、Python)、低精度支持(如FP16、INT8)、支持的硬件和模型等。总之,这些不同的设计和实现选择在很大程度上取决于它们优先考虑的优化目标。例如,vLLM提出分页注意力以提高批次大小从而获得更高的吞吐量(\(T_{pt}\)),而FlexFlow Serve利用SpecInfer加速解码以降低延迟(\(L_{at}\))。基本上,低延迟和高吞吐量是大语言模型服务系统的双重优化目标,代表了互补但往往相互冲突的目标,需要一种平衡策略来优化单个任务的快速响应与特定时间内处理的任务量之间的权衡。

最近的一些研究进一步将响应延迟分解为TTFT + TPOT×输出序列长度,其中TTFT代表第一个标记的生成时间,TPOT代表每个输出标记的生成时间。前者由初始阶段的处理速度决定,而后者直接取决于增量解码期间每次迭代的执行时间。区分这两个指标对大语言模型服务提供商有益,会导致不同的系统设计选择和用户体验(如更快的应用响应速度、更长的提示)。此外,降低成本也是一些大语言模型服务系统设计和实现的重要实际目标。虽然不太可能有通用的解决方案,但我们相信未来的大语言模型服务系统将不断整合这些差异化特性,从而持续提高系统效率和硬件利用率。


5. 基准测试

构建一个全面且可复现的基准测试,用于比较各种大语言模型服务系统(如MLPerf)的性能,这对该领域的学术界和工业界来说都是至关重要的工作。它不仅有助于大语言模型用户选择合适的系统解决方案,还能鼓励研究人员和开发者紧跟先进的优化技术。遗憾的是,尽管之前有一些相关报告,但截至目前,该领域尚未推出一个足够令人信服的基准测试,能够考虑到所有影响因素。这主要是因为评估设置众多,包括模型配置、硬件环境和请求负载等。在有限数量的设置组合下进行测试无法得出可靠的结论。例如,某些系统优化技术仅在高负载或低负载条件下才能实现性能优势,反之可能会产生负面影响。此外,在测量推理延迟时,由于系统设计的差异,如何排除与GPU推理无关的额外开销(如请求调度开销、固有网络延迟等)也是一个具有挑战性的问题。另外,公平的基准测试需要考虑模型输出内容的严格对齐,这在许多测试中常常被忽视。


6. 与其他综述的联系

我们关于高效生成式大语言模型服务和推理的综述对该领域现有文献进行了补充和扩展,同时保持了独特的关注点。在相关工作中,[144]在探索更通用的Transformer模型设计和特定领域加速器方面与本综述主题最为接近。然而,我们的综述专注于生成式大语言模型服务这一特定领域,这是其他研究未重点关注的细分领域。此外,一些研究对大语言模型在GPU和新型加速器上的推理效率进行了实验研究,提供了与我们关注的服务效率直接相关的有价值的实证见解。另外,LLMCarbon探讨了大语言模型部署中日益重要的环境影响(如碳足迹)方面。虽然我们的综述主要从性能角度关注效率,但这类研究提供的环境视角在更广泛的讨论中无疑具有相关性,值得重视。一些综述和基准测试对模型压缩和量化提供了有价值的见解。这些研究为我们探索相关方向奠定了基础。一些研究为理解大语言模型的有效性(如准确性、困惑度、真实性等)提供了必要的背景,但这超出了本综述的范围。我们的综述也认可先前关注大规模深度神经网络分布式训练的综述所做的贡献,因为它们为考虑大语言模型服务提供了背景。本质上,我们的综述处于众多研究之中,借鉴并有助于更全面地理解大语言模型服务效率,包括算法创新和系统优化。通过整合这些不同领域的见解,我们旨在对该领域的最新进展和挑战进行细致而全面的概述。


7. 未来方向

随着我们站在大语言模型发展的前沿,不仅要了解这些技术的当前状态,还要预测并塑造它们的未来发展轨迹,这一点变得越来越重要。特别是在生成式大语言模型服务领域,存在大量未探索的可能性和新出现的挑战。该领域的快速发展需要一种前瞻性的方法,识别潜在的创新和改进途径至关重要。这种前瞻性不仅能帮助我们适应即将到来的技术变革,还能引导研究界关注最相关和最具影响力的领域。在这种背景下,我们概述了几个有前景的未来研究和开发方向,每个方向都有可能显著提高生成式大语言模型的服务效率。

硬件加速器的开发与增强:未来,专门的硬件加速器的开发和优化,以及结合硬件和软件协同设计的方法,可能会显著推动生成式大语言模型服务效率的提升。例如,将内存集成到更靠近处理单元的位置,或者优化芯片架构以更好地匹配大语言模型算法的数据流,可以大幅降低延迟和能耗。NVIDIA的Hopper架构就是一个很好的例子,它在HBM和SRAM容量、内存带宽、计算单元和二分带宽方面都有改进,直接有利于大语言模型的处理。该领域的持续创新可能包括设计与生成式大语言模型计算模式天然契合的硬件,例如针对这些模型中普遍存在的注意力机制和张量运算的特定需求进行优化,最终影响大语言模型服务系统的设计和实现。

高效且有效的解码算法:开发更高效的解码算法可以显著提高服务效率。受更高效利用大语言模型中封装的大量知识的需求驱动,未来的工作可以探索替代传统自回归方法的途径,在保持解码质量的同时,释放实时应用的生成速度。广义推测推理是一个有前景的方向,因为它能够保持相同的生成质量。具体来说,小型推测模型可以推广到任何能比大语言模型更高效生成草稿标记的方法,如知识检索器和用户定义函数。例如,最近出现了一些后续工作,用早期退出或非自回归解码替代草稿模型。总之,像推测解码这样的高效解码算法的发展,结合底层系统优化,是提高生成式大语言模型服务效率的重要机遇。

长上下文/序列场景优化:随着大语言模型的应用不断扩展到更复杂的场景,处理更长上下文或序列的需求也在稳步增长。为具有长序列工作负载的大语言模型提供服务,需要从算法和系统两方面解决相关挑战。就大语言模型本身而言,当序列长度超过训练时所见的长度时,它们往往会出现长度泛化失败的问题,即使启用了相对位置编码或在更长的语料库上进行了微调。甚至对于一些声称支持超长上下文的模型,研究发现它们会遇到“中间丢失”的情况。目前的方法试图通过在保留相关信息的同时减少计算序列长度来缓解这些限制,如检索增强、序列压缩和缓存。对于大语言模型服务系统来说,长序列带来了关键挑战,包括更多的KV缓存内存消耗和访问,以及自注意力计算复杂度的二次增加。

探索替代架构:尽管Transformer模型和自注意力机制目前在大语言模型领域占据主导地位,但探索替代架构是未来研究的一个有前景的方向。深度学习领域历史上一直见证着主导架构的不断更替,每次范式转变都带来了重大进展。鉴于这一趋势,考虑其他可能具有独特优势的架构方法非常重要,特别是在提高计算效率方面。例如,一些近期研究探索了无注意力方法,使用纯多层感知器(MLP)架构来替代注意力机制。深度神经网络模型架构的演进不仅是自然的发展过程,也是探索构建更高效大语言模型的必要途径。

复杂环境中的部署探索:随着大语言模型应用的扩展,一个关键的未来方向是探索和优化它们在各种复杂环境中的部署。这种探索不仅包括传统的基于云的部署,还涵盖边缘计算、混合计算(结合云与边缘计算)、去中心化计算,以及利用更经济的资源(如抢占式实例)等场景。每个环境都为大语言模型服务带来了独特的挑战和机遇。例如,边缘计算可以通过在数据源附近处理数据来实现更快的响应时间和更低的带宽使用,但它在计算资源和存储容量方面存在限制。混合计算提供了一种平衡的方法,但需要先进的管理来高效分配计算任务。去中心化计算为众包计算资源提供了有前景的途径,但也带来了数据隐私和安全方面的额外考虑。在抢占式资源上进行大语言模型服务可以显著降低成本,但需要容错机制来应对其固有的不可预测性和可变性,以确保一致的性能和系统可靠性。成功应对这些复杂环境带来的挑战,将是实现更强大、可扩展和高效的大语言模型应用的关键。

自动适应特定需求:多样的特定应用需求为大语言模型服务优化创造了广泛的创新机会,如参数高效微调、从外部向量存储检索、在线学习和知识更新、多模态工作负载,以及将不同大语言模型的能力串联起来。这些独特的挑战还要求将大语言模型服务技术自动、顺畅地集成到现有的IT基础设施中,将优化空间扩展到大语言模型的整个生命周期,包括数据获取和处理、自动机器学习和模型管理、资源分配和性能监控。

8. 结论

高效的大语言模型服务是实现先进人工智能技术普及的基础步骤。本综述旨在为研究人员、从业者和开发者提供对现有方法的全面理解,使他们在实际环境中部署大语言模型时能够做出明智的决策。通过整合算法和系统方面的最新研究成果,本文希望能够加速进展,并在追求高效大语言模型服务解决方案的过程中促进创新。

针对过分分布的普遍化:一项调查 "towards out of distribution generalization: a survey"是一项对过分分布普遍化现象的研究。该研究关注如何处理机器学习中的模型在训练过程中未曾遇到的情况下的泛化能力。 当前,机器学习中的模型往往在面对与训练数据不同的情况时出现问题。这些情况被称为"分布外"或"过分分布"。过分分布问题在现实世界的应用中非常普遍,例如在医学影像诊断中,模型在对未见过的病例进行预测时可能出现错误。 为了改善过分分布问题,该调查着重研究了几种处理方法。首先,一种方法是使用生成对抗网络(GAN)。GAN可以通过学习未见过的数据分布来生成合成样本,从而提高模型的泛化性能。其次,该调查还介绍了自监督学习和深度对比学习等技术。这些方法通过引入自动生成标签或学习新的特征表示来增强模型的泛化能力。 此外,该调查提到了一些用于评估模型在过分分布上泛化能力的评估指标。例如,置信度和不确定性度量可以帮助评估模型对于不同类别或未知样本的预测是否可信。同时,模型的置换不变性和鲁棒性也是评估模型泛化能力的重要因素。 总结来说,这项调查对于解决过分分布普遍化问题提供了一些有益的方法和指导。通过使用生成对抗网络、自监督学习和深度对比学习技术,以及评估模型的不确定性和鲁棒性,我们可以提高模型在未曾遇到的情况下的泛化能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值