AI推理基础:模型推理流程、延迟来源分析与性能指标

2.1 模型推理的完整流程

AI推理(Inference)是指将训练完成的模型部署到生产环境,对新的输入数据执行前向计算并产生预测结果的过程。与训练阶段不同,推理阶段对延迟和吞吐有极高要求,且模型参数已固定,不再进行梯度回传。理解推理流程是定位延迟瓶颈的第一步。

一个典型的在线推理请求从客户端发出到最终返回结果,需要经过以下环节:

  1. 客户端请求:用户请求以HTTP/gRPC/WebSocket等协议发送至推理服务网关。
  2. 网关路由与鉴权:负载均衡、API密钥校验、请求限流等前置逻辑。
  3. 请求预处理:包括反序列化、文本清洗、图像解码、缩放归一化、Tokenization(将文本转为token ID序列)等。
  4. 模型前向计算:核心环节,即张量在神经网络各层中依次传播,执行矩阵乘法、卷积、注意力计算等算子。
  5. 后处理与解码:对模型输出的logits进行softmax、argmax、贪心/束搜索解码,或对检测框做NMS(非极大值抑制)。
  6. 响应返回:将结果序列化并通过网络回传客户端。

下图展示了这一完整链路及各阶段可能引入的延迟分量:

客户端请求 HTTP/gRPC 网络 网关/路由 鉴权·限流 负载均衡 预处理 Tokenize/解码 归一化/缩放 模型前向计算 Embedding层 Transformer Block ×N MatMul / Attention Norm / FFN 后处理/解码 Softmax/argmax 束搜索/NMS 延迟构成分析 网络RTT 网关 预处理 模型计算(通常占60%~90%总延迟) 后处理 响应序列化 ▸ 模型计算延迟 = 单Token生成延迟 × 输出Token数(自回归模型) ▸ Prefill阶段(处理输入)与Decode阶段(逐Token生成)延迟特征不同 ▸ 批处理(batching)可摊薄部分固定开销,但会增加单请求排队延迟

2.2 延迟来源深度分析

推理延迟并非均匀分布,不同来源的延迟具有截然不同的优化空间。我们将延迟来源分为以下四类:

延迟类别 典型占比 主要成因 优化方向
计算延迟 50%~80% 矩阵乘法、注意力计算、激活函数等算子执行时间 算子融合、量化、剪枝、TensorRT等编译优化
访存延迟 10%~30% 模型参数从HBM/DRAM加载到SRAM/寄存器的带宽瓶颈 KV Cache、内存池复用、权重共享、FlashAttention
通信延迟 5%~15% 多卡/多机张量并行时的All-Reduce、All-to-All通信 通信与计算重叠、梯度压缩、拓扑优化
调度与排队延迟 5%~20% 请求排队、动态批调度、GPU资源争抢、CPU-GPU数据拷贝 连续批处理、抢占调度、异步流水线

以自回归语言模型(如GPT类)为例,其推理延迟可进一步拆解为两个阶段:

  • Prefill(预填充)阶段:处理完整的输入提示词(Prompt),并行计算所有输入token的KV状态。该阶段属于计算密集型(compute-bound),延迟与输入长度近似线性相关。
  • Decode(解码)阶段:逐token生成输出,每个token依赖前一个token的输出。该阶段属于访存密集型(memory-bound),因为每步仅计算一个token,但需读取全部模型权重(如7B模型约14GB权重),GPU算力利用率往往不足5%。

关键公式:单请求总延迟 ≈ Prefill延迟 + Decode延迟 × 输出Token数 + 网络/调度开销

总延迟 = T_prefill(input_len) + T_decode × output_tokens + T_overhead

其中T_decode通常为10~50ms/token(取决于模型规模与硬件),这也是为什么长输出任务对延迟优化更敏感。

2.3 核心性能指标:延迟、吞吐与效率

评估AI推理系统性能不能只看单一指标,需要从用户体验、系统产能和成本效率三个维度综合衡量。以下是业界最常用的指标:

