伯克利DeepMind联合研究,RaLMSpec让检索增强LLM速度提升2-7倍!

引言:知识密集型NLP任务中的挑战与RaLM的潜力

在知识密集型自然语言处理(NLP)任务中,传统的大语言模型面临着将海量知识编码进全参数化模型的巨大挑战。这不仅在训练和部署阶段需要大量的努力,而且在模型需要适应新数据或不同的下游任务时,问题更加严重。为了应对这些挑战,近期的研究提出了检索增强型语言模型(Retrieval-augmented Language Models, RaLM),它通过检索增强将参数化的语言模型与非参数化的知识库结合起来。

RaLM通过一次性(one-shot)或迭代(iterative)的检索与语言模型的交互,来辅助生成过程。尽管迭代式RaLM在生成质量上表现更好,但它由于频繁的检索步骤而遭受高昂的开销。因此,本文提出了一个问题:我们能否在不影响生成质量的情况下减少迭代式RaLM的开销?

为了解决这一问题,我们提出了RaLMSpec框架,它采用推测性检索(speculative retrieval)和批量验证(batched verification)来减少迭代式RaLM的服务开销,同时保证模型输出的正确性。RaLMSpec利用了计算机体系结构中的推测执行概念,通过更高效但不那么精确的推测性检索步骤来替代昂贵的迭代检索步骤。通过进一步引入预取(prefetching)、最优推测步长调度器(optimal speculation stride scheduler)和异步验证(asynchronous verification),RaLMSpec能够自动地充分利用加速潜力。

在对三种语言模型在四个下游QA数据集上的广泛评估中,RaLMSpec在保持与基线相同的模型输出的同时,实现了显著的速度提升。这些结果表明,RaLMSpec可以作为一个通用的加速框架,用于服务迭代式RaLM。

论文标题

ACCELERATING RETRIEVAL-AUGMENTED LANGUAGE MODEL SERVING WITH SPECULATION

论文链接:

https://arxiv.org/pdf/2401.14021.pdf

RaLM与传统语言模型的对比

传统语言模型的局限性

传统的大型语言模型(如GPT-3、LLaMA-2、PaLM)在多样化的自然语言处理(NLP)任务中表现出色,但它们在训练和部署时需要巨大的努力来编码大量知识。当基础模型需要适应新数据或不同的下游任务时,这种情况会进一步恶化。例如,将知识编码到完全参数化的模型中,如GPT-3,需要在训练和部署中投入大量的努力。此外,当基础模型需要适应新数据或多种下游任务时,这种情况会变得更加严峻。

RaLM的优势与应用

为了解决这一挑战,最近的工作引入了检索增强型语言模型(RaLM),它通过检索增强将参数化语言模型与非参数化知识库集成。RaLM在低成本适应最新数据和更好的源归因机制方面表现出色。与传统语言模型相比,RaLM通过结合非参数化知识库与参数化语言模型,展现了解决知识密集型NLP任务的潜力。例如,迭代RaLM由于检索器和语言模型之间更频繁的交互,提供了更好的生成质量。然而,迭代RaLM通常由于频繁的检索步骤而遇到高开销。

RaLMSpec框架的提出

迭代RaLM的效率瓶颈

现有的迭代RaLM方法的一个关键瓶颈是检索的低效率。由于生成性语言模型的自回归特性,检索步骤通常是以单个查询进行的,该查询总结了当前的上下文。现有的迭代RaLM方法通过不断地使用最新的上下文依赖查询(例如q0、q1和q2)从知识库中检索,交错执行检索步骤和生成步骤。相应检索到的内容(如A、B、C)然后通过提示或注意力级组合帮助生成过程,提供相关信息。然而,顺序发出这些查询以检索知识库在本质上是低效的。

RaLMSpec框架的核心思想

RaLMSpec框架采用了推测性检索与批量验证的方法,以减少迭代RaLM的服务开销,同时在理论上保留模型输出。RaLMSpec通过推测性检索替代现有RaLM方法中昂贵、迭代的检索步骤,采用更高效但准确度较低的推测性检索步骤。因此,RaLMSpec使用批量验证步骤来纠正任何不正确的推测结果,并保持模型的生成质量。更具体地说,经过一系列推测性检索步骤后,RaLMSpec通过执行批量检索(即图1(b)中的➅),启动验证步骤,其中批次中的查询对应于推测性检索步骤中的查询。如果推测的文档与验证步骤中检索到的真实文档之间存在不匹配,RaLMSpec会通过回滚到第一个错误推测的位置并使用真实文档重新运行语言模型解码来自动纠正不匹配。结果显示,RaLMSpec通过高效的批量检索,即使用n个查询从知识库检索比顺序执行n次检索更高效,从而节省了延迟。

图片

