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

一 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.mzph.cn/news/891487.shtml

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

相关文章

最好用的图文识别OCR -- PaddleOCR(1) 快速集成

最近在项目中遇到了 OCR 的需求,希望能够实现高效而准确的文字识别。由于预算限制,我并未选择商业付费方案,而是优先尝试了开源工具。一开始,我测试了 GOT-OCR2.0,但由于我的 Mac 配置较低,不支持 GPU 运算…

FFmpeg:详细安装教程与环境配置指南

FFmpeg 部署完整教程 在本篇博客中,我们将详细介绍如何下载并安装 FFmpeg,并将其添加到系统的环境变量中,以便在终端或命令行工具中直接调用。无论你是新手还是有一定基础的用户,这篇教程都能帮助你轻松完成 FFmpeg 的部署。 一、…

Spring SpEL表达式由浅入深

标题 前言概述功能使用字面值对象属性和方法变量引用#this 和 #root变量获取类的类型调用对象(类)的方法调用类构造器类型转换运算符赋值运算符条件(关系)表达式三元表达式Elvis 操作符逻辑运算instanceof 和 正则表达式的匹配操作符 安全导航操作员数组集合(Array 、List、Map…

iOS 修改图片颜色

需求中会遇到这种情况,就是我们需要的图片是已经有的 但是图片的颜色不符合我们的需求,但是又不想再切新的图片了,这个时候,我们可以使用代码的方式修改图片的颜色,达到同样的效果 关键代码就是 [image imageWithRend…

“AI人工智能软件开发公司:创新技术,引领未来

大家好!今天我们来聊聊一个充满未来感的话题——AI人工智能软件开发公司。这个公司,用大白话说,就是专门研究和开发人工智能软件的地方,它们用最新的技术帮我们解决问题,让生活和工作变得更智能、更便捷。听起来是不是…

常见中间件漏洞复现

1.tomcat 1.1 CVE-2017-12615(put上传) 当在Tomcat的conf(配置目录下)/web.xml配置文件中添加readonly设置为false时,将导致该漏洞产 ⽣,(需要允许put请求) , 攻击者可以利⽤PUT方法通过精心构造的数据包…

memcached的基本使用

memcached是一种基于键值对的内存数据库,一般应用于缓存数据,提高数据访问速度,减轻后端数据库压力。 安装 这里以Ubuntu为例,其他系统安装方法请看官方文档。 sudo apt-get update sudo apt-get install memcached启动 memca…

Unity2022接入Google广告与支付SDK、导出工程到Android Studio使用JDK17进行打包完整流程与过程中的相关错误及处理经验总结

注:因为本人也是第一次接入广告与支付SDK相关的操作,网上也查了很多教程,很多也都是只言片语或者缺少一些关键步骤的说明,导致本人也是花了很多时间与精力踩了很多的坑才搞定,发出来也是希望能帮助到其他人在遇到相似问…

Android 11.0 通过广播控制systemui状态栏动态显示和隐藏功能实现

1.前言 在11.0的系统rom定制化开发中,在某些特定的产品开发中,需要通过接口来控制系统状态栏的显示和隐藏, 所以就需要了解systemui状态栏的显示构造过程,然后通过相关接口来显示和隐藏状态栏,接下来就来 实现相关的功能 2.通过广播控制systemui状态栏动态显示和隐藏功能…

使用Apache PDFBox将pdf文件转换为图片

一、引入依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifact…

C++11右值与列表初始化

1.列表初始化 C98传统的{} C98中一般数组和结构体可以用{}进行初始化。 struct Point {int _x;int _y; }; int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0; } C11中的{} C11以后统一初始化方式&#xff0c;想要实现一切对…

Unity Shader:从基础使用到动画实现全解析

在Unity的精彩世界里&#xff0c;Shader&#xff08;着色器&#xff09;堪称打造独特视觉效果的魔法棒。无论是绚丽的光影、奇幻的材质&#xff0c;还是生动的动画&#xff0c;Shader都能助你一臂之力。今天&#xff0c;就让我们一同深入探索Unity中Shader的使用方法&#xff0…

单片机复位电路基本理解教程文章·含上拉电阻理解电容开路理解!!!

目录 常见复位电路种类 复位电路电阻上拉理解 电容储能断路理解 ​​​​​​​ ​​​​​​​ 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路降压芯片驱动电路详解-…

2501d,d.110

原文 更改编译器 禁止使用-previewfixImmutableConv从const(void)[]复制到void[] 如果const(void)[]数据包含尾常指针,则复制到void[],随后可能会违反常数据: void f(int*[] a, const int*[] b) {void[] va a;const void[] vb b;va[] vb[]; //用常指针填充*a[0] 0; //更…

深入聊聊typescript、ES6和JavaScript的关系与前瞻技术发展

什么是typescript&#xff0c;为什么项目当中你可能没见过&#xff1f; TypeScript由微软发布于2012年&#xff0c;在发布之初并没有立即获得广泛的采用&#xff0c;但随着它的逐步发展和流行的框架&#xff08;如 Angular 和 React&#xff09;的支持&#xff0c;TypeScript …

Linux(Centos 7.6)网卡信息没有了问题处理

1.问题现象 虚拟机打开后&#xff0c;使用ifconfig查看IP信息&#xff0c;虚拟机默认的网卡名称是ens33&#xff0c;ifconfig没有看到相关问题&#xff0c;远程连接工具Xshell也不能正常访问该虚拟机。 [rootnode1 ~]# ifconfig lo: flags73<UP,LOOPBACK,RUNNING> mtu…

【大模型系列】Mobile-Agent(2024.04)

Paper: https://arxiv.org/pdf/2401.16158Github: https://github.com/X-PLUG/MobileAgentAuthor: Junyang Wang et al. 北交、阿里巴巴 Mobile-agent核心工作&#xff1a; 首先使用视觉感知工具(检测和OCR模型)识别前端界面中文本和图像元素的精确位置 检测图标&#xff1a;…

Android Studio学习笔记

01-课程前面的话 02-Android 发展历程 03-Android 开发机器配置要求 04-Android Studio与SDK下载安装 05-创建工程与创建模拟器

数据的简单处理——pandas模块——数据结构(Series和DataFrame对象)

pandas模块是基于Numpy模块开发的。在pandas模块中有两个重要的数据结构对象——Series和DataFrame。使用这两个对象可以在计算机的内存中构建虚拟的数据库。对于Series和DataFrame对象主要有三类&#xff0c;都是包括普通默认的方式、添加行列标签的方式、采用字典创建数据结构…

Linux 服务器启用 DNS 加密

DNS 加密的常用协议包括 DNS over HTTPS (DoH)、DNS over TLS (DoT) 和 DNSCrypt。以下是实现这些加密的步骤和工具建议&#xff1a; 1. 使用 DoH (DNS over HTTPS) 工具推荐&#xff1a; cloudflared&#xff08;Cloudflare 提供的客户端&#xff09;doh-client&#xff08;…