一、 引言 (Introduction)
大型模型,例如在自然语言处理(NLP)、计算机视觉(CV)、推荐系统和生成式AI等领域取得显著进展的Transformer模型,已经成为现代人工智能的核心驱动力。这些模型拥有令人印象深刻的能力,能够理解复杂的模式并生成高质量的内容。然而,其巨大的参数规模和计算需求给实际应用带来了严峻的挑战,尤其是在推理阶段。高效的推理不仅关乎用户体验,确保低延迟的响应,也直接影响到资源成本,降低计算和存储需求,并使得在实时性要求高的场景(如对话机器人和实时翻译)中部署这些强大的模型成为可能。本文旨在探讨提升大模型推理效率的关键技术和策略,为AI应用的广泛落地提供思路。
二、 大模型推理的计算瓶颈分析 (Computational Bottleneck Analysis of Large Model Inference)
大模型在推理过程中面临多重计算瓶颈,主要体现在以下几个方面:
2.1 计算复杂度问题 (Computational Complexity Issues)
- Transformer 模型的核心组件——自注意力机制,其计算复杂度通常为 O(N²),其中 N是输入序列的长度。对于长文本输入,这种二次方级的增长会带来巨大的计算开销,严重影响推理速度。[1]
- KV 缓存(Key-Value Cache)是优化Transformer推理的一种常用技术,通过缓存先前计算的Key和Value向量,避免重复计算,从而显著加速后续token的生成。然而,随着生成文本长度的增加,KV缓存的体积也会线性增长,带来显存压力。[2]
分块推理(Chunking)等技术被用于处理超长序列,但也会引入额外的管理和切换开销。
2.2 硬件资源限制 (Hardware Resource Limitations)
- GPU/TPU 显存容量约束是限制大模型推理的关键因素。模型的权重参数和中间计算结果都需要存储在显存中。对于参数量巨大的模型,单张卡的显存往往难以满足需求,限制了可以部署的模型大小和批处理大小。
- 多卡推理的通信开销与扩展性问题。为了克服单卡显存的限制,通常需要采用多卡并行推理。然而,在多卡之间同步数据和传递中间结果会产生显著的通信开销,尤其是在模型并行和张量并行等策略中,如何有效地降低通信开销并实现良好的扩展性是一个重要的挑战。[3]
2.3 高并发服务场景 (High-Concurrency Service Scenarios)
- 吞吐量:在大规模用户请求的场景下,系统需要在单位时间内处理大量的推理请求。低效的推理会导致吞吐量瓶颈,无法满足高并发的需求。
- 低延迟:对于实时对话和交互等应用场景,用户对响应时间非常敏感。即使模型能够生成高质量的结果,过高的推理延迟也会严重影响用户体验。
三、 核心优化技术 (Core Optimization Techniques)
为了应对上述计算瓶颈,研究人员和工程师们提出了多种核心优化技术:
3.1 模型压缩 (Model Compression)
3.1.1 知识蒸馏 (Distillation)
- 思维链蒸馏(CoT-KD):传统的知识蒸馏侧重于让小模型学习大模型的最终预测结果,而CoT-KD则更进一步,让小模型学习模仿大模型的推理过程,特别是中间的“思维链”,从而提升小模型的推理能力。[4]
- 多教师协同蒸馏(Multi-Teacher KD):利用多个不同的大模型作为教师,从不同角度指导学生模型的学习,可以更全面地提升学生模型的性能。[5]
3.1.2 量化推理 (Quantization)
- FP16、INT8、INT4 量化方案对比:量化通过降低模型权值和激活的数值精度(例如从FP32到FP16、INT8甚至INT4),来减少模型大小和计算量。不同的量化方案在精度损失和性能提升之间进行权衡。[6]
- GPTQ、AWQ 低比特量化方法:这些是先进的后训练量化(Post-training Quantization)技术,能够在不进行或少量微调的情况下,将模型权重量化到极低的比特数(例如INT4),同时保持较高的模型精度。[7, 8]
3.1.3 稀疏化推理 (Sparse Computation)
- MoE(Mixture of Experts)架构:MoE模型包含多个“专家”子网络,对于每个输入,只有少数几个专家会被激活并参与计算。例如,DeepSeek-MoE和GLaM等模型都采用了这种架构,显著降低了推理时的计算量。[9, 10]
- 权重剪枝、低秩分解(LoRA):权重剪枝通过移除模型中不重要的连接或权重,降低模型的稠密度,从而减少计算量。**低秩分解(LoRA)**则通过引入低秩矩阵来近似原始的权重矩阵,减少参数量和计算量,同时在微调时表现出良好的性能。[11]
3.2 计算优化策略 (Computational Optimization Strategies)
3.2.1 高效注意力机制 (Efficient Attention)
3.2.1.1 FlashAttention:通过重新排列注意力计算的顺序和利用GPU的共享内存,显著提高了Transformer模型的训练和推理速度,尤其是在处理长序列时。[12]
- 原理:标准的自注意力计算在处理长序列时,由于需要计算所有token对之间的相似度,其时间和空间复杂度均为 O(N²),其中 N 是序列长度。这导致在GPU上进行大量的小矩阵乘法和频繁的内存读写,效率低下。FlashAttention 通过分块(tiling)的思想,将注意力计算分解为可以在GPU的快速SRAM中完成的小块计算,并利用重计算(recomputation)技术减少内存占用。正如 Dao 等人在 2022 年提出的 FlashAttention [12] 中所指出的,其核心创新在于通过分块策略和反向计算技术显著减少了内存占用和访存开销,从而在长序列任务上实现了显著的加速。
- 数学公式: 标准注意力计算公式为:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dkQKT)V
FlashAttention 将此计算分解为块:
Attention ( Q , K , V ) i j = softmax ( Q i K j T d k ) V j \text{Attention}(Q, K, V)_{ij} = \text{softmax}(\frac{Q_i K_j^T}{\sqrt{d_k}})V_j Attention(Q,K,V)ij=softmax(dkQiKjT)Vj
其中 Q i , K j , V j Q_i, K_j, V_j Qi,Kj,Vj 是 Q , K , V Q, K, V Q,K,V 的第 i i i 和 j j j 个块。通过迭代地计算这些块,并在每次迭代中更新累积结果,FlashAttention 避免了将整个注意力矩阵存储在高速内存中。 - 代码示例 (简化的 PyTorch 风格):
import torch
import torch.nn.functional as F
def flash_attention_block(Q_block, K_block, V_block, scaling_factor):
attn_weights = torch.matmul(Q_block, K_block.transpose(-1, -2)) * scaling_factor
attn_weights = F.softmax(attn_weights, dim=-1)
output_block = torch.matmul(attn_weights, V_block)
return output_block
# (更复杂的实现涉及累积和归一化,这里简化展示核心思想)
3.2.1.2 Grouped Query Attention(GPT-4):通过将多个query head共享同一个key和value head,减少了KV缓存的大小和计算量,从而提高了推理效率。[13]
- 原理: 在标准的多头注意力中,每个query head 都对应一个独立的 key head 和 value head。GQA 减少了 key 和 value head 的数量,使得多个 query head 共享同一组 key 和 value head。这显著减小了 KV 缓存的大小,并减少了计算量,尤其是在生成长序列时,KV 缓存的增长是推理速度的瓶颈之一。正如 Ainslie 等人在 2023 年提出的 GQA [13] 中所指出的,通过减少 key 和 value head 的数量,GQA 可以在保持模型性能的同时,显著降低 KV 缓存的存储需求和访存开销。
- 数学公式: 假设有 H H H 个 query heads,但只有 H k < H H_k < H Hk<H 个 key heads 和 H v < H H_v < H Hv<H 个 value heads。query head i i i 使用 key head i m o d H k i \mod H_k imodHk 和 value head i m o d H v i \mod H_v imodHv。这降低了存储 KV 缓存所需的空间。
3.2.1.3 Long-Context Attention(Mamba、Hyena):这些新型的架构旨在替代Transformer的自注意力机制,以实现更高效的长序列建模,具有线性的计算复杂度。[14,15]
-
Mamba:
- 原理: Mamba 是一种基于选择性状态空间模型(Selective State Space Models, SSSMs)的新型架构,旨在克服 Transformer 在处理长序列时的 O(N²) 复杂度。SSSMs 通过一个循环机制处理序列,其计算复杂度为 O(N)。选择性是指模型可以根据当前输入动态地调整其内部状态的演化方式,从而更好地捕捉长距离依赖。正如 Gu 等人在 2023 年提出的 Mamba [14] 中所强调的,其核心创新在于选择性机制和线性时间复杂度,使其在处理极长序列时具有显著优势。
- 数学公式: Mamba 的核心是以下状态空间方程:
h ′ ( t ) = A ( x ( t ) ) h ( t ) + B ( x ( t ) ) x ( t ) \mathbf{h}'(t) = \mathbf{A}(x(t)) \mathbf{h}(t) + \mathbf{B}(x(t)) x(t) h′(t)=A(x(t))h(t)+B(x(t))x(t)
y ( t ) = C ( x ( t ) ) h ( t ) y(t) = \mathbf{C}(x(t)) \mathbf{h}(t) y(t)=C(x(t))h(t)
其中 x ( t ) x(t) x(t) 是输入, h ( t ) \mathbf{h}(t) h(t) 是隐藏状态, A , B , C \mathbf{A}, \mathbf{B}, \mathbf{C} A,B,C 是依赖于输入的参数。通过精心设计这些参数和状态更新机制,Mamba 实现了高效的长序列建模。
-
Hyena:
- 原理: Hyena 采用基于长卷积的操作来建模长距离依赖。与标准的局部卷积不同,Hyena 使用的卷积核可以覆盖非常长的输入序列。为了提高效率,Hyena 通常使用快速傅里叶变换(FFT)等技术来实现长卷积。正如 Poli 等人在 2023 年提出的 Hyena [15] 中所展示的,通过精心设计卷积核的参数化方式,Hyena 可以在某些长序列任务上达到与 Transformer 相当甚至更好的性能,同时具有更好的扩展性。
- 数学公式: Hyena 的核心操作可以表示为输入序列
x
x
x 和一个长卷积核
k
k
k 的卷积:
y = x ∗ k y = x * k y=x∗k
其中卷积核 k k k 的设计允许模型捕获长距离的上下文信息。
以下是图中各部分的详细解释:
-
输入 u u u:这是输入数据,可以是任何需要处理的信号或特征图。
-
Dense层:输入首先通过一个全连接层(Dense),这通常用于将输入映射到一个更高维的空间。
-
Hyena Recurrence(Hyena递归):
- 每个递归步骤包括两个主要操作:应用Toeplitz矩阵 S h n S_h^n Shn和对角矩阵 D x n D_x^n Dxn。
- S h n S_h^n Shn 表示Hyena算子中的隐式长卷积,它可以通过前馈网络参数化。这个矩阵用于捕捉输入数据中的长距离依赖关系。
- D x n D_x^n Dxn 是一个对角矩阵,它根据输入 u u u 动态调整,从而实现数据控制的乘法。
-
Hyena Filters h n h^n hn:右侧的小图详细解释了Hyena滤波器的结构:
- Window:可能指的是窗口函数,用于限制卷积操作的上下文范围。
- FFN(前馈网络):用于参数化Hyena滤波器,可能包括多层感知机或其他非线性变换。
- PositionalEncoding(位置编码):用于为输入添加位置信息,这在处理序列数据时特别重要。
-
输出 y y y:经过一系列Hyena递归步骤后,最终输出结果。
Hyena算子的特点:
- 参数规模:Hyena算子在序列长度上表现出次线性的参数规模,这意味着它可以处理非常长的序列而不会显著增加参数数量。
- 上下文无关:与注意力机制类似,Hyena可以处理无限制的上下文,这使得它在处理自然语言处理等任务时非常有效。
- 时间复杂度:尽管Hyena提供了强大的功能,但它的时间复杂度相对较低,这使得它在实时或资源受限的应用中更具吸引力。
总的来说,Hyena算子通过结合隐式长卷积和数据控制的乘法操作,提供了一种高效且灵活的方式来处理序列数据,特别是在需要捕捉长距离依赖关系的场景中。
3.2.2 推测式推理 (Speculative Decoding)
- 原理: 推测式推理旨在通过减少调用计算成本较高的主模型的次数来加速生成。假设主模型 M l a r g e M_{large} Mlarge 的推理成本远高于草稿模型 M s m a l l M_{small} Msmall。推测式解码通过 M s m a l l M_{small} Msmall 快速生成 k k k 个候选 token,然后用 M l a r g e M_{large} Mlarge 一次性验证这 k + 1 k+1 k+1 个 token(包括上下文)。
- 加速比: 理想情况下,如果草稿模型的准确率高,每次验证能接受 a a a 个 token( 1 ≤ a ≤ k + 1 1 \le a \le k+1 1≤a≤k+1),那么相比于每次都用 M l a r g e M_{large} Mlarge 生成一个 token,推测式推理的有效生成步长可以提升到 a a a。如果 M s m a l l M_{small} Msmall 的成本是 c s m a l l c_{small} csmall, M l a r g e M_{large} Mlarge 的成本是 c l a r g e c_{large} clarge,那么生成 a a a 个 token 的成本大约是 c s m a l l × k + c l a r g e c_{small} \times k + c_{large} csmall×k+clarge,而传统方法需要 a × c l a r g e a \times c_{large} a×clarge。当 k k k 较小且 a a a 接近 k + 1 k+1 k+1 时,可以获得显著的加速。
- 过程:
1. 使用草稿模型基于当前上下文生成 k k k 个预测token。
2. 使用验证模型对包含这 k k k 个预测token的序列进行验证。
3. 根据验证结果接受或拒绝预测的token。
3.2.3 条件计算 (Conditional Computation)
- 早退出机制(Early Exiting):Bolukbasi 等人在 2017 年的研究 [17] 提出了这种自适应计算的思想。
-
原理: 对于一个 L L L 层的模型,早退出机制允许在中间层 l < L l < L l<L 就进行预测。这通常需要在这些中间层添加额外的分类器或回归头。对于某些输入 x x x,如果中间层 l l l 的输出 h l ( x ) h_l(x) hl(x) 经过退出分支得到的预测 y l y_l yl 的置信度 C ( y l ) C(y_l) C(yl) 超过某个阈值 τ \tau τ,则可以提前终止计算。
-
节省的计算量: 如果提前在第 l l l 层退出,则可以节省后续 L − l L-l L−l 层的计算量。这对于大量简单样本的推理可以带来显著的平均延迟降低。
-
实现: 模型在某些中间层添加退出点,并在这些点计算一个置信度分数。如果置信度超过预设的阈值,则直接输出结果。
-
- 选择性计算路径(Dynamic Token Skipping):
- 原理: 动态 token 跳过基于每个 token 的“重要性”动态调整计算路径。例如,可以引入一个“跳过”机制,对于某些 token,模型可以选择性地跳过某些 Transformer block 的计算。token 的重要性可以通过注意力权重、梯度或其他指标来衡量。
- 节省的计算量: 如果一个序列长度为 N N N 的输入中有 m m m 个 token 被跳过了 d d d 个计算层,那么总共节省了 m × d m \times d m×d 个 token-层 的计算量。
3.3 系统级优化 (System-Level Optimization)
3.3.1 显存优化策略 (Memory Optimization Strategies)
-
分块 KV 缓存(PagedAttention):PagedAttention 将KV缓存分割成固定大小的块,并像操作系统的内存分页一样管理这些块,从而更有效地利用显存,减少碎片化,并支持更大的上下文长度。[18]
- 原理: PagedAttention 的核心在于将 KV 缓存视为一系列固定大小的内存页(pages)。每个逻辑上的 KV 缓存(对应一个推理请求)由一个或多个不连续的物理页组成,通过页表进行管理。
- 内存效率: 假设每个请求的 KV 缓存大小为 S r e q S_{req} Sreq,页大小为 B p a g e B_{page} Bpage。传统方法可能需要分配一个连续的 S r e q S_{req} Sreq 大小的内存块,容易导致碎片。PagedAttention 则按需分配大小为 B p a g e B_{page} Bpage 的页,总共需要 ⌈ S r e q / B p a g e ⌉ \lceil S_{req} / B_{page} \rceil ⌈Sreq/Bpage⌉ 个页。即使不同请求的 S r e q S_{req} Sreq 不同,只要有足够的空闲页,就能满足需求,从而提高了整体的显存利用率。
- 支持更长上下文: 由于避免了碎片化,可以更容易地分配到所需的连续页,从而支持更长的上下文。
-
ZeRO-Offload / DeepSpeed 推理优化:DeepSpeed 等框架提供了多种推理优化技术,包括将部分模型参数或中间计算结果卸载到CPU内存,以缓解GPU显存压力。[19]
- 原理: ZeRO-Offload 将模型的参数、梯度和优化器状态等从 GPU 显存卸载到 CPU 内存,从而突破 GPU 显存容量的限制。在推理时,DeepSpeed 提供了多种并行化策略。
- 模型并行: 将模型的不同层分配到不同的 GPU 上。如果模型有 L L L 层,使用 P P P 张 GPU,理想情况下每张 GPU 只需要存储 L / P L/P L/P 的模型参数。
- 张量并行: 将模型中的张量(例如,注意力矩阵、权重矩阵)分割到多张 GPU 上进行计算。对于一个大小为 S S S 的张量,在 P P P 张 GPU 上进行张量并行,每张 GPU 只需要存储 S / P S/P S/P 的部分。
- 吞吐量提升: 通过并行计算,可以显著提高单位时间处理的请求数量。
3.3.2 请求批处理 (Request Batching)
-
动态批处理(Dynamic Batching)OpenAI ChatGPT 服务器端优化策略[20]
- 原理: 动态批处理将多个独立的推理请求组合成一个批次,利用 GPU 的并行计算能力同时处理。
- 吞吐量: 假设 GPU 处理一个批次大小为 N b a t c h N_{batch} Nbatch 的请求所需的时间为 T b a t c h T_{batch} Tbatch,那么系统的吞吐量可以达到 N b a t c h / T b a t c h N_{batch} / T_{batch} Nbatch/Tbatch。相比于串行处理每个请求,批处理可以显著提高吞吐量。动态批处理的优势在于可以根据实际负载情况灵活调整批次大小,避免因等待固定大小的批次而造成的延迟。
- OpenAI ChatGPT 服务器端优化策略: 虽然具体的实现细节可能不公开,但可以推测像 ChatGPT 这样的大规模在线服务肯定采用了动态批处理等技术来处理海量的用户请求。[20]
-
多用户请求合并计算(Tensor Parallelism):在多卡环境下,可以将不同用户的请求在张量层面进行并行计算,进一步提高效率。
3.3.3 流水线并行 (Pipeline Parallelism) TGI(Text Generation Inference)
- 原理: 将模型按层划分为多个阶段,每个阶段分配给一个 GPU。推理请求像流水线一样在不同 GPU 之间传递。
- 吞吐量: 假设模型被划分为 P P P 个阶段,每个阶段的处理时间大致相同为 T s t a g e T_{stage} Tstage。在流水线填满后,理想情况下每个 T s t a g e T_{stage} Tstage 时间间隔就能完成一个推理请求,从而将吞吐量提升到接近 1 / T s t a g e 1/T_{stage} 1/Tstage。
- TGI(Text Generation Inference)优化方案: TGI 实现了高效的流水线并行,并结合了张量并行等其他优化手段,以实现高性能的文本生成服务。[21]
四、 实际应用案例 (Case Studies and Examples)
- 4.1 针对特定任务的优化案例
- 例如,通过知识蒸馏和量化,可以将大型语言模型压缩到可以在移动设备上运行的大小,实现本地化的问答和文本生成功能。
- 例如,在实时翻译场景中,利用高效注意力机制和推测式推理可以显著降低翻译延迟,提升用户体验。
- 4.2 不同硬件平台上的推理性能对比
- 对比在不同型号的GPU、TPU和FPGA上运行相同大模型的推理性能,可以帮助用户选择最适合其需求的硬件平台。
- 4.3 云端和边缘端的推理部署策略
- 讨论如何在云端利用大规模的计算资源进行高吞吐量的推理服务,以及如何在资源受限的边缘设备上部署轻量级的优化模型。
五、 未来趋势与展望 (Future Trends and Outlook)
大模型高效推理仍然是一个快速发展的领域,未来的趋势可能包括:
- 5.1 新型硬件架构的出现:例如,光子计算和类脑计算等新兴硬件架构有望在未来提供更高的计算效率和更低的能耗。
- 5.2 更高效的模型压缩和加速技术:研究人员将继续探索更先进的模型压缩算法和推理加速技术,以进一步降低模型大小和提高推理速度,同时尽量减少精度损失。
- 5.3 软硬件协同优化:未来的优化将更加注重软硬件的协同设计,充分发挥硬件的特性,并针对特定硬件进行软件优化。
- 5.4 面向特定应用场景的推理优化:针对不同的应用场景(如对话、搜索、生成等),将会有更多定制化的推理优化方案出现。
六、 结论 (Conclusion)
提升大模型的推理效率是推动AI技术广泛应用的关键。本文讨论了推理过程中面临的计算瓶颈,并详细介绍了模型压缩、计算优化策略和系统级优化等核心技术。通过结合实际应用案例和展望未来趋势,我们可以看到,随着技术的不断进步,大模型的高效推理将不再是阻碍其落地的主要障碍,AI将在更多领域发挥其巨大的潜力,为人类带来更智能、更便捷的服务。
内容同步在我的微信公众号: 智语Bot
参考文献 (References):
[1] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., … & Polosukhin, I. (2017). Attention is all you need
[2] Gehring, J., Auli, M., Grangier, D., & Dauphin, Y. N. (2017). Convolutional sequence to sequence learning.
[3] Narayanan, D., Shoeybi, M., Bhatnagar, A., Kulkarni, S., Paul, A., Patwary, M., … & Catanzaro, B. (2021).Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM.
[4] Wei, J., Wang, X., Schuurmans, D., Bosma, M., Xia, F., Chi, E. H., … & Zhou, D. (2022). Chain of thought prompting elicits reasoning in large language models. arXiv preprint arXiv:2201.11903.
[5] Zhou, L., Zhai, X., & Tan, C. (2020). Rethinking the value of network pruning. arXiv preprint arXiv:2010.07618.
[6] Gholami, A., Kim, S., Dong, Z., Yao, Z., Mahoney, M. W., & Keutzer, K. (2021). A survey of quantization methods for efficient neural network inference.
[7] Frantar, E., Alistarh, D., & Hoefler, T. (2022). GPTQ: Accurate post-training quantization for generative pre-trained transformers. arXiv preprint arXiv:2210.17323.
[8] Lin, J., Li, R., Chen, W., Han, K., & Mao, H. (2023). AWQ: Activation-aware Weight Quantization for Low-bit Wide Model Compression.
[9] Shazeer, N., Mirhoseini, A., Maziarz, K., Davis, A., Leang, Q., Hinton, G., & Dean, J. (2017). Outrageously large neural networks: The sparsely-gated mixture-of-experts layer. arXiv preprint arXiv:1701.06538.
[10] Du, Y., Li, B., Liu, X., Fan, Y., Tan, R., Shao, L., & Qin, T. (2022). Glam: Efficient scaling of language models with mixture-of-experts.
[11] Hu, E. J., Shen, Y., Lin, Z., Belkin, S., Liu, A., Matusevych, O., … & Chen, Y. (2021). LoRA: Low-Rank Adaptation of Large Language Models. arXiv preprint arXiv:2106.09685.
[12] Dao, T., Fu, D. Y., Ermon, S., Rudra, A., & Ré, C. (2022). Flashattention: Fast and memory-efficient exact attention with io-awareness. arXiv preprint arXiv:2205.14135.
[13] Ainslie, J., Dehghani, M., Hayakawa, S., Wang, Y., & Young, A. (2023). GQA: Training generalized multi-query attention using only 64k parameters. arXiv preprint arXiv:2305.13245.
[14] Gu, A., Goel, K., & Ré, C. (2023). Mamba: Linear-time sequence modeling with selective state spaces. arXiv preprint arXiv:2312.00752.
[15] Poli, M., Massaroli, M., Ryali, A., Schwier, J., Haywood, N., Schlag, I., … & Dao, T. (2023). Hyena hierarchy: Towards larger convolutional language models. arXiv preprint arXiv:2302.10813.
[16] Chen, S., Bubeck, S., Kuutti, I., Li, A., Logacheva, I., Singh, M., … & Zhang, Y. (2023). Speculative Decoding for Large Language Models. arXiv preprint arXiv:2305.08854.
[17] Bolukbasi, T., Wang, O., Saligrama, V., & Kalai, A. T. (2017). Adaptive neural networks for efficient inference.
[18] Kwon, Y., Kim, M., Kim, S., Choi, J., Kim, D., & Shin, D. (2023). Efficiently Scaling Transformer Inference. arXiv preprint arXiv:2309.05518.
[19] Rasley, J., Rajbhandari, S., Ruwase, O., & He, Y. (2020). ZeRO: Memory optimizations toward training trillion parameter models.
[20] OpenAI. (2023). ChatGPT: Optimizing Language Models for Dialogue. https://openai.com/blog/chatgpt (Note: This is a blog post, specific technical details on dynamic batching might not be fully disclosed, but it’s a well-known strategy employed by OpenAI.)
[21] Sagharuchi, L., Cernuzzi, G., Müller, T., von Werra, L., & Rush, A. M. (2023). Text Generation Inference: Toolkit for high-performance text generation. https://github.com/huggingface/text-generation-inference?tab=readme-ov-file