# LLM에서의 프롬프트 캐싱: 비용과 지연 시간을 줄이기 위한 KV 캐시 최적화
프롬프트 캐싱은 긴 프롬프트에서 LLM 입력 토큰 비용을 10배 줄이고 지연 시간을 최대 85% 단축합니다. OpenAI와 Anthropic은 응답을 캐싱하지 않습니다. 대신 트랜스포머 어텐션 메커니즘의 중간 계산—특히 KV 캐시—를 캐싱합니다. 이는 반복되는 프롬프트 접두사의 키-값 쌍을 저장하여 생성 품질을 희생하지 않으면서 추론 속도를 높입니다.
이 기술은 반복되는 컨텍스트가 있는 작업에 이상적입니다: RAG, 대화 기록이 있는 챗봇, 다단계 파이프라인. API 제공자에 대한 테스트에서 캐시를 완전히 활용하면 첫 번째 토큰의 속도가 크게 향상됩니다.
LLM 아키텍처와 어텐션의 역할
LLM은 임베딩을 입력으로 받아 업데이트된 표현을 출력하는 트랜스포머 블록들의 시퀀스입니다. 추론은 루프 형태로 실행됩니다: 프롬프트가 토큰화되고, 임베딩이 어텐션과 피드포워드 레이어를 통과한 후 다음 토큰이 생성되어 컨텍스트에 추가됩니다.
prompt = "What is the meaning of life?";
tokens = tokenizer(prompt);
while (true) {
embeddings = embed(tokens);
for ([attention, feedforward] of transformers) {
embeddings = attention(embeddings);
embeddings = feedforward(embeddings);
}
output_token = output(embeddings);
if (output_token === END_TOKEN) {
break;
}
tokens.push(output_token);
}
print(decode(tokens));
캐싱은 어텐션에서 발생합니다. 셀프-어텐션은 각 토큰에 대해 이전 토큰들의 가중 합을 계산하는데, 이는 쿼리(현재 토큰)와 키(이전 토큰) 간 유사성에 기반합니다. 쿼리_i에 대해: attention(Q_i, K, V) = softmax(Q_i K^T / sqrt(d)) V.
새 토큰을 생성할 때마다 모든 이전 토큰의 KV 캐시가 확장되어 시퀀스 길이에 대해 O(n^2)의 2차 복잡도가 발생합니다.
토큰화와 임베딩
토크나이저는 텍스트를 서브워드 단위로 분해하고 ID를 할당합니다. GPT 예시: "Check out ngrok.ai" → [4383, 842, 1657, 17690, 75584]. 이는 결정적이며 대소문자를 구분하고 BPE와 유사한 알고리즘을 사용합니다.
임베딩은 토큰을 n차원 벡터(n > 10k, 대형 모델에서)로 변환합니다. 학습 후 임베딩 매트릭스는 고정됩니다:
function embed(tokens) {
return tokens.map((token, i) => {
const embeddings = EMBEDDINGS[token];
return encodePosition(embeddings, i);
});
}
위치 인코딩은 순서 정보를 추가합니다. 차원이 많을수록 톤, 스타일, 유사성 등의 의미를 더 잘 포착합니다.
어텐션 메커니즘과 KV 캐시
멀티헤드 어텐션에서:
- 프로젝션: Q = X W_Q, K = X W_K, V = X * W_V (X — 임베딩 매트릭스).
- 스코어: attention_scores = Q * K^T / sqrt(d_k).
- 소프트맥스와 가중 합: attention_output = softmax(scores) * V.
길이 n의 시퀀스에서 KV 캐시는 [n, d_model] 크기의 K와 V 텐서로 구성됩니다. t번째 토큰을 생성할 때 어텐션은 전체 과거 캐시와 현재 것을 사용합니다.
프롬프트 캐싱은 API 호출 간 프롬프트 접두사의 KV 캐시를 저장합니다. 새 프롬프트가 캐싱된 접두사로 시작하면(히트), 해당 토큰들의 어텐션 계산을 건너뛰고 준비된 KV를 사용합니다. 긴 컨텍스트에서 ~90%의 계산이 생략되어 비용이 줄어듭니다.
- 캐시 히트: 접두사 > 1024 토큰 (Anthropic), 비용 /10.
- 캐시 미스: 전체 재계산.
- TTL: 캐시 수명 ~5-10분, 제공자에 따라 다름.
이점과 한계
지연 시간 단축: 10k+ 토큰 프롬프트에서 TTFB가 50-85% 감소.
절감 효과: 캐싱된 입력 토큰 — $0.0001/1k vs $0.001/1k (대략).
한계:
- 접두사만 매칭 (임의 부분 문자열 아님).
- 출력 임베딩이나 로짓 캐싱 안 함.
- 제공자의 토크나이저에 의존.
프로덕션에서: 히스토리가 반복되는 세션 기반 채팅에 사용.
주요 요점
- 프롬프트 캐싱은 접두사의 어텐션 KV 쌍을 캐싱하여 긴 컨텍스트에서 계산을 90%+ 줄임.
- 첫 토큰까지 시간 최대 85% 단축, 입력 비용 /10.
- 정확한 접두사 매칭과 호환 토크나이저 필요.
- RAG, 채팅 히스토리, 다중 반복 작업에 완벽.
- 품질 영향 없음: 생성은 여전히 확률적.
— Editorial Team
아직 댓글이 없습니다.