RAG落地端侧场景:EdgeRAG面向端侧RAG优化思路及特定领域多模态探索

文摘   2025-01-02 11:40   北京  

今天是2025年01月02日,星期四,北京,天气晴。

今天是2025年的第二天,在技术消息侧方面,昨天说的最多的,就是关于openai o1模型参数疑似泄露。微软论文MEDEC: A Benchmark for Medical Error Detection and Correction in Clinical Notes ,https://arxiv.org/pdf/2412.19260,只出了其中涉及到的几个模型参数。

即:GPT-4~1.76T,GPT-4o~200B,GPT-4o mini~8B,Bo1 preview~300B,o1 mini~100B,虽然并不清楚这个事情是否为真实,毕竟之前也出现过类似的情况。

当然,在RAG方向,在多模态RAG方面,开始在转向垂直任务,此外,面向端侧应用的RAG也受到关注,EdgeRAG面向端侧RAG优化的这个工作很有工程借鉴意义。

我们来跟进下,保持跟进,抱歉前进,系统学习,会有更多收获。

一、多模态RAG之特定领域做任务分解

关于RAG多模态专题进展,老刘说NLP已经建立起了对应专题链接,https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzAxMjc3MjkyMg==&action=getalbum&album_id=3724150715762409475&

最近的工作《Enhanced Multimodal RAG-LLM for Accurate Visual Question Answering》(https://arxiv.org/pdf/2412.20927),这个工作也是走了一个发文方向,那就走领域多模态RAG:复杂场景中识别和计数物体以及确定其空间位置

这个思路,我们可以再看看,提出了一个增强的多模态RAG-LLM框架,通过引入结构化场景图来增强物体识别、关系识别和空间理解。

从实现角度上来看,框架包括三个模块:

一个是多模态RAG构建模块:生成准确的答案,通过生成场景图识别图像中的实体及其属性和空间关系。使用Faster-RCNN生成实体提案,并进行对象属性识别以确定每个对象的类别、边界框、数量和空间位置。采用原型嵌入网络(PENET)识别不同对象之间的关系,并构建向量数据库以实现高效检索。

一个是语义增强提示模块:将检索到的视觉数据与用户问题结合,生成结构化的提示,增强LLM的理解和响应生成能力。生成的提示格式为“Based on the information extracted from the image: {DATA}, please answer the following question: {QUESTION}。”

一个是基于LLM的VQA模块:使用生成的提示进行VQA任务,LLM结合图像中的重要物体级和关系细节生成更准确和上下文敏感的答案。实验中使用Qwen-2-72B-Instruct作为LLM。

二、RAG的新动向-EdgeRAG面向端侧RAG优化

这两天,RAG出现了一个新的动向,即面向端侧RAG优化,核心关注点是优化显存消耗以及搜索查询时延

这个工作很值得借鉴,工程化思路:《EdgeRAG: Online-Indexed RAG for Edge Devices》 ,https://arxiv.org/pdf/2412.21023,这个工作认为,由于边缘设备的内存和处理能力有限,直接在这些设备上运行大规模的向量数据库会导致内存不足和性能下降。

例如,

传统RAG系统如Flat索引和IVF索引,这些系统在处理大规模数据时会遇到内存和计算效率问题;

如下两级倒排文件(IVF)索引将数据块嵌入聚类到质心。检索过程首先搜索最近的质心,然后在簇内进行第二次搜索。因此,避免了对所有嵌入的昂贵顺序搜索。然而,将所有嵌入保留在内存中仍然会导致过度的内存抖动和增加的延迟。

因此,将第一级质心保留在内存中并在线生成第二级质心可能是一个有前景的解决方案,所以,这个也是这个工作的一个优化思路

如并行处理和分布式计算等优化方案在边缘设备上可能受限于硬件资源。

更具象化的,内存容量限制导致无法加载大型嵌入向量数据库,计算能力有限使得在线生成嵌入向量速度慢,尤其是在处理大尾簇的时候。

所以,在解决思路方面,提出EdgeRAG思路,核心包括以下几个:

一个是选择性索引存储,通过剪枝二级嵌入向量来减少内存占用。剪枝仅在二级搜索中使用的质心簇内的数据嵌入向量,以节省内存容量。在初始索引阶段,系统对集群进行性能分析,估计嵌入生成延迟。

超过延迟阈值的集群的嵌入向量将被预计算并存储。这一点的核心是,大尾簇的嵌入向量,EdgeRAG预先计算并存储这些向量的嵌入,以避免生成这些向量的长尾延迟。

查询时,如果可用则从存储中检索嵌入向量,否则在查询过程中生成嵌入向量。这一点很重要,在检索过程中按需生成嵌入向量,避免了预先计算和存储所有嵌入向量的开销。

具体算法思路如下:

一个是自适应成本感知缓存, 引入自适应缓存策略,以优化性能并减少延迟,优先缓存生成成本高的嵌入,避免重复计算。

这里的逻辑在于,大多数嵌入向量在检索过程中并未被搜索到。其次,生成嵌入向量的成本对所有簇来说并不相同,并且具有极端的尾部分布。这些偏斜性为进一步优化留下了空间

所以,缓存策略通过动态调整最小延迟缓存阈值来实现,确保缓存命中率和整体延迟之间的平衡。

这里比较抽象,具象化一下,初始化缓存阈值为0,随后逐步增加阈值,同时监控缓存命中率和检索延迟的移动平均值。如果发生缓存未命中且当前检索延迟低于移动平均值,则增加阈值;否则,减少阈值。这种方法确保了缓存优先级高但生成成本高的嵌入向量,从而提高整体性能。

看最终效果,EdgeRAG在大多数情况下比基线IVF索引快1.8倍,而在较大数据集上快3.82倍。

总结

本文主要围绕多模态RAG和端侧RAG进行了一些优化工作,后者则更是工程化经验,读起来很有启发,大家可以重点看第二个。

参考文献

1、https://arxiv.org/pdf/2412.19260
2、https://arxiv.org/pdf/2412.21023
3、https://arxiv.org/pdf/2412.20927

关于我们

老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。

加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入


老刘说NLP
老刘,NLP开源爱好者与践行者。主页:https://liuhuanyong.github.io。老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
 最新文章