大模型爆发到现在,我就一直好奇为什么output token比input token要贵,而且有的会贵好几倍!今天就这个话题和大家聊一聊。

为什么大模型API的output token比input token贵?

计算量(FLOPs)

对于输入和输出相同数量的token,模型的浮点运算次数(FLOPs)大致相同,这个计算量是由模型的前向传播决定的,无论是处理输入还是输出。

内存

输入 token 的QKV是并行计算,输出token的QKV是KV Cache 的形式。从内存的角度来讲,输出时需缓存此时token前的KV矩阵,经过一系列的优化手段,输出所占显存比输入大的并不多。

通信瓶颈

如果GPU计算速度超过数据读取速度,GPU的流处理器就会处于等待状态,那通信就是瓶颈;反之,如果计算速度慢于数据读取速度,通信就需要等待,那就是计算瓶颈。而大模型训练在多数情况下,都是算的快读的慢,即通信是瓶颈。

经过长时间的优化,整体的 MFU (Model FLOPs utilization) 很难打满,目前大模型的训练 MFU 在50-60% 就已经很厉害了。

并行与序列化

在计算量时写过,对于输入token来说,模型可以利用并行只需执行一个 forward 计算,整个计算过程的利用率能接近训练的最高水平。

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

总结

  • 计算量大致相同
  • output所需内存比input大
  • 由于计算output时需要逐一计算,所以存在通信瓶颈,使计算output时GPU利用率较低

以上原因,导致了output token比input token更贵一些。

文章来自于微信公众号“AI有温度”,作者“安泰Rolling”

关联网址

关联标签

文章目录

发评论,每天都得现金奖励!超多礼品等你来拿

后,在评论区留言并审核通过后,即可获得现金奖励,奖励规则可见: 查看奖励规则
暂无评论...