为什么 output token 的价格比 input token 更贵?

题目

为什么 output token 的价格比 input token 更贵?

答案

翻一翻各大厂家的 API 定价,会发现基本上 输出 token 的价格是输入 token 价格的好几倍

图片

首先从计算量的角度来看,对于输入的 D 个 token,和输出 D 个token来说,FLOPs 都大约是 2ND,其中 N 为参数量。至于为什么 FLOPs 为什么是 2ND, 可以看这篇:学妹问:“反向传播的计算量是前向传播计算量的几倍?”

从内存角度来看输入 token 和 QKV 等矩阵大小输出 token也差不太多,只不过输出 token 采用 KV Cache 的形式。

既然计算量和内存占用都差不多,从资源的角度来讲,成本是差不多的。那最终成本究竟差在哪里呢?

其实是差在资源的利用率上。

要知道 GPU 在运算的时候,既有计算,又有数据通信。这就存在一个最佳的 ops:bytes ratio。

通俗点来讲,就是每读取一份数据 (比如一个 FP16/BF16), 应该执行多少 FLOPs。

如果算的比读的快,那通信就是瓶颈,因为这个时候 GPU 的 SM 在等待。

如果算的比读的慢,那计算就是瓶颈,这个时候通信需要等待

大模型训练,大多数情况下,通信是瓶颈,所以都是算的快,读的慢。这样计算下来,整体的 MFU (Model FLOPs utilization) 很难打满。

经过这么长时间的优化,目前大模型的训练 MFU 在50-60% 就已经很厉害了。

回到题目,对于 D 个输入 token 来说,模型只需要执行一个 forward 计算,可以充分的并行,整个计算过程的利用率能接近训练的最高水平。

然而对于 输出 token 来说,必须是一个 token 一个 token 的生成,对于 D 个输出 token 来说,需要执行 D 次 forward 操作。本来通信就是瓶颈,现在 D 次 forward 的额外通信更是雪上加霜。虽然现在也有batch 上,还有动态填充等优化,但是 GPU 利用率上来说,输出是远低于输入的

假如你是老板,招聘了两个员工,他们干的活是一样多的,消耗资源成本也都一样。一个完成一件事情需要1个小时,一个完成一件事情需要1天,你该怎么发工资呢?

— END —

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI生成曾小健

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值