CAG(Cache-Augmented Generation): LLM의 Long Context를 활용한 RAG 대체 기법에 대한 연구

CAG 연구 소개

대규모 언어 모델(Large Language Model, LLM)의 발전은 자연어 처리(NLP) 작업에서 혁신적인 성과를 가져왔습니다. 특히, 검색-보강 생성(Retrieval-Augmented Generation, RAG)은 외부 지식 기반을 활용하여 모델의 문맥 이해력을 크게 향상시키는 방법으로 주목받아 왔습니다. RAG는 특정 작업에서 외부 데이터 소스를 동적으로 검색하고 이를 기반으로 문맥에 적합한 응답을 생성하는 시스템입니다. 이는 개방형 질문 응답(Open-Domain Question Answering)과 같은 지식 집약적 작업에서 탁월한 성능을 발휘해 왔습니다.

하지만 RAG에는 다음과 같은 한계가 있습니다:

  • 실시간 검색은 시스템의 지연(latency)을 초래하여 사용자 경험을 저하시킬 수 있습니다.
  • 검색 단계에서 부정확하거나 관련 없는 문서를 선택하면 모델의 응답 품질이 크게 저하됩니다.
  • 검색 및 생성 모듈을 통합해야 하는 시스템 구조는 복잡성을 증가시키며, 이를 유지하고 최적화하는 데 추가적인 노력이 필요합니다.

CAG(Cache-Augmented Generation, 캐시-보강 생성) 연구는 이러한 RAG의 단점을 극복하고자 제안한 방법으로, 1) 대규모 언어 모델의 확장된 컨텍스트 윈도우를 활용하여 외부 데이터를 사전에 로드하고, 2) 키-값(Key-Value, KV) 캐시를 생성하여 실시간 검색 단계를 완전히 제거합니다. 이를 통해 시스템의 지연을 최소화하고, 검색 오류를 방지하며, 구조적 단순성을 확보할 수 있습니다.

특히, 장기 컨텍스트(Long Context)를 처리할 수 있는 최신 LLM의 도입은 CAG의 구현 가능성을 높였습니다. 최신 모델은 최대 수십만 개의 토큰을 처리할 수 있어 대규모 데이터 컬렉션을 한 번에 모델에 제공할 수 있습니다. 이를 통해 RAG가 필요했던 여러 작업에서 CAG가 동일하거나 더 나은 성능을 제공할 수 있음을 실험적으로 입증했습니다.

CAG의 핵심 기여는 다음 세 가지로 요약됩니다:

  • 검색 없는 장기 컨텍스트 패러다임: 모든 문서를 사전에 로드하고 KV 캐시를 활용하여 실시간 검색을 완전히 제거.
  • 성능 비교 연구: RAG와 CAG의 성능을 다양한 데이터셋에서 비교하여, CAG가 효율성과 정확성에서 우수함을 입증.
  • 실용적 통찰 제공: CAG의 효율적 활용 방안을 제시하며, 특정 응용 분야에서 검색 없는 방식이 가지는 이점을 강조.

이 연구는 단순히 새로운 기법을 제안하는 데 그치지 않고, RAG와의 비교를 통해 CAG가 제공하는 현실적이고 실질적인 이점을 명확히 제시합니다. 이는 데이터 크기가 제한적이고 관리 가능한 지식 기반을 사용하는 작업에서 특히 유용합니다.

CAG 기법 소개

CAG는 RAG와 달리, 실시간 검색 없이 모델의 확장된 컨텍스트 윈도우를 활용하여 사전에 로드된 정보를 기반으로 응답을 생성합니다. 이를 위해 세 가지 주요 구성 요소가 필요합니다:

  • 확장된 컨텍스트 윈도우(Long Context Window): 최신 대규모 언어 모델(Large Language Model, LLM)은 최대 128,000 토큰까지 처리할 수 있는 확장된 컨텍스트 윈도우를 제공합니다. 이를 통해 대규모 문서 컬렉션을 모델의 입력으로 제공할 수 있습니다.
  • 사전 로딩된 데이터(Preloaded Data): 모델이 필요한 모든 정보를 사전에 로드하고, 이를 기반으로 추론을 수행합니다. 이 과정에서 데이터의 크기와 품질이 모델 성능에 직접적으로 영향을 미칩니다.
  • 키-값 캐시(Key-Value Cache): 모델의 추론 상태를 사전에 계산하고 저장하여, 동일한 데이터를 반복적으로 처리하지 않아도 되도록 최적화합니다. 이는 시스템의 효율성을 크게 향상시키는 핵심 기술입니다.
특징 RAG CAG
검색 방식 실시간 검색 필요 사전 로드된 지식 사용
지연 발생 있음 없음
시스템 복잡도 높음 낮음
성능 검색 품질에 따라 달라짐 사전 준비된 컨텍스트로 일정함

