推测
推测解码、辅助生成、Medusa 和其他名称指的是同一个概念。这个概念是在大型模型实际运行之前生成 token,并只检查这些 token 是否有效。
因此,你在 LLM 上进行更多计算,但如果你的推测正确,你可以在一次 LLM 通过中生成 1、2、3 等 token。由于 LLM 通常是内存绑定(而不是计算绑定),只要你的推测足够准确,这就可以实现 2-3 倍更快的推理速度(例如,对于面向代码的任务,速度可能快得多)。
你可以查看更详细的解释:详细解释。
文本生成推理支持两种主要的推测方法
- Medusa
- N-gram
Medusa
Medusa 是一种简单的方法,可以利用经过微调的 LM 头部以及现有模型在一次通过中生成多个 token。
你可以查看一些针对流行模型的现有微调
- text-generation-inference/gemma-7b-it-medusa
- text-generation-inference/Mixtral-8x7B-Instruct-v0.1-medusa
- text-generation-inference/Mistral-7B-Instruct-v0.2-medusa
为了为自己的微调创建自己的 Medusa 头部,你应该检查原始 Medusa 存储库:../basic_tutorials/train_medusa.md
为了在 TGI 中使用 Medusa 模型,只需指向一个启用了 Medusa 的模型,所有内容都会自动加载。
N-gram
如果没有 Medusa 模型,或者没有资源进行微调,你可以尝试使用 n-gram
。N-gram 通过尝试在之前的序列中找到匹配的 token,并使用它们作为推测来生成新 token。例如,如果 token "np.mean" 在序列中多次出现,模型可以推测 "np." 的下一个延续可能是 "mean"。
这是一种非常简单的方法,最适合代码或高度重复的文本。如果推测遗漏太多,这可能没有好处。
为了启用 n-gram 推测,只需使用
--speculate 2
在你的标志中。