CAG(Cache-Augmented Generation) LLM 아키텍처 및 구현 기술 보고서
CAG(Cache-Augmented Generation) LLM 아키텍처 및 구현 기술 보고서
1. 서론: LLM 패러다임의 전환과 CAG의 부상
1.1 검색 증강 생성(RAG)의 구조적 한계와 병목
지난 수년 간 거대언어모델(Large Language Models, LLM)의 환각(Hallucination) 현상을 완화하고 최신 지식을 주입하기 위한 표준 아키텍처는 검색 증강 생성(Retrieval-Augmented Generation, RAG)이었다. RAG는 벡터 데이터베이스(Vector Database)와 임베딩 모델(Embedding Model)을 활용하여 사용자의 질문과 가장 유사한 문서 조각(Chunk)을 검색(Retrieve)하고, 이를 프롬프트에 동적으로 결합하여 응답을 생성하는 방식을 취한다. 1
그러나 RAG 시스템은 본질적으로 다음과 같은 구조적 한계와 병목 현상을 내포하고 있다:
검색 지연(Retrieval Latency): 실시간으로 수백만 개의 벡터 중에서 가장 관련성 높은 문서를 찾아내고, 이를 다시 재순위화(Re-ranking)하는 과정에서 불가피한 지연 시간이 발생한다. 3
문맥의 파편화(Context Fragmentation): RAG는 문서를 작은 청크로 나누어 저장하므로, 검색된 결과가 전체 문서의 전후 맥락(Global Context)을 잃어버릴 위험이 있다. 4
인프라 복잡성(Infrastructure Complexity): 벡터 DB, 인덱싱 파이프라인, 임베딩 모델 유지보수 등 시스템의 복잡도가 높아 운영 비용이 증가한다. 5
1.2 캐시 증강 생성(CAG)의 정의 및 철학
이러한 배경 속에서 등장한 캐시 증강 생성(Cache-Augmented Generation, CAG) 은 LLM의 컨텍스트 윈도우(Context Window)가 비약적으로 확장됨에 따라 가능해진 새로운 패러다임이다. CAG는 "실시간 검색 과정을 제거하고, 필요한 모든 지식 베이스를 LLM의 확장된 컨텍스트에 미리 로드(Preload)하여 KV Cache(Key-Value Cache) 형태로 메모리에 상주시키는 아키텍처" 로 정의된다. 3
CAG의 핵심 철학은 "연산(Compute)을 메모리(Memory)로 치환" 하는 것이다. 매 요청마다 문서를 다시 읽거나 검색하는 대신, 한 번 연산된 언어 모델의 추론 상태(Inference State)를 저장해두고 재사용함으로써, 검색 지연을 제로(Zero)에 가깝게 만들고 답변의 일관성을 극대화한다. 8 이는 최근 발표된 "Don't Do RAG: When Cache-Augmented Generation is All You Need for Knowledge Tasks" 논문을 통해 그 효용성이 학계와 산업계에 강력하게 입증되었다. 4
2. CAG의 핵심 이론 및 기술적 메커니즘
CAG를 단순한 프롬프트 캐싱(Prompt Caching)으로 오해할 수 있으나, 이는 대규모 언어 모델의 어텐션 메커니즘과 메모리 관리 기술이 고도로 최적화된 엔지니어링의 결정체이다.
2.1 트랜스포머 어텐션과 KV Cache의 수학적 원리
LLM은 자기회귀(Autoregressive) 모델로, 이전의 모든 토큰을 참조하여 다음 토큰을 예측한다. 트랜스포머 아키텍처의 핵심인 어텐션(Attention) 연산은 다음과 같이 정의된다 11 :
$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$
여기서 $Q$(Query), $K$(Key), $V$(Value)는 입력 토큰의 임베딩 벡터로부터 선형 변환을 통해 생성된다. 텍스트 생성이 진행될 때, 이미 처리된 과거 토큰들의 $K$와 $V$ 값은 변하지 않는다. 따라서 매번 이를 다시 계산하는 것은 막대한 연산 자원 낭비이다. KV Cache 는 이 불변하는(Invariant) 과거 토큰의 $K, V$ 벡터를 GPU 메모리(VRAM)에 저장해두고, 새로운 토큰 생성 시에는 현재 토큰의 $Q$ 벡터와 저장된 캐시 간의 연산만 수행하는 기술이다. 11
CAG는 이 KV Cache의 개념을 지식 베이스 전체 로 확장한다. 사용자가 질문하기 전에, 수만~수십만 토큰에 달하는 문서 전체를 모델에 통과시켜 그에 해당하는 거대한 KV Cache 텐서를 미리 생성(Pre-computation)해 둔다.
2.2 CAG의 3단계 워크플로우 ("Don't Do RAG" 논문 기반)
단계
명칭
설명 및 기술적 세부사항
1
외부 지식 프리로딩 (External Knowledge Preloading)
- 대상 도메인의 문서 집합($D$)을 선정하고 전처리한다.
- LLM($M$)을 사용하여 $D$를 인코딩하고, KV Cache($C_{KV}$) 를 생성한다.
- 수식: $C_{KV} = \text{KV-Encode}(D)$
- 이 과정은 오프라인에서 1회 수행되므로 시간이 소요되어도 무방하다.
2
추론 (Inference)
- 사용자 쿼리 $q$가 입력되면, 별도의 검색 과정 없이 메모리에 상주된 $C_{KV}$와 결합한다.
- 모델은 프리로드된 전체 문맥을 바탕으로 응답 $R$을 생성한다.
- 수식: $R = M(q \mid C_{KV})$
- 첫 토큰 생성 시간(TTFT)이 획기적으로 단축된다.
3
캐시 리셋 및 관리 (Cache Reset)
- 다중 턴 대화나 새로운 세션 시작 시, 동적으로 생성된 캐시(사용자 질문 등)는 삭제하되, 정적 지식 캐시($C_{KV}$)는 보존하는 전략이 필요하다.
- RadixAttention이나 APC 같은 고급 메모리 관리 기술이 사용된다.
3. 트레이닝 관점에서의 구조 및 워크플로우 구현
CAG에서 '트레이닝'은 "모델이 긴 문맥을 효과적으로 활용하도록 미세조정(Fine-Tuning)하는 과정" 과 "추론 엔진을 위한 지식 상태(State)를 준비하는 과정" 으로 나뉜다.
3.1 컨텍스트 인식 미세조정 (Context-Aware Fine-Tuning)
CAG의 성능은 모델이 얼마나 긴 문맥(Long Context)을 잘 이해하고, 그 안에서 정보를 정확히 찾아내는지(Needle in a Haystack)에 달려 있다. 14
3.1.1 데이터셋 구성 및 커리큘럼 학습
긴 시퀀스 데이터 준비: 10만 토큰 이상의 긴 문서가 포함된 데이터셋을 준비해야 한다.
Lost-in-the-Middle 완화: 정답 정보가 문서의 중간에 위치하는 예제를 의도적으로 포함시켜 학습시킨다. 16
Noise Robustness: 관련 없는 정보가 섞여 있어도 정확한 답을 추출하도록 훈련한다. 16
3.1.2 훈련 파이프라인 (Fine-Tuning Pipeline)
모델 초기화: Llama 3.1 8B와 같이 긴 컨텍스트를 지원하는 베이스 모델을 로드한다.
RoPE Scaling: rope_theta 값을 조정하여(예: 500,000 이상) 위치 임베딩이 긴 시퀀스에서도 무너지지 않도록 설정한다. 18
FlashAttention-2: 긴 시퀀스 학습은 막대한 VRAM을 소모하므로, 메모리 효율적 어텐션 기술을 적극 활용한다. 19
4. CAG 구현 가능한 LLM 종류 및 하드웨어 요구사항
4.1 호환 가능한 LLM 및 아키텍처적 특징
모델명
컨텍스트 윈도우
아키텍처 특징 및 CAG 적합성
Meta Llama 3.1
128,000 토큰
- GQA (Grouped-Query Attention): KV 헤드 수를 줄여 캐시 메모리 사용량을 획기적으로 감소시킴. 18
Mistral Large 2
128,000 토큰
- 효율적인 슬라이딩 윈도우 어텐션과 GQA의 결합으로 메모리 효율이 높음. 23
Qwen 2.5
최대 128k+
- 긴 컨텍스트에서의 정보 추출 능력이 우수함. 24
4.2 하드웨어 리소스 및 VRAM 산정 공식
$\text{Total VRAM} \approx \text{Model Weights} + \text{KV Cache Size} + \text{Activation Buffer}$
예시: Llama 3.1 8B (FP16) @ 128k Context
모델 가중치: 약 16 GB
KV Cache: 약 17.2 GB
총합: 약 34 GB 이상 필요 (A6000 또는 A100 권장)
5. 상세 구현 코드 및 소스 (Sample Code & Source)
5.1 SGLang을 이용한 RadixAttention 기반 CAG 구현
SGLang은 RadixAttention 기술을 통해 프롬프트의 공통 접두사(Prefix)를 캐싱한다.
import sglang as sgl
from sglang import function, system, user, assistant, gen
@function
def cag_knowledge_qa(s, shared_context, question):
# shared_context가 Radix Tree의 루트 노드로 캐싱됨
s += system(shared_context)
s += user(question)
s += assistant(gen("answer", max_tokens=256))
# 실행부
runtime = sgl.RuntimeEndpoint("http://localhost:30000")
huge_knowledge_base = "..." # 대규모 텍스트 데이터
state = cag_knowledge_qa.run(runtime, shared_context=huge_knowledge_base, question="질문 내용")
5.2 vLLM을 이용한 Automatic Prefix Caching (APC) 구현
from vllm import LLM, SamplingParams
llm = LLM(
model="meta-llama/Meta-Llama-3.1-8B-Instruct",
enable_prefix_caching=True, # APC 활성화 핵심
max_model_len=131072,
gpu_memory_utilization=0.9
)
sampling_params = SamplingParams(temperature=0.0, max_tokens=200)
# 동일한 context로 시작하는 여러 프롬프트 전송 시 캐시 히트 발생
6. 성능 평가 및 벤치마크 (Benchmarks)
평가 지표
RAG (Dense Retrieval)
CAG (Llama 3.1 8B)
답변 정확도 (HotPotQA)
0.7576
0.7951
추론 지연 시간 (Latency)
수 초 (검색 포함)
밀리초 (캐시 히트 시)
시스템 복잡도
높음 (DB 필요)
낮음 (LLM 단일)
7. 결론 및 향후 전망
CAG는 초저지연 응답이 필수적이거나, 지식 베이스가 정적인 시나리오에서 RAG를 대체할 강력한 대안이다. 향후에는 자주 조회되는 핵심 지식은 CAG 로, 방대한 롱테일 지식은 RAG 로 처리하는 하이브리드 아키텍처 가 주류가 될 것으로 전망된다.
Works cited
Cache-Augmented Generation (CAG): The Next Frontier in LLM Optimization, Medium, 2026.
Cache-Augmented Generation in RAG Pipelines, The Aquila Digital Community.
Don't Do RAG: When Cache-Augmented Generation is All You Need, arXiv:2412.15605.
SGLang: Efficient Execution of Structured Language Model Programs.
vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention.