直接调 API 和自建开源模型推理,这笔账怎么算?
谁在问:二面 / 技术负责人;尤其是有 GPU 预算压力的中大厂平台组、正在评估私有化的 toB 团队
口语化问法
- 你们模型是直接调 API 还是自己部署的?为什么这么选?
- 老板说 API 太贵了,让我们自己搭一套。你觉得这笔账该怎么算?多大量级自建才划算?
- 如果让你今天做这个决策,你需要哪些数据才敢下结论?
考察意图
面试官在判断三件事:
- 你有没有真的算过账,还是跟着风向走。 2026 年这道题最典型的错误答案是"数据敏感所以自建"或"API 便宜所以调 API"——两句都是结论,不是推理。
- 你知不知道成本的真正构成。 只对比每百万 token 单价的人,一定没运维过推理集群:GPU 的钱是按小时付的,跑 20% 和跑 80% 一样贵。
- 你有没有意识到隐性成本。 自建的大头往往不是卡钱,是"有人得懂这个"。这一条能不能主动说出来,直接分开做过和没做过。
参考答案
60 分答案(及格线)
调 API 的好处是零运维、按量付费、模型能力跟着厂商升级;自建的好处是数据不出域、可以跑自己微调的权重、量大之后单位成本更低。
选择上主要看三件事:一是数据合规,如果数据不能出域就只能自建;二是调用量,量小的时候 API 划算,量大到一定程度自建的固定成本能摊薄;三是模型需求,如果要用自己微调的模型,API 侧通常没有对应支持。
具体的打平点要看业务,可以拿一个月的真实调用量估算:算出这些 token 走 API 要多少钱,再算自建需要几张卡、卡的月成本是多少,两边一比就有结论。
为什么只有 60 分:三条判据都对,但全部停在定性层面。"算出需要几张卡"这一步恰恰是最难的,也是面试官真正想听的——它取决于你的输入输出长度分布、并发模式和延迟约束,而不是简单的 token 总量除以吞吐。而且完全没提利用率和人力成本。
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,把评测、语料标注、离线摘要这类能异步的扔批处理;只有一个数据不能出域的私有化客户单独部署了一套自建集群,并且明确接受它的单位成本更高。
追问链
你说「用 goodput 折算」,具体怎么测?阈值怎么定?
期望goodput = 满足延迟约束的每秒完成请求数,先有 SLO 才测得了。SLO 按业务形态定:对话类 TTFT 500 毫秒内才算「有响应」,代码补全 100 毫秒级,离线批处理没有面向用户的 TTFT。压测对 TTFT 与 ITL 同时设阈值,长度分布必须贴近线上信号说得出「先有 SLO 才有 goodput」并盯压测样例长度分布 → 真压过;只说「wrk 压一下看 QPS」→ 没有延迟约束的概念你们自建集群的 GPU 利用率怎么看?看哪个指标?
期望不能只看算力利用率,三个一起看:算力利用率(真在算吗)、KV Cache 占用率(还剩多少并发余量)、排队时间与在跑请求数。那次故障是算力利用率只有 20% 而排队 12 秒 —— 这组合只可能是显存瓶颈。preemption 警告一出就是 KV Cache 不够信号指得出「算力利用率低但排队长 = 显存瓶颈」→ 真运维过;只报一个 GPU 利用率数字 → 看过面板没排过障业务方要支持 128K 上下文,你怎么估算需要几张卡?
期望先算 KV Cache:2 × 层数 × KV头数 × 头维度 × seq × 字节 × 并发—— 是 KV 头数不是注意力头数。Llama-3.1-8B 每 token 约 128 KB,128K 单条吃 16 GiB;80 GB 卡剩约 54 GiB,单卡只能并发三四条信号公式里写「注意力头数」、或答不出「单条长请求的 KV 顶一份模型权重」→ 只读过没算过上游 API 明天降价 50%,你的自建方案什么时候被打穿?
期望先拆打平点的构成:自建分母是卡的月成本 ÷ 有效 token 数,降价同时压低打平点、放大利用率不足的惩罚。更关键的是自建成本曲线是阶梯的(加一张卡一个台阶)、API 是线性的。应对不是重算一遍,是保持可撤退:调用收敛到网关后面,切回 API 只改配置信号主动说「阶梯 vs 线性」和「保持可撤退」→ 有架构视角;只说「再算一遍打平点」→ 只有算术没有架构下季度不批预算,业务量涨 3 倍,延迟 SLO 不许放宽,怎么排?
期望① 零风险:异步负载(评测、摘要、标注)挪去 API 批处理,五折不占集群 → ② 改配置:开前缀缓存、system prompt 改缓存友好、重调max_num_batched_tokens→ ③ 压 KV Cache:长文灰度 FP8 KV、超长请求单开队列 → ④ 分级降级到 API 小模型,这步有用户可见代价,先跟业务对齐 → ⑤ 最后砍功能信号上来就说「上语义缓存」或「换个小模型」→ 对代价不敏感;主动划出「不能偷偷放宽 SLO」→ 真扛过成本压力
评分要点
- 把决策拆成"硬约束"(合规、模型控制)和"经济性"(利用率、团队)两类,而不是并列四条
- 明确说出利用率是自建的生命线,且 API 按量付费天然只为用掉的部分付钱
- 用 goodput 而不是 throughput 折算单位成本,并能解释两者的差距意味着什么
- 主动提到人力与试错成本是自建的隐性大头
- 知道自建要打平的是 API 打完折之后的价(批处理五折、缓存命中 0.1 倍)
- 估算卡数时从 KV Cache 公式出发,且用的是 KV 头数
- 有"保持可撤退"的架构意识:把模型调用收敛到一层抽象后面
- 压力面下能给出有次序、有代价陈述的降本路径,并说得出哪些动作不能做