跳转到内容

SLO 与容量规划

推理服务的两个核心问题:承诺什么(SLO:延迟与可用性的量化目标)与需要多少资源(容量规划:满足 SLO 要多少卡)。两者是一枚硬币的两面——SLO 定了,容量就是数学题;SLO 含糊,容量就是玄学。本章给一套从 SLO 到容量的完整方法。

推理服务的 SLO 由三个延迟指标 + 可用性组成(见连续批处理的指标定义):

指标含义典型 SLO(对话类服务)
TTFT首 token 延迟P50 < 500ms,P99 < 2s
TPOT每 token 间隔P50 < 50ms,P99 < 150ms
吞吐系统总吞吐SLO 约束下的最大值
可用性服务成功率99.9%(每月 ~43 分钟故障预算)

三条设计原则:

一、用 P99 而不是均值:用户体验由长尾决定——"平均 200ms、P99 5s"的服务用户感知是慢。SLO 写 P99(甚至 P99.9),监控画分布。

二、TTFT 与 TPOT 分开承诺:prefill(排队+大计算)与 decode(步进)的瓶颈不同(见分离部署),分开 SLO 才能分别优化。

三、SLO 是分级的:不同产品/客户不同级(免费用户 P99 2s、付费 P99 500ms),调度器按级配优先级(见多租户)。

第一步:单卡容量基线。测出单卡(或单副本)在 SLO 约束下的容量:

单副本容量=SLO 约束下的最大并发×平均 token 速率\text{单副本容量} = \text{SLO 约束下的最大并发} \times \text{平均 token 速率}

70B 模型、单卡 TP=1(装不下,TP=2),SLO(TPOT P99 < 100ms)下的并发上限由两个约束取小:

约束上限
KV cache(显存)KV 池 ÷ 每 token KV ÷ 平均序列(见 KV)
decode 速度(带宽)batch 越大 TPOT 越高(每步的计算+通信时间随 batch 涨)

第二步:流量预测。服务要处理的 QPS 与每请求的 token 分布(输入/输出长度的分布,不只是均值)。

第三步:排队论的最后一步。到达率 λ、服务率 μ(单副本容量),利用率 ρ = λ/μ 的经验法则:

ρ排队行为
< 0.5队列短,SLO 稳
0.7–0.8生产目标区间
0.85+排队急剧恶化(M/M/1 的指数性质),SLO 必破
0.9+灾难

利用率 0.85 是推理服务的红线——排队延迟随利用率指数增长,容量规划永远要留 15–20% 的余量。这与调度集群的利用率目标(gang+backfill 到 85%)恰好相反:批处理集群往满压,在线服务往松留。

第四步:故障余量。N+1 或 N+2:一个副本挂了(发布/故障),剩下的还要扛住流量——可用性 SLO 直接加到容量上。

问题:70B 模型对话服务,QPS 10、平均输入 2k token、输出 500 token、SLO(TTFT P99<2s,TPOT P99<100ms,可用性 99.9%)。

  1. 单副本容量:TP=4(KV 与速度双约束平衡),KV 池 ~40 GB → 并发 ~32;SLO 约束下实测最大并发 24,每请求平均 375 tokens/s(500 token ÷ 1.3s)→ 单副本吞吐 ~24 × 1.3 = ~31 req/s?不对——并发 24 × 每请求 500 token ÷ (500 × TPOT 50ms) —— 实测单副本稳定服务 ~8 req/s。
  2. 流量:QPS 10 → ρ = 10/8 = 1.25 > 1,一个副本不够。
  3. 副本数:至少 2(ρ=0.63);加故障余量 N+1 → 3 个副本(12 卡)。
  4. 验证:峰值(QPS 波动 2×)时 ρ = 20/16 = 0.83,接近红线 → 4 副本(16 卡)。

每一步都是数字,没有玄学——SLO 定了,容量就是流量 ÷ 单副本容量 × 余量系数。

  • 流量有峰谷:按峰值配容量浪费(峰谷比 3–5 倍),按谷值配 + 峰值降级(动态 batch、短输出模式、排队)是中间态
  • 多模型共享容量(见多租户):不同模型的服务共享池,按优先级抢占——提升利用率的组织手段
  • 降级预案:过载时先降什么(投机解码关、KV 上限降、长输出截断、排队)——SLO 的另一面是降级预案
  • SLO 三延迟指标(TTFT/TPOT/吞吐)+ 可用性;用 P99 不用均值,TTFT 与 TPOT 分开承诺。
  • 单副本容量 = KV 约束与速度约束取小;容量 = 流量 ÷ 单副本 × 排队余量 × 故障余量。
  • 利用率 0.85 是在线服务红线(排队指数恶化)——推理服务往松留 15–20%,与批处理集群相反。
  • N+1 故障余量直接来自可用性 SLO。
  • 峰谷比大时用弹性与降级预案;"每 token 成本"(见多租户)是容量规划的终点指标。