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

news2025/2/27 17:20:23

一 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.coloradmin.cn/o/2270109.html

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

相关文章

Docker学习相关笔记,持续更新

如何推送到Docker Hub仓库 在Docker Hub新建一个仓库,我的用户名是 leilifengxingmw,我建的仓库名是 hello_world。 在本地的仓库构建镜像,注意要加上用户名 docker build -t leilifengxingmw/hello_world:v1 .构建好以后,本地会…

数据挖掘——支持向量机分类器

数据挖掘——支持向量机分类器 支持向量机最小间隔面推导基于软间隔的C-SVM非线性SVM与核变换常用核函数 支持向量机 根据统计学习理论,学习机器的实际风险由经验风险值和置信范围值两部分组成。而基于经验风险最小化准则的学习方法只强调了训练样本的经验风险最小…

HTML——54. form元素属性

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>form元素属性</title></head><body><!--form标签用于创建一个表单&#xff0c;会将里面的内容一起发送服务器&#xff0c;结构类似于表格--><!-…

拓扑排序模板题:洛谷-家谱树

原题链接&#xff1a;B3644 【模板】拓扑排序 / 家谱树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目&#xff1a; 题目描述 输入格式 输出格式 输入输出样例 思路&#xff1a; AC代码&#xff1a; 题目&#xff1a; 题目描述 有个人的家族很大&#xff0c;辈分…

JS实现SVG的TEXT标签自动换行功能

首先定义了一个RectAndText组件&#xff0c;这个组件实现了在矩形中显示居中的文本&#xff08;矩形可以根据自己需求要或者不要&#xff09; <template><rect :x"x" :y"y" :width"width" :height"height" :stroke"str…

网络安全 | 量子计算与网络安全:未来的威胁与机遇

网络安全 | 量子计算与网络安全&#xff1a;未来的威胁与机遇 一、前言二、量子计算对传统密码学的威胁2.1 量子计算原理概述2.2 量子计算破解密码的原理2.3 量子计算威胁的广泛影响 三、量子安全密码学&#xff1a;新的机遇3.1 量子安全密码学的研究方向3.2 量子安全密码学的安…

性能测试核心知识点 —— 负载模型!

性能测试是软件开发生命周期中非常重要的一环&#xff0c;通过对系统进行负载测试&#xff0c;可以评估系统在不同负载条件下的性能表现。而负载模型则是负载测试中的关键概念&#xff0c;它定义了测试的目标、策略、参数和流程&#xff0c;是进行性能测试的基础。 一、负载模型…

AURIX的TASKING链接文件语法学习

链接文件中的定义&#xff1a; group (ordered, contiguous, align 4, attributesrw, run_addr 0x70005000)//mem:dsram0){select ".data.user_test_data";select "(.data|.data*)";//select "(.bss|.bss*)"; //select ".bss.…

电脑dll文件丢失怎么恢复,丢失dll文件一键修复教程分享

动态链接库文件&#xff08;DLL&#xff09;是Windows操作系统中至关重要的组成部分&#xff0c;它们包含了许多程序运行所需的函数和资源。当电脑丢失DLL文件时&#xff0c;会导致软件无法正常运行&#xff0c;甚至影响系统的稳定性。本文将从多个角度全面分析解读电脑丢失DLL…

Vue项目整合与优化

前几篇文章&#xff0c;我们讲述了 Vue 项目构建的整体流程&#xff0c;从无到有的实现了单页和多页应用的功能配置&#xff0c;但在实现的过程中不乏一些可以整合的功能点及可行性的优化方案&#xff0c;就像大楼造完需要进行最后的项目验收改进一样&#xff0c;有待我们进一步…

面向机器学习的Java库与平台

学习Java语言中与机器学习相关的各种库与平台&#xff0c;了解每个库的功能&#xff0c;以及可以用它 们解决的问题。  实现机器学习应用时需要具备的Java环境  Weka&#xff1a;一个通用的机器学习平台  Java机器学习库&#xff1a;一系列机器学习算法  Apache Mah…

SAP SD学习笔记24 - 赠品的两种形式 - 内增Bonus数量、外增Bonus数量

上一章讲了无偿出荷的内容。 SAP SD学习笔记23 - 无偿出荷&#xff08;免费交货&#xff09;与继续无偿出荷&#xff08;继续免费交货&#xff09;-CSDN博客 本章继续将SAP中赠品的两种形式&#xff1a; - 内增Bonus数量&#xff1a;Bonus数量包含在总数量当中&#xff0c;比…

Python跨年烟花

目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…

深入理解MemCache

随着互联网应用的飞速发展&#xff0c;动态Web应用的性能问题逐渐成为开发者关注的焦点。其中&#xff0c;数据库作为系统性能的关键瓶颈&#xff0c;在用户请求量急剧增加的情况下&#xff0c;往往难以快速响应用户需求。为了解决这一问题&#xff0c;缓存技术应运而生。MemCa…

webrtc 源码阅读 make_ref_counted模板函数用法

目录 1. 模板参数解析 1.1 typename T 1.2 typename... Args 1.3 typename std::enable_if::value, T>::type* nullptr 2. scoped_refptr 3. new RefCountedObject(std::forward(args)...); 4. 综合说明 5.在webrtc中的用法 5.1 peerConnectionFactory对象的构建过…

【MySQL】数据操作

数据操作 一、INSERT1、介绍2、语法3、语法介绍4、注意事项5、示例 二、插入否则更新1、介绍2、语法3、语法介绍4、示例 三、ROW_COUNT1、介绍2、示例 四、REPLACE1、介绍2、语法3、示例 五、UPDATE1、介绍2、语法3、示例 六、DELETE1、介绍2、语法3、语法介绍 七、TRUNCATE1、…

表单元素(标签)有哪些?

HTML 中的表单元素&#xff08;标签&#xff09;用于收集用户输入的数据&#xff0c;常见的有以下几种&#xff1a; 文本输入框 <input type"text">&#xff1a;用于单行文本输入&#xff0c;如用户名、密码等。可以通过设置maxlength属性限制输入字符数&…

基于W2605C语音识别合成芯片的智能语音交互闹钟方案-AI对话享受智能生活

随着科技的飞速发展&#xff0c;智能家居产品正逐步渗透到我们的日常生活中&#xff0c;其中智能闹钟作为时间管理的得力助手&#xff0c;也在不断进化。基于W2605C语音识别与语音合成芯片的智能语音交互闹钟&#xff0c;凭借其强大的联网能力、自动校时功能、实时天气获取、以…

机器学习中回归预测模型中常用四个评价指标MBE、MAE、RMSE、R2解释

在机器学习中&#xff0c;评估模型性能时常用的四个指标包括平均绝对误差&#xff08;Mean Absolute Error, MAE&#xff09;、均方误差&#xff08;Mean Squared Error, MSE&#xff09;、均方根误差&#xff08;Root Mean Squared Error, RMSE&#xff09;和决定系数&#xf…

Visual Studio 玩转 IntelliCode AI辅助开发

&#x1f380;&#x1f380;&#x1f380;【AI辅助编程系列】&#x1f380;&#x1f380;&#x1f380; Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…