3. 大模型推理基础

大模型推理(Inference)与训练在计算模式上有着本质区别。训练阶段是前向传播与反向传播的反复迭代,而推理阶段则是一次前向传播的“快照”,其核心目标是在满足延迟(Latency)和吞吐量(Throughput)约束的前提下,尽可能高效地利用GPU资源。要深入理解DeepSpeed推理引擎的优化策略(如内核融合、张量并行、显存优化),首先必须透彻理解Transformer的解码机制、自回归生成的过程瓶颈,以及KV Cache这一“空间换时间”的核心技术。本章将系统梳理这些基础概念,并建立衡量推理性能的关键指标体系。

Transformer 解码器推理链路与性能指标 自回归生成循环 输入 序列 Transformer 解码 Softmax 概率 采样下一个 循环直到 EOS 或最大长度 KV Cache 机制 Prefill 阶段:计算并存储 K/V Decode 阶段:仅计算新 的 K/V 显存占用 = 2 × 层数 × 头数 × 维度 × 序列长度 核心性能指标 TTFT:首 延迟 TPOT:每 输出时间 吞吐量:Tokens/s / Requests/s DeepSpeed 推理优化方向 内核融合(Kernel Fusion) 张量并行(Tensor Parallel) 显存管理(KV Cache 分区) 动态批处理(Dynamic Batching) 图:Transformer 解码器推理的核心链路——自回归循环、KV Cache 与性能指标的关系

上图展示了本章的核心知识框架:自回归生成是推理的基本逻辑,KV Cache 是决定推理效率的关键工程手段,而延迟与吞吐量则是衡量系统性能的最终标尺。DeepSpeed 的所有优化技术,本质上都是在围绕这三者进行权衡与改进。

3.1 Transformer 架构与推理视角的重新解读

Transformer 架构(Vaswani et al., 2017)由编码器(Encoder)和解码器(Decoder)组成。但在生成式大模型(如 系列、LLaMA、Qwen)中,我们通常只使用解码器部分,并采用“因果掩码”(Causal Mask)确保每个位置只能关注到它之前的 。从推理的角度看,Transformer 解码器层可以简化为两个核心子层:自注意力(Self-Attention)和前馈网络(FFN)。

在推理过程中,每个 的向量表示需要依次经过这两个子层。自注意力机制的计算公式为:

Attention(Q, K, V) = softmax(Q × K^T / √d_k) × V

其中,Q(Query)、K(Key)、V(Value)均由输入向量与对应的权重矩阵相乘得到。在训练阶段,所有 的 Q/K/V 可以并行计算;但在推理阶段,由于自回归特性,我们只能逐个生成 ,这导致计算模式发生了根本变化。

推理视角的关键洞察:对于已经生成的历史 ,它们的 K 和 V 向量在后续步骤中会被反复使用。例如,生成第 100 个 时,需要计算它与前 99 个 的注意力分数。如果每次重新计算前 99 个 的 K/V,计算量将随序列长度呈平方级增长,这是不可接受的。KV Cache 正是为了解决这一问题而引入的缓存机制。

3.2 自回归生成:逐个 的串行过程

自回归生成(Autoregressive Generation)是指模型将自身输出的 作为下一步的输入,循环迭代直到满足终止条件。这个过程可以拆分为两个阶段:

  • Prefill(预填充)阶段:处理用户输入的 Prompt,并行计算所有输入 的 K/V 值,并生成第一个输出 。此阶段计算密集,GPU 利用率较高。
  • Decode(解码)阶段:逐个生成后续 。每步仅输入一个 ,但需要与缓存中的所有 K/V 进行注意力计算。此阶段内存带宽受限,GPU 利用率通常较低。

这种串行特性决定了推理延迟的构成:TTFT(Time To First )主要由 Prefill 阶段决定,而TPOT(Time Per Output )则由 Decode 阶段决定。在实际部署中,我们通常希望 TTFT 尽可能短(用户等待首字响应),同时 TPOT 保持稳定(避免生成卡顿)。

阶段 输入规模 计算特征 瓶颈 对延迟的影响
Prefill 整个 Prompt(如 512 ) 矩阵-矩阵乘法(GEMM),并行度高 计算吞吐(FLOPs) 决定 TTFT
Decode 单 (逐步) 矩阵-向量乘法(GEMV),并行度低 内存带宽(显存读取) 决定 TPOT 和整体生成时长

理解这两个阶段的差异至关重要,因为 DeepSpeed 推理引擎会针对不同阶段采用不同的优化策略。例如,在 Prefill 阶段使用更大的 Batch Size 以提高计算效率,而在 Decode 阶段则通过内核融合减少内存访问次数。

3.3 KV Cache:空间换时间的核心工程

KV Cache 是推理优化中最基础也是最重要的技术。它的核心思想是:在 Prefill 阶段计算并存储所有历史 的 K 和 V 矩阵,在 Decode 阶段直接复用,避免重复计算。

KV Cache 的显存占用可以精确计算:

显存占用(字节) = 2(K 和 V) × 层数 × 注意力头数 × 头维度 × 序列长度 × 精度字节数

以 LLaMA-7B 模型为例(32 层,32 个头,头维度 128,FP16 精度),当序列长度为 2048 时:

KV Cache 大小 = 2 × 32 × 32 × 128 × 2048 × 2 字节 ≈ 1.07 GB

这意味着,仅 KV Cache 一项就可能占用接近模型权重(约 14GB)的显存。对于长序列或大并发场景,KV Cache 的管理成为显存规划的核心挑战。

常见误区:许多初学者认为 KV Cache 是模型的一部分,需要随模型一起保存。实际上,KV Cache 是推理过程中动态生成的临时数据,每次请求都会重新计算。它的生命周期仅存在于单次推理请求中。此外,KV Cache 的大小与 Batch Size 成正比,Batch 越大,显存消耗增长越快。

DeepSpeed 在 KV Cache 管理上提供了多种优化手段,包括:

  • KV Cache 量化:将 FP16 的 K/V 值量化为 INT8,显存占用减半,但需注意精度损失。
  • Paged KV Cache:借鉴操作系统虚拟内存的分页思想,将 KV Cache 分块存储,减少显存碎片。
  • KV Cache 卸载:将不常用的 KV Cache 临时卸载到 CPU 内存,为新的请求腾出 GPU 显存。

3.4 推理延迟与吞吐量:性能的度量衡

在评估推理系统性能时,我们通常关注以下核心指标:

指标 定义 测量方式 优化目标
TTFT 从请求发出到收到第一个 的时间 客户端记录请求时间与首包到达时间差 越小越好,通常要求 < 500ms
TPOT 生成每个输出 的平均时间 总生成时间 / 输出 数 越小越好,通常要求 < 100ms
吞吐量 系统单位时间内处理的 数或请求数 总 数 / 总时间 或 请求数 / 秒 越大越好,体现系统整体效率
并发数 系统同时处理的请求数量 监控系统活跃请求数 在延迟约束下最大化并发

延迟与吞吐量之间存在天然的矛盾:增加 Batch Size 可以提高吞吐量,但会延长每个请求的排队时间和计算时间,导致延迟上升。DeepSpeed 推理引擎通过动态批处理(Dynamic Batching)和连续批处理(Continuous Batching)技术,在两者之间寻找最优平衡点。

实战经验:在压测推理服务时,不要只关注平均延迟。P99 延迟(即 99% 请求的延迟上限)更能反映系统的稳定性。由于自回归生成的串行特性,长尾请求往往由长序列或高并发引起,P99 延迟的优化通常需要结合显存管理和调度策略。

3.5 案例拆解:一个 7B 模型的推理性能分析

假设我们使用单张 A100-80GB GPU 部署 LLaMA-7B 模型,输入 Prompt 长度为 512 ,期望输出 1024 。我们通过实际测量得到以下数据:

  • Prefill 耗时:180ms(TTFT = 180ms)
  • Decode 阶段:共 1024 步,总耗时 8.2 秒,平均 TPOT = 8ms
  • 总延迟:180ms + 8200ms = 8380ms
  • 吞吐量:1024 / 8.38s ≈ 122 /s

通过分析,我们发现 Decode 阶段占据了 97.8% 的时间。进一步使用 nsys 或 ncu 性能分析工具,发现 GPU 的 SM(流式多处理器)利用率仅为 35%,而显存带宽利用率达到 85%。这证实了 Decode 阶段是内存带宽瓶颈。

针对此问题,我们采用 DeepSpeed 的 kernel_injection 策略,将 QKV 投影和注意力计算融合为单个内核,减少显存读写次数。优化后,TPOT 从 8ms 降至 6.2ms,总延迟降至 6.5 秒,吞吐量提升至 157 /s,提升约 28%。

复盘要点:推理性能优化不是盲目堆硬件,而是先定位瓶颈是计算密集还是内存密集。对于 Decode 阶段,任何减少显存访问的优化(如内核融合、量化)都能带来显著收益。同时,KV Cache 的显存占用必须提前规划,否则当并发请求增多时,可能因显存不足导致 OOM(Out of Memory)错误。

3.6 常见误区与总结

在理解大模型推理基础时,以下误区需要特别警惕:

  • 误区一:将训练时的 Batch Size 直接用于推理。训练时大 Batch 有利于梯度计算,但推理时大 Batch 会显著增加 KV Cache 显存占用和 Decode 延迟,需要重新调优。
  • 误区二:忽略 Prefill 阶段的影响。虽然 Prefill 时间占比小,但对于交互式应用(如聊天机器人),TTFT 直接影响用户体验。优化 Prefill 通常需要减少 Prompt 长度或使用更高效的注意力实现(如 FlashAttention)。
  • 误区三:认为 KV Cache 越大越好。KV Cache 本质是“空间换时间”,但显存是有限资源。当 KV Cache 占用超过可用显存时,系统会触发显存交换或重新计算,反而增加延迟。合理的做法是设置最大序列长度和最大并发数,控制 KV Cache 总量。