RaLMSpec的工作原理

推测性检索与批量验证

RaLMSpec框架通过推测性检索(speculative retrieval)与批量验证(batched verification)来减少迭代式检索增强语言模型(iterative RaLM)的服务开销,同时保证模型输出的正确性。推测性检索的概念源自计算机架构中的推测执行(speculative execution),其核心思想是用更高效但准确度较低的推测性检索步骤替代昂贵的迭代检索步骤。在进行了一定数量的推测性检索后,RaLMSpec会启动一个批量验证步骤,其中批量查询对应于推测性检索步骤中的查询。如果推测得到的文档与验证步骤中检索到的真实文档不匹配,RaLMSpec会自动回滚到第一个错误推测的位置,并使用真实文档重新运行语言模型解码。

本地缓存与预取技术

RaLMSpec利用本地缓存(local cache)来存储每个请求的过去文档,并在推测性检索中使用本地缓存而非知识库进行检索。这种方法利用了检索文档的时空局部性(temporal and spatial locality),即在生成过程中可能会多次检索到相同或连续的文档。为了提高推测成功率,RaLMSpec在每次验证步骤中更新本地缓存,直接添加从知识库检索到的相同或连续文档。此外,RaLMSpec支持缓存预取(cache prefetching),通过在本地缓存中预先存储来自知识库的top-k检索文档,以提升推测性能。

图片

异步验证与最优推测步长调度器

RaLMSpec通过允许异步验证(asynchronous verification)来提高并发性,使得额外的推测步骤可以与验证步骤异步执行。这种技术在验证延迟小于语言模型解码延迟的情况下特别有益。此外,RaLMSpec引入了最优推测步长调度器(Optimal Speculation Stride Scheduler, OS3),它动态调整推测步长(speculation stride),即两次验证步骤之间连续推测步骤的数量,以最小化推测开销。

图片

实验设置与评估方法

语言模型与数据集选择

实验中选用了三种标准的自然语言生成(NLG)模型类别:GPT-2、OPT和LLaMA-2。这些模型被广泛用作RaLM的基础语言模型,并覆盖了不同的模型大小。实验涉及的知识密集型开放域问答任务数据集包括Wiki-QA、Web Questions、Natural Questions和Trivia-QA。

检索器类型与基线比较

为了展示RaLMSpec的一致性,实验中测试了包括密集型检索器(dense retrievers)和稀疏检索器(sparse retrievers)在内的不同检索器。对于密集型检索器,进一步区分了精确(exact)和近似(approximate)方法。基线实现对于迭代式RaLM服务,直接遵循了现有的实现,其中检索是在语言模型生成每四个令牌后触发。对于KNN-LM服务,基线使用了Khandelwal等人(2019)的实现,其中检索在生成每个令牌时执行。

实验结果与分析

RaLMSpec在不同检索器上的性能

RaLMSpec框架在不同类型的检索器上表现出了显著的加速效果。具体来说,当使用精确的密集检索器(Exact Dense Retriever, EDR)时,RaLMSpec能够实现最高2.39倍的加速比;而在使用近似的密集检索器(Approximate Dense Retriever, ADR)时,加速比为1.04至1.39倍;对于稀疏检索器(Sparse Retriever, SR),加速比介于1.31至1.77倍之间。这些结果表明,RaLMSpec在处理迭代式检索增强语言模型(iterative RaLM)的服务时,能够有效减少检索步骤所带来的高开销,同时保持模型输出的质量。

各组件对加速效果的贡献

RaLMSpec的加速效果归功于几个关键组件的协同工作。首先,本地缓存的使用为推测性检索提供了基础,通过存储过去的文档来加速后续的检索步骤。其次,批量验证步骤通过并行处理多个查询来校正任何不正确的推测结果,从而保证了模型输出的正确性。此外,预取机制(prefetching)通过将知识库中的前k个检索文档添加到本地缓存中,进一步提高了推测性能。最后,通过动态调整推测步长(speculation stride)和允许异步验证,RaLMSpec能够自动地发掘出最大的加速潜力。

KNN-LM服务的RaLMSpec评估

KNN-LM的挑战与RaLMSpec的适用性

KNN-LM(K-Nearest Neighbour Language Models)是一种在生成下一个词分布时,会通过插值方式结合来自检索到的k个最近邻文档的分布和语言模型输出的方法。尽管KNN-LM在提高基础语言模型的困惑度(perplexity)方面非常有效,但它在推理过程中的开销是极其高昂的,因为每一步生成都需要进行检索。RaLMSpec通过修改缓存更新规则和验证协议,能够显著提高KNN-LM的服务速度,即使在k值较大时(例如k=1024)也能实现高达3.88倍的加速比。

RaLMSpec在KNN-LM上的加速效果

