繞過 RAG 實(shí)時(shí)檢索瓶頸,緩存增強(qiáng)生成(CAG)如何助力性能突破?
檢索增強(qiáng)生成(RAG)作為一種通過整合外部知識(shí)源來增強(qiáng)語言模型的強(qiáng)大方法而備受矚目。不過,這種方法也帶來了一些挑戰(zhàn),比如檢索過程的延遲、文檔挑選時(shí)可能出現(xiàn)的誤差,以及系統(tǒng)復(fù)雜度的增加。
隨著能夠處理更長上下文的大語言模型(LLMs)的興起,緩存增強(qiáng)生成(CAG)技術(shù)應(yīng)運(yùn)而生,它避免了實(shí)時(shí)的信息檢索。這項(xiàng)技術(shù)通過將所有必要資源預(yù)先加載到模型的擴(kuò)展上下文中,并在緩存其相關(guān)運(yùn)行時(shí)(runtime)參數(shù),尤其在處理數(shù)量有限且易于管理的文檔或知識(shí)時(shí)更為有效。
話不多說,讓我們來深入探討這一新穎的技術(shù)。
本文將討論以下主題:
- RAG 如何擴(kuò)展上下文的處理能力?
- 無限擴(kuò)展的上下文窗口
- CAG 技術(shù)有何優(yōu)勢?
- 其他方面的改進(jìn)
- CAG 框架的運(yùn)作原理
- 總結(jié)
圖片
1.RAG 如何擴(kuò)展上下文的處理能力?
RAG 是一種半?yún)?shù)化系統(tǒng),其中參數(shù)化部分由大語言模型構(gòu)成,而非參數(shù)化部分則包括其他元素。將這兩部分結(jié)合,便形成了半?yún)?shù)化系統(tǒng)。在 LLMs 中,所有信息都以編碼形式存儲(chǔ)在模型的權(quán)重或參數(shù)中,而系統(tǒng)的其他部分則沒有用參數(shù)來定義這些知識(shí)。
那么,這種設(shè)計(jì)是如何解決問題的呢?
- 通過在 LLMs 中靈活地替換索引(即特定的信息),能夠?qū)崿F(xiàn)信息的個(gè)性化定制,這意味著我們不會(huì)因?yàn)樾畔⑦^時(shí)而受限,同時(shí)也能夠更新索引的內(nèi)容。
- 將 LLMs 與這些索引相結(jié)合,可以減少錯(cuò)誤信息的產(chǎn)生,并且我們能夠通過指向信息原始來源來進(jìn)行引用和歸屬描述。
因此,從理論上講,RAG 提升了我們?yōu)?LLMs 創(chuàng)建更佳上下文的能力,使其表現(xiàn)更加出色。
但這個(gè)過程真的這么簡單嗎?答案是否定的。
現(xiàn)有的 RAG 系統(tǒng)并不夠智能,它們相對(duì)簡單,無法應(yīng)對(duì)那些需要大量自定義上下文的復(fù)雜任務(wù)。
因此,簡而言之,正是由于上下文窗口對(duì) LLMs 的限制,RAG 才得以發(fā)展起來。
2.無限擴(kuò)展的上下文窗口
相關(guān)論文在此:《Leave No Context Behind: Efficient Infinite Context Transformers with Infini-attention》。
這篇論文提出了一種高效的方法,可以在有限的內(nèi)存和計(jì)算資源約束下,將基于 Transformer 的大語言模型(LLMs)擴(kuò)展到處理無限長的輸入。該方法中的一個(gè)關(guān)鍵創(chuàng)新是一種名為 Infini-attention 的全新注意力機(jī)制。
Infini-attention 的核心思想是將局部注意力和全局注意力相結(jié)合。具體來說,首先將整篇文章分割成多個(gè)片段,在其中一個(gè)片段上應(yīng)用標(biāo)準(zhǔn)的注意力機(jī)制,而為了獲取前一個(gè)片段的上下文,我們采用了一種線性注意力機(jī)制。以下是對(duì)這篇論文的簡要概述:
- 混合注意力機(jī)制:局部注意力集中于單詞周圍的即時(shí)上下文,而長距離注意力則通過參考迄今為止所見的整個(gè)序列的壓縮摘要來保持全局視野。
- 壓縮記憶:利用線性注意力來記憶之前的文本片段。
- 高效更新:為了避免冗余和節(jié)省計(jì)算量,Infini-attention 不會(huì)直接將新信息添加到記憶中。相反,它會(huì)首先檢查已知信息,然后只更新記憶中的新信息或不同信息,這與 ResNet 中的跳躍連接(skip connections)類似。
- 權(quán)衡控制:通過一個(gè)超參數(shù)來調(diào)節(jié)局部信息和壓縮記憶的混合比例。
3.CAG 技術(shù)有何優(yōu)勢?
無檢索長上下文范式:提出了一種創(chuàng)新方法,通過利用預(yù)加載文檔和預(yù)計(jì)算 KV 緩存的長上下文 LLMs,消除了檢索延遲、錯(cuò)誤和系統(tǒng)復(fù)雜性。
性能比較:實(shí)驗(yàn)表明,長上下文 LLMs 的性能優(yōu)于傳統(tǒng)的 RAG 系統(tǒng),特別是在可管理的知識(shí)庫中。
實(shí)用見解:提出可操作的優(yōu)化策略以提升知識(shí)密集型工作流效率,通過實(shí)證驗(yàn)證無檢索方法在特定應(yīng)用場景下的可行性。
CAG 相較于傳統(tǒng) RAG 系統(tǒng)具有以下顯著優(yōu)勢:
- 縮短推理時(shí)間:由于無需實(shí)時(shí)檢索,推理過程變得更快、更高效,能夠更快地響應(yīng)用戶查詢。
- 統(tǒng)一上下文:將整個(gè)知識(shí)集合預(yù)加載到 LLM 中,可提供對(duì)文檔的整體和連貫理解,從而在各種任務(wù)中提高響應(yīng)質(zhì)量和響應(yīng)一致性。
- 簡化架構(gòu):通過移除整合檢索器和生成器的需求,系統(tǒng)變得更加簡潔,降低了系統(tǒng)復(fù)雜性,提高了可維護(hù)性,并減少了開發(fā)成本。
4.其他方面的改進(jìn)
對(duì)于知識(shí)密集型任務(wù)而言,增加的計(jì)算資源通常被用來融入更多的外部知識(shí)。然而,如果沒有有效地利用這些知識(shí),單純地?cái)U(kuò)展上下文并不總是能提升性能。
兩種推理擴(kuò)展策略:上下文學(xué)習(xí)(In-context learning)和迭代式提示技術(shù)(iterative prompting)。
這些策略為擴(kuò)展測試時(shí)計(jì)算(test-time computation)提供了額外的靈活性(例如,通過增加檢索的文檔數(shù)量或生成步驟),從而增強(qiáng) LLMs 獲取和利用上下文信息的能力。
我們需要回答兩個(gè)關(guān)鍵問題:
(1) 在進(jìn)行最優(yōu)配置時(shí),RAG 性能如何通過推理計(jì)算規(guī)模的擴(kuò)展獲得提升?
(2) 能否通過建模 RAG 性能與推理參數(shù)之間的量化關(guān)系,預(yù)測給定預(yù)算約束下的最優(yōu)測試時(shí)計(jì)算資源分配?
在最優(yōu)推理參數(shù)配置下,RAG性能隨著測試時(shí)計(jì)算量級(jí)的提升呈現(xiàn)近似線性增長?;趯?shí)驗(yàn)觀測,我們推導(dǎo)出RAG的推理擴(kuò)展規(guī)律及其配套計(jì)算資源分配模型,該模型可預(yù)測不同超參數(shù)配置下的系統(tǒng)性能表現(xiàn)。
欲了解更多信息請(qǐng)閱讀此論文:https://arxiv.org/pdf/2410.04343
另一項(xiàng)工作則更多地從硬件(優(yōu)化)設(shè)計(jì)的角度出發(fā):
研究團(tuán)隊(duì)開發(fā)了智能知識(shí)存儲(chǔ)系統(tǒng)(Intelligent Knowledge Store, IKS),這是一種基于 CXL 2.0 協(xié)議的設(shè)備,采用橫向擴(kuò)展的近內(nèi)存加速架構(gòu),通過在主機(jī) CPU 與近內(nèi)存加速器之間構(gòu)建新型緩存一致性接口實(shí)現(xiàn)性能突破。
在 512GB 向量數(shù)據(jù)庫上,IKS 執(zhí)行精確最近鄰搜索的速度相比 Intel Sapphire Rapids CPU 提升 13.4-27.9 倍。這種搜索性能優(yōu)勢使典型 RAG 應(yīng)用的端到端推理時(shí)間縮短 1.7-26.3 倍。作為內(nèi)存擴(kuò)展器,IKS 的內(nèi)部 DRAM 可解耦供服務(wù)器其他應(yīng)用使用,有效避免當(dāng)今服務(wù)器中最昂貴的 DRAM 資源閑置浪費(fèi)。
欲了解更多信息,請(qǐng)閱讀這里:https://arxiv.org/pdf/2412.15246
另一篇論文系統(tǒng)性地研究了長上下文對(duì) 20 種主流開源和商業(yè)大語言模型(LLM)的檢索增強(qiáng)生成(RAG)性能影響。研究團(tuán)隊(duì)通過在三個(gè)專有領(lǐng)域數(shù)據(jù)集上改變總上下文長度(從 2,000 到 128,000 tokens,并在可能情況下擴(kuò)展至 200 萬 tokens)運(yùn)行 RAG 工作流,揭示了長上下文在 RAG 應(yīng)用中的優(yōu)勢與局限性。
他們的研究發(fā)現(xiàn),雖然檢索更多文檔可以提高性能,但只有少數(shù)最新一代的最先進(jìn) LLMs 能夠在超過 64k tokens 的長上下文中保持穩(wěn)定的準(zhǔn)確性。他們還確定了長上下文場景中的不同故障模式,為未來的研究提出了方向。
欲了解更多信息,請(qǐng)閱讀此論文:https://arxiv.org/pdf/2411.03538
5.CAG 框架的運(yùn)作原理
CAG 框架利用長上下文 LLMs 的擴(kuò)展上下文能力,消除了實(shí)時(shí)檢索的需求。通過預(yù)加載外部知識(shí)源(例如,文檔集合 D={d1,d2,…} )并預(yù)計(jì)算鍵值(KV)緩存(C_KV),它克服了傳統(tǒng) RAG 系統(tǒng)的效率低下問題。該框架主要分三個(gè)階段運(yùn)行:
1)外部知識(shí)預(yù)加載
- 對(duì)精選的文檔集合 D 進(jìn)行預(yù)處理,使其適配模型的擴(kuò)展上下文窗口。
- LLM 處理這些文檔,將它們轉(zhuǎn)換為預(yù)計(jì)算的鍵值(KV)緩存,該緩存封裝了 LLM 的推理狀態(tài)。LLM(M)將文檔集合 D 編碼成預(yù)計(jì)算的 KV 緩存:
image.png
- 該預(yù)計(jì)算緩存被存儲(chǔ)以供復(fù)用,確保無論后續(xù)執(zhí)行多少次查詢,處理文檔集合D的計(jì)算成本僅需支付一次。
2) 推理階段
- 在推理階段,KV 緩存(C_KV)與用戶查詢 Q 一起加載。
- LLM 利用這個(gè)緩存中的上下文來生成響應(yīng),從而消除了檢索延遲,并減少了由于動(dòng)態(tài)檢索引起的錯(cuò)誤或遺漏的風(fēng)險(xiǎn)。LLM 通過利用緩存中的上下文來生成響應(yīng):
image.png
這種方法消除了檢索延遲,將檢索錯(cuò)誤的風(fēng)險(xiǎn)降至最低。組合提示詞 P=Concat(D,Q) 確保了對(duì)外部知識(shí)和查詢的統(tǒng)一理解。
3) 緩存重置
- 為維持性能,需對(duì) KV 緩存進(jìn)行高效重置。在推理過程中,隨著新 token(t1,t2,…,tk)被添加至上下文窗口,重置過程會(huì)截?cái)噙@些 tokens:
image.png
- 隨著新 token 的連續(xù)添加,KV 緩存逐漸增長,重置時(shí)僅需截?cái)噙@些新增 token,即可實(shí)現(xiàn)快速重新初始化,無需從磁盤重新加載整個(gè)緩存。這種設(shè)計(jì)避免了全量緩存加載的 I/O 瓶頸,確保了系統(tǒng)響應(yīng)速度的持續(xù)穩(wěn)定。
6.Conclusion
緩存增強(qiáng)生成(CAG)在實(shí)時(shí)檢索不可行或需要極低延遲響應(yīng)的場景中優(yōu)勢顯著。通過將海量外部知識(shí)嵌入模型的上下文窗口,CAG 能夠生成信息豐富且上下文相關(guān)的回答,避免了傳統(tǒng)檢索增強(qiáng)生成(RAG)系統(tǒng)的檢索延遲。
Thanks for reading!
Hope you have enjoyed and learned new things from this blog!