로컬 LLM을 위한 프롬프트 캐싱이란 무엇입니까?
빠른 답변
프롬프트 캐싱은 프롬프트 접두부에 대해 계산된 key-value(KV) 캐시를 저장하여, 이후 요청이 동일한 접두부를 공유할 때—고정된 system prompt, 재사용되는 문서, 또는 이전 대화 턴 등—다시 계산할 필요가 없도록 합니다. 접두부가 반복되는 워크로드에서는 프롬프트 처리 시간을 크게 줄여주지만, 모든 요청이 서로 무관하다면 아무런 이점이 없습니다.
- ▸모델의 출력이 아니라 프롬프트 접두부의 KV 캐시를 저장함
- ▸가장 큰 이점: 길고 고정된 system prompt, 재사용되는 문서, 다중 턴 대화
- ▸호출 간에 공유되는 접두부가 없는 단발성 요청에는 이점 없음
업데이트: 2026년 7월 15일
핵심 요점
- ✓프롬프트 캐싱은 프롬프트 접두부에 대해 계산된 KV 캐시를 저장하여, 이후 요청이 동일한 토큰을 다시 처리하는 대신 이를 재사용할 수 있게 합니다
- ✓공유되는 접두부가 크고 자주 반복될수록 속도 향상 폭이 커집니다 — 수천 건의 요청에서 재사용되는 길고 변하지 않는 system prompt는 매우 큰 이점을 얻습니다
- ✓대부분의 로컬 서빙 환경에서는 다중 턴 대화가 자동으로 이점을 얻습니다. 새로운 턴마다 이전 대화 전체를 접두부로 공유하기 때문입니다
- ✓캐싱은 프롬프트 처리(입력) 측면에서만 도움이 되며, 토큰 생성(출력)에는 도움이 되지 않습니다 — 첫 토큰까지의 시간을 줄여줄 뿐, 생성이 시작된 이후의 초당 토큰 수에는 영향을 주지 않습니다
캐싱이 실제로 속도를 높이는 방식
프롬프트를 처리한다는 것은, 모델이 응답 생성을 시작하기 전에 모든 입력 토큰에 대해 key-value(KV) 표현을 계산한다는 의미입니다. 이 프롬프트 처리 단계는 생성이 시작되기 전에 이루어지며, 그 비용은 프롬프트 길이에 비례합니다. 캐싱이 없다면 2,000토큰 규모의 system prompt는 매번 바이트 단위로 동일하더라도 모든 요청마다 처음부터 다시 처리됩니다.
캐싱은 특정 접두부에 대해 계산된 이 KV 표현을 정확한 토큰 시퀀스에 연결하여 저장합니다. 새 요청이 동일한 토큰으로 시작하면, 캐시된 KV 값이 그대로 재사용되고 프롬프트 중 새롭고 캐시되지 않은 부분만 처리하면 됩니다. 실제 효과로는, 입력 대부분을 다시 계산할 필요가 없어지므로 캐시 히트가 발생할 때 첫 토큰까지의 시간이 크게 줄어듭니다.
이것이 다중 턴 대화가 거의 자동으로 이점을 얻는 이유입니다. 대화의 3번째 턴은 1번째와 2번째 턴을 접두부로 포함하므로, 캐싱을 인식하는 서빙 환경은 전체 대화 기록을 다시 처리하지 않고 가장 최근 턴만 처리합니다.
실제로 이점을 얻기 위한 프롬프트 구성 방법
- ▸**공유되고 변하지 않는 내용을 앞에 배치합니다.** 요청 간에 동일하게 유지되는 system prompt, 지침, 참고 문서는 요청마다 달라지는 가변 콘텐츠보다 앞에 와야 합니다 — 캐싱은 정확히 일치하는 접두부에서만 작동하므로, 첫 번째 차이점 이전의 모든 내용이 재사용되는 부분입니다.
- ▸**요청 간에 공유 접두부를 바이트 단위로 동일하게 유지합니다.** system prompt에서 한 글자만 달라져도(타임스탬프, 무작위 ID 등) 접두부 일치가 깨져 전체 재처리가 강제됩니다 — 요청별로 달라지는 부분은 재사용 가능한 내용 뒤, 즉 프롬프트 끝부분으로 옮기십시오.
- ▸**서로 무관한 단발성 요청에는 캐싱이 도움이 될 것이라 기대하지 마십시오.** 워크로드가 공유되는 설정 없이 대부분 일회성 질문으로 구성되어 있다면, 캐싱이 재사용할 것이 없습니다 — 이 기법의 가치는 실제로 공통 접두부를 공유하는 트래픽의 비율에 비례합니다.
- ▸**장시간 이어지는 대화는 캐시 보존 설정에서 가장 큰 이점을 얻습니다.** 사용 중인 서빙 환경이 캐시된 접두부를 제거하기 전까지 얼마나 오래 유지하는지 확인하십시오 — 너무 공격적으로 제거되는 캐시는 턴 사이에 간격이 있는 대화에는 도움이 되지 않습니다.