辅助式文本生成 - 文本生成新范式
引言
LLM 要跨越从早期采用者到大众市场的鸿沟,其必要条件是价格大众化,也就是降低每词元的价格。
这种降低最好是“免费”的降低,而不是“讨价还价”的降低。拿电价打比方,这种降低最好是直接的电费降低,而不是使用“省电小妙招”带来的降低,这样才能真正做到大众化。在这种语境下,prompt 压缩、模型量化这类优化就是“讨价还价”型优化,它们要么需要用户具备某些专家性的知识、要么需要用户放弃一些生成质量的一致性要求,总之是需要用户付出一些成本。
模型量化不是“免费”的降价
以BLOOM-176B
为例,对提示 Once upon a time, there existed a little girl, who liked to have adventures. She wanted to go to places and meet new people and have fun.
原始 BF16 模型的生成为:She wanted to see the world, and she wanted to be a part of it. She wanted to make a difference, and she wanted to make the world
直接量化后的 INT8 模型生成为:She wanted to learn new things. She wanted to do things she had never done before. She wanted to do things she had never done before. She wanted to
INT8 量化模型结巴了!
辅助式文本生成带来了这种可能性,不需要“头秃”去做 prompt 压缩,也不需要小心翼翼地对模型进行量化以使质量损失控制在可接受的范围内,它通过引入一个“起草 + 审阅”的新范式,引入了一个无损的模型加速范式。其原理如下图所示:
假设要对 BLOOM-176B
模型进行加速,在辅助式文本生成的范式中,我们把它叫做 target generator
(蓝色框)。我们给它配一个小弟,就叫它 draft generator
(黄色框),顾名思义,就是负责给它起草回答的。这样,班子就搭起来了,工作模式就变成了:小弟负责起草,大哥负责审阅。这种范式的好处很直白:
-
速度快。我们知道,目前的 LLM 几乎全部都是
decoder-only
架构的,其本质是自回归模型,也就是输出需要一个字一个字地生成,这也是 LLM 生成很难加速的本质原因,因为有step-wise dependency
。辅助式文本生成将step-wise dependency
乾坤大挪移给了开销小的draft model
,而target model
只需要负责验证的部分,而验证是一个典型的CLM(Causal Language Modeling)
工作负载,一把头就可以全部验证完。举个实际的例子: 用 LLaMA-2-13B 在 A100 GPU 上生成 128 个词元的时间所花的时间是对同样长度的序列做 CLM 前向所花时间的约 100 倍。因此可以想见,step-wise dependency
的转移,释放了速度的潜能。 -
生成一致。因为最终输出结果是由
target model
审定的,在使用“精确匹配”的审定策略时,可以做到输出一致,无需生成质量的任何折衷。
完美切中我们的诉求。
我们以上图为例,我们过一遍辅助式生成范式的工作流程:
-
第一步:由
draft model
为提示"The orange cat"
生成K
个补全词。本例中,K
为 3,draft model
生成了 3 个补全词ate the fish
。 -
第二步:将
The orange cat ate the fish
送给target model
执行前向 logit 计算。target model
算得第 2 个补全词the
的 logit 并非最大,而是my
最大,因此拒绝了draft model
生成的第 2 个词及其之后的词,也即其接受了 的补全词,最终本轮的输出补全词为ate my
,词数为 2。 -
第三步: 确定是否满足结束条件,如满足结束生成;如不满足,提示变成
"The orange cat ate my"
返回第一步,继续生成。
在上述流程中:K
为草稿窗口,即每次打草稿生成多少个词,也叫 look ahead window
; 为接受率,我们用 表示;最终经 target model
审定后输出的词数为 ,我们叫它压缩率(compression ratio)
。
由此,我们可以得到一个辅助式文本生成的经验加速公式:
其中 为 draft model
的每词元延迟, 为 target model
的每词元延迟。
可以看到,想要获得好的加速需要提高接受率 、降低 ,这两者有时是正相关的,因此需要折衷。
What-If 分析