推理加速:投机采样经典方法

一 SpecInfer 基于模型

SpecInfer([2305.09781] SpecInfer: Accelerating Generative Large Language Model Serving with Tree-based Speculative Inference and Verification)

SpecInfer 投机采样利用多个小型模型(SSM)快速生成“草稿”(Draft),然后由大型模型(LLM)验证并选择,从而加速文本生成。

计算过程步骤:

  1. 初始化:

    • 输入序列: 假设我们已经有了一个输入文本序列(例如 "The cat sat on the "),需要生成接下来的文本。
    • LLM: 我们有一个强大的大型语言模型 (LLM),它能给出高质量的输出,但速度较慢。
    • SSM: 我们有若干个小型语言模型 (SSM),它们速度快但可能不够准确。
  2. 生成草稿 (Draft Generation):

    • SSM 预测: 基于当前的输入序列,第一个 SSM (SSM1) 预测接下来的一个或多个 token (例如 “mat”)。
    • 构建 Token 树:
      • 基于 SSM1 的预测,将 mat 作为一个节点添加到 token 树的根节点 (当前输入序列 "The cat sat on the ")下,形成一个分支。
      • 然后,第二个 SSM (SSM2) 基于 SSM1 的输出 (“The cat sat on the mat”) 预测接下来的一个或多个 token(例如 “and” 和 “sleepy”), 形成两个新的分支。
      • 第三个 SSM(SSM3) 基于以上所有分支进行继续预测,以此类推。
      • 这个过程重复进行,直到达到预定的草稿长度或者遇到其他停止条件。
      • 最后我们得到了一棵 Token 树,其中每个分支都代表着一个候选的 Token 序列。
       The cat sat on the|mat/   \and  sleepy/   \   /  \...  ... ...  ...
  1. 验证和选择 (Verification & Selection):

    • LLM 验证: LLM 开始从 Token 树的根节点开始,逐个验证每个分支。
      • LLM 先验证第一个分支的第一个 token “mat”,计算其概率,如果与 LLM 自己预测的概率相近,则接受 “mat” 这个 token。
      • 然后,基于 “The cat sat on the mat”,LLM 会验证下一个 token,例如 “and” 和 “sleepy”。
      • 如果 LLM 认为 “and” 的概率更高,则该分支会被优先考虑。
      • 如果 LLM 认为 “sleepy” 概率更高,则该分支会被优先考虑。
    • 分叉处理: 如果LLM验证过程中发现,某个token,比如"and",与自身预测概率相差过大,则LLM会用自己预测结果替换掉"and",并停止验证该分支。
    • 确定采用的 Tokens: LLM会尽可能地从草稿树中选择更多的Tokens,直到遇到LLM认为不合适的token,则停止该轮选择。
  2. 更新输入序列:

    • 将 LLM 选择的 tokens 添加到输入序列中,例如,如果LLM最终选择了 “The cat sat on the mat and”,则输入序列更新为 “The cat sat on the mat and”。
  3. 重复过程:

    • 重复步骤 2 到 4,不断生成新的草稿并验证,直到生成满足长度要求的完整文本。

核心思路为:通过一系列小模型 SSM(Small Speculative Model)联合预测 LLM 输出,并将这些小模型的预测输出组织为 Token 树,树中每个分支表示一个候选 Token 序列。然后 LLM 使用基于树的并行解码(Tree-Based Parallel Decoding)机制来并行的验证 Token 树中所有 Token 的正确性。SpecInfer 使用 LLM 作为 Token 树验证器而非增量解码器,这显著降低了生成式 LLM 的端到端延迟,同时可以保持模型的质量。

二 REST 基于检索

REST: Retrieval-Based Speculative Decoding

REST (Retrieval-Based Speculative Decoding) 核心思想是利用一个检索模块,从一个大的文本库中找到与当前上下文相似的文本片段,并将其作为草稿生成的“指导”,然后利用一个大型模型 (Target Model) 对草稿进行验证。

