一百万 token 的成本:两种方式都算给您看。
API 按 token 计费,空闲时不产生任何费用。机器按月计费,不按 token 收费。哪一种更便宜,只是一道除法题——而答案更多取决于您让机器保持多忙,而不是两者的价格本身。
简短的答案
- 盈亏平衡点是一个用量
- 这不是一个单价。每月 $692买到的,是这台服务器实际能产出的全部 token—问题在于,您是否有那么多工作要做。
- 与顶尖 API 相比
- 在我们最便宜的节点上,单流、不做批处理,每百万 token 的成本已经只要 $6.42。这低于顶尖闭源模型收取的 $15.00,而且您还没做任何批处理。
- 与同一开放权重模型相比
- 您大约需要达到单流吞吐量的 7.1×,才能在每百万 token 的价格上胜过 $0.90。这正是连续批处理的用途所在,也是家常便饭。
- API 仍然胜出的场景
- 流量陡峭、总量偏低,以及任何没人愿意把权重卖给您的模型。
简要版本
几乎所有你读到的这两者对比,最终都会归结成一个孤零零的数字—“自建便宜十倍”“API 便宜,直到你规模巨大为止”—而这两种说法犯的是同一个错误:给一台并非按 token 计费的机器算出一个每 token 成本。一台租用的 GPU 只有一个价格,且它不会变动:这个月您生成十亿个 token,还是一个都没生成,账单都完全一样。所以真正诚实的问题不是“这里每个 token 多少钱”,而是“需要生成多少 token,固定价格才能反超计量计费”。
这个数字是一次除法运算,下文将用我们自己的价格和吞吐量模型来计算—正是配置器所使用的同一套模型。此后的内容,都是关于决定您能否达到这个用量的两个因素:批处理,以及您让服务器闲置的时长。
运算
四行公式。第三行值得写在白板上;第四行是人们常常跳过的一行,而跳过它,正是一个可靠的估算变成错误估算的原因。
# 1. What the API charges. Linear in what you use, zero when you stop.
api_cost_per_month = output_tokens_per_month / 1e6 × api_price_per_million
# 2. What the machine charges. A constant. Tokens are free once you own the hours.
machine_cost_per_month = monthly_price
# 3. Set them equal. This is the break-even VOLUME, in output tokens per month.
break_even_tokens = monthly_price / api_price_per_million × 1e6
# 4. And the only question that matters: can the machine produce that many?
# 730 hours is the month we bill, so 2,628,000 seconds of it.
sustained_tokens_per_second = break_even_tokens / 2,628,000
第 4 行是持续速率,而非峰值。一台服务器如果每天有一小时达到每秒 600 个 token,其余二十三小时闲置,其持续速率就是 25,账单可不管您说的是哪一个。
单流的成本
先从最差情形说起,因为这是唯一无需任何假设就能给出的数字:一次一个请求,不做批处理,其余时间服务器闲置。以下每个节点都以 4-bit (AWQ, GPTQ) 运行 Llama 3.3 70B,吞吐量是我们自己给出的保守估算—它受限于显存带宽,而非在状态最好的那天测出来的数字。
| 节点 | 它如何运行模型 | 每月 | 单流 | 每百万 token 成本 |
|---|---|---|---|---|
| 2 × NVIDIA RTX 5090 | 拆分到全部 2 张卡上 | $692 | 41 tok/s | $6.42 |
| 2 × NVIDIA RTX 4090 | 拆分到全部 2 张卡上 | $416 | 23 tok/s | $6.88 |
| 4 × NVIDIA RTX 5090 | 拆分到全部 4 张卡上 | $1,345 | 68 tok/s | $7.53 |
| 4 × NVIDIA RTX 4090 | 拆分到全部 4 张卡上 | $814 | 38 tok/s | $8.15 |
| 2 × NVIDIA A100 PCIe | 拆分到全部 2 张卡上 | $802 | 36 tok/s | $8.48 |
| 8 × NVIDIA RTX 5090 | 拆分到全部 8 张卡上 | $2,584 | 100 tok/s | $9.83 |
请把这个数字当作上限,而不是报价。它是这样算出的:让服务器一次只回答一个问题,其余时间整月闲置—这是拥有一块 GPU 效率最低的用法。任何真正的推理服务栈都会做得更好,接下来两节要说的正是好多少。
各档次的盈亏平衡点
取上表中最便宜的一行—2 × NVIDIA RTX 5090,每月 $692—问它需要处理多少工作量,才能在 API 市场的各档次中胜出。
| 您原本要付的价钱 | 每百万输出 token | 盈亏平衡点 | 持续速率 | 相较单流 |
|---|---|---|---|---|
| 顶尖闭源模型 | $15.00 | 46M | 18 tok/s | 已经更便宜 |
| 中端闭源模型 | $4.00 | 173M | 66 tok/s | 1.6× |
| 开放权重 70B,专业服务商 相同权重 | $0.90 | 769M | 293 tok/s | 7.1× |
| 开放权重 70B,最便宜的无服务器方案 相同权重 | $0.40 | 1,730M | 658 tok/s | 16.1× |
最后一列就是本文的核心。凡是写着「已经更便宜」的地方,$692 服务器上一条未经批处理的单流就能胜过 API,无需多想。凡是显示倍数的地方,服务器仍有胜出的机会—但前提是您真正把它喂饱,这正是下一节的内容。
批处理才是关键
生成一个 token 需要从显存中读取一次活跃权重。为一百个不同请求生成一百个 token,同样只需要读取一次—同一份权重服务于该批次中的每一个请求。这就是为什么采用连续批处理的推理服务栈,在相同硬件上能产出比单流多出许多倍的每秒 token 数,也是为什么那张表格最后一列所示的倍数真实可达。
批处理能带来什么
总吞吐量会随并发数陡峭上升,此时权重仍是瓶颈;随后 KV 缓存逐渐占满显卡,计算本身成为限制,吞吐量趋于平缓。
- 远超单流的倍数是常态,并非乐观估计
- 除了额外缓存占用的显存外,不产生任何成本
- vLLM 默认就会这样做 —您无需配置它,只管投喂它
它会让您付出什么
吞吐量不会随并发数线性增长,而且每请求延迟会随批次增大而变差。六十四条流并不会给您六十四倍的 token 产出。
- 每条流的生成速度都比单独运行时更慢
- 率先耗尽的是 KV 缓存—请刻意为其预留空间
- 空闲的批处理槽位不产生任何输出:您没有用到的并发,价值为零
实际含义是:把盈亏平衡表中的倍数当作吞吐量目标,而不是用户数。「单流的十倍」这个目标,并不意味着「十个用户」;它意味着服务器平均要达到未批处理速率的十倍,这通常需要远超十个、又远少于一百个的并发请求。在您确定具体数字之前,先在服务器上实测—这只是一次基准测试,却能一锤定音。
您仍需付费的闲置时间
以上都假设负载在整个月内均匀分布。而实际情况从来不是这样。按月租用的机器,在周日凌晨四点也照样计费,那个时段您没有生成的 token 不会顺延到之后。把您实际提供服务的那部分时间,除以您实际付费的时间:
| 负载到来时 | 每周小时数 | 所需峰值速率 | 实际每百万 token 成本 |
|---|---|---|---|
| Continuously, 24/7 | 168 h | 持续速率 | $6.42 |
| 每天十二小时 | 84 h | 2.0× | $12.84 |
| 工作日的上班时间 | 40 h | 4.2× | $26.97 |
| 每天两小时 | 14 h | 12.0× | $77.07 |
第三行是大多数内部工具所在的区间,它会悄悄把您的盈亏平衡点拉高四倍以上。这正是自行托管估算出错的最常见原因—不是 token 单价,不是硬件,而是把「一个工作周」当成了「一整周」的假设。
为什么您的提示词几乎不花钱
有一种不对称性明显有利于自建服务器,而任何按 token 单价的比较都体现不出来。API 会对输入 token 收费—通常是每 token 输出价格的四分之一到三分之一。而在您自己的 GPU 上,输入 token 是在预填充(prefill)阶段处理的,该阶段并行处理整个提示词,受限于算力而非显存带宽。预填充阶段每秒处理的 token 数比生成阶段高出一个数量级。
这套算法没有算进去的东西
四件从不会出现在“每 token 成本”表格里的事,但它们决定这个问题的份量,不亚于数字本身。
每一次请求都会去往某处。API 会看到您的提示词,而提示词就是您的产品、客户的文档或您的代码。在您租用的机器上,权重和流量都留在这台机器上—而且我们从一开始就没有问过您是谁。这不是一项可以量化的成本,但对某些工作负载来说,它就是全部的决定因素。
模型会被弃用;您的不会。托管模型可能会更改、换成行为不同的新版本,或者按不由您决定的时间表下线。存在您自己 NVMe 上的一套权重,一年后行为依然相同,如果您曾针对它做过评估,这一点意义重大。
固定价格是另一种数字。按量计费意味着一个 bug、一次重试循环或一波流量突增,都会变成一张事后才发现的账单。按月租期不会给您带来意外:最坏的情况是机器慢,而不是账单贵。
总得有人来运维它。自建的真实成本,包括一个下午的搭建时间,以及驱动或容器偶尔出问题的某个夜晚。我们的文档的存在,就是为了把这段时间压缩成一个下午而不是一周,但这个成本并不是零,假装它是零,正是这类对比失去可信度的原因。
您站在哪一边
按顺序阅读,遇到第一条符合您情况的就停下。
- 您需要顶尖闭源模型的质量。那么本文并不适用:没有人会把那些权重租给您。请使用 API,等到某个开放模型在您的具体任务上追平差距时再重新考虑。
- 您的流量不大,或者您现在还不清楚。请使用 API。这是摸清您真实流量情况最便宜的方式,而计量计费本身就是一件很好用的测量工具。
- 您的流量波动大,且能容忍排队。请使用 API,或者拆分处理:用自己的机器承担稳定的基础负载,用托管接口应对峰值。没有什么强制要求只能选一种方式。
- 您正针对一个开放权重模型,持续承载真实的批量流量。这正是硬件胜出的场景,而且胜出很多—固定价格不再变动,而计量表还在持续走动。在相信这一点之前,先核对上表中您自己的数字。
- 提示词敏感、模型不能变动,或者账单必须提前可知。这种情况下,算式只是走个形式。租下能容纳您模型的机器,不必告诉任何人您是谁,为它付款即可。
无论您在哪一行停下,要核对的都是盈亏平衡表中对应您的模型和您的用量的那个数字。配置器会针对我们出租的每个节点,报告您的模型能否放进单张卡、是否需要拆分,以及吞吐量估算是多少—这正是这套算法所需的全部输入。如果您还在犹豫按月租用还是按小时计费,那是另一个盈亏平衡问题,同样已经算好。