자동 접두사 캐싱

자동 접두사 캐싱 (Automatic Prefix Caching, APC)

챗봇과 대화할 때, 매번 같은 대화 히스토리를 처음부터 다시 계산한다면 얼마나 비효율적일까요? vLLM의 자동 접두사 캐싱(Automatic Prefix Caching, APC) 은 바로 이 문제를 해결해 주는 기능이에요. 반복되는 프롬프트 접두사 부분의 처리 결과를 캐시에 저장해 두고 재사용해서, 처리량은 높이고 지연 시간은 낮춰주죠.

출처: vLLM 공식 문서 — automatic_prefix_caching

vLLM에서 APC 켜기 (Enabling APC in vLLM)

APC를 켜려면 vLLM 엔진에서 enable_prefix_caching=True를 설정하면 됩니다. 예를 들어 다음과 같이 사용해요.

# enable_prefix_caching=True 로 APC 활성화
llm = LLM(model="...", enable_prefix_caching=True)

이러한 워크로드에서 효과적이에요 (Example workloads)

APC가 특히 빛을 발하는 대표적인 시나리오는 멀티라운드 대화(multi-round conversation) 입니다. 사용자가 같은 채팅 세션에서 여러 번 대화를 주고받는 경우죠.

이 상황에서 APC가 없다면 매번 채팅 히스토리 전체를 다시 처리해야 해요. 하지만 APC를 켜면, 대화 히스토리의 처리 결과를 이후 모든 대화 라운드에서 재사용할 수 있습니다. 그 결과 vLLM은 이후 요청들을 훨씬 높은 처리량(throughput)과 훨씬 낮은 지연 시간(latency)으로 서빙할 수 있게 돼요.

한계 (Limits)

APC는 일반적으로 vLLM의 성능을 떨어뜨리지 않아요. 하지만 정확히 무엇을 줄이는지 이해하는 게 중요해요.

  • APC는 쿼리 처리(프리필 단계) 시간만 줄여줍니다. 새 토큰을 생성하는 디코딩 단계의 시간은 줄이지 못해요.
  • 따라서 APC는 성능 이득을 가져오지 않는 경우가 있어요:
    • vLLM이 대부분의 시간을 답변 생성(디코딩)에 쓰는 경우 — 예를 들어 답변의 길이가 긴 경우
    • 새 쿼리가 기존 쿼리와 공유하는 접두사가 전혀 없는 경우 — 계산을 재사용할 수 없으니까요

즉, APC는 "같은 접두사를 가진 요청이 자주 반복"되는 워크로드에서 진짜 효력을 발휘해요. 멀티라운드 대화처럼 앞부분이 반복되는 상황이 그 대표적 예시랍니다.

핵심 요약

포인트 설명
활성화 방법 enable_prefix_caching=True
장점 반복되는 접두사 계산 재사용 → 처리량 ↑, 지연시간 ↓
줄이는 것 프리필(prefill) 단계 시간
못 줄이는 것 디코딩(생성) 단계 시간
비효율적인 경우 답변이 길거나, 접두사가 중복되지 않는 요청

더 알아보기 (Learn more)