无损,但并非免费:投机解码 (Speculative Decoding) 何时奏效

投机解码 (Speculative Decoding) 是 LLM 推理领域的一个热门话题。

像 DSpark 这样的公司声称能实现 60% 到 85% 的加速。Google 也发布了关于该方法的研究。

其原理很简单:一个小型的草稿模型 (draft model) 生成 Token,然后由一个大型的目标模型 (target model) 进行一次性验证。这使得生成速度更快。

但作为一名工程师,你必须提出两个问题:

  • 它会增加幻觉吗?
  • 额外的模型会浪费计算资源吗?

让我们来看看事实。

首先,质量是无损的。 目标模型会验证每一个 Token。如果草稿模型在第 3 个 Token 处出错,目标模型会拒绝该 Token 并从该点开始重新生成。其输出在数学上与仅使用目标模型时完全一致。它不会放大幻觉。

其次,成本是实实在在的。 运行小型模型的成本远低于大型模型。一个 7B 模型的成本可能只有 70B 模型的十分之一。

投机解码是一场博弈。

  • 如果完全命中,你可以节省大量的计算资源。
  • 如果完全失误,你就输了。你需要运行草稿模型,还要进行额外的目标模型步骤。这比标准推理更慢。

为了获胜,你必须遵循这条规则: 平均接受的 Token 数量必须大于 1 加上草稿模型的开销。

如果你的草稿模型在特定任务上表现不佳,接受率就会下降。如果接受率降得太低,投机解码反而会让你的系统变慢。

如何决定是否应该使用它:

  1. 测量你的接受率。不要迷信通用的基准测试。请使用你自己的数据和任务。
  2. 检查你的任务类型。将其用于代码补全等可预测的任务。避免将其用于创意写作等不可预测的任务。
  3. 监控你的 p99 延迟。完全失误会导致延迟激增。

最好的优化不是那个永远获胜的方案,而是那个你知道何时该关闭的方案。

在命中率高时使用它。在命中率崩塌时停止使用。

Source: https://dev.to/zxpmail/lossless-but-not-free-the-lossless-but-not-free-when-speculative-decoding-actually-pays-off-1c2g

Optional learning community: https://t.me/GyaanSetuAi