Llmcad: Fast and scalable on-device large language model inference

题目:Llmcad: Fast and scalable on-device large language model inference 发表于2023.09

链接:https://arxiv.org/pdf/2309.04255

声称是第一篇speculative decoding+边缘设备的论文(不一定是绝对的第一篇),不开源,没有github地址

动机

生成性任务,在移动应用领域占据重要的地位。由于对隐私问题的敏感性,越来越多的需求是直接在移动设备上执行这些任务。目前,这些生成性任务的执行严重依赖于LLM。然而,这些设备内存容量十分有限。
在本研究中,引入了LLMCad,这是一个专为高效生成性NLP任务设计的设备端推理引擎

注意,它的目标模型也是在移动设备上的,只不过不放在内存中,只在验证时期从存储中加载到内存;小LLM是常驻内存的。

核心思想

LLMCad的核心思想围绕模型协作:一个紧凑的LLM驻留在内存中,负责生成最简单的令牌,而一个高精度的LLM则介入以验证这些令牌并纠正识别出的错误。LLMCad融合了三种新技术:

  • LLMCad不是以顺序方式生成候选令牌,而是使用较小的LLM构建一个token树。随后,较大的LLM可以同时验证所有这些路径。

  • 它采用自适应回退策略,每当较小的LLM生成错误令牌时,迅速启动验证过程。

  • 为了确保token生成的连续流动,LLMCad在验证过程中通过实施计算-IO管道来推测性地生成令牌。

论文基于以下观察:虽然较小的LLM不足以生成令人满意的端到端句子,但它们通常能够正确生成大多数简单的标记(例如,限定词、代词和标点符号)。目标LLM验证N个令牌可以在目标模型的一次推断中完成,因此比顺序生成N个令牌要快得多。

 策略

论文指出遇到的挑战以及解决策略:

  • 小LLM可能产生的一些次优token,实际上它认为的次优token是目标LLM的最优输出。这就需要在验证的过程中,也考虑到那些次优token,即使用tree attention

  • 需要确定何时启动验证过程,设备上的验证是耗时的,例如Jetson TX2上需要7.1秒。过早验证会导致检测不到错误,过晚验证会生成无用token,浪费了移动设备计算资源。先前的工作通常依赖于单个标记或标记序列长度,这可能无法准确地定位最佳验证时机。本文中token tree中比较累积不确定性、基于历史数据评估是否需要进行验证。

  • 目标LLM的验证会阻塞小LLM的推理。所以在验证过程中,继续让小LLM执行推理。同时为了保证小模型推理不影响验证,继续推理只在不影响大LLM内存占用的情况下运行。

下图是整个流程图:

设计

论文的一些设计细节:

  • 在小LLM生成token树的过程中,任何置信度高于阈值的token都会被生成一个分支(例如0.3)

  • 树累计置信度(tree cumulative-confidence),列的公式和字符看起来挺吓唬人,实际上就是同一个序列的每个token的置信度累乘

  • 关于如何并行地验证树,论文也是给了较长的介绍,但实际上应该是用了其他论文中出现的tree attention机制。详情可以看第一个提出tree attention机制的specInfer论文,在我的博客里也有这篇文章的解读。

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

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

相关文章

Edge浏览器保留数据,无损降级退回老版本+禁止更新教程(适用于Chrome)

3 个月前阿虚就已经写文章告警过大家,Chromium 内核的浏览器将在 127 以上版本开始限制仍在使用 Manifest V2 规范的扩展:https://mp.weixin.qq.com/s/v1gINxg5vMh86kdOOmqc6A 像是 IDM、油猴脚本管理器、uBblock 等扩展都会受到影响,后续将无…

人工智能零基础入门学习笔记

学习视频:人工智能零基础入门教程 文章目录 1.简介2.应用3.演进4.机器学习5.深度学习6.强化学习7.图像识别8.自然语言9.Python10.Python开发环境11.机器学习算法1.多元线性回归项自实战:糖尿病回归预测 2.逻辑回归3.Softmax回归项目实战:鸢尾…

Spring Boot 3 集成 Spring Security(3)数据管理

文章目录 准备工作新建项目引入MyBatis-Plus依赖创建表结构生成基础代码 逻辑实现application.yml配置SecurityConfig 配置自定义 UserDetailsService创建测试 启动测试 在前面的文章中我们介绍了 《Spring Boot 3 集成 Spring Security(1)认证》和 《…

Wireshark抓取HTTPS流量技巧

