아다마르 회전으로 추론 성능 10배 끌어올리는 4비트 KV 캐시의 반전이야기

궁금하면 500원·2026년 7월 19일

AI 미생지능

목록 보기
126/129

llama.cpp 메인라인에 KV 캐시 양자화의 품질을 대폭 끌어올리는 중요한 패치가 반영되었습니다. 핵심은 회전기법을 통해 KV 캐시 양자화의 최대 약점인 Outlier 문제를 해결한 것입니다.


문제의 본질: Outlier가 양자화를 망친다

로컬 환경에서 긴 컨텍스트를 사용할 때 가장 큰 병목은 VRAM을 거대하게 차지하는 KV 캐시입니다.
llama.cpp에서는 --cache-type-k q4_0 --cache-type-v q4_0 같은 옵션으로 KV 캐시를 4비트로 양자화해 VRAM을 최대 4배까지 절약할 수 있습니다.

하지만 이는 치명적인 품질 저하를 동반했습니다.
Attention 활성화값은 특정 차원/채널에 값이 유난히 몰리는 Outlier 현상이 심합니다.
전체 양자화 스케일이 소수의 극단적인 큰 값에 맞춰지다 보니, 나머지 대부분의 디테일한 작은 값들이 뭉개지는 현상이 발생합니다.
가중치 양자화와 마찬가지로, KV 캐시 양자화에서도 이 Outlier는 모델을 멍청하게 만드는 주범이었습니다.


아다마르 회전

PR의 핵심 아이디어는 "양자화를 수행하기 전, 값이 특정 차원에 쏠리지 않고 고르게 퍼지도록 벡터를 회전시키자"는 발상입니다.

  1. 연산 과정: 정규화된 아다마르 행렬을 Q, K, V 텐서에 곱해 회전시킨 상태로 캐시에 저장합니다.
    이후 Attention 연산이 끝난 뒤 결과값을 역회전시켜 원래 공간으로 복원합니다.

  2. 수학적 보존: 아다마르 행렬은 직교 행렬입니다.
    직교 회전을 가해도 벡터 간의 내적은 보존됩니다.
    Attention Score는 결국 Q와 K의 내적으로 계산되므로, 회전 전후의 연산 결과는 수학적으로 동일하게 유지됩니다.

  3. 양자화 이점: 회전을 거치면 특정 차원에 몰려 있던 Outlier가 여러 차원으로 고르게 분산 됩니다.
    값이 평탄화된 상태에서 4비트 양자화를 적용하면 정보 손실이 극적으로 줄어듭니다.

GGUF 파일 포맷을 변경할 필요 없이, 런타임 저장 및 Attention 계산 시점에 회전-역회전 연산만 끼워 넣으면 되는 구조입니다.


성능 개선 수치

1. Perplexity
Qwen3 0.6B 모델 기준 KV 캐시 Q4_0 양자화 시

  • 회전 미적용: 62.02
  • 회전 적용: 46.25 (약 25% 개선)

Qwen3 8B나 Gemma3 4B 같은 대형 모델에서는 PPL 절대 수치가 낮아 개선폭이 1~2% 수준이지만, 향상 방향성은 일관됩니다.

2. 수학 추론 벤치마크
gpt-oss-20b 모델 기반 AIME25 테스트 결과는 극적입니다.

  • Q4_0: 2.0% -> 21.7%
  • Q5_0: 25.4% -> 32.5%
  • Q8_0: 31.7% -> 37.1%

Q4_0의 2.0% -> 21.7% 반등은 기존 4비트 KV 캐시 양자화가 추론 체인을 완전히 파괴하고 있었음을 보여줍니다.
단순 PPL 측정으로는 감지하기 어려운 오류 누적을 회전 기법이 성공적으로 막아냈습니다.


트레이드오프: 연산 비용과 속도

회전과 역회전 연산이 추가되는 만큼 비용이 발생합니다.

  • CUDA 백엔드 기준 토큰 생성 속도가 약 12% 감소
  • 프롬프트 처리속도는 2~3% 수준의 미미한 영향

하지만 메모리 절약이 최우선 목적인 KV 캐시 양자화 상황에서, "품질이 파괴되는 것"을 방지하고 "약간의 속도를 내어주며 실용적인 품질을 확보하는 것"은 대단히 타당한 교환입니다.


적용 및 배경 기술

  • 자동 적용: Head Dimension이 64 이상이고 64의 배수라면 별도 옵션 없이 자동으로 활성화됩니다.

  • 제외 조건: 현재 MLA 구조에는 적용되지 않습니다.

  • 비활성화 방법: 필요시 LLAMA_ATTN_ROT_K_DISABLE, LLAMA_ATTN_ROT_V_DISABLE 환경변수로 껄 수 있습니다.

이 구현은 구글 리서치가 공개한 TurboQuant 연구를 llama.cpp의 구조에 맞게 가져온 것입니다. TurboQuant 연구에서는 K와 V의 비대칭 비트 배분, Outlier 채널만 8비트로 유지하는 혼합 정밀도 등을 다루고 있어, 향후 PolarQuant나 QJL 같은 연관 기법들이 llama.cpp에 추가 반영될 가능성이 높습니다.


정리하며 느껴진 점

KV 캐시 양자화의 고질적 문제였던 Outlier를 복잡한 모델 재학습이나 포맷 변경 없이, '직교 회전을 통한 값의 분산'이라는 선형대수학적 성질만으로 매끄럽게 해결한 점이 인상적입니다.
유지하면서 양자화하기 좋은 형태 표현으로 변환한다는 접근 방식은 인프라/런타임 최적화 관점에서도 배울 부분이 많습니다.

로컬에서 긴 컨텍스트 모델을 운용 중이라면 llama.cpp를 최신 커밋으로 업데이트하는 것만으로 별도 설정 없이 추론 성능 향상을 체감할 수 있습니다.

profile
레거시를 이해하면서도 새로운 기술을 현실적으로 적용할 수 있는 백엔드 개발자가 되는 것이 목표입니다.

0개의 댓글