KV Cache
KV 캐시가 LLM과 같은 트랜스포머 모델을 어떻게 최적화하는지 발견해 보십시오. 이 기술이 어떻게 추론 지연 시간을 줄이고 Ultralytics YOLO26의 효율성을 높이는지 알아보십시오.
KV Cache (Key-Value Cache)는 Large Language Models (LLMs) 및 기타 Transformer 기반 아키텍처에서 **inference latency**를 가속화하고 연산 비용을 줄이기 위해 주로 사용되는 핵심 최적화 기법입니다. 핵심적으로 KV 캐시는 시퀀스의 이전 토큰에 대해 **attention mechanism**이 생성한 Key 및 Value 행렬을 저장합니다. 이러한 중간 계산 결과를 저장함으로써, 모델은 새로운 토큰을 생성할 때마다 전체 대화 기록에 대한 어텐션 상태를 다시 연산하는 것을 방지합니다. 이 프로세스는 text generation 워크플로를 이차 복잡도 연산에서 선형 복잡도 연산으로 변환하여, 챗봇 및 **AI agents**와의 실시간 상호작용을 가능하게 합니다.
메커니즘 및 이점#
표준 Transformer 모델에서 다음 단어를 생성하려면 문맥을 이해하기 위해 이전의 모든 단어에 주의를 기울여야 합니다. 캐싱이 없으면 모델은 모든 단계에서 전체 시퀀스에 대한 수학적 관계를 다시 계산해야 합니다. KV 캐시는 메모리 뱅크 역할을 하여 이 문제를 해결합니다.
- 속도 향상: 메모리에서 미리 계산된 키와 값을 검색함으로써 시스템은 **inference engine**의 속도를 대폭 높입니다. 이는 고객 서비스 봇의 **real-time inference**와 같이 낮은 지연 시간이 요구되는 애플리케이션에 필수적입니다.
- 자원 효율성: 메모리 사용량(VRAM)은 증가하지만, 토큰당 필요한 연산량(FLOPs)은 크게 줄어듭니다. 이 트레이드오프는 운영 체제가 RAM을 관리하는 방식과 유사하게 **model quantization**이나 페이징과 같은 기법을 통해 관리되는 경우가 많습니다.
- 확장된 컨텍스트: KV 캐시를 효율적으로 관리하면 모델이 더 큰 **context window**를 처리할 수 있어, 긴 문서를 처리하거나 장기간 동안 일관된 대화를 유지할 수 있습니다.
실제 애플리케이션 사례#
KV 캐시는 현대 생성형 AI 배포의 기본 구성 요소이지만, 그 원리는 **computer vision (CV)**로도 확장됩니다.
-
생성형 챗봇: ChatGPT 또는 Claude 같은 서비스는 KV 캐싱에 크게 의존합니다. 사용자가 후속 질문을 할 때, 모델은 전체 대화 기록을 처음부터 다시 읽지 않습니다. 대신 새로운 입력을 이전 턴의 캐시된 상태에 추가하여 거의 즉각적인 응답을 가능하게 합니다.
-
비디오 이해: video understanding 작업에서 모델은 프레임을 순차적으로 처리합니다. 텍스트 토큰과 유사하게, 과거 프레임의 시각적 특징을 캐시하여 모델이 전체 비디오 기록을 다시 처리하지 않고도 객체를 추적하거나 동작을 인식할 수 있도록 도울 수 있습니다. 이는 시간적 컨텍스트가 중요한 **action recognition**에 특히 유용합니다.
효율적인 메모리 관리#
모델이 커짐에 따라 KV cache의 크기가 GPU 메모리의 수 기가바이트를 점유하며 병목 현상이 될 수 있습니다. 최근의 발전은 이러한 저장 공간 최적화에 초점을 맞추고 있습니다.
- PagedAttention: 운영 체제의 가상 메모리에서 영감을 받은 PagedAttention(vLLM에서 도입)은 KV 캐시가 비연속적인 메모리 블록에 저장되도록 허용합니다. 이는 단편화를 줄이고 model serving 중 더 큰 배치 크기를 지원합니다.
- KV 캐시 양자화: 공간을 절약하기 위해 개발자들은 캐시된 값에 특별히 mixed precision 또는 int8 양자화를 적용하는 경우가 많습니다. 이는 메모리 점유율을 줄여 RAM이 제한된 edge AI 기기에서도 고성능 모델을 실행할 수 있게 해줍니다.
- 프롬프트 캐싱: 정적 시스템 프롬프트(예: "You are a helpful coding assistant")의 KV 상태를 한 번 계산하고 여러 사용자의 다양한 세션에 걸쳐 재사용하는 관련 기법입니다. 이는 대규모로 prompt engineering 워크플로를 최적화하기 위한 핵심 기능입니다.
관련 개념 구분#
KV Cache를 다른 캐싱 및 최적화 용어와 구분하는 것이 도움이 됩니다:
- KV 캐시 대 Prompt Caching: KV 캐시는 일반적으로 단일 생성 스트림 동안 사용되는 동적이고 토큰 단위의 메모리를 의미합니다. 프롬프트 캐싱은 여러 독립적인 추론 호출에 걸쳐 재사용하기 위해 고정된 입력 명령어의 처리된 상태를 저장하는 것을 구체적으로 의미합니다.
- KV 캐시 대 Embeddings: 임베딩은 의미론적 의미를 포착하는 입력 데이터(텍스트 또는 이미지)의 벡터 표현입니다. KV 캐시는 시퀀스 생성을 목적으로 어텐션 레이어 내에서 이러한 임베딩으로부터 파생된 활성화(activations)(키 및 값)를 저장합니다.
- KV 캐시 대 Model Weights: 모델 가중치는 신경망의 정적이고 학습된 매개변수입니다. KV 캐시는 특정 입력 시퀀스의 순방향 패스 중에 생성되는 동적이고 임시적인 데이터로 구성됩니다.
예시: 비전 모델에서의 문맥#
KV 캐싱이 NLP에서 가장 유명하지만, 상태 유지 개념은 고급 비전 모델에도 적용됩니다. 아래 예제에서는 **Ultralytics YOLO26**을 사용하여 비디오 추적 시나리오에서 상태(컨텍스트)를 전달하는 아이디어를 시뮬레이션합니다. 여기서 추적기는 캐시가 토큰 전반에 걸쳐 컨텍스트를 유지하는 방식과 개념적으로 유사하게 프레임 전반에 걸쳐 객체의 정체성을 유지합니다.
from ultralytics import YOLO
# Load the Ultralytics YOLO26 model
model = YOLO("yolo26n.pt")
# Track objects in a video, maintaining identity state across frames
# The 'track' mode effectively caches object features to link detections
results = model.track(source="https://ultralytics.com/images/bus.jpg", show=False)
# Print the ID of the tracked objects
if results[0].boxes.id is not None:
print(f"Tracked IDs: {results[0].boxes.id.numpy()}")데이터셋을 관리하고 최적화된 모델을 배포하려는 개발자는 데이터 주석부터 효율적인 **model deployment**까지의 파이프라인을 단순화하는 **Ultralytics Platform**을 활용할 수 있습니다. 어텐션의 더 깊은 메커니즘에 관심이 있는 분들을 위해, **PyTorch**와 같은 라이브러리는 이러한 캐싱 메커니즘이 구현되는 기초적인 블록을 제공합니다.