在KNN-LM的服务中,RaLMSpec通过推测性检索和批量验证,显著减少了每个令牌生成步骤所需的检索开销。实验结果显示,当使用精确的密集检索器时,RaLMSpec能够实现最高7.59倍的加速比;而在使用近似的密集检索器时,加速比可达2.45倍。这些结果证明了RaLMSpec在处理检索密集型工作负载时的有效性,并且通过启用最优推测步长调度器(OS3),RaLMSpec能够在不同的场景中一致地实现最佳性能。

讨论与未来工作

RaLMSpec的潜在应用与扩展

RaLMSpec框架通过引入推测性检索(speculative retrieval)和批量验证(batched verification)的概念,为迭代式检索增强语言模型(iterative RaLM)提供了显著的服务加速,同时保持了模型输出的质量。这一机制的潜在应用范围广泛,不仅限于当前的问答(QA)任务,也可能扩展到其他知识密集型自然语言处理(NLP)任务中,例如机器翻译、文本摘要或对话系统。

在未来的工作中,RaLMSpec可以进一步与新兴的大语言模型(如LLaMA-2, GPT-3, PaLM)集成,以提高这些模型在实际应用中的效率。此外,RaLMSpec的推测性检索和批量验证机制也可以与其他类型的检索器(如TF-IDF或BM25)结合,以探索在不同检索精度和效率权衡下的性能表现。

挑战与未来研究方向

尽管RaLMSpec在多个数据集和语言模型上展示了其加速能力,但在实际部署时仍面临一些挑战。例如,推测性检索的成功率高度依赖于检索的时空局部性(temporal/spatial locality),这可能在某些任务或数据集中不那么显著。此外,批量验证步骤的效率取决于并行处理能力,这可能受限于硬件资源。

未来的研究可以探索如何优化RaLMSpec的各个组件,例如改进本地缓存策略、调整预取(prefetching)大小或进一步优化异步验证(asynchronous verification)机制。此外,研究者也可以探索自适应调整推测步长(speculation stride)的算法,以便在不同的运行时环境中动态平衡推测性能和验证开销。

总结:RaLMSpec在提升RaLM服务效率中的贡献

RaLMSpec通过引入推测性检索和批量验证,显著提高了迭代式检索增强语言模型的服务效率。实验结果表明,RaLMSpec能够在保持模型输出质量的同时,实现对不同检索器(包括精确密集检索器、近似密集检索器和稀疏检索器)的显著加速。特别是在使用精确密集检索器时,RaLMSpec+PSA(结合预取、最优推测步长调度器和异步验证)能够与基线相比,在不同的语言模型和数据集上实现高达2.39倍的加速比。

此外,RaLMSpec的三个附加技术——预取、最优推测步长调度器(OS3)和异步验证——进一步降低了RaLM服务的延迟。这些技术的组合使用,使得RaLMSpec能够在各种场景中自动地、一致地实现最佳的加速比,证明了其作为迭代式RaLM服务的通用加速框架的潜力。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

五款好用的在线去水印工具

我们都知道今年是AI大爆发的一年。在日常生活中,你是否经常在拍照时遇到照片中出现一些不必要的路人或其他元素的情况?通常,我们会使用PS软件或其他APP来处理这些问题。但是,对于一些不熟悉PS的朋友来说,这可能会是一种…

缓存击穿,商详页进不去了!!!

故事 对于小猫来讲,最近的一段日子是不好过的,纵使听着再有节拍的音乐,也换不起他对生活的热情。由于上一次“幂等事件”躺枪,他已经有几天没有休息好了。他感觉人生到了低谷。 当接手这个商城项目之后,他感觉他一直没…

嵌入式中C 语言中的三块技术难点

C 语言在嵌入式学习中是必备的知识,甚至大部分操作系统都要围绕 C 语言进行,而其中有三块技术难点,几乎是公认级别的“难啃的硬骨头”。 今天就来带你将这三块硬骨头细细拆解开来,一定让你看明白了。 0x01 指针 指针是公认最难理…

纷享销客渠道伙伴答谢会苏皖站:共谋高质量增长,擘画合作新篇章

2024年1月31日,纷享销客在南京成功举办了“凝心聚力 勇立潮头”——2024纷享销客渠道伙伴答谢会暨业务启动会|苏皖站。活动邀请了苏皖地区10余家核心渠道伙伴的代表,其中30余位投资人、创始人、总经理和合伙人亲临现场,共同探讨渠道伙伴的共赢…

数据处理Job思路总结

对工作中遇到的数据处理Job做了一些梳理,这里试图总结一种通用的Job开发思路。 1. Job的构成 Job 的核心元素包含: 任务、数据、接口、结果。 1.1 任务 数据处理任务。有些业务场景下,Job与任务是绑定的,执行一次Job就对应一个任…

