RAGCache: Optymalizacja Generowania Wspomaganego Wyszukiwaniem poprzez Dynamiczne Buforowanie

Retrieval-Augmented Generation (RAG) to technika, która znacząco zwiększa możliwości dużych modeli językowych (Large Language Models, LLM) poprzez włączenie zewnętrznej wiedzy, co pozwala na udzielanie bardziej trafnych i precyzyjnych odpowiedzi. Jednakże, pomimo swoich zalet, RAG ma pewne istotne wady. Główna z nich to wysokie koszty obliczeniowe oraz pamięciowe, które wynikają z potrzeby wstrzykiwania długich sekwencji zewnętrznych dokumentów do zapytań. To może zwiększać długość oryginalnych sekwencji nawet dziesięciokrotnie. W efekcie, wzrost wymagań dotyczących mocy obliczeniowej oraz pamięci ogranicza efektywność RAG, co stanowi poważną przeszkodę dla jego skalowalności w aplikacjach czasu rzeczywistego. Wcześniejsze próby optymalizacji wnioskowania LLM, na przykład poprzez współdzielenie stanów pośrednich, były pomocne, ale nie całkowicie rozwiązywały unikalne wyzwania związane z RAG, szczególnie te wynikające z generacji długich sekwencji i częstego odwoływania się do wiedzy.

Nowe rozwiązanie – RAGCache

Zespół badaczy z Uniwersytetu Pekińskiego oraz ByteDance wprowadził innowacyjne rozwiązanie o nazwie RAGCache. Jest to wielopoziomowy dynamiczny system pamięci podręcznej, zaprojektowany specjalnie do optymalizacji Retrieval-Augmented Generation. RAGCache rozwiązuje problemy związane z tradycyjnymi konfiguracjami RAG, wprowadzając tzw. drzewo wiedzy, które buforuje stany pośrednie pobranych dokumentów zarówno w pamięci GPU, jak i w pamięci hosta. Kluczowym elementem tego rozwiązania jest zastosowanie polityki wymiany dostosowanej do cech wnioskowania LLM oraz wzorców pobierania danych w RAG. Dzięki temu znacząco poprawia się wskaźnik trafień w pamięci podręcznej. Dodatkowo, system łączy fazy pobierania danych z fazami wnioskowania, co redukuje opóźnienia. RAGCache umożliwia dynamiczne buforowanie i zarządzanie tensorami klucz-wartość, co pozwala na współdzielenie tych stanów między wieloma zapytaniami. Efektem jest zmniejszenie liczby zbędnych obliczeń oraz przyspieszenie czasu odpowiedzi, a jednocześnie lepsze wykorzystanie pamięci GPU i hosta.

Zasady działania RAGCache

RAGCache organizuje zbuforowane tensory klucz-wartość pobranych dokumentów w postaci drzewa wiedzy. Dokumenty, które są często wykorzystywane, przechowywane są w szybkiej pamięci GPU, natomiast te, które są rzadziej używane, trafiają do wolniejszej pamięci hosta. Kluczową innowacją RAGCache jest polityka wymiany typu PGDSF (Prefix-aware Greedy-Dual-Size-Frequency), która uwzględnia kolejność dokumentów, ich częstotliwość, rozmiar oraz świeżość, minimalizując przy tym błędy w buforowaniu. Dzięki temu najważniejsze stany pośrednie są zachowywane i ponownie wykorzystywane, co znacząco skraca czas przetwarzania kolejnych zapytań. Kolejnym istotnym elementem jest dynamiczne spekulatywne potokowanie, które nakłada na siebie etapy pobierania wektorów i wnioskowania. To rozwiązanie redukuje opóźnienia powodowane przez sekwencyjne wykonywanie operacji.

Wszystkie te ulepszenia techniczne sprawiają, że RAGCache może przyspieszyć czas do pierwszego tokenu (TTFT) nawet 4-krotnie oraz zwiększyć przepustowość do 2,1 razy w porównaniu do tradycyjnych rozwiązań, takich jak vLLM zintegrowany z Faiss.

Zalety RAGCache w praktyce

Kluczowe znaczenie RAGCache polega na jego zdolności do uczynienia Retrieval-Augmented Generation bardziej praktycznym w zastosowaniach czasu rzeczywistego oraz na dużą skalę. W przeprowadzonych testach RAGCache został zaimplementowany na vLLM, jednym z wiodących systemów wnioskowania LLM, w połączeniu z Faiss, popularną bazą danych wektorowych. Wyniki były imponujące: RAGCache zmniejszył czas do pierwszego tokenu nawet 4-krotnie oraz zwiększył przepustowość o 2,1 razy w porównaniu do vLLM korzystającego z Faiss. Co więcej, w porównaniu z SGLang, wysokowydajnym systemem obsługi LLM, RAGCache również wykazał znaczące ulepszenia, redukując TTFT aż o 3,5 razy i zwiększając przepustowość o 1,8 razy. Te wyniki podkreślają efektywność wielopoziomowego buforowania w połączeniu z zaawansowanymi technikami nakładania pobierania i generowania.

RAGCache znacząco obniża obciążenie obliczeniowe, co sprawia, że jest idealnym rozwiązaniem w scenariuszach, które obejmują dużą liczbę podobnych zapytań odnoszących się do pobranych dokumentów.

Przyszłość optymalizacji RAG

RAGCache to przełomowy krok w optymalizacji Retrieval-Augmented Generation dzięki wprowadzeniu inteligentnego, wielopoziomowego systemu pamięci podręcznej, który redukuje opóźnienia i zwiększa przepustowość. Jego innowacyjne podejście do buforowania stanów pośrednich pomiędzy wieloma zapytaniami oraz dynamicznego zarządzania pamięcią na poziomie GPU i hosta bezpośrednio rozwiązuje wąskie gardła obecnych systemów RAG. Wyniki eksperymentalne pokazują, że RAGCache może dostarczyć znaczących usprawnień wydajności, co czyni go potężnym narzędziem do skalowania RAG w rzeczywistych aplikacjach czasu rzeczywistego. W miarę jak LLM-y stają się coraz bardziej złożone i rozbudowane, rozwiązania takie jak RAGCache będą kluczowe dla zapewnienia, że te technologie mogą być wdrażane efektywnie, bez kompromisów w zakresie szybkości czy kosztów obliczeniowych.

Rozwój takich rozwiązań jak RAGCache pozwala na usprawnienie obecnych systemów opartych na LLM i RAG, co sprawia, że są one bardziej dostępne i skalowalne w codziennych zastosowaniach.