LLM推理系统全景图:

相较于仅关注孤立技术或单一模块的现有综述,本文更强调技术间的协同关系与系统级整合逻辑,同时点出负载预测精度不足等现存挑战

对于从事 LLM 系统研发的研究者与工程师而言,这份综述既是梳理技术脉络的全景地图,也是探索下一代推理系统的重要参考。

  • A Survey of LLM Inference Systems
  • https://arxiv.org/abs/2506.21901

随着 Transformer 架构取代循环神经网络成为序列生成的核心技术,大型语言模型(LLM)实现了质量飞跃,从交互式问答、文档摘要到代码生成、非结构化数据分析,其应用已渗透至工业界与日常消费场景,ChatGPT、Kimi 等服务的普及更催生了对高性能推理系统的迫切需求。

然而,LLM 特有的自回归生成特性 —— 输出长度非确定性导致算子执行次数、内存占用与处理时间均难以预判,为系统设计带来了输出质量无保障、内存分配困难、批处理与调度易出问题的三大核心挑战。

尽管 vLLM、SGLang 等专用推理系统已涌现,稀疏注意力、动态批处理、量化等技术也屡见不鲜,但现有研究多孤立讨论单一技术,缺乏在完整推理系统框架下的整合分析与对比。本文正是针对这一空白,构建了系统性的综述框架。

这篇《A Survey of LLM Inference Systems》:

  • 先从请求处理的基础切入,解析 Prefill/Decode 两阶段工作流与注意力、FFN 等核心算子的优化变体;
  • 再深入模型优化与执行层,探讨核融合(如 FlashAttention)、动态批处理、负载预测驱动的调度策略;
  • 随后聚焦内存管理的关键技术,包括分页分配、缓存驱逐与持久化;
  • 最终落地到单副本、多副本及解耦架构等系统形态的技术组合逻辑。

关键问题

问题 1:LLM 推理系统自回归非确定性有根治路径吗?需重构调度逻辑吗?

【具体问题】自回归生成的非确定性(输出长度、处理时间未知)是 LLM 推理系统的核心矛盾,现有技术(如负载预测、分页内存、动态批处理)均为“缓解策略”,是否存在能从根源上破解这一矛盾的技术路径?若不存在,未来系统设计是否需彻底重构“以输出长度为核心的资源调度逻辑”?

现有技术暂未找到从根源上破解自回归生成非确定性矛盾的路径,作者明确提及这些技术本质是依赖负载预测、自适应机制与成本削减来【“缓解”挑战,而非根治】。

自回归生成中输出长度与处理轮次的不确定性源于用户输入的开放性,无法通过解析方式预判终止条件。未来系统设计或需通过“应用层协同”间接规避矛盾,例如针对特定场景设计前端与运行时协同机制,约束输出长度以实现可预测性,而非重构资源调度逻辑。

问题 2:LLM 推理系统多维度权衡如何量化优化?有普适框架吗?

【具体问题】作者提及注意力变体(MQA/GQA)、MoE、量化等技术均存在“效率-质量”权衡,而动态批处理与缓存管理又涉及“吞吐量- latency”平衡,这些多维度权衡在实际系统中如何量化与协同优化?是否存在普适性的权衡决策框架?

作者未提及普适性的多维度权衡量化与决策框架,实际系统需结合场景【动态适配】

  • “【效率-质量】”权衡中,稀疏注意力、MoE 等技术通过牺牲部分精度换效率,而结构化生成(如 beam search)则以更高计算成本换质量,需**【根据任务属性选择】**(如创造性任务慎用稀疏注意力);
  • “【吞吐量-latency】”权衡中,动态批处理通过逐轮重组批次缓解长尾问题,批大小则依赖离线测试或 token 预算平衡资源利用率与抢占风险,无统一量化标准。

问题 3:负载预测误差对多副本解耦架构影响多大?如何弥补?

【具体问题】多副本推理系统的解耦架构以“资源分配灵活性”为核心优势,但依赖精准的负载预测与动态重平衡技术,当前负载预测的误差率(如输出长度预测偏差)对解耦架构的资源利用率、请求抢占率会产生多大程度的负面影响?现有技术如何弥补这一短板?

负载预测误差会显著降低解耦架构的资源利用率,增加请求抢占率:误差导致初始负载分配失衡,动态重平衡成本上升,且可能引发内存超配或资源闲置。现有弥补技术包括

  1. 训练小模型(如 OPT-125M)预测输出长度相对排序而非精确值,提升调度鲁棒性;
  2. 结合内存使用预测与回收速率估算,优化资源可用性评估(如 Mooncake);
  3. 通过周期性动态重平衡(如基于 KV 缓存大小阈值迁移请求)修正预测偏差。

一、引言

自从序列生成任务的技术路线从循环神经网络转向 Transformer 模型以来[97],大型语言模型(LLM)的质量已达到可支持多种任务的水平,包括交互式通用问答[9]、文档摘要与分类[96]、语言翻译[27]、代码生成[16]、数据整理[72]以及非结构化数据分析[100]。这一突破使得 LLM 在工业界和普通消费者中获得指数级普及,ChatGPT、Gemini、Claude、Grok、Kimi 和 DeepSeek 等服务便是典型代表,这也对设计支持高性能模型服务的系统提出了迫切需求。