2.3.1 延迟类指标

  • 首Token延迟(TTFT, Time To First Token):从请求发出到收到第一个输出token的时间。直接影响用户“感觉系统快不快”,通常要求小于500ms~1s。
  • 单Token生成延迟(TPOT, Time Per Output Token):Decode阶段生成每个token的平均耗时,决定输出流畅度。
  • 端到端延迟(E2E Latency):完整请求从发起到全部输出结束的总时间。

2.3.2 吞吐类指标

  • 吞吐量(Throughput):单位时间内系统能处理的请求数或生成的token数,常用“requests/s”或“tokens/s”表示。
  • 并发数(Concurrency):系统同时处理的请求数量,与吞吐量强相关。

2.3.3 效率与成本指标

  • 算力利用率(MFU, Model FLOPs Utilization):实际计算量占硬件理论峰值算力的比例。Decode阶段MFU通常极低(<5%),是优化重点。
  • 每Token成本:单位token生成所需的硬件成本或能耗,用于评估经济性。

实践建议:在优化延迟时,务必同时关注TTFT和TPOT两个指标。例如,某系统将TTFT从800ms优化到200ms,但TPOT从20ms恶化到40ms,对于输出1000 token的请求,总延迟反而增加了约20秒。优化必须从用户可感知的端到端体验出发。

2.4 案例:一个典型LLM推理请求的延迟拆解

假设我们部署了一个7B参数的LLM(FP16精度,权重约14GB),运行在单张NVIDIA A100(80GB HBM,峰值算力312 TFLOPS,HBM带宽2TB/s)上。输入提示词为500 token,输出为200 token。

实测各阶段延迟如下:

阶段                    耗时          占比
网络传输(RTT)            5 ms          0.6%
网关鉴权+路由            3 ms          0.4%
预处理(Tokenize)         2 ms          0.2%
Prefill(500 token)      180 ms        21.4%
Decode(200 token)       640 ms        76.1%   (平均3.2ms/token)
后处理+序列化            6 ms          0.7%
响应传输                 4 ms          0.5%
----------------------------------------------
端到端总延迟             840 ms        100%

分析结论:

  • Decode阶段占总延迟的76%,是绝对瓶颈。虽然3.2ms/token已接近A100上7B模型的访存理论上限(14GB / 2TB/s ≈ 7ms,实际通过算子优化达到3.2ms),但仍有优化空间。
  • Prefill阶段180ms,对于500 token输入,吞吐约2778 token/s,属于正常水平。
  • 网络与预处理开销仅占1.2%,优化价值有限。

针对该案例,可采取的优化策略包括:

  1. 量化到INT8/INT4:将权重从FP16压缩至INT8,访存数据量减半,Decode延迟可降低约40%。
  2. 使用KV Cache:避免重复计算历史token的Key/Value,Prefill阶段可提速数倍。
  3. 连续批处理(Continuous Batching):在Decode阶段同时处理多个请求,提高GPU利用率,摊薄固定开销。

2.5 常见误区与复盘

误区一:只优化模型计算,忽略访存瓶颈。很多团队一上来就做算子融合或图优化,却发现收益有限。实际上,对于Decode阶段,访存带宽才是硬约束。先分析是compute-bound还是memory-bound,再决定优化手段。

误区二:用平均延迟掩盖长尾问题。P99延迟(99%请求的延迟上限)比平均延迟更能反映用户体验。在批处理场景中,个别大请求可能阻塞其他小请求,导致P99急剧恶化。应同时监控P50、P95、P99延迟。

误区三:盲目增大Batch Size提升吞吐,牺牲TTFT。增大batch可以提升吞吐,但会线性增加排队等待时间。对于在线交互场景,TTFT超过2秒用户就会明显感到卡顿。需要根据业务SLA动态调整batch策略。

复盘要点:在优化推理延迟前,务必先建立完整的延迟拆解工具链——记录每个阶段的耗时、GPU利用率、显存带宽利用率等指标。没有量化数据支撑的优化往往事倍功半。建议使用nsys、ncu(NVIDIA工具)或py-spy(Python进程分析)进行性能剖析,定位真实瓶颈后再动手优化。