预计阅读 7 分钟

生产 6:成本调优

谁该读这一篇? 既要 SLO 又要省钱的业务方 / 运维。 前置阅读: 04-slo.md04-optimizations/03-quantization.md耗时: 30 分钟 学完能: 1. 算 GPU 单位成本:$/M tokens; 2. 列出影响成本的 6 个杠杆; 3. 在 SLO 约束下选最经济的配置; 4. 评估 spot / 包年 / 按量的取舍; 5. 写一份月度账单分析模板。


1. 单位成本:$/M tokens

最有用的成本指标:每生成 100 万 token 花多少钱。

$$\text{cost per M tokens} = \frac{\text{GPU hourly rate} \times \text{副本数}}{\text{token throughput per hour}}$$

举例:

  • 4× H100 节点,按量 \$32/hr。
  • 单副本(TP=4)throughput = 3000 token/s = 10.8M token/hr。
  • 副本数 = 1:cost = \$32 / 10.8M = \$2.96 / M token

对照 OpenAI / Anthropic 公开价格:

服务 $/M output token (粗略 2026)
自建 SGLang 70B FP8 (H100) 0.5 - 3
GPT-4o 10-20
Claude Sonnet 4.x 15
Gemini Flash 0.3-1

自建优势:模型自主、数据私有;劣势:复杂度高。


2. 影响成本的 6 个杠杆

2.1 模型规格

70B vs 7B:模型大 10×,throughput 慢 ~10×,单 token 成本约等。 但 70B 输出质量好,需要 token 数少 → 端到端成本可能更低。

衡量:**$/任务**,不光是 $/token。

2.2 量化

FP8 比 BF16 throughput 1.5-1.8×,单 token 成本降 35-45%。 精度损失 < 1%(业务 eval 验证后)。

2.3 Batch size

KV pool 装得越多,并发越高,单卡 token/s 越高。 但代价:TTFT 上升(请求等队列)。 SLO 允许时尽量提 --max-running-requests

2.4 Cache 命中率

每命中 1 token = 省 1 token 的 prefill flops。 高 cache 业务能把单 token 成本降 30-50%。 02-core-concepts/03-cache-aware-scheduling.md 的核心收益。

2.5 副本利用率

平均利用 50% vs 90%:成本差 1.8×。 对策:错峰调度、多业务共用、KEDA 自动缩容。

2.6 投机解码

接受率高时再省 1.5-2×。 不适合时是负优化(04-optimizations/02-speculative-decoding.md §11)。


3. Spot vs 按量 vs 包年

模式 折扣 风险
按量 0 (baseline) 0
Spot / Preemptible 50-70% off 随时被回收
1 年承诺 30-40% off 需求估准
3 年承诺 50-60% off 大额绑定

策略:

  • 基线流量用包年(稳定)。
  • 峰值溢出用按量(弹性)。
  • Spot 跑离线 batch 任务(embedding / 评测 / 微调)。

不建议把在线推理放 Spot:被回收时 abort 会引起雪崩。


4. 输入 / 输出 token 比例对成本影响

LLM 推理两个阶段的成本不同:

  • Prefill:每 token 算力大但一次性。
  • Decode:每 token 算力小但要 N 次。
单 token 成本 ≈ α × prefill_cost + β × decode_cost

如果 prompt:output = 4:1(chat 典型),decode 占主导。 如果 prompt:output = 50:1(总结、RAG),prefill 占主导。

P/D 分离对长 prompt 业务能省成本(05-distributed/04-disaggregated.md)。


5. 跨业务摊薄

Chat / RAG / Agent / Embedding 共用副本:

单业务高峰错开 → 副本总数 << 各业务独立总和

代价:

  • 隔离差。
  • 一个业务突增影响其他。

需要:


6. 月度账单拆解模板

# SGLang Cost Report - 2026-05

## 总览
- 总 token: 1.2 B output token
- 总成本: $4,820
- 单位: $4.02 / M tokens

## 拆分
| 业务 | Token | Cost | $/M | 备注 |
| --- | --- | --- | --- | --- |
| Chat | 800 M | $2,700 | $3.38 | cache hit 65% |
| RAG | 250 M | $1,200 | $4.80 | 长 prompt |
| Agent | 130 M | $670 | $5.15 | 多步 |
| Embedding | 20 M | $250 | $12.5 | bs 太小 |

## 资源
- 副本数: 6 平均 (peak 10)
- GPU: 4× H100 / 副本 = 24 H100·hr/hr * 24 * 31 = 17856 H100·hr
- GPU cost: $4,464 (按量 + 包年混合)
- Network / storage / misc: $356

## 利用率
- Peak: 95% 周一 14:00
- Off-peak: 30% 周日凌晨

## 优化建议
- Embedding 业务用更大 batch 或合并到主副本,省 $200/月
- Agent 业务接受率低,关 spec decoding 试一试
- 周末缩容到 4 副本,省 $400/月

7. 成本仪表盘

Grafana 加:

  • $/M token 时序(按业务)
  • 副本利用率(avg / peak)
  • 闲置成本(副本数 × 闲置时间 × 单价)
  • 各业务 token 占比

8. 常见省钱反模式

