Skip to content

推理延迟优化策略

推理延迟是影响用户体验的核心指标,包括首 Token 延迟(TTFT)和每 Token 输出延迟(TPOT)。本文系统介绍从模型、系统到应用层的延迟优化策略。

推理延迟优化策略

延迟分解

推理延迟可以分解为:

总延迟 = TTFT + TPOT × output_length

TTFT = 排队延迟 + Prefill 计算延迟
TPOT = Decode 计算延迟 + 通信延迟 + 调度延迟

Prefill 优化(降低 TTFT)

Chunked Prefill

将长 Prompt 的 Prefill 分块执行,避免阻塞 Decode:

python
# vLLM 启用 Chunked Prefill
from vllm import LLM

llm = LLM(
    model="meta-llama/Llama-2-7b-hf",
    enable_chunked_prefill=True,
    max_num_batched_tokens=4096,  # 每步最大 Token 数
)

Prompt 缓存

复用系统提示词的 KV Cache:

  • 系统提示词只计算一次 Prefill
  • 后续请求直接复用,TTFT 降低 50-80%

Decode 优化(降低 TPOT)

批量 Decode

合并多个请求的 Decode 步骤:

python
# 批量推理
from vllm import LLM, SamplingParams

llm = LLM(model="meta-llama/Llama-2-7b-hf")
params = SamplingParams(max_tokens=128)

# 批量提交比逐个提交延迟更低
outputs = llm.generate(
    ["问题1", "问题2", "问题3", "问题4"],
    params,
)

Speculative Decoding

通过小模型推测加速 Decode(详见推测解码)。

算子并行

增加 TP 度可以线性降低单步 Decode 延迟:

TP 度单步延迟通信开销
140ms0
222ms0.5ms
412ms1.0ms

系统层优化

调度优化

python
# 优先级调度
class PriorityScheduler:
    def schedule(self, requests):
        # 按延迟 SLA 排序
        return sorted(requests, key=lambda r: r.sla_deadline)

连接优化

  • 启用 HTTP/2 多路复用减少连接开销
  • 使用 gRPC 替代 REST 降低序列化延迟
  • 就近部署减少网络延迟

延迟预算分配

建议将延迟预算分配为:TTFT < 200ms(交互场景),TPOT < 50ms(流式输出)。总延迟控制在用户可感知阈值(约 1 秒)以内。

延迟与吞吐权衡

许多延迟优化会降低吞吐量(如减小 batch size、增加 TP 度但减少并发)。需要根据业务场景在延迟和吞吐间找到平衡点。

相关资源

最近更新