TL;DR
긴 컨텍스트 추론에서 KV 캐시가 메모리·대역폭 병목을 유발하므로, 캐시를 저비트로 안전하게 압축하면 더 긴 컨텍스트를 단일 GPU에서 실행 가능하게 만든다. RoPE 구조를 반영한 블록 단위 비트 할당으로 key-side logit 보존을 우선하면, 동일한 평균 비트 예산에서 기존 균등 할당보다 attention 품질과 다운스트림 태스크 성능이 크게 개선된다.
왜 중요한가
긴 컨텍스트 추론에서 KV 캐시가 메모리·대역폭 병목을 유발하므로, 캐시를 저비트로 안전하게 압축하면 더 긴 컨텍스트를 단일 GPU에서 실행 가능하게 만든다. RoPE 구조를 반영한 블록 단위 비트 할당으로 key-side logit 보존을 우선하면, 동일한 평균 비트 예산에서 기존 균등 할당보다 attention 품질과 다운스트림 태스크 성능이 크게 개선된다.
핵심 기여
RoPE 블록 관점의 KV-cache 압축 재정의
RoPE가 2×2 주파수 블록 단위로 query-key 로그릿을 분해함을 지적하고, 키 양자화를 flat-vector 복원 문제가 아닌 RoPE 로그릿 보존 문제로 재정의했다. 이 관점에서 블록별 영향력(energy)에 따라 비트를 배분해야 함을 수식적으로 도출했다.
라벨-프리 블록 에너지 스코어와 4^{-b} rate law 결합
각 레이어·KV 헤드의 RoPE 블록에 대해 s_{9l,h,i} = 1/2(E[||q^{(i)}||^2]+E[||k^{(i)}||^2]) 형태의 라벨-프리 에너지 점수를 계산하고, TurboQuant-MSE의 복원 오차 4^{-b} 법칙과 결합해 블록 단위 비용 함수 J(b)=Σ s_i 4^{-b_i}를 구성했다.
정수 비트 예산에서의 그리디 최적 비트 할당 알고리즘
각 블록을 b_{min}으로 초기화한 뒤, 한 비트씩 추가하면서 현재 마진 이득 Δ_i = (3/4) s_i 4^{-b_i}가 최대인 블록에 비트를 할당하는 그리디 절차를 제시했다. 이 절차가 해당 목적함수에 대해 정수 해에서 최적임을 보였다.
Packed-cache 런타임 경로와 단일-GPU 배포
양자화 코드 스트림(니블/바이트)과 노름/메타데이터를 HBM에 저장하고, fused attention 커널이 타일 단위로 코드만 로드해 실시간으로 디코딩·연산을 수행하는 packed-cache 경로를 구현했다. K3V3에서 3.24× 압축, T=128K에서 fp16 대비 1.34× 속도, 메모리 56.31GB→19.85GB 감소 사례를 보고했다.
핵심 아이디어 이해하기
Transformer의 RoPE(rotaional positional encoding)는 d_h 차원을 2차원 주파수 블록들로 나누고, 상대 위치 Δ에 대해 각 블록에 2×2 회전 R(Δθ_i)를 적용한다. 이에 따라 query-key 로그릿은 블록별 내적들의 합으로 정확히 분해되며, 각 블록의 기여는 쿼리·키 블록 노름과 블록 주파수에 의존한다. 따라서 키 오류가 로그릿에 미치는 영향은 블록별로 독립적으로 평가 가능하다. 기존 KV-cache 양자화는 키를 평탄한 벡터로 보고 전체 복원 오차를 줄이는 데 초점을 맞춘다. 그러나 RoPE 환경에서는 일부 주파수 블록이 로그릿 신호의 대부분을 차지해(높은 energy) 동일 비트 할당이 고에너지 블록을 과소보호하고 저에너지 블록을 과보호하는 결과를 낳는다. 이 차이는 attention 분포와 downstream 성능으로 이어진다. Block-GTQ는 각 RoPE 블록의 라벨-프리 에너지 점수 s_i(=½(E[||q^{(i)}||^2]+E[||k^{(i)}||^2]))를 계산해, TurboQuant-MSE의 로컬 rate law(복원 MSE ∝ 4^{-b})와 결합한 목적 J(b)=Σ s_i 4^{-b_i}을 최소화하는 정수 비트 할당을 수행한다. 마진 이득 Δ_i = (3/4) s_i 4^{-b_i}를 기준으로 한 비트씩 그리디로 할당하면 정수 제약 하에서 최적 해를 얻는다. 이 접근은 동일 평균 비트 예산 하에서 고에너지 블록에 비트를 집중시켜 query-key 로그릿 MAE를 크게 낮춘다. 결과적으로 softmax 기반 attention 분포 보존이 향상되며, NIAH/LongBench-EN/AIME 같은 장문 검색·생성·추론 작업에서 fp16에 가까운 성능을 더 낮은 메모리·대역폭으로 달성한다.
방법론
전체 접근: 각 레이어·KV 헤드에 대해 RoPE 블록별 에너지 점수를 계산하고, 정수 비트 예산 B(헤드 단위)에 대해 블록별 비트 b_i를 할당한다. 목적함수는 J_{9l,h}(b)=Σ s_{9l,h,i} 4^{-b_i}이며, b_min≤b_i≤b_max와 Σ b_i=B 제약을 둔다. 값(V)은 로그릿 계산에 관여하지 않으므로 uniform TQ-MSE로 처리한다. 블록 에너지 산출: s_{9l,h,i}=½(E_{t,g∈G(h)}[||q_{9l,g,t}^{(i)}||2^2]+E_t[||k{9l,h,t}^{(i)}||_2^2]) 형태로, 라벨이 없는 짧은 캘리브레이션 프리픽스에서 Q/K 두 번째 모멘트를 평균해 계산한다. G(h)는 KV 헤드 h를 읽는 쿼리 헤드 집합이다. 그리디 할당 알고리즘: 모든 블록을 b_min으로 초기화(B_extra=B-L b_min). 각 블록의 현재 마진 Δ_i=(3/4) s_i 4^{-b_i}를 우선순위 큐에 넣고, B_extra가 남는 동안 Δ_i가 최대인 블록에 비트 1을 추가한다. 비트가 증가하면 해당 블록의 다음 Δ는 4배 작아지므로 마진 기반 균형이 자동으로 유지된다. 알고리즘은 이 목적에 대해 정수 최적임을 보였다. 물리적 인코딩과 그룹화: 동일 비트 폭을 할당받은 블록들을 그룹 {G_b}로 묶어 해당 그룹을 하나의 TQ-MSE 인코더로 처리한다. 이렇게 하면 RoPE-블록 단위 결정은 유지되면서 작은 블록마다 별도 인코더를 만들지 않아도 된다. Packed-cache 서빙 경로: 양자화된 코드 스트림(니블 혹은 바이트)과 per-group codebook(공유 fp16), 노름 및 메타데이터를 HBM에 저장한다. fused attention 커널이 타일 단위로 코드+노름을 로드해 L1에 작은 fp16 코드북을 유지하며, 디코드 후 fp16 입력·fp32 누적 텐서코어 연산으로 QK^T와 P V를 계산한다. 전체 fp16 KV를 HBM에 전개하지 않아도 되므로 per-step HBM 트래픽은 코드+노름(예: K3V3에서 약 157 B/토큰/헤드)으로 줄어든다.
관련 Figure

