로컬 AI 인프라 노트 (8/15) — 로컬 LLM 가속·양자화 심화

같은 모델, 같은 하드웨어인데 누군가는 200 tok/s를 뽑고 누군가는 30 tok/s에 그친다. 차이는 알고리즘이다.

2026년 1분기에 세 가지 기술이 LLM 추론 속도의 한계를 다시 그었다. DFlash (Z Lab, Feb 2026 — 블록 디퓨전 speculative decoding), DDTree (Ringel & Romano, Apr 2026 — 트리 어텐션 검증), TurboQuant (Google Research, ICLR 2026 — 3-bit KV 캐시 무손실 양자화). 셋은 서로 간섭하지 않는다 — 동시에 쓰면 누적 효과가 난다.

이 글은 세 기술을 1차 자료(arXiv, GitHub, 공식 발표)로 정리하고, prefill/decode/KV cache 기초부터 실전 적용까지 다룬다. 개발자 대상이지만, "왜 M4 Pro가 base M4보다 추론이 두 배 빠른가" 같은 질문에 답이 될 것이다.

핵심 요약

  • Prefill = compute-bound, Decode = memory-bandwidth-bound. 둘은 다른 게임이고 최적화 대상도 다르다.
  • DFlash: 블록 디퓨전으로 K개 토큰을 한 번에 추측 → 6× 속도, EAGLE-3 대비 2.5×.
  • DDTree: 디퓨전 드래프트 분포로 트리 구성 → MATH 7.5×, HumanEval 8.2×.
  • TurboQuant: 랜덤 회전 + QJL → KV 캐시 3.5-bit 무손실. H100에서 8×.
  • 셋은 직교적. 이론적 누적 8~10×.

1. 기초 다시 — Prefill과 Decode는 다른 게임

LLM 추론은 두 단계다. 많은 글이 이걸 같은 것으로 다루는데, 둘은 본질이 다르다.

Prefill — 입력 처리

프롬프트 전체를 병렬로 처리한다. 모든 입력 토큰의 K(Key), V(Value)를 한 번에 계산하고 KV cache를 만든다. 행렬곱이 거대하기 때문에 GPU 텐서 코어(또는 Apple M5의 Neural Accelerators)를 최대로 사용한다 — 연산이 병목(compute-bound).

H100에서 10K 토큰 프롬프트 prefill: 200~400ms. M5에서 14B dense 모델: <10초. 30B MoE: <3초.

이 단계의 지표는 TTFT (Time To First Token).

Decode — 출력 생성

토큰을 한 개씩 순차적으로 만든다. 매 단계마다 KV cache 전체와 모델 가중치 전체를 메모리에서 읽어야 한다. 연산은 작지만 메모리 접근이 한계 — 메모리 대역폭이 병목(memory-bandwidth-bound).

이 단계의 지표는 TPOT (Time Per Output Token), 또는 그 역수인 tok/s. 일반적으로 30~150 tok/s.

KV cache의 역할

KV cache가 없으면 토큰 t를 만들 때 1~t-1 모든 attention을 다시 계산해야 한다 — O(n²). 캐시가 있으면 새 토큰의 K, V만 추가 → O(n). 그래서 LLM 추론에서 KV cache는 없으면 안 되는 자료구조다.

문제는 크기다. 70B 모델 + 200K 컨텍스트 = KV cache 40~80 GB. 모델 가중치보다 클 수 있다.

메모리 대역폭이 결정한다 — Apple Silicon 비교

Bandwidth
M3 base 100 GB/s
M4 base 120 GB/s
M5 base 153 GB/s
M3 Pro 150 GB/s
M4 Pro 273 GB/s (M4 base 대비 2.3×)
M3 Max 400 GB/s
M4 Max 546 GB/s
M5 Max ~600 GB/s

M4 Pro가 base M4 대비 추론 속도 2배 가까이 빠른 이유는 메모리 대역폭이 2.3배이기 때문이다. Decode가 메모리 바운드이니 당연한 결과.

같은 양의 KV cache를 더 빠르게 읽을 수 있으면 → 더 많은 토큰을 만들 수 있다. 이게 핵심.


2. DFlash — 블록 디퓨전 Speculative Decoding

Speculative Decoding 자체부터

일반 decode는 토큰 1개를 만들고 검증하고 다음 토큰. Speculative은: 1. Draft 모델(작은 모델)이 K개 토큰을 추측 2. Target 모델(큰 모델)이 K개를 한 번에 검증 3. 일치 prefix까지 수락, 불일치부터 재생성

큰 모델 forward pass 1번으로 K개 토큰 생성 가능 — 이론 최대 K배.

EAGLE-3의 한계

EAGLE-3는 draft 모델도 autoregressive다. Draft 자체가 또 한 번 병목이 된다.

