KV Cache
KV Cache가 LLM과 같은 Transformer 모델을 최적화하는 방법을 알아보세요. 이 기법이 추론 지연 시간을 줄이고 Ultralytics YOLO26의 효율성을 높이는 방법을 살펴보세요.
KV 캐시(Key-Value 캐시)는 주로 대규모 언어 모델(LLMs) 및 기타 Transformer 기반 아키텍처에서 추론 지연 시간을 단축하고 연산 비용을 줄이는 데 사용하는 핵심 최적화 기법입니다. KV 캐시는 기본적으로 시퀀스의 이전 토큰에 대해 어텐션 메커니즘이 생성한 Key 및 Value 행렬을 저장합니다. 이러한 중간 계산 결과를 저장하면 모델은 새 토큰을 생성할 때마다 대화의 전체 기록에 대한 어텐션 상태를 다시 계산하지 않아도 됩니다. 이 과정을 통해 텍스트 생성 워크플로의 복잡도가 2차에서 선형으로 바뀌어 챗봇 및 AI 에이전트와 실시간으로 상호작용할 수 있습니다.
작동 원리와 이점#
표준 Transformer 모델에서 다음 단어를 생성하려면 문맥을 파악하기 위해 이전 단어를 모두 참조해야 합니다. 캐싱을 사용하지 않으면 모델은 매 단계마다 전체 시퀀스의 수학적 관계를 다시 계산해야 합니다. KV 캐시는 메모리 뱅크 역할을 하여 이 문제를 해결합니다.
- 속도 향상: 메모리에서 사전 계산된 키와 값을 불러오면 추론 엔진의 속도가 크게 향상됩니다. 이는 고객 서비스 봇의 실시간 추론처럼 지연 시간이 짧아야 하는 애플리케이션에 필수적입니다.
- 리소스 효율성: 메모리 사용량(VRAM)은 늘어나지만 토큰당 필요한 연산량(FLOPs)은 크게 줄어듭니다. 이 상충 관계는 운영 체제가 RAM을 관리하는 방식과 유사하게 모델 양자화 또는 페이징과 같은 기법으로 조정하는 경우가 많습니다.
- 컨텍스트 확장: KV 캐시를 효율적으로 관리하면 모델이 더 큰 컨텍스트 윈도우를 처리할 수 있어 긴 문서를 처리하거나 장시간 일관된 대화를 유지할 수 있습니다.
실제 적용 사례#
KV 캐시는 최신 생성형 AI를 배포하는 데 필수적인 구성 요소이며, 그 원리는 컴퓨터 비전(CV)에도 적용됩니다.
-
생성형 챗봇: ChatGPT나 Claude와 같은 서비스는 KV 캐시에 크게 의존합니다. 사용자가 후속 질문을 하면 모델은 전체 대화 기록을 처음부터 다시 읽지 않습니다. 대신 이전 대화 차례의 캐시된 상태에 새 입력을 추가해 거의 즉각적으로 응답합니다.
-
비디오 이해: 비디오 이해 작업에서 모델은 프레임을 순차적으로 처리합니다. 텍스트 토큰과 마찬가지로 이전 프레임의 시각 특징을 캐시하면 전체 비디오 기록을 다시 처리하지 않고도 객체를 추적하거나 동작을 인식하는 데 도움이 됩니다. 시간적 문맥이 중요한 동작 인식 작업에서 특히 유용합니다.
효율적인 메모리 관리#
모델이 커질수록 KV 캐시 크기가 병목이 되어 GPU 메모리를 수 기가바이트씩 차지할 수 있습니다. 최근에는 저장 공간을 최적화하는 데 연구가 집중되고 있습니다.
- PagedAttention: 운영 체제의 가상 메모리에서 영감을 얻은 PagedAttention은 vLLM에서 도입한 방식으로, KV 캐시를 비연속 메모리 블록에 저장할 수 있습니다. 이를 통해 단편화를 줄이고 모델 서빙 시 더 큰 배치 크기를 사용할 수 있습니다.
- KV 캐시 양자화: 공간을 절약하기 위해 개발자는 캐시된 값에 혼합 정밀도 또는 int8 양자화를 적용하는 경우가 많습니다. 이를 통해 메모리 사용량을 줄여 RAM이 제한적인 엣지 AI 기기에서도 성능이 우수한 모델을 실행할 수 있습니다.
- 프롬프트 캐싱: 정적 시스템 프롬프트(예: "유용한 코딩 도우미입니다")의 KV 상태를 한 번 계산한 뒤 여러 사용자 세션에서 재사용하는 관련 기법입니다. 대규모 프롬프트 엔지니어링 워크플로를 최적화하는 핵심 기능입니다.
관련 개념 구분하기#
KV 캐시를 다른 캐싱 및 최적화 용어와 구별하면 이해에 도움이 됩니다:
- KV 캐시와 프롬프트 캐싱의 비교: KV 캐시는 일반적으로 단일 생성 스트림에서 사용하는 동적 토큰별 메모리를 의미합니다. 프롬프트 캐싱은 여러 독립적인 추론 호출에서 재사용할 수 있도록 고정 입력 지시문의 처리된 상태를 저장하는 것을 의미합니다.
- KV 캐시와 임베딩의 비교: 임베딩은 의미를 포착하는 입력 데이터(텍스트 또는 이미지)의 벡터 표현입니다. KV 캐시는 시퀀스 생성 목적으로 어텐션 레이어에서 이러한 임베딩으로부터 파생된 활성값(키와 값)을 저장합니다.
- KV 캐시와 모델 가중치의 비교: 모델 가중치는 신경망이 학습한 정적 매개변수입니다. KV 캐시는 특정 입력 시퀀스의 순전파 중에 생성되는 동적 임시 데이터로 구성됩니다.
예시: 비전 모델의 컨텍스트#
KV 캐시는 NLP 분야에서 가장 잘 알려져 있지만, 상태를 유지한다는 개념은 고급 비전 모델에도 적용됩니다. 아래 예시에서는 Ultralytics YOLO26을 사용한 비디오 추적 시나리오에서 상태(컨텍스트)를 전달하는 개념을 시뮬레이션합니다. 여기서 추적기는 프레임 간 객체의 ID를 유지하는데, 이는 캐시가 토큰 간 컨텍스트를 유지하는 방식과 개념적으로 유사합니다.
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()}")데이터 세트를 관리하고 최적화된 모델을 배포하려는 개발자는 데이터 어노테이션부터 효율적인 모델 배포까지의 파이프라인을 간소화하는 Ultralytics Platform을 활용할 수 있습니다. 어텐션의 세부 작동 원리에 관심이 있는 경우, PyTorch와 같은 라이브러리에서 이러한 캐싱 메커니즘을 구현하는 기반 구성 요소를 제공합니다.