왼쪽 패널은 RoPE가 d_h를 2×2 블록으로 분해해 쿼리-키 로그릿이 블록 합으로 구성됨을 시각화한다. 오른쪽 상단은 블록별 median-normalized energy 스펙트럼을, 하단은 같은 평균 비트( b̄=3 )에서 Block-GTQ가 높은 에너지 블록으로 비트를 재분배하는 모습을 보여준다. 이 Figure는 본문에서 사용된 '블록 에너지→비트 재분배' 파이프라인을 직관적으로 연결해 주며 methodology의 핵심(블록별 s_i와 4^{-b}에 따른 그리디 배분)을 보강한다.
RoPE 블록 구조 도식과 한 헤드의 블록별 energy 점수 및 Block-GTQ의 비트 할당 예시를 보여준다.
주요 결과
메인 벤치마크: Ten-model diagnostic panel에서 K-only( V는 fp16)로 평가한 결과, Block-GTQ는 동일 평균 비트 예산에서 per-layer RoPE-logit MAE를 32%–80% 감소시켰고(모델별 평균치), 3-bit 및 2-bit 예산 모두에서 모든 레이어 비교 367/367에서 uniform TQ-MSE를 이겼다(Table 1). 장문 검색·이해: Llama-3.1-8B-Instruct의 NIAH 다중태스크(4K–128K 범위, 여러 needle 깊이)에서 K2V2 예산 기준으로 TQ-MSE의 평균 70.6% 대비 Block-GTQ는 97.4%로 상승했다(Table 4(a)). Qwen2.5-7B-Instruct에서는 TQ-MSE가 0.0으로 붕괴한 반면 Block-GTQ는 60% 수준을 유지했다. 생성·추론(Reasoning): AIME 2024/2025 연산(DeepSeek-R1-Distill-Qwen-7B, K3V2)에서 no-buffer 설정(최근 토큰 버퍼 없음) 하에 Block-GTQ는 fp16(54.2/37.9)과 근접한 51.7/37.5을 기록했다. 동일 설정에서 uniform TQ-MSE는 0.0/0.0으로 성능이 붕괴했다(Table 6). 배포·효율성: Qwen2.5-3B-Instruct, H800, K3V3에서 packed-cache 경로로 실행 시 KV-cache 압축률 3.24×, T=128K에서 fp16 FlashAttention2 대비 decode 속도 1.34×, 피크 GPU 메모리 56.31GB→19.85GB로 감소했다. 또한 fp16가 OOM 되는 256K/512K 컨텍스트에서도 실행이 가능했다.
관련 Figure

