目录
在自然语言处理模型,特别是生成式模型(如GPT系列)中,预测时间的近似估算可以表示为:
y=kx+b
其中:
- y 是总预测时间。
- x 是生成的 token 总数量。
- k 是生成每个 token 的平均耗时。
- b 是生成首个 token 的耗时。
这个公式中的 b 和 k 主要受到以下几个因素的影响:
1. 首个 Token 的生成耗时(b)
首个 token 的生成耗时较长,主要原因如下:
1.1 编码阶段
在生成第一个 token 时,模型需要对输入的 prompt 进行编码。这涉及到将输入序列通过多层 Transformer 编码器进行处理,以生成上下文向量。
1.2 KV Cache 初始化
在生成第一个 token 时,模型需要初始化 Key-Value (KV) 缓存。KV 缓存用于存储每一层 Transformer 的键和值,以便在生成后续 token 时,可以快速访问这些缓存,减少重复计算。初始化 KV 缓存的过程较为耗时,因为需要对整个输入序列进行计算。
1.3 长度相关性
首个 token 的生成耗时与输入 prompt 的长度呈正相关,因为较长的输入序列需要更多的计算资源和时间来进行编码和初始化缓存。
2. 后续 Token 的生成耗时(k)
生成后续 token 的耗时较短,主要原因如下:
2.1 KV Cache 利用
在生成后续 token 时,模型可以利用之前生成的 KV 缓存,从而避免对整个输入序列进行重复计算。这样,生成每个新 token 只需要在现有缓存的基础上进行增量计算,大大减少了计算量和时间。
2.2 自回归生成
生成每个新 token 时,模型会将前一个 token 的输出作为输入,结合 KV 缓存,快速生成下一个 token。这种自回归生成方式在时间复杂度上相对较低。
详细过程
- 输入编码:模型首先对输入 prompt 进行编码,生成上下文向量。这一步包括嵌入层和多层 Transformer 编码器的计算。
- KV 缓存初始化:在生成第一个 token 时,模型会初始化 KV 缓存,用于存储每一层 Transformer 的键和值。
- 首个 token 生成:利用上下文向量和初始化的 KV 缓存,生成第一个 token。
- 后续 token 生成:在生成每个新 token 时,模型利用之前的 KV 缓存和前一个 token 的输出,进行增量计算,快速生成下一个 token。
近似估算公式的应用
通过公式 y=kx+b,我们可以近似估算模型的预测时间:
- 首个 token 的耗时 b:与 prompt 的长度和 KV 缓存的初始化有关,通常是生成每个 token 耗时 k 的十几倍或更多。
- 每个 token 的平均耗时 k:由于利用了 KV 缓存,生成每个新 token 的耗时较短且相对稳定。