大模型推理 GPU 资源评估框架

从「参数量 × 精度 = 显存」这一层,往下深挖到 KV Cache、MoE 专家触达率、并行策略、显存带宽瓶颈与 $/token 经济性。所有公式可复算,所有系数标注来源与不确定度。

v1.0 · 2026-07 场景:推理部署 + 选型经济性 深度:工程师级(含公式推导) 单位约定:1 GB = 10⁹ Bytes(对齐厂商显存标称)

① 模型结构

决定权重显存与 KV Cache 的两组正交参数
注意力结构(决定 KV Cache)
混合线性注意力(如 Kimi K3 的 KDA、Mamba/GLA 类)只有「全注意力层」持有随长度增长的 KV;线性层持有的是固定大小状态,与序列长度无关。把占比调到 100% 即退化为纯全注意力模型。

② 权重精度

每参数字节数,含量化 scale 开销
MXFP4:每 32 个元素共享 1 字节 E8M0 缩放因子 → 有效 0.5 + 1/32 = 0.53125 B/param,比「0.5」高 6.25%。K3 从 SFT 阶段起做量化感知训练(QAT),原生 MXFP4 权重 + MXFP8 激活,因此 FP4 不是有损后量化而是原生格式。

③ 服务负载

并发与上下文决定 KV Cache 规模
效率系数(可调,影响吞吐与成本)

④ 成本口径

用于 $/1M token 与 自建 vs API 对比
权重显存(分片前总量)
—
—
KV Cache 总量
—
—
集群显存总需求
—
—
最低 GPU 数(推荐卡)
—
—

显存构成分解

这是评估的第一性问题:显存不是只放权重
权重 KV Cache 激活值/工作区 框架固定开销 碎片预留

GPU 选型矩阵

按 8 卡整机(NVLink 域)粒度取整;★ 为在满足显存前提下 $/1M输出token 最低者
GPU单卡显存带宽 最少卡数整机数实配显存 显存占用率TPOT集群吞吐$/1M out结论

吞吐与延迟拆解

Decode 受显存带宽约束,Prefill 受算力约束——两者的瓶颈完全不同

MoE 专家触达率 · 被低估的显存带宽杀手

「激活 50B 参数」只在 batch=1 成立。批越大,每步需要读的专家权重越接近总参数量
batch期望触达专家触达率每步需读权重等效"激活参数"摊到单序列
这是 MoE 部署最反直觉的一点。 稀疏 MoE 省的是 FLOPs,不是 显存带宽。当 batch 足够大,每个 decode step 几乎要把所有专家权重都从 HBM 读一遍,此时 MoE 的带宽行为逼近同参数量的 dense 模型——但它换来的是每 token 的算力只有 dense 的 1/56。推论:MoE 部署应优先选高带宽卡,而非高算力卡。

自建 vs 调 API · 盈亏平衡

自建只有在「吞吐打满 + 利用率够高」时才划算

评估框架方法论

Step 0 · 先分清你在算哪个问题

「要几张卡」有三个互不相同的答案,混淆它们是最常见的估算错误:

  • 装得下(Capacity-bound)——权重 + KV + 激活 ≤ 集群总显存。这是原信息图回答的问题,也是下界。
  • 跑得动(Latency-bound)——满足 TTFT / TPOT SLA。通常比装得下多要 1.5–4× 的卡。
  • 扛得住(Throughput-bound)——满足 QPS × 平均输出长度。这才是生产环境真正的定卡依据。
最常见的翻车姿势:按「装得下」买了 2 台 B300,上线发现 TPOT 40ms 用户嫌卡,或并发到 30 就 OOM——因为 KV Cache 被漏算了。

Step 1 · 权重显存

N_total × bytes/param。注意量化格式的 scale 开销(MXFP4 +6.25%)、以及 embedding / lm_head 是否共享权重、是否量化(通常保持 BF16,对超大 vocab 是 GB 级差异)。

Step 2 · KV Cache(最容易被漏算的一项)

KV 随 并发 × 上下文长度 线性增长,长上下文场景下常常超过权重本身。三个数量级的架构差异:GQA ≈ 250 KB/token,MLA ≈ 34 KB/token,混合线性注意力可再降 4–8×。

Step 3 · 激活值与工作区

推理的激活峰值出现在 prefill:批token数 × hidden × 精度 × 系数。MoE 还额外需要 dispatch/combine 缓冲(token × top-k × hidden × 2)。经验上占权重的 3–10%,但长 prefill 批下可以爆到 100 GB 量级。

Step 4 · 固定开销与碎片

每卡 2–4 GB 的 CUDA context / NCCL buffer / cuBLAS workspace / CUDA Graph 捕获,不随分片减少。再叠加 5–10% 的分配器碎片。这就是「20% 冗余」经验值的来源——但它是粗糙的合并系数,本框架把它拆开算。

Step 5 · 选择并行策略(决定分片效率)