지식 사전 로딩(Preloading External Knowledge)

CAG의 첫 번째 단계는 관련 지식을 사전에 로드하는 것입니다. 이 과정은 다음과 같이 이루어집니다:

  1. 데이터 수집 및 전처리: 작업에 필요한 문서(𝒟 = {𝑑₁, 𝑑₂, …})를 수집하고, 문서의 크기를 모델의 컨텍스트 윈도우에 맞게 조정합니다. 이 과정에서 중복 제거, 불필요한 정보 삭제, 문서 압축 등의 전처리 작업이 수행됩니다.
  2. 모델 입력 구성: 사전 로딩된 문서와 사용자 질의(𝒬)를 통합하여 모델의 입력으로 사용됩니다. 입력 형식은 문서와 질의를 결합한 형태로, 다음과 같이 표현할 수 있습니다: 𝒫 = Concat(𝒟, 𝒬)
  3. 효율적인 데이터 관리: 데이터 크기를 줄이기 위해 필요한 정보만 선별적으로 포함합니다. 예를 들어, 특정 작업에 필요한 도메인 지식만 로드하여 메모리 사용량을 최적화합니다.

KV 캐시(Key-Value Cache) 생성

사전 로드한 지식을 바탕으로 KV 캐시를 생성합니다. KV 캐시는 CAG의 핵심 구성 요소로, 모델의 추론 효율성을 크게 향상시킵니다. 캐시를 생성하고 저장하는 방법은 다음과 같이 이뤄집니다:

  1. KV 캐시 생성: 문서(𝒟)를 모델에 입력하여 사전 계산된 키-값 쌍(C_{KV})을 생성합니다: C_{KV} = KV-Encode(𝒟). (KV-Encode는 모델의 내부 상태를 저장하는 함수)
  2. KV 캐시 저장: 생성된 KV 캐시는 디스크나 메모리에 저장됩니다. 이는 이후 추론 단계에서 바로 로드되어 사용됩니다.

이렇게 캐시를 생성 및 저장하여 사용하는 경우, 동일한 문서를 여러 번 처리할 필요가 없어 계산 자원을 절약할 수 있습니다. 이를 통해 추론 시간이 단축되어 사용자 경험 또한 개선할 수 있습니다.

CAG의 추론(Inference) 과정

CAG의 추론 단계는 사전 계산된 KV 캐시와 사용자의 질의를 결합하여 응답을 생성합니다. 먼저, 사용자 질의(𝒬)와 KV 캐시(C_{KV})를 결합하여 모델에 입력합니다. 모델이 생성한 응답 ℛ은 다음과 같이 표현할 수 있습니다: ℛ = M(𝒬 | C_{KV}).

이 때 KV 캐시가 포함된 입력은 모델의 컨텍스트 윈도우에 로드되어 모델은 사전 로딩된 문서와 사용자 질의를 통합적으로 이해하여 높은 품질의 응답을 생성합니다. 또한, 별도의 검색 단계를 거치지 않아 RAG 대비 더욱 빠른 답변 생성이 가능합니다.

하지만, 여러 번의 추론이 진행됨에 따라 캐시는 점점 커지므로, 이를 효율적으로 관리하기 위해 캐시 초기화 단계가 필요합니다. 즉, 새로운 토큰들(t_1, t_2, ..., t_k)이 계속적으로 KV 캐시에 추가되어 KV 캐시 크기가 증가할 때, 캐시를 초기화하거나, 불필요한 토큰을 제거하여 캐시 크기를 줄이는 작업이 필요합니다.

CAG 실험 및 성능 평가

캐시 보강 생성(Cache-Augmented Generation, CAG)의 성능을 평가하기 위해 다양한 설정에서 실험이 진행되었습니다. 실험 시 단일 문맥 내에서 질문에 대한 명확한 답변을 생성하는 SQuAD 데이터셋과 여러 문서를 통합하여 복합적인 질문에 답변하는 HotPotQA 데이터셋을 사용하였습니다. 각 데이터셋은 문서 크기에 따라 아래와 같은 3가지 범주로 나누어 진행하였습니다:

실험 결과는 정확도와 속도의 2가지 기준으로 측정하였습니다. 비교 시에는 BM25 기반의 Sparse RAG 및 임베딩 기반의 Dense RAG와 성능을 비교하였으며, 결과는 다음과 같습니다:


:scroll: CAG 논문: Don't Do RAG: When Cache-Augmented Generation is All You Need for Knowledge Tasks

더 읽어보기




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:kr:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:gift: 아래:arrow_lower_right:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck:

3개의 좋아요