计算过程步骤:

  1. 初始化:

    • 输入序列: 假设我们有一个输入序列(例如 “The weather today is”)
    • 目标模型 (Target Model): 一个大型语言模型 (LLM),用于验证和生成高质量的输出,但速度较慢。
    • 检索模块 (Retrieval Module): 一个能够从大型文本库中检索相似文本片段的模块,例如利用文本向量相似度进行检索。
    • 草稿长度 (Draft Length): 设定生成草稿的最大长度。
  2. 检索相似片段 (Retrieval):

    • 检索查询: 使用当前的输入序列(例如 “The weather today is”)作为查询,送入检索模块。
    • 相似文本: 检索模块从文本库中找出与查询文本最相似的文本片段,例如:“The weather today is sunny and warm.”
    • 草稿生成: 从检索到的文本片段中,提取出输入序列之后的文本作为草稿,例如 “sunny and warm.”。
  3. 验证和选择 (Verification & Selection):

    • 目标模型验证: 目标模型逐个验证草稿中的 token。
    • 验证过程:
      • 目标模型从草稿的第一个 token 开始验证 (例如 “sunny”)。
      • 如果目标模型认为 “sunny” 合理,则接受它,并继续验证下一个 token (例如 “and”)。
      • 如果目标模型认为 “sunny” 不合理,则终止验证,并用自己的预测结果替换掉该 token。
    • 接受的 Tokens: 目标模型接受通过验证的 token,并添加到最终的输出序列。
  4. 更新输入序列:

    • 将目标模型接受的 token 添加到输入序列中。
    • 使用更新后的输入序列作为下一轮循环的输入。
  5. 重复过程:

    • 重复步骤 2 到 4,直到生成满足长度要求的完整文本。

三 EAGLE 基于特征

北京大学和微软等团队提出的投机采样方案 EAGLE(Extrapolation Algorithm for Greater Language-model Efficiency,[2401.15077] EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty),其是一个无损投机采样加速方案。

目标模型是原始的大模型,草稿模型是对应的小模型。

其中的 草稿模型( Draft model ) 的 Embedding 层、LM Head 以及 Sampling 都来自原始的 LLM,而 Auto-regression Head 包含一个 全连接层( FC Layer )。简单说就是利用两个词的特征信息预测下一个词的特征,(bs, seq len, 2 * hidden dim) --> (bs, seq len, hidden dim)。


具体过程描述就是:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/500842.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Java中的Set集合:特性、用法与常见操作指南

一、HashSet集合 1.HashSet集合的特点 2.HashSet常用方法 ①:add(Object o):向Set集合中添加元素,不允许添加重复数据。 ②:size():返回Set集合中的元素个数 ③.remove(Object o): 删除Set集合中的obj对…

黑马Java面试教程_P10_设计模式

系列博客目录 文章目录 系列博客目录前言1. 工厂方法模式1.1 概述1.2 简单工厂模式1.2.1 结构1.2.2 实现1.2.3 优缺点 1.3 工厂方法模式1.3.1 概念1.3.2 结构1.3.3 实现1.3.4 优缺点 1.4 抽象工厂模式1.4.1 概念1.4.2 结构1.4.3 实现1.4.4 优缺点1.4.5 使用场景 总结&#xff0…

开源架构的容器化部署优化版

上三篇文章推荐: 开源架构的微服务架构实践优化版(New) 开源架构中的数据库选择优化版(New) 开源架构学习指南:文档与资源的智慧锦囊(New) 我管理的社区推荐:【青云交社区…

SpringCloudAlibaba实战入门之Sentinel服务降级和服务熔断(十五)

一、Sentinel概述 1、Sentinel是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 一句话概括:sentinel即Hystrix的替代品,官网: https://sentinelguard.io/zh…

【每日学点鸿蒙知识】导入cardEmulation、自定义装饰器、CallState状态码顺序、kv配置、签名文件配置