각 서브플롯은 모델별로 레이어 단위의 비트 폭 분포(1b 빨강→8b 녹색)를 나타내며, 모델 간·레이어 간 블록 에너지의 이질성이 일관되게 관찰돼 uniform 할당의 비효율을 시각적으로 뒷받침한다. 이 Figure는 Block-GTQ가 다양한 아키텍처에서 non-uniform allocation을 산출함을 실험적으로 뒷받침한다.
열 개 모델의 레이어별 비트 분포 지문(fingerprint)을 한눈에 보여주는 스택형 플롯(3 b/dim 평균 예산).

좌 패널은 no-buffer 환경에서 Block-GTQ가 모든 비트 예산에서 softmax KL이 가장 낮음을 보여주고, 우 패널은 softmax KL이 낮을수록 top-10 overlap이 높아 attention 분포 보존과 로그릿 MAE 감소가 downstream에 직결됨을 시각화한다. 이 Figure는 RoPE-logit fidelity 개선이 실제 attention 분포 보존으로 이어진다는 근거를 제공한다.
각 방법의 mean softmax KL(좌)과 softmax KL 대비 top-10 attention overlap(우)을 보여주는 성능 산점도/막대 그래프.

이 히트맵은 K3V3/K2V2 운영지점에서 Block-GTQ의 NIAH 패스율이 fp16에 가깝게 유지되는 반면 uniform TQ-MSE와 KIVI-ScaleOnly는 특정 영역에서 붕괴함을 보여준다. 대규모 컨텍스트-깊이 조합에서 Block-GTQ가 검색/유지 능력을 보존함을 실험적으로 지지한다.
Llama/Qwen 등에서 컨텍스트 길이와 needle depth에 따른 NIAH 패스율(heatmap) 및 packed-cache 상호작용을 보여주는 다중 히트맵.
기술 상세
아키텍처 구조 개요: 각 Transformer 레이어의 KV head는 d_h 차원을 L=d_h/2개의 2차원 RoPE 블록으로 분할한다. Block-GTQ는 각 레이어·KV 헤드별로 블록 에너지 s_{9l,h,i}를 캘리브레이션 샘플에서 계산한 뒤 정수 비트 배분 b_i를 산출해, 동일 b를 가진 블록들을 그룹으로 묶어 TQ-MSE로 인코딩한다. 수학적 기반과 최적화 목표: 목표함수는 J(b)=Σ_{i=1}^L s_i 4^{-b_i}다. TurboQuant-MSE의 rate law E||x-9hat{x}||^2 ≤ ||x||^2 C_{TQ} 4^{-b}가 근거로 쓰인다. 한 비트를 추가할 때의 마진 감소는 Δ_i(b_i) = s_i 4^{-b_i} - s_i 4^{-(b_i+1)} = (3/4) s_i 4^{-b_i}로 닫힌 형태로 계산되며, 이 마진을 기준으로 그리디 할당을 수행하면 정수 제약 하에서 전역 최적을 얻는다는 정리를 보였다(증명은 Appendix A.4). 블록 에너지 산출 세부: s_{9l,h,i}는 캘리브레이션 프리픽스 상의 Q/K 두 번째 모멘트 평균으로 계산된다: s_{9l,h,i}=½(E_{t,g∈G(h)}[||q_{9l,g,t}^{(i)}||^2]+E_t[||k_{9l,h,t}^{(i)}||^2]). 여기서 G(h)는 해당 KV 헤드를 읽는 쿼리 헤드 집합이며, 캘리브레이션은 라벨이 없는 짧은 토큰 시퀀스(예: WikiText-2 일부)로 수행된다. Packed-cache 구현 디테일: K 스트림은 mixed-rate 스케줄로 낮은 비트 그룹은 nibble 컨테이너, 높은 비트 그룹은 바이트로 저장한다. fused attention 커널은 타일 단위로 코드를 로드해(니블 추출 포함) 작은 fp16 코드북을 L1에 상주시킨 뒤, 복원된 fp16 입력을 fp32로 누적해 QK^T와 PV를 계산한다. 긴 컨텍스트 처리는 키 축 분할로 병렬화하고 섹션별 log-sum-exp 병합을 통해 정확도를 유지한다. Prefill은 레이어별로 전체 프롬프트를 한 번에 quantize해 O(T) 호출을 O(1) 호출로 줄인다. 하드웨어/소프트웨어 구현: 단일 H800에서 Triton 커널로 K/V를 패킹·전송하고, fused attention은 tensor-core 기반 fp16 입력·fp32 누적으로 구현했다. Packed-path는 단일-스텝 디코딩에서 코드 디코딩 오버헤드를 지불하므로 짧은 컨텍스트에서는 fp16에 늦지만, KV 대역폭이 지배적인 긴 컨텍스트에서는 속도·메모리 이득이 역전된다.
한계점
논문에서 언급한 한계만 기술함: (1) Block-GTQ는 K에 대해서만 블록별 비트 할당을 수행하고 V는 uniform TQ-MSE로 남겨 두었으므로, V 민감한 백본에서는 최근-토큰 버퍼가 없을 때 성능 저하가 관찰됐다. (2) Packed-cache 경로의 공개 구현은 단일-GPU 단일-스레드 기반이며 multi-GPU·배치 서빙 확장은 향후 과제로 남아 있다. (3) Block-GTQ는 mixed-rate 메타데이터로 인해 동일 압축률의 균일 TQ-MSE보다 약간 더 많은 메타데이터 오버헤드가 있다.
실무 활용
Block-GTQ는 실서비스 환경에서 KV-cache 메모리 사용을 크게 줄이면서 attention fidelity를 보존하므로, 단일 GPU에서 더 긴 컨텍스트를 지원하거나 메모리 한정 환경에서 모델을 배포할 때 유용하다. GitHub 구현이 공개되어 있어 실무 적용이 가능하다.
- 대화형 LLM 서버에서 긴 대화 기록(수십만 토큰)을 처리하는 inference 노드의 KV-cache 메모리 절감
- 검색-연계(retrieval) 파이프라인에서 긴 문서 인덱스 유지 시 검색 품질을 유지하면서 KV 저장 비용 절감
- 온프레미스 GPU(예: H800)에 대형 모델을 단일 기기로 배포해 컨텍스트 윈도우를 확장하는 경우
- 장문 chain-of-thought 생성이 중요한 reasoning 서비스에서 키-측 로그릿 보존이 필요한 운영 환경
코드 공개 여부: 공개
코드 저장소 보기키워드
용어 해설
- RoPE
- — Transformer의 토큰 위치 정보를 2×2 회전 행렬 블록으로 표현하는 방식이다. 각 head의 d_h 차원을 두 원소 블록들로 분해해 상대위치 Δ에 따라 블록별 회전 R(Δθ_i)를 적용하므로, query-key 내적이 블록 단위 합으로 정확히 분해된다. 이 논문에서는 RoPE 블록 구조가 KV-cache quantization의 비트 할당 단위를 결정한다.
- TurboQuant-MSE
- — 로컬 벡터를 정규화하고 공통 직교 회전을 적용한 뒤 좌표별로 scalar quantize하고 반경을 복원하는 벡터 양자화 방식이다. b 비트에서 복원 MSE가 ||x||^2 C_TQ 4^{-b} 꼴로 감소하는 rate law를 제공하며, 본문에서는 이 4^{-b} 법칙을 비트 할당의 기반으로 사용한다.
- KV-cache
- — Auto-regressive decoding에서 이전 토큰마다 생성되는 key와 value 벡터들을 저장하는 구조이다. 컨텍스트 길이에 비례해 메모리와 대역폭을 점유하며, 긴 컨텍스트에서는 전체 추론 비용과 메모리 병목의 주된 원인이 된다. 본 논문은 이 저장소를 저비트로 압축하는 방식을 다룬다.
- Packed-Cache
- — 양자화된 K/V 코드를 비트-그룹(니블/바이트)으로 연속 저장하고, 런타임에 필요한 타일만 꺼내 디코딩해 사용하는 캐시 레이아웃이다. 디코딩 시 전체 fp16 KV를 메모리에 올리지 않으므로 긴 컨텍스트에서 메모리·대역폭 이점을 제공한다.
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.