跳到主要内容
推理优化

10.4 容量规划:从 SLO 与峰值 QPS 反推集群规模

容量规划的完整方法论:算力需求(FLOPs 模型)、显存需求(权重+KV缓存+激活)、单副本压测、集群规模与成本估算

容量规划成本估算FLOPs显存压测

部署的最后一步:买多少卡。容量规划的输入是”业务承诺”(峰值 QPS、SLO),输出是”卡数与成本”。这一节给出一套完整的计算方法:算力(FLOPs)→ 显存(KV Cache)→ 单副本实测 → 集群规模 → 成本。

📑 目录


1. 容量规划的完整流程

业务输入(必须量化,否则一切白算)
  ├── 峰值 QPS(含未来 6-12 个月的成长系数)
  ├── 平均 prompt token 数、平均输出 token 数
  ├── SLO(TTFT p95、TPOT p95)——第 9.1 章
  └── 冗余系数(故障转移 + 扩缩容延迟缓冲)

五步法:
  1. 算力估算   → 理论吞吐上限(FLOPs 模型,第 2 节)
  2. 显存估算   → 单卡能塞下什么(第 3 节)
  3. 单副本压测 → 该模型+该卡的实测吞吐与时延(第 4 节)
  4. 求副本数   → max(算力所需, 显存所需, SLO 所需)(第 5 节)
  5. 成本估算   → 卡数 × 单价 + 存储网络(第 5 节)

📌 关键点第 2、3 步是”理论天花板”,第 4 步是”现实地板”——理论算出的吞吐永远高于实测(图捕获、调度开销、IO 竞争)。容量规划必须落在实测数据上,理论只用来预筛”这个模型在这张卡上有没有可能”。


2. 算力需求估算:FLOPs 模型

2.1 一次请求的 FLOPs

LLM 推理的算力消耗:每生成一个 token ≈ 2 × 参数量 FLOPs(2N 法则,即每个参数做一次乘一次加;prefill 每处理一个 token 同理)。

单个请求总 FLOPs ≈ 2N × (prompt_tokens + output_tokens)

例:Llama-3.1-70B(N = 70e9),prompt 2000 token,输出 512 token
  单请求 FLOPs = 2 × 70e9 × (2000 + 512) ≈ 3.5e14 FLOPs

2.2 理论吞吐上限

理论吞吐 = 单卡 FP16 算力 × 利用率系数 / 单 token FLOPs

例:H100(FP16 ≈ 989 TFLOPS),利用率取 0.35(推理典型值)
  每秒可处理 token = 989e12 × 0.35 / (2 × 70e9) ≈ 2470 token/s

  按平均输出 512 token、平均请求 prompt 2000 token:
  每秒可处理请求 ≈ 2470 / (2000 + 512) ≈ 0.98 req/s ≈ 3.5k req/h

2.3 利用率系数的经验值

场景利用率系数说明
纯 decode(KV 命中)0.2-0.4访存受限(第 2 章)
混合负载0.3-0.5取决于 batch 大小与 prefill 占比
大 batch + 长序列0.5-0.7算力利用率最高

💡 提示:利用率系数是”容量规划最大的不确定性”——所以第 4 步的实测不可跳过。理论估算差 2 倍很正常,用实测值回填系数,后续估算才有意义。


3. 显存需求估算:权重 + KV Cache + 激活

3.1 显存构成

单副本显存 = 权重 + KV Cache + 激活/图 + 冗余

① 权重(FP16 无量化):2 × 参数量
   Llama-3.1-70B → 140 GB(一张 H100 80G 放不下 → 至少 TP2 或量化)

② KV Cache:2(K+V)× 2(FP16)× 层数 × 头维度 × 序列长度 × batch
   简化式:KV Cache ≈ 2 × hidden_size × num_layers × max_seq_len × batch × 2 bytes

③ 激活与 CUDA Graph:通常占显存的 10-20%(峰值 prefill 时刻)

④ 冗余:留 10-20% 余量(碎片、加载峰值)

3.2 一个算例:Llama-3.1-70B 在 H100-80G

权重(FP16)        = 140 GB ✗ 一张卡放不下
权重(INT8 量化)   = 70 GB
KV Cache 预算       = 80 - 70 - 10(激活) ≈ 10 GB(几乎没空间)

结论:70B 用 INT8 单卡 ≈ 塞得下但 KV 极小 → 低并发
      正经方案:TP2(权重 140/2=70G/卡)+ 每卡 KV 预算 ~6G
      或 4-bit 量化单卡(~40G 权重),KV 空间充足

3.3 显存是”硬约束”,算力是”软约束”

约束性质表现
显存硬——超了直接 OOM决定”这个模型最少几张卡”
算力软——超了只变慢决定”满足 QPS 需要几张卡”
实际需要的卡数 = max(显存最小卡数, 算力所需卡数, SLO 所需卡数)

