0
영상 압축 기법을 KV 캐시에 적용해 Q4 양자화 오차를 10,000배 줄인 Delta-KV
ai-ml
요약
기사 전체 정리
영상 압축 기법을 KV 캐시에 적용했더니, Q4 양자화 오차가 10,000배 줄었다는 거임
핵심 아이디어: 절대값 대신 차이(delta)를 양자화
영상 코덱에서 매 프레임을 통째로 인코딩하지 않고, 키프레임 하나 저장한 뒤 차이만 기록하는 방식이 있음. Delta-KV는 이걸 그대로 LLM의 KV 캐시에 가져온 것임.
- 자동회귀 디코딩 중 연속 토큰의 KV 캐시 값은 거의 동일함. 대부분의 차원에서 차이가 ~1% 수준밖에 안 됨
- 기존 Q4_0은 절대값을 4비트로 압축하는데, Delta-KV는 토큰 간 차이를 4비트로 압축함
- 델타의 값 범위가 절대값 대비 100배 작으니까, 같은 4비트로 10,000배 더 많은 정보를 보존할 수 있다는 논리임
벤치마크: Q4_0 대비 22배 낮은 품질 열화
4x AMD MI50 GPU(총 128GB HBM2), ROCm 6.3.3 환경에서 측정한 결과:
- Q4_0: F16 대비 perplexity +5.61% 열화
- Delta-KV (kf=32): F16 대비 겨우 +0.26% 열화. 같은 4비트 저장인데 열화가 22배 적음
- Q8_0도 -0.19%인데, Delta-KV가 4비트만으로 Q8에 근접하는 품질을 뽑아냄
컨텍스트 길이에 따른 안정성
오차 누적이 걱정될 수 있는데, 실제로는 전혀 문제 없음:
- 512~16K 토큰 전 구간에서 Delta-KV 열화가 0.3% 미만으로 유지됨
- Q4_0은 3.5~6%로 꾸준히 열화되는 반면, Delta-KV는 16K 토큰에서도 +0.25%밖에 안 됨
- 키프레임 간격이 512 델타 프레임이어도 오차 폭발이 없다는 거임
코드 태스크에서 특히 강력함
코드는 중괄호, 키워드 등 반복 구조가 많아서 연속 KV 상태가 매우 유사함:
- Q4_0 열화:
0.71.06% - Delta-KV 열화: 0.05~0.12%
- 코드에서는 Q4_0 대비 열화를 10~20배 줄여서 0.12% 미만으로 만듦
MoE 모델에서도 잘 작동함
MoE는 토큰마다 다른 전문가 블록을 태우니까 KV 캐시 패턴이 더 다양해서 델타 압축에 불리한 조건임. 그런데도:
- 코딩 태스크 기준 Q4_0 대비 열화를 10~40배 감소시킴
- 아키텍처에 구애받지 않고 동작한다는 점이 인상적임
보너스: Weight-Skip 최적화로 10% 속도 향상
디코딩 시 MMVQ 커널이 토큰당 ~40GB의 가중치를 읽는데, 4바이트만 먼저 읽어서 전체 400바이트 내적을 건너뛸지 판단하는 방식임:
- +10% 디코드 속도 향상 (9.3 t/s → 10.2 t/s)
- 품질 손실 제로 (perplexity 동일)
구현: llama.cpp 포크, ~195줄 추가
- llama.cpp를 포크해서 최소한의 수정만 가함
- 핵심 파일:
delta-kv.cu(GPU 커널),llama-kv-cache-delta.cpp(델타 프로세서),weight-skip.cu(가중치 스킵 커널) - 수정 파일 11개, 총 ~195줄 추가. 학습 컴포넌트나 엔트로피 코딩 없이 순수 커널 통합만으로 구현
- 하드웨어에 무관하게 KV 캐시 대역폭이 병목인 GPU(A100, H100 등)에서 다 이득을 볼 수 있다는 거임
댓글
댓글
댓글을 불러오는 중...