调用大模型 API 时,账单总是按 Token 数结算,而非按请求次数或响应时间。今天系统地想了一遍这背后的逻辑。
Token 为何是计费的最小单位
Token 是大模型的最小计算单元。GPU 每处理一个 Token(无论是理解还是生成),都要将其送过模型的所有神经网络层,完成矩阵乘法。计算量随 Token 数呈平方级或线性增加。
相比之下,按请求计费无法区分「你好」和「帮我分析这份五十页合同」之间数百倍的工作量差异;按时间计费则因服务器并发的存在而失真——同样挂钟一秒内,不同用户实际占用的算力可能天差地别。Token 是目前最能准确映射实际成本的计量粒度。
推理成本的三个层次
显存占用是最大的成本来源。一个 70B 参数的原版模型,仅加载权重就需要约 140GB 显存,目前没有任何单张显卡能够装下,必须依赖多卡(如两张 A100)联合加载。即使采用了 int4 量化技术,也需要占用约 35GB 显存。只要服务在运行,这些显存就必须被「包租」,无法服务其他用户。
模型权重在服务启动时加载一次,之后所有用户的请求都在同一份权重上运行推理——权重是只读的共享数据。模型推理时,需要将每个 Token 的中间计算结果(Key-Value 对)缓存在显存中,供后续计算注意力时复用。这份缓存就是 KV Cache,是每个请求私有的,承载着对话的上下文记忆,不同用户之间完全独立。
KV Cache 的压力随上下文长度线性增长。模型在推理过程中,需要将所有历史 Token 的中间计算结果缓存在显存中,才能高效计算注意力。上下文越长,缓存越大,单卡能同时服务的并发数(batch size)就越低——这是长上下文模型定价更高的根本原因。
显存带宽,而非算力(FLOPS),才是推理速度的真正瓶颈。每生成一个 Token,GPU 都需要将数十 GB 规模的模型权重从显存搬到计算单元。这个「搬运」过程的速度上限,决定了模型的生成速率。量化技术(将权重从 fp16 压缩至 int4)能大幅提速,本质上是减少了搬运的数据量,而非减少了运算量本身。
为什么输出 Token 比输入贵三到五倍
这里有一个不对称性值得单独说明。
输入阶段(Prefill) 可以完全并行。Transformer 的 Self-Attention 机制在处理输入时,所有 Token 之间的注意力权重可以同时计算——这些计算之间不存在数据依赖关系,GPU 可以一次性并发完成所有矩阵运算,耗时大致等于处理单个 Token 的时间。
输出阶段(Decode) 则是严格串行的。生成第 N 个 Token 之前,必须先拿到第 N−1 个 Token 的结果,因为新 Token 会被追加进上下文,参与下一步的预测。这种自回归特性是语言生成本身的数学约束,无法绕开。串行意味着 GPU 利用率低,单位 Token 的实际成本更高,定价因此也更高。
总结
- Token 是 GPU 矩阵运算的最小可计量单元;每多一个 Token,算力消耗至少线性增加,所以 Token 数是目前最公平、最可预测的计费粒度。
- 模型参数越多推理成本越高:因为占用的显存更多、推理时需要搬运的数据量更多。
- 长上下文推理成本高:因为占用的 KV Cache 更多,压低了可以支持的并发。
- 输出 Token 比输入 Token 更贵:因为输出阶段是串行的,GPU 利用率更低。
Footnotes
-
SM 是 NVIDIA GPU 的基本计算单元,每个 SM 内部包含若干 CUDA 核心(负责实际的浮点运算)、寄存器、L1 缓存和共享内存。一张 H100 SXM 有 132 个 SM,并行计算能力来自这些 SM 同时工作。 ⤴