

虽然像GPT-4和LLaMA这样的大型语言模型正在快速重新塑造现代应用,但它们的推理速度较慢且很难优化,因为它们是基于自回归解码的。LLM的请求延迟主要取决于请求的答案长度,或者等效地说,解码步骤的数量,因为每个自回归解码步骤一次只产生一个标记。不幸的是,当前的GPU并行处理能力通常没有得到充分利用,因为每个解码步骤没有利用它。这对于许多实际的LLM应用(如聊天机器人和个人助理)来说是个问题,它们依赖于即时响应,并因此经常产生具有低延迟的大序列。
自回归解码可以通过使用像Medusa和OSD这样的猜测解码方法加速,这些方法使用“猜测和验证”的策略,其中初步模型对未来的几个可能标记进行预测,然后原始LLM并行地检查这些预测。这些方法可以通过利用需要更少解码步骤时的情况来减少延迟。然而,它们也有一些限制。首先,标记接受率,或者等效地说,草稿模型正确预测主模型输出的能力,是基于猜测解码方法能够实现的最大速度增加的上界。其次,开发可靠的初步模型并不容易,通常需要更多的训练和精心调整来应对随时间变化的流量变化。
LMSYS ORG的一项新研究提出了前瞻解码,这是一种新颖的精确解码技术,用于解决这些困难。虽然在单个步骤中解码许多连续标记在计算上是不可行的,但观察到LLM可以同时生成多个正交n-gram。这些n-gram有可能适应所创建序列的未来部分。传统的雅可比迭代方法被改进为并行解码,这样可以将自回归解码视为非线性方程的解。生成的n-gram被记录、检查,然后(如果合适)被并入序列。前瞻解码特别值得注意的是:
- 它不使用初步模型,从而加速了推出速度。
- 对于每个阶段,通过log(FLOPs)因子减少了总解码步骤的数量。
研究人员证明了前瞻解码显著降低了延迟,达到了1.5倍到2.3倍的减少,而几乎没有增加计算负担。最重要的是,它允许在处理方面的权衡来减少延迟,尽管收益递减。
研究人员已经创建了他们的实现,使前瞻解码与huggingface/transformers配合使用。HuggingFace提供了一个本地生成的函数,但用户可以通过几行代码显著提高其效率。
雅可比迭代是一种解决非线性系统的历经验证的技术。LLM推理也可以用于并行生成标记,而无需预训练模型。由于雅可比解码的每个步骤都涉及对>1个标记的LLM前向计算,因此从所需的FLOPs角度来看,它比每个自回归解码步骤更昂贵。研究人员观察到,在尝试显着提高雅可比解码在实际应用中的墙钟性能时可能会遇到几个困难。虽然它可以在一系列步骤中解码多个标记,但它通常会错误地排列它们的顺序。即使正确地预测,标记也经常在下一个周期被替换。因此,很少有迭代成功地同时解码和正确放置多个标记。由于这一点,使用并行解码的整个目的被取消了。通常,它不会导致性能下降,因为图形处理单元具有并行处理能力。
前瞻解码可以通过利用雅可比解码生成并行n-gram的能力来避免其缺点。在一个位置处,每个新标记都是使用之前迭代中该位置的值进行解码,就像雅可比解码中一样。由于这个过程,会形成许多n-gram,这在每个标记位置上建立了历史标记的时间线。为了使用这些,前瞻解码将根据它们的轨迹收集和缓存这些n-gram。前瞻解码同时从缓存中检查有希望的n-gram,并使用雅可比迭代进行未来标记的并行解码。
每个前瞻解码阶段都被分为两个平行分支——前瞻分支和验证分支,以提高效率。为了从雅可比迭代轨迹中生成n-gram,前瞻分支保持一个大小恒定的二维窗口。同时,验证分支选择并检查显示潜力的n-gram候选项。
由于内存带宽是LLM解码的主要瓶颈,研究人员将前瞻分支和验证分支合并为单个传递,利用GPU的并行处理能力,同时隐藏任何相关的开销。
团队对LLaMA-2-Chat和CodeLLaMA在MT-bench、HumanEval和GSM8K上的不同尺寸进行了测试,以了解他们的前瞻解码技术的有效性。前瞻解码技术可以提供速度提升,无需微调或预备模型。在fp16精度下,他们在单个A100 GPU上评估了7B、13B和33B模型,以及在两个A100 GPU上使用流水线并行性评估了70B模型。
- MT-Bench LLaMA讨论:在许多模型配置中,前瞻解码所实现的加速比约为1.5倍。
- HumanEval的CodeLLaMA:在HumanEval上使用前瞻解码时,CodeLLaMA的延迟时间缩短了两倍以上。这是因为代码中包含了许多容易猜测的N-gram。
- GSM8K的教学CodeLLaMA:通过前瞻解码,CodeLLama-Instructor在GSM8K的数学挑战中将延迟时间缩短了1.8倍。