본문 바로가기

LLM

Mac TurboQuant 실전 가이드 — 쓰기 전vs후 비교

반응형

Google이 TurboQuant 논문을 ICLR 2026에서 발표했어요. 근데 공식 코드는 아직 없어요. Q2 2026 출시 예정이에요.

그런데 논문 공개 48시간 만에 커뮤니티가 PyTorch 구현체를 만들어버렸고, 2주 만에 Mac에서 104B 모델을 돌리는 데까지 왔어요.

그중 Apple Silicon에 가장 최적화된 게 turboquant_plus예요. TheTom이라는 개발자가 만든 커뮤니티 구현체로, MLX 백엔드 지원, Sparse V 최적화, 레이어 보호 기능까지 추가된 버전이에요. 공식 구현체가 나오기 전까지 Mac 사용자에게 가장 실용적인 선택이에요.


설치

git clone https://github.com/TheTom/turboquant_plus
cd turboquant_plus
pip install -r requirements.txt
pip install mlx mlx-lm

쓰기 전 vs 후 — 한눈에 비교

32GB M3 Pro, Qwen2.5-32B 기준

TurboQuant 전 TurboQuant 후

최대 모델 크기 13B 32B
최대 컨텍스트 16K 64K
KV 캐시 메모리 8GB 1.7GB
디코딩 속도 기준 약 동일~약간 빠름
퍼플렉시티 3.89 3.97 (차이 미미)
품질 체감 기준 육안 구분 불가

실제로 뭐가 달라지나

전 — 32GB Mac에서 32B 모델 실행 시도

python -m mlx_lm.generate \
  --model Qwen/Qwen2.5-32B-Instruct \
  --prompt "긴 문서 분석해줘..." \
  --max-tokens 1024

# 결과:
# Error: Out of memory
# 또는 컨텍스트 4K로 강제 제한됨

후 — TurboQuant 적용

from turboquant_plus import TurboQuantKVCache
from mlx_lm import load, generate

model, tokenizer = load("Qwen/Qwen2.5-32B-Instruct")

kv_cache = TurboQuantKVCache(
    key_bits=3,
    value_bits=2,
    protected_layers=4,
    sparse_v=True
)

response = generate(
    model, tokenizer,
    prompt="긴 문서 분석해줘...",
    max_tokens=1024,
    kv_cache=kv_cache
)

# 결과:
# ✅ 정상 실행
# ✅ 64K 컨텍스트 가능
# ✅ 품질 FP16이랑 육안 구분 불가

메모리별 전/후 비교

16GB Mac

전: 7B, 8K 컨텍스트
후: 13B, 32K 컨텍스트

32GB Mac

전: 13B, 16K 컨텍스트
후: 32B, 64K 컨텍스트

64GB Mac

전: 32B, 32K 컨텍스트
후: 70B, 128K 컨텍스트 (책 한 권 통째로 넣기 가능)

128GB Mac (M5 Max)

전: 70B, 64K 컨텍스트
후: 104B, 128K 컨텍스트

품질 차이 직접 확인하는 법

# FP16 기준
python eval_perplexity.py \
  --model Qwen/Qwen2.5-7B-Instruct \
  --kv-format fp16
# → perplexity = 3.891

# TurboQuant 적용
python eval_perplexity.py \
  --model Qwen/Qwen2.5-7B-Instruct \
  --kv-format turbo3
# → perplexity = 3.972

차이 0.08이에요. 텍스트 봐도 어느 게 압축된 건지 구분 못 해요.


속도 차이

짧은 컨텍스트 (4K 이하):
→ FP16보다 살짝 느림 (압축 오버헤드)

긴 컨텍스트 (32K 이상):
→ FP16보다 빠름
→ sparse_v=True 켜면 128K에서 +22.8% 추가

짧은 대화엔 기본 설정, 긴 문서 처리할 때만 TurboQuant 켜면 돼요.


실전 추천 설정

# 일반용 (품질 우선)
kv_cache = TurboQuantKVCache(
    key_bits=4,
    value_bits=3,
    protected_layers=4,
    sparse_v=True
)

# 초장문용 (메모리 우선, 64K+)
kv_cache = TurboQuantKVCache(
    key_bits=3,
    value_bits=2,
    protected_layers=4,
    sparse_v=True
)

 

반응형