자동 접두사 캐싱
자동 접두사 캐싱 (Automatic Prefix Caching, APC)
챗봇과 대화할 때, 매번 같은 대화 히스토리를 처음부터 다시 계산한다면 얼마나 비효율적일까요? vLLM의 자동 접두사 캐싱(Automatic Prefix Caching, APC) 은 바로 이 문제를 해결해 주는 기능이에요. 반복되는 프롬프트 접두사 부분의 처리 결과를 캐시에 저장해 두고 재사용해서, 처리량은 높이고 지연 시간은 낮춰주죠.
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) 단계 시간 |
| 못 줄이는 것 | 디코딩(생성) 단계 시간 |
| 비효율적인 경우 | 답변이 길거나, 접두사가 중복되지 않는 요청 |