1.1 LLM 推理系统的设计定位与核心差异

为满足这一需求,研究者开发了专门的 LLM 推理系统,以管理模型执行的各个方面——除了 LLM 基本推理流程外,还包括负载均衡、任务批处理、任务调度和内存管理等系统级功能,这类系统与其他高容量、高流速数据处理系统的设计思路一脉相承

然而,基于 Transformer 的 LLM 推理所特有的自回归特性,意味着需要为上述每个系统级功能开发全新技术。

1.2 自回归引发的成本不确定性

传统数据处理系统通过对输入执行一次算子序列来处理请求,但 LLM 需要执行该算子序列的次数与请求输出的长度成正比所有请求均以文本字符串形式存在,而输出长度则由字符串的文本内容【非确定性】地决定

由于字符串内容可由用户任意指定,因此不存在“典型输出长度”这一概念。由此导致的结果是,请求处理成本(尤其是内存成本)具有高度不确定性,即便内容相似的请求,其处理成本也可能相差极大。

1.3 推理系统的三大核心挑战和应对技术体系

输出的这种本质**【非确定性】给 LLM 推理系统带来了三大核心挑战:**

  1. 尽管近年来取得了诸多突破,但输出质量(即满足请求所表达任务的程度)仍无法得到保证——因为输出是通过非确定性采样生成的,而非从数据中通过解析方式构建;
  2. 执行轮次的不确定性导致处理请求的最终内存占用未知,这给同时处理多个请求的系统带来了内存分配难题;
  3. 同理,由于处理请求的时间同样不确定,设计能够避免掉队任务(stragglers)和队首阻塞(head-of-line blocking)等问题的批处理与调度技术也变得极具挑战。

为应对这些挑战,LLM 推理系统采用了涵盖用户交互前端与执行运行时的多种技术,如图 1 所示。

  • 为提升 LLM 输出质量,推理系统支持一系列序列生成技术(如束搜索、思维树、思维图和自一致性)——这些技术能提高生成高质量输出的概率(图 1©),同时还支持多种提示技术。
  • 技术的多样性促使前端设计以简化用户交互为目标(图 1(a)),其功能包括自动提示优化和约束输出生成(图 1(b)),旨在减轻用户设计提示词和协调复杂工作流的负担。
  • 为适应动态内存需求,推理系统依赖基于分页的块内存分配,并结合缓存持久化与量化技术,以降低整体内存占用(图 1(g))。
  • 为适应动态请求生命周期,推理系统采用基于负载预测机制的动态任务调度、动态批处理和灵活负载均衡(图 1(d)、(e)),同时通过专门的算子和核实现来降低整体推理成本(图 1(f)、(h))。

1.4 本综述的技术框架与章节安排

在本综述中,我们在完整推理系统的框架下讨论这些技术:

  • 第 2 章阐述实现高质量 LLM 推理的核心算子与序列生成算法
  • 第 3 章探讨批处理、调度技术以及核设计(旨在开发高效算子实现以充分利用专用硬件);
  • 第 4 章讨论内存管理技术,包括分页内存、支持请求抢占与长上下文的淘汰和卸载技术、量化,以及包含缓存重构技术在内的缓存持久化技术;
  • 在这些讨论的基础上,第 5 章探讨如何将这些技术组合起来构成当前的 LLM 推理系统格局,包括面向单 LLM 副本部署环境的单副本系统,以及面向多 LLM 副本请求处理的多副本系统——这些系统尤其支持解耦架构,能更精细地控制硬件资源分配。

1.5 相关综述对比与本综述价值

尽管已有综述讨论过本文中的许多技术,但本综述将这些技术置于完整推理框架下进行 contextualize 分析,并详细阐述如何将它们组合成专用 LLM 推理系统。

  • 在文献[47,54,116,139]中,稀疏注意力、混合专家(MoE)、解码策略、KV 缓存管理和量化等技术均在系统框架之外被单独讨论;
  • 文献[55]则从 KV 缓存管理的视角探讨了其中许多技术;
  • 其他综述(如文献[15])聚焦于模型架构(包括模型剪枝、知识蒸馏和量化技术),或专注于提升推理质量的技术[48]。

二、请求处理

基于 Transformer 的语言模型在离散有限的 token 集合上运行,针对输入 token 序列(所有 token 均属于该集合)生成一个输出 token 。具体过程是将 token 集合映射到高维向量空间,对 token 嵌入向量执行简单的线性变换,得到的上下文嵌入向量,最终从该向量中选择输出 token 。

本文第 5 章将介绍的所有 LLM 推理系统,均采用基于 Transformer 的模型,且遵循相同的基本推理流程——主要依赖注意力(attention)、前馈网络(feed-forward)和 token 采样(token sampling)算子对嵌入向量进行处理,以生成输出 token (见 2.1 节)。然而,注意力算子和前馈网络算子的基础成本较高,且需生成语义连贯、符合要求的文本 token,这促使研究人员在算子设计方面投入大量精力(见 2.2 节)。

此外,由于 token 只能逐个生成这一固有局限,生成较长文本序列需要多轮模型执行;且每一轮生成的输出 token 对输入高度敏感这些因素进一步催生出多种序列生成技术(见 2.3 节)。

面对如此多样的请求处理技术,系统设计者必须仔细权衡各类技术的优缺点,并结合系统其余部分的设计进行考量,其后续影响将在 2.4 节中讨论。

