개요
KV Cache는 자동회귀 Transformer가 토큰을 하나씩 생성할 때 이전 토큰에서 계산한 attention의 key와 value 표현을 저장해 다시 사용하는 추론 최적화 방식이다. 이미 처리한 토큰의 표현을 매 생성 단계마다 처음부터 다시 계산하지 않도록 해 반복 계산을 줄인다.
메모리 문제
생성 중 캐시는 입력과 출력 시퀀스가 길어질수록 커지며, 여러 요청을 동시에 처리하면 GPU 메모리의 큰 부분을 차지할 수 있다. PagedAttention 연구는 LLM 서비스에서 KV cache가 동적으로 커지고 줄어드는 특성 때문에 메모리 단편화와 중복이 발생할 수 있음을 지적했다.[1]
서비스와의 관계
효율적인 KV Cache 관리는 Inference의 처리량과 동시 요청 수에 직접적인 영향을 줄 수 있다. 캐시 크기는 모델 구조, 층 수, attention 설계, 정밀도와 Context Window 사용량 등에 따라 달라진다.
캐시 예산으로 동시 요청을 추산하는 예제
다음은 장치 사양이나 권장 설정이 아닌 가상 계산이다. 가중치와 다른 실행 메모리를 제외한 KV 캐시 예산이 3GiB이고 요청당 최대 캐시를 384MiB로 가정하면 3×1,024÷384=8개다. 더 긴 요청에서 요청당 768MiB가 필요하면 단순 상한은 4개다. 실제 할당·공유·여유 공간·서로 다른 입력 길이 때문에 이 숫자를 서비스의 보장 동시 처리 수로 사용할 수는 없다.
추론의 가중치·활성값과 KV 캐시를 분리해 기록하고, 입력과 생성 길이가 최대 사용량에 어떻게 반영됐는지 남긴다. PagedAttention 연구 ↗는 동적으로 변하는 캐시의 낭비와 공유를 다룬다.[1] 메모리 효율을 개선한 결과가 모든 장치의 같은 배치 크기로 이어진다고 단정하지 않는다.
재사용 조건과 갱신 조건을 따로 확인
한 요청 안에서 앞선 토큰의 계산을 이어 쓰는 것과 여러 요청의 같은 접두부를 공유하는 것은 다른 범위의 재사용이다. 모델·어댑터·토큰·입력 조건이 바뀌었을 때 잘못된 계산 상태를 재사용하지 않는지 실행 엔진의 조건을 확인한다. 문자열이 비슷하다는 것만으로 캐시 호환성을 판단하지 않는다.
정책 v1에서 v2로 바뀐 사례라면 새 입력에 맞는 계산인지와 사용자에게 v2를 제공할 권한이 있는지를 별도로 본다. 자료 버전과 사용자 상태는 캐시 키 하나가 대신할 수 있는 정보가 아니다. 캐시 적중은 현재 정책의 정답이나 권한 검증의 증거가 아니다.
메모리 부족·낮은 적중·늦은 첫 토큰을 구분
메모리 부족은 최대 캐시·동시 요청·할당을, 낮은 적중은 접두부 변경·재사용 조건·캐시 수명을, 늦은 첫 토큰은 대기·입력 처리·검색 시간을 각각 살핀다. 캐시를 줄여도 잘못된 문서 검색이 해결되는 것은 아니며, 캐시를 늘려도 대기열이 자동으로 줄어드는 것은 아니다.
vLLM 운영 지표 ↗에서 실제 엔진의 측정 항목과 구간을 확인한다.[2] 지연·처리량과 실패율을 같은 요청 길이·동시성·품질 조건에서 비교한다. 캐시 정밀도를 바꿨다면 메모리 변화뿐 아니라 과제의 정확도 변화도 재평가한다.