一、工具准备 首先安装wireshark工具,官方链接:Wireshark Go Deep 二、环境变量配置 TLS 加密的核心是会话密钥。这些密钥由客户端和服务器协商生成,用于对通信流量进行对称加密。如果能通过 SSL/TLS 日志文件(例如包含密钥的…

Redis(概念、IO模型、多路选择算法、安装和启停)

一、概念 关系型数据库是典型的行存储数据库,存在的问题是,按行存储的数据在物理层面占用的是连续存储空间,不适合海量数据存储。 Redis在生产中使用的最多的是用作数据缓存。 服务器先在缓存中查询数据,查到则返回,…

Cobalt Strike 4.8 用户指南-第十一节 C2扩展

11.1、概述 Beacon 的 HTTP 指标由 Malleable Command and Control (Malleable C2) 配置文件控制。Malleable C2 配置文件是一个简单的程序,它指定如何转换数据并将其存储在事务中。转换和存储数据的同一程序(向后解释&#xff0…

哪里能找到好用的动物视频素材 优质网站推荐

想让你的短视频增添些活泼生动的动物元素?无论是搞笑的宠物瞬间,还是野外猛兽的雄姿,这些素材都能让视频更具吸引力。今天就为大家推荐几个超实用的动物视频素材网站,不论你是短视频新手还是老手,都能在这些网站找到心…

力扣_876. 链表的中间结点

力扣_876. 链表的中间结点 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 输入:head [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点,值为…

HarmonyOS ArkTS 基于CommonDialog实现自定义AlertDialog

在鸿蒙系统(HarmonyOS)中,CommonDialog 是一个用于显示对话框的组件,类似于 Android 的 AlertDialog。如果你想在鸿蒙系统中使用 ArkTS 自定义一个 AlertDialog,你可以基于 CommonDialog 实现。 步骤 1:创…

c++ 主函数里的return 0写不写的区别是什么?

在 C 中,main 函数是程序的入口点。main 函数的标准定义如下: int main() {// ... 代码 ... } 或者可以带参数: int main(int argc, char* argv[]) {// ... 代码 ... } main 函数的返回类型是 int,这意味着它应该返回一个整数…

mysql之慢查询设置及日志分析

mysql之慢查询日志分析 1.临时开启慢查询日志2.永久开启慢查询日志 慢查询是指mysql提供的日志记录功能,用来记录执行时间超过设置阈值的sql语句,并将信息写入到日志文件中; 1.临时开启慢查询日志 注意: 1.以下命令需要连接进入到…

代码随想录算法训练营第五十九天|Day59 图论

Bellman_ford 算法精讲 https://www.programmercarl.com/kamacoder/0094.%E5%9F%8E%E5%B8%82%E9%97%B4%E8%B4%A7%E7%89%A9%E8%BF%90%E8%BE%93I.html 思路 #include <stdio.h> #include <stdlib.h> #include <limits.h>#define MAXM 10000 // 假设最大边数为1…

【快速入门 LVGL】-- 1、STM32 工程移植 LVGL

目录 一、LVGL 简述 二、复制一个STM32工程 三、下载 LVGL 四、裁剪 源文件 五、工程添加 LVGL 文件 六、注册 显示 七、注册 触摸屏 八、LVGL 心跳、任务刷新 九、开跑 LVGL 十、控件的事件添加、响应处理 十 一、几个好玩小事情 十 二、显示中文 ~~ 约定 ~~ 在…

小程序租赁系统开发的优势与应用解析

内容概要 随着科技的迅猛发展&#xff0c;小程序租赁系统应运而生&#xff0c;成为许多企业优化业务的重要工具。首先&#xff0c;它提升了用户体验。想象一下&#xff0c;用户只需轻轻一点&#xff0c;就能够浏览和租赁心仪的商品&#xff0c;这种便捷的过程使繁琐的操作大大…

LLM应用-prompt提示:RAG query重写、相似query生成 加强检索准确率

参考&#xff1a; https://zhuanlan.zhihu.com/p/719510286 1、query重写 你是一名AI助手&#xff0c;负责在RAG&#xff08;知识库&#xff09;系统中通过重构用户查询来提高检索效果。根据原始查询&#xff0c;将其重写得更具体、详细&#xff0c;以便更有可能检索到相关信…

什么是域名监控?

域名监控是持续跟踪全球域名系统&#xff08;DNS&#xff09;中变化以发现恶意活动迹象的过程。组织可以对其拥有的域名进行监控&#xff0c;以判断是否有威胁行为者试图入侵其网络。他们还可以对客户的域名使用这种技术以执行类似的检查。 你可以将域名监控比作跟踪与自己实物…

Spring Boot 3 集成 Spring Security(2)授权

文章目录 授权配置 SecurityFilterChain基于注解的授权控制自定义权限决策 在《Spring Boot 3 集成 Spring Security&#xff08;1&#xff09;》中&#xff0c;我们简单实现了 Spring Security 的认证功能&#xff0c;通过实现用户身份验证来确保系统的安全性。Spring Securit…

分布式项目使用Redis实现数据库对象自增主键ID

hello。大家好&#xff0c;我是灰小猿&#xff0c;一个超会写bug的程序猿&#xff01; 在分布式项目中&#xff0c;数据表的主键ID一般可能存在于UUID或自增ID这两种形式&#xff0c;UUID好理解而且实现起来也最容易&#xff0c;但是缺点就是数据表中的主键ID是32位的字符串&a…

C++系统教程008-运算符与表达式

1.运算符与表达式 基本数据类型知道后&#xff0c;就是操作数据。要操作数据&#xff0c;就必须使用运算符和表达式。接下来就是C运算符和表达式的相关知识点&#xff0c; 赋值运算算术运算关系运算逻辑运算逗号运算位运算移位运算sizeof运算数据类型自动转换和强制转换 1.1…

LCR 006. 两数之和 II - 输入有序数组

一.题目&#xff1a; LCR 006. 两数之和 II - 输入有序数组 - 力扣&#xff08;LeetCode&#xff09; 二.我的原始解法-暴力解法超时&#xff1a; class Solution: def twoSum(self, numbers: List[int], target: int) -> List[int]: # 暴力解法 result [] for i in rang…