大模型的快和慢:看懂 TTFT、TPOT 和 E2E
文字稿约 1200 字 · 按画面章节整理展开收起
问 AI 一个问题,你等的是哪一种“慢”?
你有没有遇到过这种情况:问 AI 一个问题,它愣了好几秒才开口。还有一种情况:它倒是秒回,但字一个一个往外蹦,半天写不完。这背后,其实是三个不同的数。
今天我们就在一台笔记本上,跑一个开源小模型,实测一下 TTFT、TPOT 和 E2E。
打个比方:去餐厅点一桌菜
先打个比方。你去餐厅,点了一桌菜。下单之后,厨房要先看单、备料,然后第一道菜才上桌。从下单到第一道菜上桌,这段等待就是 TTFT,首字时间。之后菜一道一道地上,两道菜之间隔多久,就是 TPOT。而从下单到最后一道菜上完,一共多久,就是 E2E,端到端耗时。换成大模型:一道菜,就是一个 token;看单备料,就是模型读你的输入。
三个缩写,全称是什么
有了 token,这三个缩写的全称就好懂了。TTFT,是 Time To First Token:第一个 token 出来要多久,也叫首字时间。TPOT,是 Time Per Output Token:每多输出一个 token 要多久,也叫生成间隔。E2E,是 End to End:从发出请求到最后一个 token 到达,叫端到端耗时。
一次真实的回答,慢放 40 倍
先看一次真实的回答。我们把它慢放 40 倍。发出请求后 21 毫秒,第一个 token 出来了,这是 TTFT。之后,大约每隔 11.5 毫秒,蹦出一个新 token。上面每一根绿线,就是下面的一个 token;线和线之间的间隔,就是 TPOT。最后一个 token,是一个看不见的“结束”标记,它在第 425 毫秒到达,这就是这次的 E2E。
三个数,能拼成一个式子
这三个数,其实能拼成一个式子:E2E,等于 TTFT,加上 TPOT,乘以“输出的 token 数减一”。为什么要减一?因为第一个 token 算在 TTFT 里了,后面 35 个间隔,才是 TPOT。代入刚才这次:21 加 11.53 乘 35,算出来 425 毫秒,就是实测的 E2E。所以,只要知道其中两个数,再加上输出多长,就能算出第三个。
四个小实验,分别影响哪个数?
接下来做四个小实验,看看它们分别影响哪个数:冷启动、长输入、同样的输入再发一次,还有长回答。
实验一:冷启动 vs 模型已在内存里
第一个实验:冷启动,模型还没加载,首字时间是 1.43 秒。其中 1.36 秒,都花在把模型装进内存上;模型已经在内存里,同样的问题,只要 21 毫秒。
实验二:输入变长 实验三:同样的输入再发一次
第二个实验:把输入加长到 2550 个 token。首字时间一下涨到 1.76 秒,但生成间隔只从 11.5 毫秒变成 14.8 毫秒。第三个实验:同样的长输入,再发一次。首字时间只要 56 毫秒,因为前面算过的输入,被缓存下来了。
实验四:让它写一段长回答
第四个实验:同一个模型,让它写一段长回答。输出从 36 个 token 变成 419 个,E2E 从 425 毫秒涨到 6.4 秒。但首字时间只有 62 毫秒,用户照样觉得它秒回。
三个数,各自由不同的东西决定
总结一下,这三个数,各自由不同的东西决定。首字时间,看输入多长、模型有没有加载好、能不能命中缓存;生成间隔,看模型多大、硬件多快;端到端耗时,就是首字时间,再加上输出长度乘以生成间隔。
下次看到一个“速度”数字,先问四件事
下次再看到一个速度数字,先问四件事:它测的是首字时间、生成间隔,还是端到端?输入有多长?输出有多长?是冷启动,还是模型已经在内存里?
今天我们把 TTFT、TPOT 和 E2E,拆开讲清楚了。下一期聊推理模型和 Agent:为什么“秒回”,有时候只是假象。