深色模式
GPU 成本模型与计费
摘要:本文面向需要为 AI 训练 / 推理工作负载做成本核算与预算基线的 SRE、平台工程师与 FinOps 从业者。核心是建立一套「可归因、可复核」的 GPU 成本模型:把账单拆解为 GPU 型号、数量、运行时长、裸单价、利用率五个变量,并区分名义成本与有效成本。文中所有单价均为公开刊例价区间,随区域、合约与日期频繁变动,必须以你所用云厂商的价目表与自身账单(CUR / 账单导出)为准,切勿当作固定报价。
适用场景与前提
- 适用对象:在云(AWS / GCP / Azure)或 IDC 上运行 A100 / H100 / L40S / A10G / T4 等 GPU 工作负载的团队。
- 前提:能拿到 GPU 实例的账单或刊例单价,且能采集 GPU 利用率(DCGM /
nvidia-smi)。 - 关键认知:账单上的 GPU 小时数 ≠ 有效算力小时数。一块被预约但仅 5% 利用率的 H100,其"每可用算力小时"成本是裸单价的 20 倍。
核心概念:五变量成本模型
GPU 成本由五个独立变量决定,建模时应逐项归因:
| 变量 | 含义 | 获取方式 |
|---|---|---|
| 型号 | A100-40G / A100-80G / H100-80G / L40S 等 | 实例规格 / nvidia-smi -q |
| 数量 | 物理卡数(非节点数) | 账单 / 调度器 |
| 时长 | 实际占用小时数(注意计费粒度:AWS 按秒、GCP 自动持续使用折扣) | 云账单 |
| 裸单价 | 每 GPU·小时 的刊例或合约价 | 价目表 / CUR |
| 利用率 | 算力 / 显存的有效占用比例 | DCGM DCGM_FI_PROF_GPU_UTIL |
名义成本 vs 有效成本
text
名义成本(Nominal) = GPU数量 × 裸单价(/小时) × 运行小时数
有效单价(每可用 GPU·小时) = 裸单价 ÷ 实际利用率
有效成本(Effective) = 名义成本 ÷ 实际利用率1
2
3
4
2
3
4
利用率是隐藏的乘数
同一块 H100,5% 利用率下的有效单价是 95% 利用率下的 19 倍。很多"看起来便宜的预留实例"因为长期低利用率,单位算力成本反而高于按需。优化利用率(见 utilization.md)往往比砍单价更划算。
计费模式对比与成本归因
三类计费模式(数据来自 2026 年多家 FinOps 机构整理的公开刊例价区间,区域 / 日期相关,非固定报价):
| 模式 | 折扣幅度 | 风险 | 适用 |
|---|---|---|---|
| On-Demand | 基准 | 无 | 探索期、突发、无法预测 |
| 1 年期 Reserved/CUD | 约 25-45% off | 锁定期 | 稳定训练/常驻推理 |
| 3 年期 | 约 40-70% off | 强锁定 | 长期基线负载 |
| Spot / Preemptible | 最高 60-90% off | 可被抢占中断 | 可中断训练、弹性批处理 |
公开刊例价区间(仅作量级参考,需以价目表复核)
以 2026 年公开整理的 8 卡 H100 80G 实例为例:AWS p5.48xlarge 按需约 $55–98/小时(即每卡约 $6.9–12.3/小时,区域相关);GCP a3-highgpu-8g 约 $88/小时;Azure ND96isr_H100_v5 约 $98/小时。A100 40G 每卡按需约 $2.7–4.1/小时,A10G 24G 单卡约 $1.0/小时。以上为公开刊例价,随区域、合约、促销变动,本文未实测你的实际账单,请以 CUR / 账单导出为准。
生产实践:建立成本基线
1. 用标签做成本归因
云账单必须能按 team / model / task 维度拆分,否则无法做 showback/chargeback:
bash
# AWS 为 GPU 实例打成本归属标签
aws ec2 create-tags --resources i-0abc123 \
--tags Key=team,Value=inference Key=model,Value=llama-8b Key=task,Value=serving
# 导出 CUR 后用 athena 按标签聚合(示意)
# SELECT line_item_resource_tags, SUM(line_item_unblended_cost)
# FROM cur WHERE product_family='GPU' GROUP BY 11
2
3
4
5
6
7
2
3
4
5
6
7
2. 计算有效成本并设基线
python
# gpu_effective_cost.py —— 成本基线核算(示例,单价请替换为你的合约价)
PRICE = {
"H100-80G": 12.29, # 每卡·小时 公开刊例价上限, [未实测] 需替换为你的合约价
"A100-40G": 4.10, # [未实测]
}
def effective_cost(model, gpus, hours, util, discount=1.0):
nominal = PRICE[model] * gpus * hours * discount
eff = nominal / max(util, 0.01) # 利用率越低, 有效成本越高
return nominal, eff
nominal, eff = effective_cost("H100-80G", 8, 24*30, util=0.05)
print(f"名义: ${nominal:,.0f} 有效(5%利用率): ${eff:,.0f}")
# 输出仅示意: 名义约 $70891, 有效约 $1,417,824 [未实测]1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
别用名义成本做预算基线
预算基线必须基于有效成本 + 利用率目标。若以名义成本设预算,当利用率从 60% 跌到 10% 时,实际支出会膨胀 6 倍而预算毫无反应。
验证
bash
# 用 DCGM-Exporter 采集真实利用率, 反算有效成本
kubectl get --raw /api/v1/nodes/<node>/proxy/metrics \
| grep DCGM_FI_PROF_GPU_UTIL
# 对比账单: 账单 GPU 小时数 × 裸单价 应≈ 名义成本
# 偏差 >10% 说明标签/计量口径不一致, 需排查1
2
3
4
5
6
2
3
4
5
6
回滚与清理
- 预留实例(RI / CUD)不可逆,购买前用 3 个月历史利用率数据验证基线负载是否稳定,避免"为闲置容量买单"。
- Spot 实例需确保工作负载可中断:训练用 checkpoint 周期性落盘,推理用多可用区常驻兜底。
- 清理孤儿 GPU 节点(未被调度但仍在计费):用
kubectl get nodes -l nvidia.com/gpu.present结合云侧"运行但无 Pod"清单核对。
故障排查
- 账单突然翻倍:优先查 Spot 回收后回退到 On-Demand、或某人误开 8 卡实例跑单卡任务。
- 利用率采集为 0:检查 DCGM-Exporter 是否部署、驱动版本是否匹配;
nvidia-smi dmon -s u可本地验证。 - 预留折扣未生效:确认实例族 / 区域与承诺是否匹配,RI 与 Savings Plan 不可混用。
安全与合规
- 成本失控防护(重点):GPU 实例单价极高,必须设置账号级预算告警 + 单实例最高运行时长配额。无限循环的训练提交脚本、误写的常驻推理副本会在数小时内产生数万元账单。详见 LLMOps 成本视角 的预算告警与限流熔断。
- 标签强制:用 IAM/SCP 策略拒绝无
team标签的 GPU 实例创建。 - 合规:跨国数据驻留要求可能影响 GPU 区域选择,进而影响单价与折扣可用性。
成本 / 性能权衡
- H100 单价约为 A100 的 3 倍,但多数 transformer 训练吞吐约为 A100 的 3 倍 → 每训练 token 成本大致持平,优势在迭代速度(24h vs 72h)与 spot 中断风险。
- 小模型(<13B)用 A100 通常比 H100 更划算;H100 的 FP8 / HBM3 优势在大规模才充分体现。
- 单卡开发机(T4 / A10G)用于迭代,仅在最终训练/高吞吐推理上 A100/H100,开发阶段 GPU 支出可降 60–80%。