2.1 推理流程

在这里插入图片描述

因此,输出序列通过“将先前 token 反馈回模型”的方式逐个生成,这一过程称为自回归生成(autoregressive generation)

生成一个输出 token 的具体步骤如下:

  1. 首先,通过嵌入模型将每个输入 token 映射到高维嵌入向量
  2. 随后,这些嵌入向量流经一系列 Transformer 层(每层功能相同但参数不同),转化为上下文嵌入向量;
  3. 输入序列中最后一个输入 token 的上下文嵌入向量被送入 token 采样器,最终生成输出 token 。

从用户视角来看,输入和输出都是文本而非 token。在后台,LLM 应用(如聊天机器人)会先将用户文本确定性地转换为 token,再输入至 LLM;输出 token 同样会先转换回文本,然后呈现给用户。可使用 Tiktokenizer(https://github.com/dqbd/tiktokenizer)等工具查看文本对应的 token。

上图图 2 展示了这一工作流程。

每个 Transformer 层内部包含一个注意力算子和一个前馈网络(FFN),两者之间设有归一化算子[97]。注意力算子和前馈网络的核心操作是将嵌入向量与各类权重矩阵相乘,而权重矩阵的值通过训练确定。因此,这些算子的基础计算成本和存储(内存)成本取决于权重矩阵的大小。

对于注意力算子而言,对第个嵌入向量执行该算子时,需要用到第个嵌入向量()的线性投影结果(即键向量和值向量)。由于序列生成采用自回归方式,投影操作的次数(即 KV 缓存的大小)会随着请求的执行而增加

因此,处理一个请求的总计算成本和内存成本取决于其输出序列的长度。

性能与准确性(Performance and Accuracy)

高成本会导致端到端延迟(end-to-end latency)增加,端到端延迟指从请求提交到完整输出序列生成的总时间。但由于 LLM 的自回归特性,输出 token 生成后可实时流式传输给用户。因此,对于问答等交互式应用,只要token 间时间(time between tokens, TBT)首 token 时间(time to first token, TTFT) 较短,长延迟不一定会导致差的用户体验。而文档摘要等其他应用可能对 token 吞吐量或请求吞吐量更敏感。

对于同时关注延迟和吞吐量的请求,有效吞吐量(goodput) 是更实用的性能指标,其定义为每秒内在特定延迟目标(即服务级别目标,service-level objective, SLO)内完成的请求数量[104]。

用户同样要求输出具备高质量。但由于用户提示词可对应多种任务(从知识检索到语义操作[100]),输出质量高度依赖具体任务,因此不存在通用的质量指标。在衡量 LLM 的整体质量时,通常使用困惑度(perplexity)[17];而对于机器翻译、文档摘要等特定任务,则分别使用 BLEU[77]、ROUGE[57]等指标。

2.2 算子(Operators)

为实现高性能、高准确性的推理,研究人员在[97]提出的基础上,对注意力算子、前馈网络算子和 token 采样算子进行了新设计:

  • 注意力算子
  • [97]提出多头注意力(MHA)机制以提升推理质量;
  • 分组查询注意力(GQA)[3]和多查询注意力(MQA)[90]进一步优化,通过减少变换矩阵的大小和数量,降低基础计算成本和内存成本;
  • 此外,许多研究关注稀疏注意力(如[99]),仅部分执行注意力计算以进一步降低成本;
  • 还有共享注意力技术(如[124]),通过在多个请求间共享部分注意力输出,减轻内存负担。
  • 前馈网络(FFN):混合专家(mixture-of-experts, MoE)技术将 FFN 拆分为多个小型独立网络[64],从而降低计算负担。
  • token 采样
  • top-k 采样、核采样(nucleus sampling)[37]等随机采样技术通过探索 token 空间的更广泛区域提升推理质量;
  • 推测解码(speculative decoding)技术则利用小型草稿模型(draft model)结合并行验证,提高 token 吞吐量[118]。
2.2.1 注意力(Attention)

给定 token 的嵌入向量,注意力算子生成一个增量向量,使得上下文嵌入向量能更好地捕捉该 token 的语义。向量的计算方式如下:
在这里插入图片描述

在这里插入图片描述

举一个简化示例:“plant”一词可作名词(植物)或动词(种植),两种含义在嵌入空间中对应不同坐标,但 token 嵌入向量某一时刻只能指向其中一个坐标。注意力算子生成的增量向量用于更新,使其指向预期含义——该向量通过分析周围的其他 token (即上下文)计算得出。

矩阵(键矩阵)和(值矩阵)由之前的 token (即)构成:

  • 的第行(即键向量)和的第行(即值向量)分别对应第个嵌入向量的线性投影;
  • 具体而言,对所有,有和。权重矩阵、、通过训练得到,且对所有请求均相同。

因此,每次执行注意力算子时,和都会新增一行,以纳入第个 token 的投影结果。由于和在整个请求生命周期内都会被使用,它们会被持久化存储在内存中,通常称为KV 缓存(KV cache)

注意力算子还可通过以下方式单次调用生成整个 token 序列的增量向量:将嵌入向量垂直拼接为嵌入矩阵,并用按行 softmax(row-wise softmax)替代普通 softmax。先基于嵌入矩阵一次性计算所有嵌入向量的键向量和值向量,再计算整个矩阵的注意力模式。

这一特性使得请求处理分为两个阶段:

  • 预填充阶段(prefill phase):对提示词 token 应用上述批量处理技术(见图 2(a));
  • 解码阶段(decode phase):对生成的输出 token 应用公式(1)(见图 2(b))。

此外,只要使用正确的键向量和值向量,嵌入矩阵甚至可包含多个独立请求的嵌入向量,从而支持批处理(见 3.2 节)。但随着 KV 缓存不断增大,注意力算子的成本会显著增加,因此研究人员提出了多种注意力变体以降低成本。

预填充与批处理(Prefill and Batching)

在预填充阶段,所有提示词 token 的嵌入向量被垂直拼接为单个输入矩阵,然后与各个权重矩阵相乘,得到:
在这里插入图片描述

随后通过以下公式计算更新向量:
在这里插入图片描述

其中,softmax 按行应用。最终的上下文嵌入向量通过得到。在公式(1)和(2)中,softmax 的输入有时会乘以(为投影维度,即和的宽度)进行缩放;softmax 本身也可替换为 sigmoid 等其他激活函数[83]。

在 GPU 等数据并行硬件上,通过公式(2)单次计算,比通过公式(1)多次计算更高效——尽管两者的基础成本相同。除预填充外,这一特性也推动了请求批处理技术的发展(见 3.2 节),使得可在单次调用中对多个请求执行多次解码(见下图 10)。这一特性同样是推测解码可行的基础。

注意力变体(Attention Variants)

对于提示词较长的请求,或需要多轮解码的长时请求,和的行数最终可能达到数万甚至数十万,导致内存成本和计算成本显著增加。针对这一问题,主要的注意力变体技术包括:

  1. 多头注意力(MHA):通过垂直拆分、、,并行执行公式(1)和(2),基于拆分后的子矩阵计算部分增量向量,再聚合结果——既分散了成本,又提升了推理质量[97]。
  2. 注意力分组(Attention Grouping):包括分组查询注意力(GQA)[3]和多查询注意力(MQA)[90],通过减少子矩阵的数量直接降低成本(见图 4 和表 1)。

  1. 稀疏注意力(Sparse Attention):仅对部分键向量计算注意力模式,从而降低计算成本(见图 14)。常用的关键键向量筛选技术包括:静态掩码或查询依赖掩码/过滤[4,7,24,42,52,85,99,111,113]、k 近邻搜索索引[18,61,130]。
  2. 共享注意力(Shared Attention):通过在多个输入间共享注意力模式,降低内存和计算成本。这些输入可来自单个请求(如束搜索)或多个请求(如系统提示词)[45,119,124,136,140]。该技术只需计算一次共享 token 的注意力模式,且通过在多个输入间共享内存条目,同时减少了计算成本和内存成本。
2.2.2 前馈网络(Feed-Forward Network)

在这里插入图片描述

前馈网络的计算成本和内存成本与参数大小成正比。但与注意力算子不同(其成本随 KV 缓存大小变化),前馈网络的成本对所有输入均相同。

混合专家(Mixture-of-Experts)

在 MoE 系统[91]中,前馈网络被替换为多个小型网络(每个称为“专家(expert)”)。一个门控机制(gate)决定使用哪个专家处理特定输入。由于每个专家远小于原始 FFN,计算成本显著降低。

MoE 系统的研究主要集中在:专家的架构设计、门控机制设计、专家的动态加载,以及专家计算的硬件优化。在分布式场景下,还需考虑专家的放置(placement)和负载均衡。感兴趣的读者可参考[64]。

2.2.3 token 采样(Token Sampling)

给定上下文嵌入向量, token 采样器通过计算得到 token 集合上的概率分布(即 logit,与其他参数类似,通过训练得到)。的长度等于可能的 token 总数,通过的索引与 token 集合的映射关系,可根据选定的索引确定输出 token 。

在每轮解码中贪婪选择 logit 最大的索引,可能导致生成的文本不自然[106],因此研究人员提出了 top-k 采样、核采样[37]等替代采样策略。同时,公式(2)支持的并行解码能力,也推动了推测解码技术的发展,以提高 token 吞吐量[118]。

采样策略(Sampling Strategies)
  • 贪婪采样(Greedy Sampling):选择中 logit 最大的索引,即。在这里插入图片描述

  • 概率采样(Probabalistic Sampling):根据实际 logit 随机选择下一个 token 。例如,若,则尽管该 logit 较低, token 仍有一定概率被选中。这种策略可增加输出文本的多样性,但可能会选中不合适的 token。为实现更精细的控制,可通过“温度(temperature)”参数调整基础 logit——增大温度会提高低概率 token 的选中概率,降低温度则相反[80]。

  • Top-k 采样(Top-k Sampling):仅在 logit 最高的个索引上执行概率采样,直接避免低概率 token 被选中。

  • 核采样(Nucleus Sampling):将设为满足“logit 总和超过给定阈值”的最小索引数量[37]。

推测解码(Speculative Decoding)

[53]中给出并分析了推测解码的算法,其核心流程如下(给定):

在这里插入图片描述

关键在于,步骤 2 中的次并行执行会生成一组上下文嵌入向量(每个对应一个,),且这些向量可通过单次调用获得(类似预填充阶段[118],见图 5)。通过这些向量,可通过采样得到每个 token 。

关于草稿阶段(步骤 1)和验证阶段(步骤 2、3)的技术,可参考[110,118,139]。

2.3 序列生成(Sequence Generation)

生成完整输出序列时,可将部分生成的序列递归反馈回模型,以流式方式生成下一个 token ,直到满足终止条件(如生成终止 token )。

  • 但提示词的微小差异(如思维链(CoT)[105]、少样本示例[115]及其他提示工程技术[86])可能导致输出产生巨大差异,进而影响成本和准确性。
  • 另一方面,结构化生成方法会跟踪一组潜在的输出序列,对每个候选序列进行自回归扩展,最终选择一个候选序列作为最终输出。束搜索(beam search)[34]、思维树(tree-of-thoughts)[122]、思维图(graph-of-thoughts)[8]、自一致性(self-consistency)[101]等均属于此类方法——它们会增加请求处理成本,但能为许多任务生成更高质量的输出。
流式生成(Streaming)
  1. 思维链(CoT)提示:在提示词中插入“展示推理过程(show your work)”等关键短语,引导 LLM 生成更长的响应,从而提高生成文本满足请求任务需求的概率[105]。
  2. 少样本示例(Few-shot Examples):在提示词后附加多个目标任务的完整示例[115],目的与 CoT 提示类似。
  3. 内置思维链(Internalized CoT):无需在提示词中显式插入关键短语,而是通过奖励引导的强化学习对模型进行训练或微调,使其生成类似思维链的输出[28]。

关于提示工程技术的详细综述,感兴趣的读者可参考[86]。

结构化生成(Structured)

结构化方法会构建一个候选池,从中选择最终输出,具体包括:

  1. 束搜索(Beam Search):同时跟踪个候选序列(见图 6)。对每个序列采样多个潜在输出 token ,然后保留所有采样结果中 logit 最高的个 token ,扩展对应的序列并剪枝其余序列。当个序列均完成扩展后,选择累积 logit 最大的序列作为最终输出。[34]中给出了束搜索的基础算法,[27]中提出了其变体。
  2. 思维树(Tree-of-Thoughts):将候选序列组织为搜索树,树的每个节点代表一个潜在输出,并对每个节点应用多种提示策略以生成子节点[122]。
  3. 思维图(Graph-of-Thoughts):将节点视为逻辑图,引入节点间的额外操作(如从多个父节点聚合信息)[8]。
  4. 自一致性(Self-Consistency):剪枝与其他候选差异最大的低质量候选,促使剩余候选收敛到高质量输出[101]。

2.4 讨论

支持自回归请求处理的需求定义了 LLM 推理系统的核心特性,并使其区别于其他大规模数据处理系统。

受此特性影响,请求的处理成本与输出长度绑定——但关键在于,除非应用对输出序列长度进行约束(见 5.1 节),否则无法提前知晓最终输出长度。此外,注意力算子导致提示词嵌入向量间存在复杂交互,难以通过解析方法确定终止前的执行轮次。这种固有的不确定性(尤其是内存方面),推动了分页注意力(见 4.1 节)、任务重平衡(见 3.3 节)等技术的发展——这些技术可适应动态变化的内存条件;同时也促进了请求内存成本预测(见 3.4 节)、成本降低(见 4.3 节)等技术的研究。

与此同时,注意力、前馈网络、 token 采样等算子技术,以及序列生成技术,均具备独立性,任何推理系统都可相对容易地采用。但系统设计时必须考虑这些技术的独特特性:

  • 例如,推测解码需要独立的草稿模型,这会增加执行流程的复杂性,且无法保证一定提升吞吐量,因此更适合草稿模型成功率高的应用(如基于常识检索的任务),而非依赖输出多样性的应用(如创意合成)。
  • 类似地,稀疏注意力、MoE 等“以准确性换效率”的技术,以及结构化生成等“以效率换准确性”的技术,也需结合应用场景权衡。

展望未来,LLM 在各行业的应用持续扩展(甚至超出自然语言领域[68]),且硬件专业化趋势明显[50],这为针对性算子设计和序列生成策略提供了更多应用场景——包括强化学习方法[21]、新型提示策略[134]等。这些领域的新技术可能会推动 LLM 推理系统设计的重新评估。

三、模型优化与执行

对于本质上以数据并行为主的操作,通用 CPU(General purpose CPUs)的性能远不及 GPU 和其他极端并行处理器架构(extreme parallel processor architectures)。为充分利用这类硬件的性能优势,研究人员提出了算子设计技术(3.1 节),旨在开发针对 GPU 执行推理算子的优化算子程序。这些设备所具备的极强计算能力,还催生出了请求批处理技术(3.2 节)——该技术旨在充分利用硬件计算能力,同时需关注因 KV 缓存增长而可能出现的拖慢任务(stragglers)和内存超配问题

类似的考量也推动了请求调度技术的发展(3.3 节),其中包括任务优先级排序和负载均衡等技术。这些技术的实现,均依赖于准确预测请求在整个生命周期内的总内存开销(即执行轮次数量)的能力。

若无法实现准确预测,则需采用缓解策略以适应新的内存状态变化。

上述技术将在 3.4 节中集中讨论。

3.1 算子(Kernels)

物理算子开销(Physical operator cost)除了包含由算子设计本身产生的基本因素外,还涉及多种其他因素。

例如:算子执行过程中读写中间产物所产生的 I/O 开销(I/O costs),以及将中间程序加载到处理器核心或从核心卸载所产生的调用开销(invocation costs)。在 LLM 推理中,由于注意力算子和前馈网络(FFN)可能产生规模庞大的矩阵乘积(即激活值),I/O 开销的影响尤为显著。对于基于 GPU 的工作流而言,若完成单个算子需单独启动多个子算子,则调用开销也会变得十分可观。

算子融合(Kernel fusion)[11]将多个操作流水线化到单个算子中,从而同时避免了中间产物的实例化(materialization)开销和算子调用开销。该技术与分块矩阵乘法(tiled matrix multiplication)[75]、在线 softmax(online softmax)[69]等技术相结合,催生出了分块注意力算子(blockwise attention kernels)[38,88,125]——与通用 GPU 算子相比,这类算子的速度实现了大幅提升。此外,分布式注意力算子(distributed attention kernels)[63]也应运而生,其旨在通过多 GPU 协作加速推理过程。这些技术还启发了针对注意力算子之外其他算子的优化,包括 FFN 算子[62]以及非矩阵类算子[102,128,129]。

3.1.1 注意力算子(Attention Kernels)

公式 2 所示的注意力算子需要计算两个矩阵乘积,并执行 softmax 操作。尽管矩阵乘法过程中的各个标量积和求和运算满足交换律与结合律,可直接实现并行化,但将这些标量运算简单分配到 GPU 的处理器核心(即 SM 单元)上,可能会因拖慢任务(stragglers)导致核心利用率低下。

此外,实例化中间矩阵乘积还会产生高昂的 I/O 开销

FlashAttention[20]等分块注意力算子将在线 softmax[69]与分块矩阵乘法[75]融合,有效解决了上述两个问题。

同时,对于具有极长上下文的请求,KV 缓存可能需要分布到多个 GPU 上,此时便需要分布式注意力算子(如 Ring Attention[63])来处理此类场景,同时应对数据传输和同步开销。

分块注意力(Blockwise Attention)

为提高核心利用率,Stream-K[75]将矩阵乘积划分为缓存本地分块(cache-local tiles),并将每个分块中的标量积按顺序分配给处理器核心(如图 7©所示)。

这种流式机制可避免其他分配策略(如轮询分配(图 7(a))或固定拆分分配(图 7(b)))可能导致的工作节点空闲问题。尽管该技术可直接用于注意力机制内部的矩阵乘积,但在应用 softmax 之前,仍需实例化完整的中间产物(图 8(a))。

在文献[69]中,研究人员提出了一种在线计算 softmax 的数值方法——通过在线收集归一化项,无需实例化完整的中间产物。

在线 softmax 技术为注意力乘积融合分块提供了可能(图 8(b)),FlashAttention[20](采用轮询分配)、FlashDecoding[38](采用固定拆分分配)、Lean Attention[88]和 FlashInfer[125](采用流式分配)均基于这一思路展开研究。

目前,针对其他注意力变体(主要是稀疏注意力)的下游算子已大量涌现,且大多采用了上述技术。

  • 例如,FlashMask[99]将融合注意力推广到支持注意力掩码(attention masks);
  • 对于任意掩码算子,FlexAttention[24]会根据该算子编译出全新的融合注意力算子。

这种自动生成的算子与 FlashAttention 等手工设计的算子相比,可实现相近的速度提升。

分布式注意力(Distributed Attention)

Ring Attention[63]关注的场景是:注意力算子不仅在单个设备的处理器核心上并行执行,还需在多个设备间分布式部署。该方法首先对 Q 矩阵进行行分块,使每个工作节点设备获得与某一提示片段对应的查询(query)子集;随后对 K 矩阵进行列分块,并将分块后的 K 矩阵分配给各个工作节点。

为计算某一注意力行,每个工作节点需处理所有的 K 矩阵分块,这就需要一种能够协调分块在节点间传输的机制。Ring Attention 采用了一种去中心化机制:工作节点按固定顺序异步传输已处理的输入分块,同时将通信过程与分块处理过程重叠执行,以降低实际开销。图 9 展示了一个简化示例。

3.1.2 其他算子(Other Kernels)

对于 FFN 而言,、和函数均可通过按元素操作实现,因此可将它们流水线化到单个融合算子中。这一特性还允许将 FFN 直接与分块注意力算子融合,从而实现一定程度的延迟降低[62]。

针对其他算子,LightSeq[102]将连续的非矩阵乘法(non-GeMM)操作融合为单个融合算子,设计出了多个手工优化算子,可用于层归一化(layer normalization)、张量重塑(tensor reshaping)、softmax 以及 ReLU 激活函数等操作。与基于厂商算子的实现相比,该方法使得每个 Transformer 块的算子调用次数减少了 4 倍。文献[25,128,129]也采用了类似技术。

除融合算子外,DeepSpeed-Inference[5]还利用 CUDA Graphs,通过单次调用启动多个算子。

3.2 批处理(Batching)

在计算注意力模式(attention pattern)之前,输入嵌入需与权重矩阵、和相乘,以生成低维的查询(query)、键(key)和值(value)向量。这些向量可通过单次矩阵乘积计算得到;对于多个批处理请求,可通过水平拼接权重矩阵、垂直拼接 token 嵌入的方式,批量生成上述向量。同样,这些向量可与 KV 缓存中的向量拼接,形成用于批处理注意力的三维矩阵输入(图 10(a)展示了该技术)。

批处理注意力算子的输入是“不规则的”(ragged)——即每个请求的查询矩阵和键矩阵的长度或宽度不相等——则计算矩阵乘积时会因矩阵稀疏导致处理器核心利用率不足这种情况在解码阶段的请求(KV 缓存大小不同)和预填充阶段的请求(提示长度不同)中频繁出现。另一方面,“突发批处理”(bursting the batch)可避免矩阵稀疏问题,但需为批处理中的每个请求单独启动算子[126](图 10(b))。

此外,批处理的频率和大小还会影响内存超配、拖慢任务导致的延迟等问题。

  • 在静态批处理(static batching)中,批处理内的所有请求需执行至完成后,才会处理下一个批处理,这可能导致拖慢任务延迟整个批处理的完成。而且,由于解码轮次数量未知,静态批处理可能因每轮执行后内存占用增加,导致内存容器超配。
  • 动态批处理[2,126]可缓解拖慢任务的影响,而通过合理控制批大小(结合 3.3 节的任务优先级排序和 4 节的内存管理技术),可避免内存超配问题。
动态批处理(Dynamic Batching)

在静态批处理中,批处理内的所有请求会一起执行并返回,因此它们的延迟看起来相同——即便部分请求早已完成。

  • 为避免拖慢任务延迟批处理完成,(1)连续批处理(continuous batching)会在每个执行轮次后重新构建批处理,而非在所有请求完成后[126](图 11)。这种简单机制使请求执行的可控性更强。例如,若某一执行轮次后批处理中的某个请求已完成,其 KV 缓存可立即被驱逐,为下一个排队请求加入批处理腾出空间(需注意:即使批处理中某一请求仍需后续轮次执行,批处理控制器也可能决定将该请求从批处理中移除(即抢占请求),以腾出空间给更高优先级的请求或回收内存。参见图 11(b)中的情况)。
  • (2)分块预填充(Chunked prefills)将连续批处理的思路扩展到预填充阶段:通过将提示拆分为小块,在多个执行轮次中逐步处理[2]。
批大小(Batch Size)

对于静态批处理,可通过贪心装箱算法(greedy bin-packing)[44]构建批处理。批大小受可用内存限制:批处理中所有请求在所有解码轮次的 KV 缓存和中间产物的最大总内存占用,必须能容纳在内存容器中。

对于动态批处理,即使总内存最终可能超过内存容器容量,批处理仍可执行——因为每轮执行后批处理会重新构建。因此,通过对具有小型 KV 缓存的大量请求进行批处理,可实现极大的批大小。尽管如此,大批次仍会因缓存增长增加抢占风险;而小批次则会降低吞吐量,导致资源利用率不足。大多数推理系统通过离线测试确定一个固定的批大小(如 Orca[126]),或通过固定 token 预算(token budget)(如 Sarathi-Serve[2]),来平衡这两种风险。

3.3 调度(Scheduling)

当请求速率超过系统吞吐量时,新请求必须在队列中等待才能被处理由于队列等待时间会增加请求延迟,请求的处理顺序会通过缩短或延长等待时间来影响延迟。此类任务调度问题在多个领域均有涉及,先来先服务(FCFS)、短任务优先(SJF)、多级队列(MLQ)等经典技术可直接应用于 LLM 推理[51,89,108]。

然而,由于 KV 缓存增长会导致极端且不可预测的内存压力,LLM 推理系统可能面临较高的抢占风险。同时,抢占后的请求恢复成本较高——需通过计算密集型的预填充阶段,或通过带宽密集型的从二级存储/远程存储传输,来恢复丢失的缓存。这些因素推动了动态提升机制(dynamic promotion mechanisms)[28,49,89,108]的发展,旨在避免高昂的抢占成本;相关恢复机制将在 4.2 节中讨论。

此外,配备多个推理副本的系统(5.2 节)还需负载均衡机制来分配请求,例如采用贪心最小负载分配策略[49,65]。为弥补负载预测的不准确性,可采用动态再平衡技术,根据工作节点状态变化迁移请求[65,95]。对于支持缓存共享的系统(4.4 节),缓存可用性也可用于指导负载均衡决策——最大化缓存共享机会有助于降低整体负载[14,82,94,136]。

任务优先级排序(Job Prioritization)

请求优先级不仅决定了请求的处理顺序,还会影响与内存相关的抢占行为——优先级最低的请求通常是被抢占的对象。请求抢占通过移除被抢占请求对应的缓存条目,来缓解内存压力。但在恢复请求时,需重新获取缓存条目:是通过重新计算,还是从卸载容器中读取,需根据缓存大小等因素决定[51]。

  • 在(1)先来先服务(FCFS)策略中,队列中等待时间更长的请求会获得更高优先级,但该策略可能导致“队首阻塞”(head-of-line blocking)——早期到达的长时请求可能会延迟后续短时请求的执行(这些短时请求本可快速完成)。
  • (2)短任务优先(SJF)策略可避免这一问题,并实现最小平均延迟,但需准确预测解码轮次数量(负载预测将在 3.4 节中集中讨论)。此外,SJF 还存在任务饥饿风险:预测轮次较多的请求可能因新到达的短轮次请求而不断被降级。为避免饥饿,可从物理层面限制请求被降级的次数[89];或者,将长等待时间[28,49,108]或高恢复成本[89]作为提升指标,人为提高原本长期处于低优先级的请求的优先级。
  • 另一方面,若无法获取准确的任务完成时间,可采用(3)多级队列(MLQ)策略模拟 SJF:通过逐步降低长时请求的优先级,而非依赖固定优先级。在文献[108]中,该技术被应用于 LLM 推理:根据提示长度为新请求分配初始优先级,随后根据生成的输出 token 数量,逐步降低每个活跃请求的优先级。**
  • 除上述经典调度技术外,由于计算 KV 向量的成本高昂,对于支持缓存共享的系统,(4)基于缓存的策略(cache-based policies)应运而生。这类策略通过优先处理特定请求来最大化缓存命中率,从而避免缓存抖动(cache thrashing)[66,96,136]。
负载均衡(Load Balancing)

当所有工作节点的最大负载(以总计算开销衡量)达到最小值时,即实现了最优负载均衡。

若已知分配各类任务所产生的负载,将到达的任务贪婪地分配给负载最小的工作节点,在最坏情况下,其最大负载(即完工时间,makespan)至多为最优解的 2 倍。贪心负载均衡的合理性能使其在多副本推理系统中得到广泛应用,但同时也不可避免地需要进行负载预测。

然而,KV 缓存随时间增长导致的负载动态变化,以及请求抢占、恢复和自然终止带来的内存波动,均增加了负载预测的复杂性。由于负载预测对调度和负载均衡均至关重要,相关技术将在 3.4 节中集中讨论。除降低完工时间外,还可通过请求分配最大化缓存命中率,以充分利用缓存共享[14,82,94,136]。

为弥补负载预测的不准确性,可定期对请求进行再平衡。

  • 在文献[65]中,根据解码阶段请求 KV 缓存大小的变化,对请求进行再平衡。
  • 为更准确地描述工作节点负载,为每个工作节点设置缓存大小限制:缓存大小限制较高的工作节点可分配少量长时请求(以避免内存相关的抢占),而缓存大小限制较低的工作节点可分配大量短时请求(因抢占风险较低)。
  • 初始时,根据前缀长度将请求分配给工作节点;
  • 但随着解码轮次增加导致缓存大小增长,当请求缓存超过特定大小阈值时,会将其再平衡到更合适的工作节点。
  • 在文献[95]中,通过按负载构建工作节点对,定期对请求进行再平衡将请求从负载较高的节点迁移到负载较低的节点,直至两个节点的负载达到平衡。

3.4 讨论

硬件加速器已被充分利用来开发高效算子以加速 LLM 推理,但负载预测仍是一项紧迫的挑战。与之相关的问题是动态批处理场景下的最优批大小选择

  • 大批次可提高吞吐量,但会增加内存相关的抢占风险;
  • 小批次则可能导致计算资源利用率不足。

现有系统通常会设定一个 token 预算,将批大小动态调整至该预算上限。但这种方法更多是为了通过动态批处理实现 TTFT(首 token 时间)和 TBT( token 间时间)的平衡,而非平衡吞吐量与计算资源容量。为实现后一目标,现有系统需通过离线测试来设定预算(如 Sarathi-Serve[2])。

在负载预测方面,一种思路是训练预测模型。为实现高预测精度:

  • 文献[29]训练了一个小型 OPT-125M 模型[132],用于预测给定提示与其输出长度的相对排序(而非精确长度)——该方法被证明比直接预测长度能实现更稳健的调度
  • 文献[44]采用了类似思路,但使用 DistilBERT[87]模型,训练目标是选择包含输出长度的数值范围(而非预测提示排序)。
  • 除语言模型外,文献[89]还利用 LLM 的激活值作为特征,训练了一个专用多层感知机(MLP)用于负载预测
  • 在文献[137]中,研究人员通过在提示后附加特殊前缀,直接利用 LLM 自身进行长度预测。鉴于负载预测的难度,需注意:针对特定应用的推理系统可采用“前端-执行运行时”协同设计的方式,对输出进行约束,从而实现对输出长度的高精度预测。这一策略将在后续 5.2 节中详细阐述。

这类负载预测结果可直接用于 SJF 调度;但要将其用于负载均衡,还需考虑其他影响工作节点负载波动的因素。例如,文献[49]将请求内存占用预测与预估内存回收速率相结合,以更积极地衡量内存可用性;Mooncake[82]采用了类似方法,同时还考虑了 KV 缓存传输所损失的时间。

最后

为什么要学AI大模型

当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!

DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。

在这里插入图片描述

与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。
在这里插入图片描述
最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

AI大模型系统学习路线

在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。

img

但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。

AI大模型入门到实战的视频教程+项目包

看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径

在这里插入图片描述
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

海量AI大模型必读的经典书籍(PDF)

阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
在这里插入图片描述

600+AI大模型报告(实时更新)

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
在这里插入图片描述

AI大模型面试真题+答案解析

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下
在这里插入图片描述

在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

Logo

更多推荐