멀티모달 LLM 추론에서 KV Cache 양자화 탐구
Exploring KV Cache Quantization in Multimodal Large Language Model Inference
TL;DR Highlight
멀티모달 LLM의 KV Cache 양자화는 첫 토큰 응답속도를 1.7배, 출력속도를 4.3배 향상시킨다.
Who Should Read
고해상도 이미지 처리 시 GPU 메모리 부족이나 응답 지연을 겪는 멀티모달 LLM 서비스 개발자. KV Cache 오프로드 비용을 줄이고 싶은 MLOps 엔지니어.
Core Mechanics
- 멀티모달 LLM은 고해상도 이미지 처리 시 KV Cache(어텐션 연산 중간 결과 저장소)가 폭발적으로 커져 GPU 메모리를 초과, CPU로 오프로드하면서 지연이 발생함
- 텍스트 토큰 위주 보존 전략: 전체 토큰 중 10%만 고정밀도(FP16)로 유지하고, 나머지 90%(주로 이미지 토큰)는 낮은 비트 수로 양자화
- 이미지 토큰은 텍스트 토큰보다 정밀도 손실에 덜 민감하다는 특성을 활용해 선택적 양자화를 적용
- CPU-GPU 혼합 시스템에서 KV Cache 전송량을 줄여 TTFT(첫 토큰 응답 시간)와 TPOT(토큰 생성 간격) 모두 대폭 단축
- 정확도 손실은 무시할 수준으로, 성능을 희생하지 않고 속도·메모리 효율을 동시에 개선
Evidence
- TTFT(Time-To-First-Token, 첫 토큰까지 걸리는 시간) 1.7배 단축
- TPOT(Time-Per-Output-Token, 토큰당 생성 시간) 4.3배 단축
- 전체 토큰의 10%만 고정밀도로 유지해도 정확도 손실이 무시할 수준
How to Apply
- 멀티모달 추론 파이프라인에서 KV Cache 저장 시, 텍스트 토큰은 FP16 유지, 이미지 토큰은 INT4/INT8로 양자화하는 혼합 정밀도 전략을 도입
- CPU 오프로드를 사용하는 heterogeneous 시스템이라면, 이미지 토큰 KV Cache를 양자화해 CPU-GPU 전송 데이터량을 줄이고 대역폭 병목을 완화
- 고해상도 이미지를 많이 처리하는 VQA, 문서 이해, 영상 분석 서비스에서 응답 지연 개선을 위해 우선 적용 검토
Code Example
# 개념적 적용 예시 (PyTorch pseudo-code)
import torch
def mixed_precision_kv_cache(keys, values, text_token_mask, quant_bits=4):
"""
text_token_mask: True인 위치는 텍스트 토큰 (상위 10%)
이미지 토큰은 낮은 비트로 양자화
"""
# 텍스트 토큰: 고정밀도 유지
keys_text = keys[text_token_mask] # FP16 그대로
values_text = values[text_token_mask]
# 이미지 토큰: INT4 양자화
keys_img = keys[~text_token_mask]
values_img = values[~text_token_mask]
scale_k = keys_img.abs().max() / (2 ** (quant_bits - 1) - 1)
keys_img_q = (keys_img / scale_k).round().to(torch.int8)
scale_v = values_img.abs().max() / (2 ** (quant_bits - 1) - 1)
values_img_q = (values_img / scale_v).round().to(torch.int8)
return {
"keys_text": keys_text,
"values_text": values_text,
"keys_img_quantized": keys_img_q,
"keys_img_scale": scale_k,
"values_img_quantized": values_img_q,
"values_img_scale": scale_v,
}Terminology
관련 논문
Swift로 LLM 학습시키기 Part 1: 행렬 곱셈을 Gflop/s에서 Tflop/s로 끌어올리기
Apple Silicon에서 Swift로 직접 행렬 곱셈 커널을 구현하며 CPU, SIMD, AMX, GPU(Metal)를 단계별로 최적화해 Gflop/s에서 Tflop/s 수준까지 성능을 높이는 과정을 상세히 설명한 글이다. 프레임워크 없이 LLM 학습의 핵심 연산을 밑바닥부터 구현하고 싶은 개발자에게 Apple Silicon의 성능 한계를 체감할 수 있는 드문 자료다.
fsync 없이 로컬 스토리지 엔진을 crash-consistent하게 만든 방법
FractalBits가 fsync 없이 SSD 전용 KV 스토리지 엔진을 구현해 동일 조건 대비 약 65% 높은 쓰기 성능을 달성한 설계 방법을 공유했다. fsync의 메타데이터 오버헤드를 피하기 위해 사전 할당, O_DIRECT, SSD 원자 쓰기 단위 정렬 저널을 조합한 구조가 핵심이다.
Google Chrome, 사용자 동의 없이 4GB AI 모델(Gemini Nano)을 몰래 설치
Google Chrome이 사용자 동의 없이 Gemini Nano 4GB 모델 파일을 자동 다운로드하고, 삭제해도 재다운로드되는 문제가 발견됐다. GDPR 위반 가능성과 수십억 대 기기에 적용될 때의 환경 비용 문제가 제기되고 있다.
OpenAI가 대규모 저지연 Voice AI를 제공하는 방법
OpenAI가 9억 명 이상의 사용자에게 실시간 음성 AI를 제공하기 위해 WebRTC 스택을 어떻게 재설계했는지 설명하는 글로, relay + transceiver 분리 아키텍처의 설계 결정과 trade-off를 상세히 다룬다.
Truncated Decoding Tree의 결정론적 탐색을 통한 효율적인 Test-Time Inference
Self-consistency의 중복 샘플링 낭비를 없애는 결정론적 트리 탐색 디코딩 기법 DLE로 수학/코드 추론 성능과 속도를 동시에 개선
GoModel – Go로 작성된 오픈소스 AI Gateway
OpenAI, Anthropic, Gemini 등 여러 AI 프로바이더를 하나의 OpenAI 호환 API로 묶어주는 Go 기반 오픈소스 AI 게이트웨이로, LiteLLM의 컴파일 언어 대안이다.
Original Abstract (Expand)
Multimodal large language models (MLLMs) have demonstrated strong performance across modalities, such as image, video, and audio understanding, by leveraging large language models (LLMs) as a backbone. However, a critical challenge in MLLM inference is the large memory capacity required for the key–value (KV) cache, particularly when processing high-resolution images. This pressure often forces heterogeneous CPU–GPU systems to offload the KV cache to CPU memory, introducing substantial transfer latency. KV cache quantization is a promising way to reduce this memory demand, yet it remains underexplored for MLLM inference. In this work, we characterize MLLM inference and present a text-centric KV cache quantization method that retains only 10% of tokens in high precision while quantizing the rest. Our method reduces Time-To-First-Token (TTFT) by <inline-formula><tex-math notation="LaTeX">$1.7\times$</tex-math><alternatives><mml:math><mml:mrow><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mn>7</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math><inline-graphic xlink:href="rhu-ieq1-3646170.gif"/></alternatives></inline-formula> and Time-Per-Output-Token (TPOT) by <inline-formula><tex-math notation="LaTeX">$4.3\times$</tex-math><alternatives><mml:math><mml:mrow><mml:mn>4</mml:mn><mml:mo>.</mml:mo><mml:mn>3</mml:mn><mml:mo>×</mml:mo></mml:mrow></mml:math><inline-graphic xlink:href="rhu-ieq2-3646170.gif"/></alternatives></inline-formula>, with negligible accuracy loss.