同样的显存需求,TP=8 / EP=64 / PP=4 的实际落盘方式完全不同。见「并行策略选择」页。

Step 6 · 反推吞吐,校验 SLA

Decode 用 Roofline 的带宽侧:每步读多少字节 ÷ 有效带宽。Prefill 用算力侧:2N·T FLOPs ÷ 有效算力。两边都要留 MBU/MFU 折扣。

Step 7 · 折算成 $/1M token,与 API 比价

这一步会让很多「自建更便宜」的直觉当场翻车。见「自建 vs 调 API」卡片。

1 · 权重显存

# 稠密 / MoE 通用 M_weight = N_total × b_w # 量化格式的有效字节数 b_w(FP16) = 2 b_w(FP8) = 1 b_w(MXFP4) = 0.5 + 1/32 = 0.53125 # block=32, E8M0 scale b_w(INT4-g128) = 0.5 + 2/128 + 2/128 = 0.53125 # scale+zero, FP16 # MoE 结构拆分(由 total / active 反解) r = k / n_expert N_dense = (N_active − N_total·r) / (1 − r) N_expert = N_total − N_dense

2 · KV Cache

# 标准 GQA / MHA,每 token 每层 kv_per_tok = 2 × L_full × n_kv × d_head × b_kv # MLA(DeepSeek / Kimi K2 系):只存压缩潜向量 + RoPE 分量,不乘 2 kv_per_tok = L_full × (d_c + d_r) × b_kv # 混合线性注意力:只有全注意力层随长度增长 L_full = L × ρ_full # ρ = 全注意力层占比 # 线性层为固定状态,≈ L·(1−ρ)·n_head·d_head·d_state·b,与 seq_len 无关 M_kv = kv_per_tok × ctx_avg × batch

3 · 激活值与工作区

M_act ≈ T_prefill × d_model × b_a × c_1 # c₁ ≈ 8–20(框架相关) + T_prefill × k × d_model × b_a × 2 # MoE dispatch + combine + logits: T × V × 4 # 大 vocab 时不可忽略

4 · 总需求与卡数

M_total = (M_weight + M_kv + M_act) × (1 + f_frag) + n_gpu × M_fixed n_gpu = ⌈ M_total / C_gpu ⌉ # 隐式方程,需迭代求解 n_node = ⌈ n_gpu / 8 ⌉ # NVLink 域粒度取整

5 · Decode 吞吐(带宽 Roofline)

# MoE 关键:batch 下期望触达的专家数 E_touched(B) = n_expert × [ 1 − (1 − k/n_expert)B ] # 每个 decode step 需从 HBM 读取的字节 Bytes_step = [ N_dense + N_expert × E_touched/n_expert ] × b_w + kv_per_tok × ctx_avg × batch TPOT = Bytes_step / ( n_gpu × BW_gpu × MBU ) 吞吐_cluster = batch / TPOT 单序列速度 = 1 / TPOT

6 · Prefill 延迟(算力 Roofline)

FLOPs_prefill = 2 × N_active × T_prompt # 前向 2N 法则 + 2 × 2 × L_full × n_head × d_head × T_prompt² # 注意力二次项 TTFT ≈ FLOPs_prefill / ( n_gpu × FLOPS_gpu × MFU )

交叉点:当 T_prompt > 2·N_active / (2·2·L_full·n_head·d_head) 时,注意力二次项开始主导 prefill——这正是 1M 上下文必须上线性注意力的根本原因。

7 · 成本

# 云租赁 $/hr = n_gpu × price_gpu_hr # 自建 TCO(每 GPU 每 wall-clock 小时,不含 util 折扣) $/gpu·hr = capex/(years×8760) + TDP_kW × PUE × price_kWh # 单位 token 成本 —— util 折扣只在这里施加一次 $/1M_out = $/hr / (吞吐_cluster × 3600) × 10⁶ / util # 盈亏平衡:每月需产出多少输出 token 才追平 API T_breakeven = ($/hr × 730) / price_api_out_per_M # 单位 M tok/月
易错点:利用率 util 只能除一次。若在「每小时持有成本」里除过 util,又在「$/token」里再除一次,自建成本会被系统性高估约 1/util²,常见于 Excel 版本的 TCO 模型。

四种并行的显存与通信画像

策略权重分片KV 分片通信量/层适用域MoE 场景建议
TP 张量并行全部 ÷TP÷TP(按头切)2× AllReduce(T×d)NVLink 内,TP≤8用于 attention + dense 部分
EP 专家并行仅专家 ÷EP不分片(复制)All2All(T×k×d)×2可跨节点,EP 可到 64–320MoE 主力,K3 这种 896 专家必须用
PP 流水并行按层 ÷PP按层 ÷PP点对点 T×d跨节点,带宽要求最低显存实在不够时的兜底,但引入气泡
DP 数据并行不分片(复制)各自独立无(推理)任意扩吞吐用,代价是权重多份副本

