推测解码
使用草稿模型加速生成
高级
推测性解码是一种可以在不降低响应质量的情况下,显著提高大型语言模型 (LLM) 生成速度的技术。
什么是推测性解码
推测性解码依赖于两个模型的协作:
- 一个较大的“主”模型
- 一个较小、较快的“草稿”模型
在生成过程中,草稿模型会快速提出潜在的标记 (Token),主模型验证这些标记的速度比它从头开始生成这些标记要快。为了保持质量,主模型只接受与其自身生成的标记相匹配的内容。在接受最后一个草稿标记后,主模型总是会额外生成一个标记。
要将一个模型用作草稿模型,它必须具有与主模型相同的“词表” (Vocabulary)。
如何启用推测性解码
在 高级用户 (Power User) 模式或更高模式下,加载一个模型,然后在聊天侧边栏的 推测性解码 (Speculative Decoding) 部分选择一个 草稿模型 (Draft Model)
寻找兼容的草稿模型
打开下拉菜单时,您可能会看到以下内容:
尝试下载您已加载模型的较低参数版本(如果存在)。如果您的模型没有更小的版本,请寻找可以配对的其他组合。
例如:
| 主模型 | 草稿模型 |
|---|---|
| Llama 3.1 8B Instruct | Llama 3.2 1B Instruct |
| Qwen 2.5 14B Instruct | Qwen 2.5 0.5B Instruct |
| DeepSeek R1 Distill Qwen 32B | DeepSeek R1 Distill Qwen 1.5B |
加载完主模型和草稿模型后,只需开始聊天即可启用推测性解码。
影响性能的关键因素
推测性解码的提速通常取决于两点:
- 与主模型相比,草稿模型有多小、有多快
- 草稿模型能够提出“好”建议的频率
简单来说,您应该选择一个比主模型小得多的草稿模型。此外,某些提示词的效果会比其他的更好。
一个重要的权衡
为了启用推测性解码而让草稿模型与主模型同时运行,比单独运行主模型需要更多的计算和资源。
提高主模型生成速度的关键是选择一个既足够小又足够能胜任的草稿模型。
以下是根据主模型大小(参数量)选择最大草稿模型大小的一般建议:
| 主模型大小 | 可预期提速的最大草稿模型大小 |
|---|---|
| 3B | - |
| 7B | 1B |
| 14B | 3B |
| 32B | 7B |
通常,主模型和草稿模型之间的尺寸差异越大,提速就越明显。
注意:如果草稿模型不够快,或者在向主模型提供“好”建议方面效果不佳,生成速度将不会增加,甚至可能下降。
取决于提示词
使用推测性解码时,您可能会注意到生成速度在不同提示词下并非始终如一。
提速不一致的原因是,对于某些提示词,草稿模型向主模型提供“好”建议的可能性较低。
以下是一些说明这一概念的极端示例:
1. 离散示例:数学问题
提示词:“一元二次方程的求根公式是什么?”
在这种情况下,70B 模型和 0.5B 模型都极有可能给出标准公式 x = (-b ± √(b² - 4ac))/(2a)。因此,如果草稿模型将此公式建议为后续标记,主模型很可能会接受它,这使得此案例成为推测性解码高效运行的理想情况。
2. 创意示例:故事生成
提示词:“写一个故事,开头是:‘门嘎吱一声开了……’”
在这种情况下,较小模型的草稿标记更有可能被较大模型拒绝,因为每一个后续词汇都可能分支成无数种有效的可能性。
虽然“4”是“2+2”唯一合理的答案,但这个故事可能会继续为“露出一个怪物”、“随着寒风呼啸”、“而莎拉僵在了原地”,或数百个其他完全有效的延续,这使得较小模型的特定词汇预测与较大模型的选择匹配的可能性大大降低。