DFlash의 해결책

Draft 모델을 block diffusion으로 만들어 K개 토큰을 한 forward pass에 병렬 생성.

기술 세부: - Block diffusion drafter: K=4~8 토큰을 한 번에 노이즈 제거 - Feature extraction: Target 모델 깊은 레이어에서 context features 추출 - KV injection: Draft 모델의 모든 레이어에 target features 주입 (EAGLE-3는 단일 레이어만)

검증된 성능

  • Qwen3-8B (greedy): 6× lossless 가속
  • EAGLE-3 대비: 2.5× 빠름
  • Qwen3.6-27B-DFlash on RTX 3090: 207 tok/s @ 256K context
  • GSM8K, MATH-500, AIME24/25, HumanEval, chat 모두 일관된 가속
  • Temperature sampling, reasoning mode에서도 가속 유지

가용성

  • Paper: arXiv:2602.06036 (Z Lab — Jian Chen, Yesheng Liang, Zhijian Liu, Feb 2026)
  • Code: github.com/z-lab/dflash
  • Models: Hugging Face z-lab/dflash collection (Qwen3-4B/8B, Qwen3-Coder-30B-A3B, LLaMA-3.1-8B 변형)
  • 통합: SGLang (production), Transformers (실험), vLLM (진행), llama.cpp (커뮤니티 논의)

3. DDTree — 트리로 확장한 디퓨전 드래프트

DFlash가 버리는 정보

DFlash는 단일 시퀀스를 빠르게 만든다. 하지만 draft 모델은 여러 가능성에 대한 분포를 알고 있다. 그 분포 정보를 그냥 버린다.

DDTree의 아이디어

Draft 모델의 per-position 확률 분포를 트리로 확장하고, target 모델이 트리 전체를 한 forward pass에서 tree attention으로 검증.

4단계 동작

  1. Draft 모델이 다음 블록의 per-position distribution 생성
  2. 노드 예산 내에서 트리 구성 (가능성 높은 가지 우선)
  3. Target 모델이 tree attention으로 한 번에 트리 전체 검증
  4. 매칭 가지 따라 walk → 불일치 지점부터 재생성

검증된 성능

벤치마크 가속
MATH-500 7.5×
HumanEval (T=0.0) 8.2×
GSM8K 6.6×
AIME'24 7.3×
AIME'25 7.2×
MBPP 6.4×
LiveCode 6.8×
SWE Lite 4.3×
MT 4.2×
Alpaca 3.3×

→ 수학·코드 같은 결정적 작업에서 효과 극대 (가지가 빨리 수렴)

트레이드오프

노드 예산을 키우면 acceptance length가 늘지만, 검증 비용이 dominant해지면 속도 plateau. 작업별 calibration 필요.

가용성


4. TurboQuant — KV Cache를 3-Bit로

왜 KV cache 양자화가 중요한가

70B 모델 + 200K context = KV cache 40~80 GB. 모델 가중치만 줄여서는 안 된다. KV cache가 메모리 대역폭과 용량을 같이 잡아먹기 때문에 KV cache 자체를 압축해야 한다.

기존 양자화의 한계

  • INT8/FP8: 무손실에 가깝지만 2배 압축이 한계
  • INT4/FP4: 4배 압축이지만 정확도 1~3% 손실
  • GPTQ류 vector quantization: 학습 데이터 기반 calibration 필요

TurboQuant의 접근

입력 벡터에 랜덤 회전(random rotation)을 적용해서 모든 좌표가 비슷한 분포(베타분포)를 갖도록 만들고, 표준 스칼라 양자화기로 균일하게 처리.

알고리즘 2단계

  1. 회전 + 스칼라 양자화: 입력 → 임의 회전 → 좌표별 MSE-최적 스칼라 양자화
  2. QJL error correction: 1-bit 추가로 Quantized Johnson-Lindenstrauss 변환 → 잔차 보정 + bias 제거

검증된 성능 (논문)

  • 3.5비트/채널: 절대적 품질 중립 (no degradation)
  • 2.5비트/채널: 한계적 품질 저하만
  • 3-bit KV cache: training-free, data-oblivious에서 무손실
  • 4-bit on H100: 32-bit unquantized keys 대비
  • 정보이론 하한 대비 2.7× 차이만 (이론 최적에 매우 근접)

TurboQuant+ — Apple Silicon 변형

기본 TurboQuant + PolarQuant + Walsh-Hadamard rotation. Apple Silicon 최적화.

  • 3.8~6.4× 압축
  • M5 Max 128K context: q8_0 prefill 동급, decode 0.9× (사실상 동등)

학습 불필요

이게 진짜 차별점이다.

"TurboQuant can quantize the key-value cache to just 3 bits without requiring training or fine-tuning and causing any compromise in model accuracy."

