# 热门搜索 #
搜索
为什么大模型API的output token比input token贵?
1710点击    2024-09-11 10:21


从大模型爆发到现在,我就一直好奇为什么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”



关键词: 大模型 , AI , token , 人工智能