跳转至

容量与成本

容量规划的起点是工作负载分布与 SLO,而不是“平均一张 GPU 能跑多少请求”。对 LLM 服务,输入/输出 token、到达模式和延迟目标都会改变可承载能力。

推理容量模型

一个便于沟通的第一版估算:

\[ GPU_{needed} \approx \frac{Peak\ Token\ Rate}{Sustainable\ Goodput\ per\ GPU}\times Headroom \]

但需要分别考虑输入和输出 token,因为 prefill 与 decode 的成本不同:

\[ Work \approx \lambda \times (E[T_{in}]\cdot C_{prefill}+E[T_{out}]\cdot C_{decode}) \]

这只是估算框架;可持续 goodput 必须在目标请求长度分布、并发和 SLO 下压测获得。

并发与 Little's Law

稳定系统中可用 Little's Law 建立直觉:

\[ Concurrency \approx Arrival\ Rate \times Average\ Latency \]

如果到达率继续提高而吞吐已饱和,排队让 latency 增长,并发/内存占用继续扩大,形成过载。需要 admission control,不能期待无限排队自然恢复。

显存预算

推理显存近似分为:

\[ M_{GPU} \approx M_{weights}+M_{KV}+M_{runtime}+M_{workspace}+M_{fragmentation}+M_{margin} \]

容量评审要记录:模型版本、量化/精度、最大序列、并发、KV block 配置、CUDA Graph/编译缓存和安全余量。不要把启动时空闲显存全部承诺给 KV Cache。

峰值不是平均值乘系数

至少从历史流量提取:

  • 分钟级/秒级峰值与 burst duration;
  • input/output token 分布及相关性;
  • 模型、租户、地区和时间段结构;
  • 取消、超时、重试造成的额外负载;
  • 发布、节点故障时的 N-1 / N-k 容量。

用 trace replay 或合成分布复现峰值,比固定 prompt/固定并发更可信。

Headroom 的组成

余量不是拍脑袋的统一 30%,应拆成:

  • 故障余量:一个副本/节点/机架退出后仍满足 SLO。
  • 扩容滞后余量:覆盖节点供给、镜像与模型加载、warmup。
  • 预测误差余量:流量和请求形状的不确定性。
  • 发布余量:滚动升级、canary、双版本共存。
  • 性能抖动余量:邻居、温度、存储与网络尾延迟。

训练集群容量

训练容量除了 GPU 小时,还要考虑:

  • 任务队列等待与 gang size 导致的碎片;
  • 模型并行拓扑对节点整组分配的限制;
  • checkpoint/数据 I/O 的共享瓶颈;
  • 失败重算、维护与保留容量;
  • 开发型小任务与长时大任务的调度公平性。

集群 GPU allocation 高不代表产出高。建议同时看 allocated、active、effective training time、queue time 和 useful tokens/s。

成本单位

推理:

\[ Cost_{1M\ tokens}=\frac{GPU\ Cost+CPU+Network+Storage+Platform}{Delivered\ Tokens}\times 10^6 \]

训练可以看每百万/十亿训练 token、每个成功实验或达到目标质量的总成本。仅比较 GPU 小时会忽略失败、重试、数据准备和低效排队。

容量评审模板

项目 内容
SLO TTFT/TPOT/E2E、可用性、训练 deadline
Workload 模型、精度、token/batch/sequence 分布
Baseline 版本、硬件、拓扑与实测 goodput
Peak 峰值到达率、持续时间、增长预测
Failure N-1/N-k、区域/节点/副本故障假设
Lag 扩容与预热端到端时间
Headroom 分项余量与计算依据
Validation 压测、故障演练与观测链接

决策原则

  • 在 SLO 内比较 goodput 和成本,而不是脱离延迟谈峰值吞吐。
  • 先通过调度、缓存、batch 和请求限制提升利用率,再决定加卡。
  • 过度整合提高利用率但放大故障域与邻居干扰;关键在线服务保留明确余量。
  • 定期用生产流量重放更新 baseline,模型与引擎升级后旧容量结论失效。