콘텐츠로 이동

Apple Silicon에서의 TurboQuant Benchmark

TurboQuant(Google Research, ICLR 2026)는 LLM의 KV cache를 품질 저하 없이 5배 압축하여, 64GB RAM의 Mac Mini에서 70B 모델 실행을 가능하게 합니다. 다음은 asiai를 사용하여 실제 하드웨어에서 측정한 benchmark 결과입니다.

결과

Llama-3.1-70B-Instruct Q4_K_M, Mac Mini M4 Pro 64GB 기준

지표
Throughput 6.3 tok/s (안정적, 95% 신뢰구간: 6.3-6.3)
TTFT 196 ms (중앙값)
GPU Power 23.8 W
Model VRAM 44.1 GB (40 GB 가중치 + 4 GB KV turbo3)
Context 32,768 tokens
GPU Offload Metal에 81/81 레이어
Thermal 정상 (스로틀링 없음)
Stability 안정적 (3회 실행 표준편차 0.04 tok/s)

KV cache 구성: keys는 q8_0(고정밀도), values는 turbo3(3-bit, 5배 압축).

TurboQuant 적용 전후 비교

TurboQuant 미적용 TurboQuant 적용 (turbo3)
KV cache (32K ctx) ~20 GB (q8_0) ~4 GB (turbo3)
필요 RAM 총량 60+ GB (64GB에서 OOM) 44 GB (64GB에 수용 가능)
64GB에서 70B 실행 가능? 불가 가능
품질 Baseline -1% PPL (무시할 수준)
NIAH retrieval 100% 100%

TurboQuant란 무엇입니까?

TurboQuant는 Google Research의 KV cache 압축 알고리즘으로, ICLR 2026에서 발표되었습니다. LLM 추론 중 KV cache는 중간 어텐션 상태를 저장하며 컨텍스트 길이에 비례하여 선형적으로 증가합니다. FP16에서 128K 컨텍스트의 70B 모델의 경우, 이 cache만으로도 20-40 GB의 RAM을 소비할 수 있습니다.

TurboQuant는 다음 기술을 사용하여 cache를 값당 3 bit로 압축합니다:

  • 랜덤 회전 (Walsh-Hadamard 변환)으로 데이터를 가우시안화
  • 최적 스칼라 양자화 (PolarQuant)로 Shannon 한계에 근접
  • QJL (Quantized Johnson-Lindenstrauss)로 내적 보존

결과: 메모리 5배 감소, fine-tuning 불필요, 품질 저하 거의 제로입니다.

설정 가이드

하드웨어

  • Mac Mini M4 Pro, 64 GB 유니파이드 메모리 ($2,700)
  • 32+ GB Apple Silicon Mac이면 작동합니다 (모델 크기를 적절히 조정하십시오)

TurboQuant llama.cpp 설치

# 빌드 도구 설치
brew install cmake

# TurboQuant fork 클론
git clone https://github.com/TheTom/llama-cpp-turboquant.git
cd llama-cpp-turboquant
git checkout feature/turboquant-kv-cache

# Metal(Apple Silicon GPU)로 빌드
cmake -B build -DGGML_METAL=ON -DGGML_METAL_EMBED_LIBRARY=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(sysctl -n hw.ncpu)

모델 다운로드

# Llama 3.1 70B Q4_K_M (~40 GB)
curl -L -o llama-3.1-70b-q4_k_m.gguf \
  "https://huggingface.co/bartowski/Meta-Llama-3.1-70B-Instruct-GGUF/resolve/main/Meta-Llama-3.1-70B-Instruct-Q4_K_M.gguf"

macOS GPU 메모리 제한 상향

sudo sysctl iogpu.wired_limit_mb=61440

서버 실행

./build/bin/llama-server \
  -m llama-3.1-70b-q4_k_m.gguf \
  --cache-type-k q8_0 --cache-type-v turbo3 \
  -c 32768 \
  --port 8081 \
  --host 0.0.0.0 \
  -fa 1 \
  -ngl 99 \
  -t 10 \
  --no-mmap \
  --chat-template chatml

구성 설명

파라미터 이유
--cache-type-k q8_0 Keys를 8-bit로 Keys는 압축에 민감합니다
--cache-type-v turbo3 Values를 3-bit로 Values는 극단적 압축(5배)을 견딥니다
-fa 1 Flash Attention TurboQuant에 필수입니다
-ngl 99 완전 GPU offload 전체 81 레이어를 Metal에 배치
-t 10 10 스레드 M4 Pro는 10개의 퍼포먼스 코어를 탑재
--no-mmap 메모리 매핑 미사용 부팅 시 전부 로드하여 page faults 방지
--chat-template chatml ChatML 포맷 이 fork와의 호환성이 최상

asiai로 Benchmark 실행

pip install asiai
asiai detect --url http://localhost:8081
asiai bench --engines llamacpp --prompts code --runs 3 --kv-cache turbo3 --card

TurboQuant로 64GB에 수용 가능한 모델

모델 가중치 (Q4_K_M) KV Cache (32K, turbo3) 합계 상태
Llama 3.1 70B 40 GB ~4 GB 44 GB 테스트 완료: 6.3 tok/s
Qwen2.5 72B 40 GB ~4 GB 44 GB 작동 예상
Llama 70B 128K ctx 40 GB ~16 GB (turbo3) 56 GB 빠듯하지만 가능
Command-R+ 104B 58 GB ~4 GB 62 GB 매우 빠듯함

FAQ

64GB RAM Mac에서 70B 모델을 실행할 수 있습니까?

네, TurboQuant를 사용하면 가능합니다. KV cache가 5배 압축되므로 Llama 70B Q4_K_M(40GB 가중치)이 32K 컨텍스트에서 64GB에 여유 있게 들어갑니다. Mac Mini M4 Pro에서 6.3 tok/s를 측정했습니다.

TurboQuant가 품질을 저하시킵니까?

측정 가능한 품질 저하는 없습니다. q8_0 대비 퍼플렉시티 증가가 1% 미만이며, Needle-in-a-Haystack 검색은 32K 컨텍스트 전체에서 100% 점수를 기록합니다.

어떤 TurboQuant 포맷을 사용해야 합니까?

비대칭: keys에 q8_0 + values에 turbo3. Keys는 압축에 민감합니다(모든 품질 저하는 K 압축에서 비롯됩니다). Values는 2-3 bit까지 압축해도 어텐션 품질에 전혀 영향이 없습니다.

TurboQuant가 MLX에서 작동합니까?

커뮤니티 구현이 있습니다(turboquant-mlx), 그러나 llama.cpp fork만큼 성숙하지 않습니다. 프로덕션 환경에서는 TheTom/llama-cpp-turboquant를 권장합니다.

표준 llama.cpp와 비교하면 어떻습니까?

디코드 속도는 q8_0의 ~0.9배(토큰당 약간 느림)이지만, 진정한 이점은 이전에는 수용할 수 없었던 모델과 컨텍스트를 실행할 수 있다는 것입니다. 메모리 대역폭 부하 감소로 인해 긴 컨텍스트에서의 prefill은 실제로 더 빠를 수 있습니다.

참고 자료