MoE 大模型的典型配方

# Prefill 集群(算力密集,追求高 MFU) TP=8(节点内)× EP=节点数 × DP=1 # 大批 token,少并发 # Decode 集群(带宽密集,追求高并发) TP=8(节点内)× EP=大(跨节点)× DP=多副本 # 关键:EP 越大,单卡承担的专家越少 → 单卡权重读取压力越小 # 但 All2All 通信量与 batch 成正比,跨节点带宽会成为新瓶颈 # PD 分离(Prefill/Decode Disaggregation) # 两类节点独立扩缩容,通过 KV 传输衔接 —— 长上下文场景收益最大
EP 的显存直觉:896 个专家分到 EP=64,每卡只放 14 个专家。但 attention / 共享专家 / embedding 这些 dense 部分在每个 EP rank 上都要有一份——EP 开太大时 dense 副本会反噬显存。这是 EP 的实际上限来源。
负载不均衡:EP 下各卡专家被路由到的概率不等(尤其在 domain-specific 流量上),实测 P99 卡的负载可能是均值的 2–3×。需要 EPLB(专家负载均衡 / 冗余专家副本)——这会额外吃显存,务必在预算里留出 5–15%。

精度选择:先问「量化是训练时的还是事后的」

精度B/param硬件要求质量损失适用判断
BF16/FP162.0全部基线需要复现论文数值 / 做后训练时的参考
FP8 (E4M3)1.0Hopper+ 原生<0.5%生产默认值。2× 显存 + 2× 带宽,几乎无损
INT8 (W8A8)1.0Ampere+ 也可0.5–2%老卡(A100/A800)上的 FP8 替代
MXFP4 (QAT)0.531Blackwell 原生接近无损训练时就是 FP4(K3 走这条路),不是后量化,可放心用
FP4/INT4 (PTQ)0.531Blackwell / 软件模拟2–8%只在显存实在放不下时用,务必先跑领域评测
KV FP8—广泛可忽略几乎总该开。长上下文下省的比权重量化还多
决策顺序(按性价比排):① 先开 KV Cache FP8 → ② 权重降到 FP8 → ③ 上 PagedAttention / 前缀缓存压 KV → ④ 加 EP 摊薄权重 → ⑤ 最后才考虑权重 FP4。前四步几乎无损,第五步才需要做质量回归。
一个高频误判:「量化到 FP4 显存减半,所以吞吐翻倍」——只在 decode 且带宽受限时成立。Prefill 阶段是算力瓶颈,FP4 的收益取决于硬件是否有原生 FP4 Tensor Core(Hopper 没有,软件反量化反而更慢)。

对原信息图的复核结论

原图的核心口径正确,机器数换算与 8 卡整机口径完全对得上,但有两处值得注意:

项原图数值按其自述公式复算判定
FP16 总需求6720 GB5600 × 1.2 = 6720一致
FP8 总需求3360 GB2800 × 1.2 = 3360一致
FP4 总需求1400 GB1400 × 1.2 = 1680漏乘 20%
FP16 → B3003 台⌈6720/(288×8)⌉ = 3一致
FP16 → H2006 台⌈6720/(141×8)⌉ = 6一致
FP16 → H10011 台⌈6720/(80×8)⌉ = 11一致

原图未覆盖、但会决定成败的四件事

  • KV Cache 完全没进公式。1M 上下文是 K3 的卖点,而 KV 在长上下文下可以轻松超过权重本身。原图的「20% 冗余」明确写的是「激活值、通信缓存、系统上下文」,KV 是另外要加的。
  • 「装得下」≠「跑得动」。1 台 B300 装得下 FP4 权重,但那 8 张卡要扛住 2.8T 参数在大 batch 下的带宽压力,TPOT 会很难看。
  • MoE 的带宽行为随 batch 变化。「896 选 16」在 batch=256 时实际触达 99% 的专家——稀疏性在服务端几乎消失。
  • H100 不支持原生 FP4。原图 FP4 行里的「3 台 H100」在硬件上需要软件模拟反量化,实际吞吐远不如 Blackwell,这一格的可比性存疑。

本框架自身的不确定度

  • K3 的层数、注意力头配置、KDA 全注意力层占比尚未公开(技术报告随 7/27 权重一并发布)。本页 K3 预设中的这些值是基于同类混合架构的合理估计,已在预设名中标注「估」。总参数量、专家数、top-k、激活量、MXFP4 QAT 为官方公开值。
  • MBU 70% / MFU 40% 是社区在成熟推理栈(vLLM / SGLang / TRT-LLM)上的常见区间,实际值随框架版本、kernel、批调度策略波动 ±15pp。
  • 专家触达率公式假设路由均匀独立。真实流量有强 domain 局部性,实际触达率通常低于理论值——本框架在这一点上是保守(偏悲观)估计。
  • GPU 单价随供需剧烈波动,表中为 2026 年中的公开报价中位区间,仅作量级参考。