反模式 后果
拼命降 max_running_requests TTFT 好看但容量浪费
用 INT4 不验业务 eval 输出质量降,业务返工
Spot 跑在线 雪崩风险
关 cache 让数据"公平" 单 token 成本翻倍
业务每个独立部署 利用率低,账单倍增

9. 选型决策:买 vs 自建

因素 选商用 API 选自建
流量 < 1B token/月
流量 > 10B token/月
数据合规要求
团队没 LLM 运维
需要私有模型 / 微调
业务变化快、不稳定

自建临界点常在 5-10B token/月。


10. 小结

  • 成本指标:$/M tokens(不是 $/hr)。
  • 6 个杠杆:模型规格、量化、batch、cache、利用率、spec decoding。
  • 部署模式 mix:包年 + 按量 + spot。
  • 输入输出比例决定 P/D 分离收益。
  • 月度报告拆业务,定向优化。

11. 自检

  1. 我的业务 prompt:output = 8:1,开 P/D 分离能省多少?
答案 8:1 表示 prefill 算力占主导(8 × prefill_flops vs 1 × decode_flops × N_layers,前者通常 5-10× 后者)。 合一模式下:prefill 抢算力让 decode 抖动,长尾 p99 TPOT 涨;为达 SLO 副本要超配 30-50%。 P/D 分离后:prefill 节点专攻算力(每 FP8 GPU 4k-8k token/s prefill),decode 节点专攻带宽;按 8:1 比例配 Prefill:Decode = 1:4。 省成本:(a) 各自精确配比,超配率从 30% 降到 10%;(b) prefill 节点可用更便宜 GPU(不需大 HBM);(c) decode 节点 max_running_requests 更高(无 prefill 抢算力)。 实测总成本能降 20-30%;但**部署复杂度翻倍**,要权衡。短期内业务量不大时不开。
  1. FP8 vs BF16 业务 eval 不变,单 token 成本能降多少?
答案 FP8 在 H100 上 throughput 1.5-1.8× BF16(FP8 Tensor Core 算力是 BF16 的 2×,受 attention / memory bandwidth 摊薄实际 1.5-1.8×)。 `$/M tokens = GPU rate / throughput`,throughput 1.5× → 成本 **降 33%**;throughput 1.8× → 成本 **降 44%**。 加 FP8 KV cache 后 KV 容量翻倍,max_running_requests 可加倍 → 再降 20-30% 成本。 总叠加:FP8 W8A8 + FP8 KV 比 BF16 单 token 成本降 **40-55%**。 前提:业务 eval 验证精度损失 < 1%(H100 + LMM 通常都满足);A100 上 W8A16 收益小一些(约 20-30%)。
  1. 利用率从 40% 提到 70%,成本变化?
答案 利用率 = 实际算力 / 物理算力。提升利用率意味着相同副本数扛更多流量。 `成本 ∝ 副本数 ∝ 1 / 利用率`。 40% → 70% → **副本数降 43%**,成本同比例降。 月账单 $10k → $5.7k,省 $4.3k/月。 提升手段:(a) 错峰调度(白天 chat、夜间总结 batch);(b) 多业务摊薄(chat + embedding 共用);(c) HPA 缩容 off-peak;(d) Spot/Preemptible 跑非关键流量。 注意:利用率 > 85% 时 p99 长尾恶化;通常 65-75% 是 sweet spot。
  1. Spot 跑在线推理为什么危险?
答案 Spot / Preemptible 实例**云厂商可以 2-5 分钟通知后强制回收**。 后果: (1) **in-flight 请求被 abort**:长输出请求(如 2 分钟的 RAG)被切断,客户端看到 5xx。 (2) **CUDA Graph 重建**:替代 Pod 上线又要 5 分钟启动 + capture;流量在这期间被剩余副本扛,可能触发雪崩。 (3) **副本数突变**:Spot 实例集群可能短时间内多个被回收,剩余副本压力剧增。 (4) **PDB 失效**:PDB 防的是主动 drain,回收是云层面动作,PDB 管不到。 适合 Spot:(a) 离线 batch(embedding / 评测);(b) Mock / 测试环境;(c) 训练 fine-tune。 不适合:任何带 SLO 的在线推理。
  1. 月账单 embedding $/M 偏高,可能原因?
答案 embedding 任务的特点是**单次 forward,无 decode**,throughput 应该极高(chat 的 5-10×)。如果 $/M 反而高: (1) **batch size 太小**:客户端一次只传 1-5 条文本,没填满 GPU。embedding 应大 batch(128-256)。 (2) **模型选大了**:用 7B Llama 做 embedding,远不如 335M BGE-large 高效。 (3) **副本和 chat 混用**:chat 调度策略不适合 embedding(cache-aware 没用),HPA 按 chat 指标扩缩,embedding 用了多余的副本。 (4) **冷启动比例高**:embedding 副本被 KEDA 缩到 0 太狠,每次起新副本都收 cold start 成本。 (5) **量化没开**:embedding 模型 FP16 跑,没开 INT8。 解决:embedding 独立小副本组 + 大 batch + 小模型 + 不缩到 0。

12. 下一步

参考:Anthropic / OpenAI 公开价格表;GPU 公有云价目表。