光耦合器的结构与原理解析

光耦合器是一种重要的电光转换器件,广泛应用于电子设备、通信系统以及工业控制等领域。本文将深入分析光耦合器的结构与原理,旨在为读者提供清晰而全面的了解。 光耦合器作为一种关键的电子元件,扮演着信号隔离和传输的重要角色。它的设计结构…

【GitHub项目推荐--开箱即用的直播聊天系统,高颜值,支持二次开发】【转载】

Owncast Owncast 是一个免费开源的实时视频和网络聊天服务器,可与现有流行的广播软件一起使用。 github源代码: https://github.com/owncast/owncast 国内镜像(中文) http://www.gitpp.com/samgoat/owncast-cn 项目介绍 Owncast 是一个开源的、可…

Pycharm安装插件

经常用Pycharm写代码的话,时不时的就会接触到一些好用的插件,如何安装插件呢?经常使用的是两种方式,分别是在线安装和离线安装。 在线安装 在线安装比较简单,打开Pycharm,在左上角【文件】->【设置】-…

Portainer访问远程Docker (TLS加密)

前言: docker的2375端口,出于安全性考虑即(Docker Remote API未授权访问漏洞),是不开放的,如果想要管理远程docker,可以使用TLS机制来进行访问,这里以Portainer访问连接为例 文章参考:https://b…

实习|基于SSM的实习管理系统设计与实现(源码+数据库+文档)

实习管理系统目录 目录 基于SSM的实习管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能介绍 (1)管理员登录 (2)实训方向管理 (3)公告信息管理 (4&#xff0…

笔记本键盘卸载或自动跳出字符故障或按键无效修复办法

首先,在Windows 10操作系统中,您可以在笔记本电脑桌面上找到"计算机"图标,并使用鼠标右键点击它。然后选择"属性"选项。 打开系统属性后,您会看到右上角有一个"设备管理器"选项。请点击它来打开设…

深掘开源安全需求,破解开源治理难题

当下,中国金融科技行业在数字支付、数字信贷、金融风控等领域取得了很多创新成果,大幅提升了金融数字化和智能化水平,已经在金融科技的全球竞争中走在前列。 在此进程中,开源技术发挥了不可或缺的重要作用,根据我国金…

第三百零二回

文章目录 1. 概念介绍2. 实现方法2.1 使用Steam实现2.2 使用Timer实现 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现每隔一段时间执行某项目任务"相关的内容,本章回中将介绍如何实现倒计时功能.闲话休提,让我们一起Talk Flutter吧…

ELK集群搭建(基础教程)

ELK集群搭建(基础教程) 目录: 机器准备 集群内各台机器安装Elasticsearch 安装部署Kafka(注:每个节点都配置,注意ip不同) 安装logstash工具 安装filebeat ELK收集Nginx的json日志 ELK收集Nginx正常日志和错误日…

用纯OpenAI的API,实现手机流量包智能客服

import json from openai import OpenAI from dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv())def print_json(data):"""打印参数。如果参数是有结构的(如字典或列表),则以格式化的 JSON 形式打印&…

容器化对数据库的性能有影响吗?

引言 容器化是一种将应用程序及其依赖项打包到一个独立、可移植的运行环境中的技术。容器化技术通过使用容器运行时引擎(比如Docker/Containerd)来创建、部署和管理容器。Kubernetes(通常简称为 k8s)是一个开源的容器编排和管理平…

谷粒商城【成神路】-【3】——三级分类

目录 🍿1.查询三级分类 🧂2.前端页面搭建 🍟3.添加网关 🍳4.解决跨域 🧇5.显示分类 🥞6.显示复选框 1.查询三级分类 1.controller 直接调用service层的接口 RequestMapping("/list/tree&qu…

多线程(进阶三:JUC)

一、Callable接口 二、reentrantLock 三、原子类 四、线程池 五、信号量 Semaphore 六、CountDownLatch JUC即java.utill.concurrent,里面放了一些多线程编程时有用的类,下面是里面的一些类。 一、Callable接口 1、创建线程的操作 多线程编程时&a…

day02.C++命名空间

目录 一、命名空间的作用 二、命名空间的定义 三、命名空间的镶嵌定义 四、命名空间的使用方法 一、命名空间的作用 一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过…

将有逻辑关系的树形结构数组转换为扁平化的一维对象数组(包含PID、ID父子关系)(tree转换为List)

// 将有逻辑关系的树形结构数组转换为扁平化的一维对象数组 treeStructure2flatArray(arr) {let r [], r_ (ar, PID root) > ar.forEach(v > (v.children && (r_(v.children, v.ID), delete v.children), (v.PID PID, r.push(v))));r_(JSON.parse(JSON.strin…