📌 关键点先算显存、再算算力——显存算不过直接排除方案(比如 70B FP16 单卡 80G 直接排除),省掉后面的压测。量化(第 4 章)在这里的收益是”把显存约束下移一个档位”。


4. 单副本实测:把理论变成数据

4.1 测什么

方法产出
最大吞吐9.2 节压测(vllm bench serve/throughput)req/s、token/s
SLO 拐点逐步加压,记录 TTFT/TPOT 分位数满足 SLO 的最大 QPS
显存边界长序列 + 大 batchKV 上限、OOM 边界

4.2 压测负载要贴近生产

必须复刻:
  - prompt 长度分布(平均值 + 长尾!长尾决定 KV 需求)
  - 输出长度分布(QPS 相同,输出翻倍 → 吞吐需求翻倍)
  - 前缀重复度(命中率高 → 有效吞吐大增,10.3 前缀路由)

不要用:
  - 单一固定长度(严重低估长尾)
  - 随机无前缀 prompt(高估算力需求——生产有缓存命中)

4.3 压测产出样例

模型:Llama-3.1-70B(INT8),H100 × 2(TP2),prompt 2000/输出 512
  max_throughput      ≈ 1500 token/s
  SLO 内最大 QPS      ≈ 1.2 req/s(TTFT p95 < 2s)
  KV 缓存上限         ≈ 40k token(单副本并发上限)

💡 提示同一模型在不同业务负载下,“SLO 内最大 QPS”能差 3-5 倍。容量规划报告里必须附上压测负载画像——没有画像的数字无法复现,也无法在业务变化时重新校准。


5. 集群规模与成本估算

5.1 副本数计算

例:业务承诺 峰值 10 QPS,SLO 内单副本 1.2 QPS
  副本数 = 10 / 1.2 ≈ 8.3 → 取 9

  加冗余:9 × 1.3(30% 冗余:故障转移 + 扩缩容延迟缓冲)≈ 12 副本
  再加高峰缓冲:峰值 × 成长系数 1.5(未来 12 个月)→ 13-14 副本

  卡数 = 副本数 × 单副本卡数(TP2 → ×2)≈ 26-28 张 H100

5.2 成本估算公式

月成本 = 卡数 × 单卡月成本 + 存储/网络 + 人力运维

单卡月成本参考(2025-2026 市场价,地区差异大):
  H100 80G   ≈ \$2.5-4/h(按需云)→ 月 ~\$1800-2900(7×24)
  A100 80G   ≈ \$2-3/h
  L40S       ≈ \$1-1.5/h(性价比推理卡)

例:28 张 H100 按需 ≈ 28 × \$2.5/h × 720h ≈ \$50k/月
   包年/预留 ≈ 省 40-60%
   推理专用卡(L40S/H200/国产卡)→ 按算力需求重算,通常更优

5.3 省钱杠杆(按效果排序)

杠杆机制幅度
预留实例/包年削云厂商溢价40-60%
量化降档(第 4 章)4-bit → 单卡塞更大模型 / KV 翻倍30-50% 卡数
投机解码(第 5 章)同卡更多 token/s20-60%
PD 分离(第 7 章)两类资源按需配比20-40%
KV offload / LMCache缓存跨实例共享10-30%
缩容策略(10.3)低谷缩副本视负载曲线

📌 关键点容量规划的产出不是”一个数字”,而是一个可调模型——QPS、prompt/输出长度、SLO、量化档位、冗余系数,每个参数都能调,每个参数调了都有成本影响。把公式做成表格/脚本(输入业务参数 → 输出卡数与成本),业务变化时 5 分钟重算,而不是重新做一遍规划。


📝 总结

  • 五步法:算力(FLOPs)→ 显存 → 单副本实测 → 副本数 → 成本
  • 2N 法则:每 token ≈ 2 × 参数量 FLOPs;理论吞吐 = 算力 × 利用率 / 单 token FLOPs
  • 显存是硬约束:权重 + KV Cache + 激活 + 冗余;先算显存排除方案
  • 实测不可跳过:利用率系数是最大不确定性,用实测回填
  • 副本数 = max(显存, 算力, SLO) × 冗余系数 × 成长系数
  • 省钱杠杆:预留实例 > 量化 > 投机解码 > PD 分离 > KV offload > 缩容
  • 产出是可调模型,不是一次性数字

🎯 自我检验清单

  • 单 token 的 FLOPs 为什么是 2N?能推导吗?
  • 理论吞吐的上限公式与利用率系数经验值?
  • 显存四件套是什么?70B FP16 为什么一张 H100 放不下?
  • 为什么容量规划必须实测?压测负载要复刻哪些特征?
  • 副本数 = max(显存, 算力, SLO) × 冗余 × 成长 的每一步含义?
  • 六个省钱杠杆按效果排序?
  • 怎么把容量规划做成”可调模型”?

📚 参考资料