1、HarmonyOS 无法导入cardEmulation? 在工程entry mudule里的index.ets文件里导入cardEmulation失败 可以按照下面方式添加SystemCapability;在src/main/syscap.json(此文件需要手动创建)中添加如下内容 {"devices": {"gen…

Datawhale AI冬令营(第二期)动手学AI Agent--Task3:学Agent工作流搭建,创作进阶Agent

目录 一、工作流:制作复杂Agent的福音! 二、支付宝百宝箱中工作流介绍 三、设计工作流 3.1 准备功能模块 3.2组合工作流 3.3 模块测试需要注意什么 3.4迭代优化 四、高中学习小助手工作流设计 4.1 选题调研 4.2 功能模块设计 4.3 组合完整工作…

Postman[8] 断言

1.常见的断言类型 status code: code is 200 //检查返回的状态码是否为200 Response body: contain string //检查响应中包含指定字符串包含指定的值 response body:json value check/ /检查响应中其中json的值 Response body: is equal to string …

python openyxl 用法 教程

Python自动化办公:openpyxl教程(基础)-CSDN博客 https://zhuanlan.zhihu.com/p/342422919 https://openpyxl-chinese-docs.readthedocs.io/zh-cn/latest/tutorial.html 列标题,是这一列 对应的单元格的格式,默认是常规,设置之后…

深入解析 Wireshark 的 TLS 设置:应用场景与实操技巧

简述 在网络数据分析中,传输层安全(TLS)协议的流量解密和分析是一项重要的技能。Wireshark 提供了专门的设置选项,帮助用户处理 TLS 流量,例如解密会话、重组分片等。本文将详细解析上图所示的 Wireshark TLS 设置功能…

每天五分钟机器学习:凸集

本文重点 在SVM中,目标函数是一个凸函数,约束集合是一个凸集。因此,SVM问题可以转化为一个凸规划问题来求解。这使得SVM在实际应用中具有较高的计算效率和准确性。 凸集的定义 凸集是指一个集合中的任意两点之间的线段都完全包含在这个集合中。换句话说,给定集合C中的两…

stm32 智能语音电梯系统

做了个stm32智能语音控制的电梯模型,总结一下功能,源码用ST的HAL库写的,整体流程分明。 实物图 这个是整个板子的图片,逻辑其实并不复杂,只是功能比较多,在我看来都是一些冗余的功能,但也可能是…

AI 助力游戏开发中的常用算法实现

在当今的游戏开发领域,人工智能(AI)技术的应用已经成为推动行业发展的关键力量。AI不仅能够提升游戏的智能化水平,还能够增强玩家的沉浸感和游戏体验。随着技术的进步,AI在游戏设计、开发和测试中的应用越来越广泛&…

计算机的错误计算(一百九十九)

摘要 用大模型判断下面四个函数 有何关系?并计算它们在 x0.00024时的值,结果保留10位有效数字。两个大模型均认为它们是等价的。实际上,还有点瑕疵。关于计算函数值,大模型一只是纸上谈兵,没计算;大模型二…

HTML——57. type和name属性

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>type和name属性</title></head><body><!--1.input元素是最常用的表单控件--><!--2.input元素不仅可以在form标签内使用也可以在form标签外使用-…

基于SpringBoot和OAuth2,实现通过Github授权登录应用

基于SpringBoot和OAuth2&#xff0c;实现通过Github授权登录应用 文章目录 基于SpringBoot和OAuth2&#xff0c;实现通过Github授权登录应用0. 引言1. 创建Github应用2. 创建SpringBoot测试项目2.1 初始化项目2.2 设置配置文件信息2.3 创建Controller层2.4 创建Html页面 3. 启动…

LVGL 移植到 Arduino IDE(适用SP32 Arduino RP系列)

1.因为我们需要移植相关LVGL配置文件&#xff0c;否则IDE会报错&#xff0c;因此 先找到LVGL官方的GITHUB处&#xff0c;如下图所示&#xff1a; 2.值得注意的是&#xff0c;你需要知你的 Arduino IDE 用的是哪个版本的LVGL&#xff0c;要与我们在GITHUB处的版本号一致&#xf…

Ubuntu 24.04 LTS 解决网络连接问题

1. 问题描述 现象&#xff1a;ens33 网络接口无法获取 IPv4 地址&#xff0c;导致网络不可用。初步排查&#xff1a; 运行 ip a&#xff0c;发现 ens33 接口没有分配 IPv4 地址。运行 ping www.baidu.com&#xff0c;提示“网络不可达”。查看 NetworkManager 日志&#xff0c…

C语言----指针数组

目录 1. 定义&#xff1a; 2. 格式&#xff1a; 应用示例 1) 用于存放普通变量的地址 2) 用于存放二维数组的每一行第一个元素的地址&#xff08;列地址&#xff09; 3) 用于存放字符串 4) 命令行参数 补充&#xff1a;开辟堆区空间&#xff08;动态空间开辟&#xff0…

单区域OSPF配置实验

1、绘制拓扑图 2、配置ip地址 R0 Router(config)#interface FastEthernet0/0 Router(config-if)#ip address 192.168.1.1 255.255.255.0 Router(config-if)#no shutdown Router(config-if)#exit Router(config)#interface FastEthernet0/1 Router(config-if)#ip address 192.16…

【玩转OCR | 基于腾讯云智能结构化OCR的技术应用实践】

目录 背景与业务挑战 腾讯云智能结构化OCR的核心优势 1. 全面的行业覆盖能力 2. 高识别精度与版式适应性 3. 个性化模板定制 4. 便捷接入与资源优化 应用实践案例&#xff1a;物流行业的单据自动化处理 1. 应用背景 2. 引入腾讯云智能结构化OCR的解决方案 1) 定制化模…