추론 시점에 적용. 모델 학습 다시 안 한다.

가용성


5. 셋은 직교적이다 — 동시 적용 가능

공격하는 대상이 다르다

기술 공격 대상 단계
DFlash / DDTree Decode 토큰 수 (1 → K) 추론 알고리즘
TurboQuant KV cache 메모리 (FP16 → 3-bit) 메모리 표현
MLX UMA CPU↔GPU 복사 제거 하드웨어 가속

서로 간섭하지 않는다. 동시에 켤 수 있다.

이론적 누적 효과 (어림)

기준: Qwen3.6-27B on M4 Max 64GB, FP16, 일반 decode.

적용 tok/s (예상)
Baseline (llama.cpp) ~30
+ MLX ~50 (1.6×)
+ TurboQuant 3-bit ~70 (1.4× 추가, KV 메모리 압박 감소)
+ DFlash speculative ~150 (2.1× 추가)
+ DDTree (코드/수학 한정) ~250 (1.7× 추가)

→ 이론적으로 8~10× 누적 가능. 단, 실측은 작업·모델·하드웨어 의존이고, 위 표는 이론 어림이지 실측이 아니다.

작업별 권장

  • 챗·요약 (스트리밍 짧음): DFlash 단독으로 충분
  • 코딩·수학 (트리 분기 많음): DDTree
  • 긴 컨텍스트 (RAG, 100K+): TurboQuant 필수
  • 에이전트 (반복 시스템 프롬프트): oMLX SSD 캐시 + TurboQuant

6. 도구별 통합 현황 (2026-04-29 기준)

도구 DFlash DDTree TurboQuant
SGLang ✅ Production 통합 진행 실험적
vLLM 진행 중 통합 진행 ✅ (0xSero 분기)
Transformers 실험적
llama.cpp 커뮤니티 논의 부분적 (PolarQuant)
MLX (Apple) 미통합 미통합 TurboQuant+ 지원
oMLX 미통합 미통합 통합 검토
Ollama 0.19 미통합 NVFP4 (다른 계열)

권장 행동

  • NVIDIA GPU 보유 (RTX 3090/4090, H100): DFlash + TurboQuant 즉시 시도 가능 (vLLM, SGLang)
  • Apple Silicon (M3/M4/M5): TurboQuant+ 직접 시도 (tonbistudio/turboquant-pytorch), DFlash는 MLX 포팅 대기
  • Mac + 단순 사용: oMLX 기본값 사용. 향후 통합 모니터링.

7. 한계와 주의

"8배 빨라진다"는 착시

위의 8~10× 누적은 이론이다. 실제로는: - DFlash 가속률은 모델·하드웨어·temperature에 따라 1.5~6× 범위 - TurboQuant 3-bit가 완전 무손실은 3.5비트 기준. 3비트는 거의 무손실이지만 일부 작업 미세 저하 가능 - 도구별 통합 미완료 → 현재는 단계적 도입만 가능

Apple Silicon 한정 관점

oMLX/MLX 사용자는 지금 당장 가속 받을 수 있는 게 TurboQuant+ 정도다. DFlash·DDTree의 MLX 포팅은 진행 중이지만 시점 미확정.

보안/정확도 절충

3-bit 양자화는 이론적으로 정확도가 보존되지만, 의료·금융 같은 도메인에서는 추가 검증 필수. 일반 챗·코딩은 영향 거의 없음.


정리

세 기술의 핵심 정수:

기술 한 문장 가속
DFlash 블록 디퓨전으로 K개 토큰 동시 추측
DDTree 디퓨전 분포로 트리 구성 + tree attention 7.5× (수학)
TurboQuant 랜덤 회전 + QJL → 3-bit KV cache 8× (H100)

핵심 한 문장: "Prefill은 연산, Decode는 메모리. 세 기술은 메모리 측에서 직교적으로 공격한다."

오늘 당장 적용할 수 있는 건 NVIDIA GPU 보유자 한정 — DFlash + TurboQuant. Apple Silicon 사용자는 6~8주 후 MLX 통합이 끝나면 동일 효과를 누릴 수 있을 것이다. 그동안은 oMLX 기본값으로 시작하고, vLLM·SGLang 환경에서 테스트한다.


참고 자료 (1차 출처)

  • DFlash 논문: arxiv.org/abs/2602.06036, Z Lab
  • DDTree 논문: arxiv.org/abs/2604.12989, GitHub liranringel/ddtree
  • TurboQuant 논문: arxiv.org/abs/2504.19874, Google Research blog
  • Apple ML Research M5: machinelearning.apple.com/research/exploring-llms-mlx-m5
  • Prefill/Decode 기초: morphllm.com/llm-inference, morphllm.com/kv-cache-explained

시리즈 전체 안내: 시리즈 목차

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"