본문 바로가기
성공지식백과 로고성공지식백과
GLOSSARY

KV 캐시 (KV Cache)

고급자동화

이 페이지는 자동화 문맥에서 자주 쓰이는 KV 캐시 (KV Cache)의 뜻과 쓰임을 고급 난이도 기준으로 정리한 AI 용어사전 항목입니다. 정의와 맥락, 관련 용어 6개, 관련 글 2개 순서로 묶었으니, 아래 설명을 먼저 읽고 연결된 개념과 글까지 이어서 보면 이해가 빨라집니다.

KV 캐시(KV cache)는 자기회귀 트랜스포머가 이미 처리한 토큰의 어텐션 키(Key)와 값(Value)을 저장해 다음 토큰을 만들 때 다시 쓰는 메모리입니다. 새 토큰을 생성할 때마다 앞선 문맥의 K와 V를 처음부터 계산하지 않아도 되므로, 긴 답변을 한 토큰씩 만들 때의 중복 계산을 줄입니다. Hugging Face의 캐싱 문서는 이전 토큰에서 얻은 K/V 쌍을 저장하고 이후 토큰에서 재사용하는 방식을 설명하며, 이 캐싱은 학습이 아니라 추론에 쓰라고 안내합니다.

무엇을 저장하나

언어 모델은 현재 토큰의 쿼리(Query)를 과거 토큰의 키와 비교하고, 그 결과로 값들을 섞어 다음 계산에 필요한 표현을 만듭니다. 인과적 어텐션에서는 미래 토큰을 볼 수 없으므로, 이미 처리한 토큰의 K와 V는 미래 토큰이 추가되어도 바뀌지 않습니다. 그래서 각 레이어는 새 토큰의 K와 V만 계산해 기존 캐시에 붙이고, 현재 토큰의 쿼리가 그 누적된 캐시를 읽게 할 수 있습니다. 캐시가 없으면 과거 토큰들의 K와 V를 매 단계 다시 만들게 됩니다. 캐시가 있어도 현재 토큰의 어텐션은 보관된 문맥을 읽으므로, 문맥이 길어져도 토큰당 계산 시간이 항상 일정해지는 것은 아닙니다.

KV 캐시는 답변을 저장하는 기능과 다릅니다. 답변 캐시는 같은 질문에 앞선 완성 문장을 다시 돌려주는 기능일 수 있습니다. KV 캐시는 답변을 완성하지 않은 상태에서도 다음 토큰 계산에 필요한 내부 텐서를 보관합니다. 프롬프트 캐싱은 서비스가 여러 요청의 공통 접두사에 대한 KV 캐시를 재사용하도록 제공하는 방식일 수 있습니다. 재사용하려면 토큰화된 앞부분, 모델과 관련 설정, 서비스의 격리 규칙이 맞아야 합니다. 제품마다 보존 시간, 공유 범위, 과금 방식이 달라 모든 서비스가 같은 조건이나 혜택을 준다고 단정할 수 없습니다. 이 재사용은 서비스 내부의 계산 상태를 다룹니다.

메모리와 길이

KV 캐시는 레이어마다 있고, 배치 안의 요청마다 필요합니다. 일반적인 텐서 형태에는 배치 크기, 헤드 수, 시퀀스 길이, 헤드 차원이 들어갑니다. Hugging Face의 캐시 전략 문서는 동적 캐시가 생성 토큰이 늘수록 커지고, 슬라이딩 윈도우나 청크 어텐션을 쓰는 레이어는 정해진 창 크기에서 성장을 멈출 수 있다고 설명합니다. 그래서 대화 문맥이 두 배로 길어지면 전체 어텐션 구조를 쓰는 모델에서는 그 요청의 캐시 메모리도 대체로 더 커집니다. 동시 요청이 많으면 이 메모리도 여러 요청에 걸쳐 쌓입니다.

메모리 크기는 문맥 길이만으로 정해지지 않습니다. 레이어 수, KV 헤드 수, 헤드 차원, 저장 정밀도, 배치 크기, 어텐션 구조가 함께 영향을 줍니다. MQA(Multi-Query Attention)나 GQA(Grouped-Query Attention)처럼 KV 헤드를 공유하는 구조, 슬라이딩 윈도우처럼 오래된 상태를 유지하지 않는 구조는 필요한 캐시 양을 바꿉니다. KV 캐시를 낮은 정밀도로 저장하거나 CPU로 옮기는 방법도 있습니다. 다만 저장 공간을 아끼는 대신 변환이나 전송이 더해져 속도가 달라질 수 있습니다. 긴 문맥을 지원한다는 사양만으로 실제 동시 처리량을 알 수 없는 이유입니다.

재사용의 조건

프롬프트의 공통 앞부분을 여러 요청이 공유하면, 그 앞부분을 프리필한 KV 캐시를 다시 써서 계산을 건너뛸 수 있습니다. 예를 들어 모든 요청에 같은 시스템 지침과 긴 제품 설명서를 넣고 질문만 뒤에 붙이는 경우가 여기에 가깝습니다. vLLM의 자동 접두사 캐싱 설계는 요청의 토큰과 앞선 블록, 추가 해시를 바탕으로 완성된 KV 블록을 찾고 재사용합니다. 이 문서는 vLLM v0.14.1의 구현 예시이므로 다른 서버가 같은 블록 크기나 해시 방식을 쓴다는 뜻은 아닙니다.

접두사 재사용은 공통 부분이 앞쪽에 있어야 하며, 캐시가 남아 있고, 서버가 그 요청을 같은 캐시 풀에서 처리할 수 있어야 합니다. 사용자별 비밀 정보나 멀티테넌트 환경에서는 격리도 필요합니다. vLLM은 요청별 salt로 서로 합의한 신뢰 그룹 안에서만 재사용을 제한할 수 있다고 설명합니다. 캐시가 커질수록 새 요청을 받을 공간이 줄 수 있으므로, 서버는 블록을 내보내거나 오래된 캐시를 버리거나 요청을 기다리게 할 수 있습니다. KV 캐시는 계산 시간을 메모리 사용량과 맞바꾸는 구조입니다. 어떤 방법을 고를지는 긴 문맥, 동시 사용자, 모델 구조, 개인정보 분리, 실제 지연 시간 측정을 함께 보고 정해야 합니다.

RELATED TERMS

관련 용어

KV 캐시 (KV Cache)와 함께 자주 언급되는 개념들입니다. 비슷한 말처럼 보여도 역할과 쓰임은 다를 수 있습니다.

READ NEXT

관련 글

glossary에서 개념을 잡고 관련 글로 넘어가면 실제 문맥 이해가 쉬워집니다.