터보퀀트: 정확도 손실 없이 LLM KV 캐시 6배 작게 만드는 기술
자기회귀적 언어 모델 생성 과정에서 어텐션 메커니즘은 이전 토큰들의 키(Key)와 값(Value) 벡터에 의존합니다. 각 단계마다 전체 컨텍스트를 다시 계산하는 것은 비효율적이므로, 중간 표현을 캐시로 저장합니다. 하지만 KV 캐시는 컨텍스트 길이에 따라 선형적으로 증가하며, 이는 처리량과 최대 컨텍스트 크기를 제한합니다.
긴 시퀀스에서는 추론이 메모리 대역폭 한계에 도달합니다. GPU가 계산보다 데이터 읽기에 더 많은 시간을 소비하게 되며, 이는 지연 시간과 비용을 증가시킵니다. 터보퀀트는 어텐션에 필요한 의미 정보를 유지하면서 캐시를 압축함으로써 이 문제를 해결합니다.
폴라쿼턴트의 작동 원리
첫 번째 단계는 폴라쿼턴트(PolarQuant)입니다. 임의의 회전 후 벡터를 극좌표계로 변환합니다. 반지름(rho)은 벡터의 크기를, 각도(phi)는 방향을 나타냅니다.
# 가상 코드: 폴라쿼턴트
rotated = rotate_random(vector)
rho = norm(rotated) # 반지름
phi = angle(rotated) # 각도
quantized = quantize(rho, phi)
임의의 회전은 데이터 분포를 단순화해 양자화에 더 예측 가능하게 만듭니다. 추가적인 파라미터나 코드북이 필요 없으며, 모델 미세조정 없이도 3~4비트/값 수준의 압축이 가능합니다.
QJL을 통한 오류 보정
양자화는 노이즈를 유발합니다. 두 번째 단계인 QJL(Quantized Johnson-Lindenstrauss)은 각 값당 1비트만으로 잔차 오류를 인코딩합니다. 이 변환은 벡터 간 유클리드 거리를 유지하므로, 내적 어텐션에 필수적입니다.
QJL은 양자화된 형태로 존슨-린든스트라우스 보조정리를 근사합니다:
- 입력: 폴라쿼턴트 이후의 잔차
- 출력: 1비트 보정
- 성질: ||Qx - Qy|| ≈ ||x - y|| (x, y ∈ KV 캐시)
결합하면 값당 1.25~2비트 수준의 압축을 달성하면서 퍼플렉서티 저하가 매우 미미합니다.
성능 비교 및 결과
Llama-3.1-8B-Instruct (LongBench)에서 테스트한 결과:
- 압축률: 기준 대비 6~8배 향상
- 로짓 계산 속도 향상: H100에서 최대 8배 (JAX 기준)
- 품질: 나들목 찾기 및 장문 컨텍스트 작업에서 <1% 감소
GloVe(d=200)에서도 터보퀀트는 재현율과 압축률 사이의 최적 트레이드오프(1:k)를 달성했습니다.
| 방법 | 비트/값 | 압축률 | 퍼플렉서티 감소 |
|--------|------------|-------------|------------------|
| 기준 | 16 | 1x | 0% |
| INT8 | 8 | 2x | 0.5% |
| 터보퀀트 (3비트) | 3 | 6x | 0.2% |
재학습 없이 최대 3비트까지 가능 — 제로샷 양자화의 획기적 진전입니다.
핵심 요약
- 극한의 압축: 3비트/값에서 KV 캐시 6배 축소
- 빠른 추론: 메모리 제한 작업에서 최대 8배 속도 향상
- 거리 보존: QJL이 어텐션 호환성을 보장
- 일반 적용 가능성: 벡터 검색 및 RAG 모두 지원
- 미세조정 불필요: 기존 LLM에 즉시 교체 가능
LLM 이상의 활용
터보퀀트는 트랜스포머 아키텍처를 넘어서는 확장성을 지닙니다. 벡터 데이터베이스에서는 임베딩 압축이 ANN 검색 성능(HNSW, FAISS)을 유지합니다. 엣지 디바이스에서는 DRAM 요구량을 줄여 현장에서의 추론을 가능하게 합니다.
고급 엔지니어를 위한 팁: 사용자 정의 추론 엔진에 통합하세요. JAX/Flax 지원으로 프로토타이핑이 쉬워집니다. 128k 이상의 긴 컨텍스트에서 테스트해 실제 성능 향상을 확인하세요.
— Editorial Team
아직 댓글이 없습니다.