자동 접두사 캐싱 (Automatic Prefix Caching)
자동 접두사 캐싱 (Automatic Prefix Caching)
같은 긴 문맥(프롬프트)을 여러 요청이 공유할 때, 매번 처음부터 계산하는 건 낭비예요. vLLM의 Automatic Prefix Caching(APC) 은 요청 앞부분(prefix)의 계산 결과를 캐시에 재사용해서 연산을 건너뛰게 해줍니다.
출처: https://docs.vllm.ai/en/latest/features/automatic_prefix_caching.html
APC가 동작하는 방식
요청이 들어오면 vLLM은 프롬프트의 접두사(prefix) 블록이 이미 캐시에 있는지 확인해요. 같은 토큰 시퀀스로 시작하는 요청이 이전에 있었다면, 그 KV 캐시 블록을 그대로 참조하고 새로 계산하지 않습니다. 내부 구현은 PagedAttention이 블록 단위로 KV 캐시를 관리하기 때문에 가능한 방식이에요. 자세한 설계는 디자인 문서(https://docs.vllm.ai/en/latest/design/prefix_caching/)에서 볼 수 있어요.
어떤 경우에 효과가 있나요
중요한 포인트는 APC가 프리필(prefill) 단계만 빨라진다는 점이에요. 새 토큰을 생성하는 디코딩(decoding) 단계 처리 시간은 줄지 않습니다. 그래서 다음과 같은 상황에서 효과를 봅니다.
- 여러 요청이 동일한 긴 시스템 프롬프트나 컨텍스트를 공유할 때
- 짧은 답변을 반복 생성하는 작업(답변 길이가 짧아 디코딩 비중이 작을 때)
- 요청들이 서로 같은 접두사를 가질 때
반대로 답변이 매우 길어서 디코딩이 대부분을 차지하거나, 요청들이 전혀 접두사를 공유하지 않으면 APC 이득이 없어요.