直接调 API 和自建开源模型推理,这笔账怎么算?

Q6-01推理服务选型与成本核算高频推理服务成本核算自建部署容量规划goodput利用率

谁在问:二面 / 技术负责人;尤其是有 GPU 预算压力的中大厂平台组、正在评估私有化的 toB 团队

口语化问法

  • 你们模型是直接调 API 还是自己部署的?为什么这么选?
  • 老板说 API 太贵了,让我们自己搭一套。你觉得这笔账该怎么算?多大量级自建才划算?
  • 如果让你今天做这个决策,你需要哪些数据才敢下结论?

考察意图

面试官在判断三件事:

  1. 你有没有真的算过账,还是跟着风向走。 2026 年这道题最典型的错误答案是"数据敏感所以自建"或"API 便宜所以调 API"——两句都是结论,不是推理。
  2. 你知不知道成本的真正构成。 只对比每百万 token 单价的人,一定没运维过推理集群:GPU 的钱是按小时付的,跑 20% 和跑 80% 一样贵。
  3. 你有没有意识到隐性成本。 自建的大头往往不是卡钱,是"有人得懂这个"。这一条能不能主动说出来,直接分开做过和没做过。

参考答案

图 2 · 60 分与 90 分差在哪:代价、演进、怎么验证

60

60 分答案(及格线)

调 API 的好处是零运维、按量付费、模型能力跟着厂商升级;自建的好处是数据不出域、可以跑自己微调的权重、量大之后单位成本更低。

选择上主要看三件事:一是数据合规,如果数据不能出域就只能自建;二是调用量,量小的时候 API 划算,量大到一定程度自建的固定成本能摊薄;三是模型需求,如果要用自己微调的模型,API 侧通常没有对应支持。

具体的打平点要看业务,可以拿一个月的真实调用量估算:算出这些 token 走 API 要多少钱,再算自建需要几张卡、卡的月成本是多少,两边一比就有结论。

为什么只有 60 分:三条判据都对,但全部停在定性层面。"算出需要几张卡"这一步恰恰是最难的,也是面试官真正想听的——它取决于你的输入输出长度分布、并发模式和延迟约束,而不是简单的 token 总量除以吞吐。而且完全没提利用率和人力成本。

90

90 分答案(有生产经验的回答)

我把这笔账拆成四个维度,前两个决定"能不能选",后两个决定"值不值得选"。

先看两个硬约束。 第一是数据主权与合规:数据能不能出域、行业有没有强监管、要不要物理隔离。这一条一旦成立,账就不用算了,只能自建。第二是模型控制:要不要跑自己微调的权重、要不要 LoRA 多租户、要不要改采样逻辑。这两条不成立的话,默认答案就是调 API。

然后是利用率,这是自建的生命线。 一张卡包月的钱是固定的,跑 20% 和跑 80% 花一样多;而 API 是按 token 计费,天然只为用掉的部分付钱——这是 API 最被低估的优势。所以真正的问题不是"我一个月用多少 token",而是"我的流量能不能把卡持续喂到 60% 以上"。有明显波峰波谷的业务,自建就是在为波谷付钱。

核算方式上,我坚持用 goodput 而不是 throughput。 压测跑出来的峰值吞吐里,有一部分请求的延迟已经超出用户能接受的范围了。如果 throughput 是 10 rps 但只有 3 rps 落在 SLO 内,你的有效成本就是账面成本的 3.3 倍。我们的做法是压测时同时对 TTFT 和 ITL 设阈值,只统计达标的那部分,再用它折算每百万 token 的自建成本。

第四个维度是团队,也是最容易被漏掉的。 自建的隐性成本不是卡钱,是得有人看得懂 preemption 日志、知道 max_num_batched_tokens 该往哪边调、能判断长上下文请求把并发打下去了。我们踩过一次坑:上下文从 8K 涨到 128K 之后 QPS 塌了十几倍,团队第一反应加卡、第二反应换小模型,两次都错——真因是 KV Cache 把显存吃光了,能并发的请求数从 50 多掉到 3 条。这两次试错的人力成本,够买很久的 API。

最后一条容易被忽略的是:自建要打平的不是 API 的标价,是 API 打完折之后的价。 批处理四家现在一律五折,prompt 缓存命中是输入价的 0.1 倍。把能异步的负载扔进批处理、把长 system prompt 做成缓存友好的结构之后,API 侧的实际支出可能只有标价的三四成——很多"算下来自建更便宜"的结论,是拿自建的最优情况对比 API 的最差情况得出来的。

我们最后的选择是混合:主链路调 API,把评测、语料标注、离线摘要这类能异步的扔批处理;只有一个数据不能出域的私有化客户单独部署了一套自建集群,并且明确接受它的单位成本更高。

追问链

图 1 · 五层追问树:面试官会往哪儿挖
追问不问选型结论,只问你算这笔账用的每个数字从哪来

  1. 你说「用 goodput 折算」,具体怎么测?阈值怎么定?

    期望goodput = 满足延迟约束的每秒完成请求数,先有 SLO 才测得了。SLO 按业务形态定:对话类 TTFT 500 毫秒内才算「有响应」,代码补全 100 毫秒级,离线批处理没有面向用户的 TTFT。压测对 TTFT 与 ITL 同时设阈值,长度分布必须贴近线上
    信号说得出「先有 SLO 才有 goodput」并盯压测样例长度分布 → 真压过;只说「wrk 压一下看 QPS」→ 没有延迟约束的概念
  2. 你们自建集群的 GPU 利用率怎么看?看哪个指标?

    期望不能只看算力利用率,三个一起看:算力利用率(真在算吗)、KV Cache 占用率(还剩多少并发余量)、排队时间与在跑请求数。那次故障是算力利用率只有 20% 而排队 12 秒 —— 这组合只可能是显存瓶颈。preemption 警告一出就是 KV Cache 不够
    信号指得出「算力利用率低但排队长 = 显存瓶颈」→ 真运维过;只报一个 GPU 利用率数字 → 看过面板没排过障
  3. 业务方要支持 128K 上下文,你怎么估算需要几张卡?

    期望先算 KV Cache:2 × 层数 × KV头数 × 头维度 × seq × 字节 × 并发 —— 是 KV 头数不是注意力头数。Llama-3.1-8B 每 token 约 128 KB,128K 单条吃 16 GiB;80 GB 卡剩约 54 GiB,单卡只能并发三四条
    信号公式里写「注意力头数」、或答不出「单条长请求的 KV 顶一份模型权重」→ 只读过没算过
  4. 上游 API 明天降价 50%,你的自建方案什么时候被打穿?

    期望先拆打平点的构成:自建分母是卡的月成本 ÷ 有效 token 数,降价同时压低打平点、放大利用率不足的惩罚。更关键的是自建成本曲线是阶梯的(加一张卡一个台阶)、API 是线性的。应对不是重算一遍,是保持可撤退:调用收敛到网关后面,切回 API 只改配置
    信号主动说「阶梯 vs 线性」和「保持可撤退」→ 有架构视角;只说「再算一遍打平点」→ 只有算术没有架构
  5. 下季度不批预算,业务量涨 3 倍,延迟 SLO 不许放宽,怎么排?

    期望① 零风险:异步负载(评测、摘要、标注)挪去 API 批处理,五折不占集群 → ② 改配置:开前缀缓存、system prompt 改缓存友好、重调 max_num_batched_tokens → ③ 压 KV Cache:长文灰度 FP8 KV、超长请求单开队列 → ④ 分级降级到 API 小模型,这步有用户可见代价,先跟业务对齐 → ⑤ 最后砍功能
    信号上来就说「上语义缓存」或「换个小模型」→ 对代价不敏感;主动划出「不能偷偷放宽 SLO」→ 真扛过成本压力
一句「用 goodput 不用 throughput」就把算过账的和拿单价表说事的分开了。前两层验你测没测过,第 3 层要你当场算 KV Cache,第 5 层看的是降本动作的次序。

评分要点

  1. 把决策拆成"硬约束"(合规、模型控制)和"经济性"(利用率、团队)两类,而不是并列四条
  2. 明确说出利用率是自建的生命线,且 API 按量付费天然只为用掉的部分付钱
  3. goodput 而不是 throughput 折算单位成本,并能解释两者的差距意味着什么
  4. 主动提到人力与试错成本是自建的隐性大头
  5. 知道自建要打平的是 API 打完折之后的价(批处理五折、缓存命中 0.1 倍)
  6. 估算卡数时从 KV Cache 公式出发,且用的是 KV 头数
  7. 有"保持可撤退"的架构意识:把模型调用收敛到一层抽象后面
  8. 压力面下能给出有次序、有代价陈述的降本路径,并说得出哪些动作不能做

常见错误

只对比每百万 token 单价,不提利用率、不提固定成本的阶梯性质。这是最典型的纸面回答。
"数据敏感所以必须自建"——说完就停。没有区分"不能出域"和"希望更可控",也没提可以用云厂商的私有化部署或专属实例这类中间选项。
"量大了自建肯定便宜"——不给量级,不问流量形态。稳定基线负载和尖峰负载的结论完全相反。
用压测峰值吞吐算成本,不提延迟约束。这是 goodput 这个概念存在的全部原因。
完全不提人力。自建方案里最贵的常常是那个能读懂 preemption 日志的人。
含糊表述:"我们评估过,觉得还是自建更合适"——问不出评估了什么、看了哪些数字、结论边界在哪。
把"自建"和"用开源模型"混为一谈。用开源模型也可以走托管推理服务,不一定要自己买卡运维。这两件事被混起来时,整段回答的判据都会失焦。

关联学习