专栏名称: GiantPandaLLM
专注于机器学习、深度学习、计算机视觉、图像处理等多个方向技术分享。团队由一群热爱技术且热衷于分享的小伙伴组成。我们坚持原创,每天一到两篇原创技术分享。希望在传播知识、分享知识的同时能够启发你,大家一起共同进步(・ω<)☆
目录
相关文章推荐
GiantPandaLLM  ·  图解Vllm ... ·  23 小时前  
GiantPandaLLM  ·  【博客转载】Row-Major VS ... ·  2 天前  
51好读  ›  专栏  ›  GiantPandaLLM

【ml-engineering 翻译系列】大模型推理

GiantPandaLLM  · 公众号  · 3D  · 2024-10-24 23:55

正文

请到「今天看啥」查看全文


温度对贪心解码、束搜索和Top-K采样策略没有影响,因为它影响logit概率之间的距离,而所有这些策略都使用基于其顺序的top概率,温度不会改变概率的顺序。而Top-p采样允许更多或更少的竞争者进入基于其总概率的子集,因此,概率越接近(高温)随机性越大。

除了 t==0.0 t==0 之外,没有硬性规定的值可以复制,您必须为每个用例实验以找到最适合您需求的值 - 尽管您肯定会找到人们在不同用例中提供良好的基线。

指导文本生成(Guided Text Generation)

也称为结构化文本生成和辅助生成。

如果模型可以返回其生成的输出在特定的格式,而不是不受限制的格式,您不希望模型产生无效的格式。例如,如果您希望模型返回一个JSON字典,它应该这样做。

实现这一点的方法是使用指导文本生成。而不是选择概率最高的生成token,该技术使用下一个最佳概率的token,该token适合下一个预期的token子集。为了举例说明:如果您希望模型生成一个JSON字符串列表,如 ["apples", "oranges"] ,因此我们期望:

["string""string", ..., "string"]
123...

第一个生成的token必须是一个 [ 。如果模型得到 " ,例如,而不是 [ ,作为最高概率,而 [ 的概率较低 - 我们选择概率较低的那个,以便它将是 [

然后,下一个生成的token必须是一个 " . 如果不是,搜索概率较低的token直到找到 " 并选择它。

第三个token必须是一个有效的字符串(即不是 [ " )。

以此类推。

基本上,对于每个下一个token,我们需要知道一个允许的token子集,并从该子集中选择概率最高的token。

这是一种非常酷的技术。与其尝试修复生成的输出,这些输出不一定总能匹配预期的格式,我们让模型首先生成正确的输出。

这种方法有几个缺点:

  • 它降低了生成速度 - 它必须遵循的格式越复杂,生成token的速度就越慢。根据我对生成速度的测量,我发现一些结构化文本生成库比其他库快得多。
  • 它可能会导致模型幻觉。

有多种实现这种技术的方法,截至本文撰写时,两个流行的库是:

  • https://github.com/outlines-dev/outlines
  • https://github.com/noamgat/lm-format-enforcer

您理想的做法是使用已经集成到推理框架(如vLLM)中的实现。

使用指导生成加速推理(Faster inference with guided generation)

也可以使用模式来加速推理。例如,考虑这个简单的“profile”模式:

{
  "type""object",
  "properties": {
    "name": { "type""string"},
    "age": { "type""integer"}
  },
  "required": ["name""age"]
}

由于模式具有特定的键 name age ,一旦模型预测到: {"n {"a ,它就不需要进行自回归生成来得到``{"name": {"age": ,因为这两者都必须导致一个特定的明确结果 - 因此在这里它可以执行预填充而不是解码,并节省一些缓慢的步骤,因为它100%知道接下来的几个token将是 ame": ge":`。显然,当模式有很多预定的键和短生成值时,这种方法最有利。

推测解码(Speculative decoding)

也称为推测推理或辅助生成。

因为一次生成一个token非常慢,有时可以通过使用一个更小更快的草稿模型来作弊并加速。例如,您的正常推理使用Llama-70B,这会很慢,但我们可以使用Llama-7b作为草稿模型,然后我们可以验证预测是否正确,但一次为所有token执行。

示例:让我们以提示 I'm turnin', turnin', turnin', turnin', turnin' around and all that I can see is just 为例,现在:

  1. 使用Llama-7b以自回归方式预测 another lemon tree ,在3步中完成,但比Llama-70b快得多。
  2. 现在使用Llama-70b运行3个提示的批处理:
[...I can see is just]
[...I can see is just another]
[...I can see is just another lemon]

我缩短了完整的提示以进行演示, ... 表示其它的prompt部分。我在这里假装每个token都是一个完整的单词。

现在,Llama-70B在一步中生成:

[...I can see is just] another
[...I can see is just another] lemon
[...I can see is just another lemon] tree

现在可能会有多个结果:

  • 如果一切都匹配 - 在3个短步骤和1个长步骤中,我们生成了最终结果,而不是使用3个长步骤。
  • 如果只有 another lemon 匹配 - 如果我们节省了时间,我们可能会更好。






请到「今天看啥」查看全文