KV 캐시의 실제 의미
“KV”는 키/값(key/value) — 모델이 지금까지 처리한 모든 토큰에 대해 계산하는 내부 표현입니다. 모델은 새로운 토큰마다 이러한 표현을 처음부터 다시 계산하는 대신, KV 캐시에 저장하여 재사용하며 시퀀스에 토큰이 추가될 때마다 새 항목을 추가합니다. 이것이 생성을 실질적으로 가능하게 하는 핵심 요소입니다. 캐시가 없으면 응답의 500번째 토큰을 생성할 때마다 그 앞에 있는 499개의 토큰을 매번 다시 처리해야 합니다. 캐시가 있으면 모델은 각 새 토큰에 대해 새로운 작업만 수행하고 이미 계산된 내용은 재사용하면 됩니다. 캐시는 프리필 단계(모델이 프롬프트를 읽을 때)에 구축되며, 디코드 단계(모델이 응답을 생성할 때)에는 토큰 하나당 하나의 항목으로 확장됩니다. 두 단계가 어떻게 작동하는지 확인하려면 추론 작동 방식을 참조하십시오.컨텍스트가 길어질수록 메모리 비용이 증가하는 이유
KV 캐시는 활성 컨텍스트에 있는 동안 토큰 하나당 레이어 하나당 하나의 항목을 보유합니다. 즉, 캐시 크기는 다음과 비례하여 증가합니다.- Context length — 처리 중인 토큰이 많을수록 캐시 항목도 많아집니다. 128K 토큰 대화는 4K 토큰 대화보다 훨씬 더 많은 캐시 상태를 보유합니다.
- Batch size — 여러 요청을 동시에 처리하는 경우, 각 요청마다 자체 KV 캐시가 필요하므로 총 캐시 메모리는 동시 요청 수에 따라 곱해집니다.
컨텍스트 대 속도 트레이드오프
메모리 외에도 더 큰 KV 캐시는 속도 비용도 발생합니다. 디코드는 메모리 대역폭에 제한을 받습니다 — 생성되는 각 토큰마다 모델은 가중치뿐만 아니라 지금까지 구축된 전체 KV 캐시를 읽어야 합니다(추론 작동 방식 참조). 캐시가 크면 매 단계마다 읽어야 할 데이터가 많아지므로 다음과 같은 결과가 발생합니다.- 긴 컨텍스트는 디코드를 느리게 합니다. 모델 자체는 변하지 않았더라도 대화가 길어질수록 생성 속도(초당 토큰 수)가 떨어지는 경향이 있습니다.
- 긴 컨텍스트는 더 많은 메모리를 차지합니다. 이는 속도 비용과 무관한 별개의 비용입니다.
다른 양자화를 선택함으로써 이 트레이드오프를 피할 수는 없습니다. 가중치 양자화와 KV 캐시 양자화는 별도의 레버이며, 일부 백엔드는 더 긴 컨텍스트를 수용하기 위한 방법으로 KV 캐시 양자화를 독립적으로 지원합니다. 이는 백엔드별 설정이므로, 이를 의존하기 전에 런타임 문서에서 지원 여부를 확인하십시오.
실용적인 요약
배포에 할당할 컨텍스트 양을 결정할 때, 이를 무료 설정이 아닌 실제 리소스 예산으로 취급하십시오. 거대한 최대 컨텍스트(128K, 256K)로 광고되는 모델이라고 해서 항상 그 한계에서 실행해야 한다는 의미는 아닙니다. 작업에 실제로 필요한 만큼 컨텍스트 크기를 조정하고, 확정하기 전에 GPU 모델 적합 가이드로 실제 메모리 비용을 확인하십시오.더 깊이 알아보기
추론 작동 방식
전체 프롬프트 라이프사이클 — 프리필, 디코드, 그리고 메모리에서 각각 어디에 위치하는지.
메모리 및 오프로딩
가중치 및 오버헤드와 KV 캐시를 포함한 전체 크기 공식.
컨텍스트 및 메모리가 적합해지면
KV 캐시 크기 조정은 모델을 로컬에서 잘 실행하기 위한 과정의 일부입니다.localhost에서 실행되어 요청에 응답하는 단계가 완료되면, 다음 단계는 다른 곳에서 이를 접근하는 것입니다.
안정적인 엔드포인트 제공
Tokios는 모델을 선택, 호스팅하거나 파인튜닝하지 않습니다. 로컬에서 실행되면, Tokios는 이를 어디서나 호출할 수 있는 안정적이고 인증된 엔드포인트로 변환합니다.