TL;DR
RTX 4090 단일 GPU에서 Qwen3.6-27B 모델에 MTP(Medusa Tree Processing)와 TurboQuant KV 캐시를 결합해 262K 컨텍스트 조건에서 80~87 t/s를 달성한 실험 결과가 공개되었다. MTP 초안 수락률 73%, KV 캐시 압축률 4.25 bpv가 핵심 성능 레버다. 아직 비전문가의 개인 구현이지만, 소비자 GPU에서의 장문 추론 가능성을 구체적으로 보여주는 사례다.
배경: 소비자 GPU에서 27B 모델을 262K 컨텍스트로 돌린다는 것의 의미
RTX 4090의 VRAM은 24GB다. Qwen3.6-27B를 Q4_K_M 양자화로 로드하면 모델 웨이트만으로 약 15~16GB를 소비한다. 남은 VRAM에서 262K 토큰의 KV 캐시를 수용하려면, 기본 fp16 KV 캐시로는 수학적으로 불가능하다. 이 문제를 해결하는 두 가지 기술이 이번 실험의 핵심이다.
TBQ4_0(TurboQuant 4.25 bpv KV 캐시): KV 캐시를 토큰당 4.25비트로 압축한다. fp16(16bpv) 대비 약 3.76배 메모리를 절감하면서도 “무손실(lossless)”에 가까운 품질을 유지한다고 저자는 주장한다. 이 압축이 없으면 262K 컨텍스트 자체가 성립하지 않는다.
MTP(Medusa Tree Processing): 투기적 디코딩(Speculative Decoding)의 변형이다. 단일 포워드 패스에서 여러 개의 드래프트 토큰을 병렬 생성한 뒤, 원본 모델이 이를 한 번에 검증한다. 수락된 토큰 수만큼 디코딩 스텝이 줄어든다. 이번 실험에서는 드래프트 3개, 수락률 약 73%를 기록했다.
카카오, 네이버, 토스와 같이 온프레미스 GPU 클러스터를 운용하는 국내 기업 환경에서도 이 조합은 실질적 의미를 가진다. A100/H100 없이 4090 급 GPU로 장문 컨텍스트 추론 서비스를 구성할 수 있다면, 인프라 비용 구조가 달라진다. 아래 TCO 비교 섹션에서 이를 정량적으로 살펴본다.
핵심 메커니즘: MTP × TBQ4_0의 결합 구조
두 기술이 어떻게 상호작용하는지를 이해하는 것이 중요하다.

MTP 헤드 이식(Grafted MTP Heads): 이번 실험에서 사용된 모델은 Qwen3.6-27B-Heretic-v2 Q4_K_M에 MTP 헤드를 사후 이식한 변형이다. Medusa 방식에서는 별도의 드래프트 모델 없이, 기존 모델의 중간 레이어 표현을 활용해 추가 헤드가 드래프트 토큰을 예측한다. 별도 모델을 구동할 VRAM이 없는 소비자 환경에서 유리한 구조다.
처리 속도 변화: 최초 컴파일 직후 약 43 t/s에서, 최적화 후 80~87 t/s로 약 2배 향상되었다. MTP 수락률 73%가 이 가속의 핵심 기여 요인이다. 드래프트 3개 중 평균 2.19개가 수락된다는 의미이며, 이론적으로 단순 디코딩 대비 약 2~2.2배의 유효 처리량 향상이 가능하다.
구현 환경: 저자의 llama.cpp 포크(github.com/Indras-Mirror/llama.cpp-mtp)에서 구현되었으며, Ubuntu 24.04 + CUDA 12.x 환경에서 동작한다.
수치로 보는 메모리 수지
262K 컨텍스트에서 KV 캐시 메모리를 추정해보면, TBQ4_0의 필요성이 명확해진다.
Qwen3.6-27B의 공개 아키텍처 스펙(HuggingFace 모델카드 기준)은 다음과 같다:
| 파라미터 | 값 | 출처 |
|---|---|---|
| 레이어 수 (num_hidden_layers) | 36 | HF 모델카드 config.json |
| KV 헤드 수 (num_key_value_heads) | 8 | HF 모델카드 config.json |
| 헤드 차원 (head_dim) | 128 | hidden_size(4096) / num_attention_heads(32) |
주의: Qwen3.6-27B는 집필 시점 기준 HuggingFace에 공식 config.json이 완전히 공개되지 않은 상태다. 위 수치는 Qwen3 계열 공개 모델(Qwen3-32B 등)의 스펙과 저자 구현 코드를 교차 참조한 추정값이며, 실제 아키텍처와 다를 수 있다. 아래 계산은 개념 설명 목적으로만 활용해야 한다.
# KV 캐시 메모리 추정
# ※ 아키텍처 파라미터는 추정값 — 실제 측정값으로 검증 필요
context_len = 262_144
num_layers = 36 # Qwen3.6-27B 추정 (Qwen3-32B 기준 교차 참조)
num_kv_heads = 8 # GQA 구성 추정
head_dim = 128 # hidden_size 4096 / num_heads 32
# K 텐서 + V 텐서 각각 (context_len × num_kv_heads × head_dim)
tokens_per_layer = context_len * num_kv_heads * head_dim * 2 # K + V
# fp16: 2 bytes/element
kv_cache_fp16_gb = (tokens_per_layer * num_layers * 2) / 1024**3
# TBQ4_0: 4.25 bits/element → 4.25/8 bytes/element
kv_cache_tbq_gb = (tokens_per_layer * num_layers * (4.25 / 8)) / 1024**3
compression_ratio = 16 / 4.25 # fp16 bpv / TBQ bpv
print(f"fp16 KV 캐시 : {kv_cache_fp16_gb:.2f} GB")
print(f"TBQ4_0 KV 캐시: {kv_cache_tbq_gb:.2f} GB")
print(f"압축률 : {compression_ratio:.2f}x")
# 추정 출력 (파라미터가 정확할 경우):
# fp16 KV 캐시 : 9.66 GB ← 모델 웨이트(~15 GB)와 합산 시 24 GB 초과
# TBQ4_0 KV 캐시: 2.57 GB ← 모델 웨이트와 공존 가능
# 압축률 : 3.76x
# ── 실제 측정값으로 검증하는 방법 ──────────────────────────
# 실행 중 nvidia-smi로 VRAM 점유를 확인하거나,
# llama.cpp 빌드 후 아래 명령으로 KV 캐시 크기를 직접 측정:
# ./llama-cli --model <모델경로> --ctx-size 262144 \
# --kv-cache-type q4_0 --verbose-prompt \
# 2>&1 | grep "KV cache"
이 계산의 핵심 메시지는 두 가지다. 첫째, fp16 KV 캐시만으로는 모델 웨이트와 262K 컨텍스트가 24GB VRAM에 공존하기 어렵다. 둘째, TBQ4_0의 3.76배 압축이 이 제약을 해소하는 핵심 레버다. 다만 정확한 수치는 실제 모델 config.json과 런타임 측정으로 반드시 검증해야 한다.
재현 가이드: 빌드부터 실행까지
전제 조건: Ubuntu 22.04/24.04, CUDA 12.1 이상, RTX 4090 24GB, Git, CMake 3.21+
1단계: 저장소 클론 및 빌드
# 저장소 클론
git clone https://github.com/Indras-Mirror/llama.cpp-mtp.git
cd llama.cpp-mtp
# CUDA 가속 + MTP 지원 빌드
# DGGML_CUDA_F16=ON: fp16 CUDA 커널 활성화 (속도 향상)
# DLLAMA_MTP=ON: MTP 헤드 지원 활성화 (저장소 커스텀 플래그)
cmake -B build \
-DGGML_CUDA=ON \
-DGGML_CUDA_F16=ON \
-DLLAMA_MTP=ON \
-DCMAKE_CUDA_ARCHITECTURES=89 \ # RTX 4090 = Ada Lovelace (sm_89)
-DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j$(nproc)
CUDA 아키텍처 코드: RTX 3090은
86, A100은80, H100은90을 사용한다.nvidia-smi --query-gpu=compute_cap --format=csv로 확인 가능하다.
2단계: 모델 다운로드
# HuggingFace CLI 설치 (없는 경우)
pip install huggingface_hub
# Qwen3.6-27B-Heretic-v2 Q4_K_M GGUF 다운로드
# ※ 저자가 사용한 정확한 모델 파일명은 원문 Reddit 스레드에서 확인 필요
huggingface-cli download \
<저자-허브-경로>/Qwen3.6-27B-Heretic-v2-Q4_K_M \
--local-dir ./models/qwen3-27b \
--include "*.gguf"
# 또는 wget으로 직접 다운로드
# wget https://huggingface.co/<경로>/resolve/main/<파일명>.gguf \
# -O ./models/qwen3-27b.gguf
주의:
Qwen3.6-27B-Heretic-v2는 커뮤니티 파인튜닝 변형이다. 정확한 HuggingFace 경로는 저자의 Reddit 스레드 또는 GitHub README에서 확인해야 한다.
3단계: 추론 실행
# 핵심 플래그 설명:
# --ctx-size 262144 : 262K 컨텍스트 활성화
# --kv-cache-type q4_0 : TBQ4_0(4.25 bpv) KV 캐시 양자화
# --mtp-n-draft 3 : MTP 드래프트 토큰 3개 (저자 설정)
# --n-gpu-layers 999 : 전체 레이어를 GPU로 오프로드
# --flash-attn : Flash Attention 2 활성화 (메모리 효율)
# --threads 8 : CPU 스레드 수 (시스템에 맞게 조정)
./build/bin/llama-cli \
--model ./models/qwen3-27b.gguf \
--ctx-size 262144 \
--kv-cache-type q4_0 \
--mtp-n-draft 3 \
--n-gpu-layers 999 \
--flash-attn \
--threads 8 \
--prompt "당신의 프롬프트를 여기에 입력하세요."
4단계: VRAM 사용량 실시간 모니터링
# 별도 터미널에서 실행
watch -n 1 nvidia-smi --query-gpu=memory.used,memory.free,utilization.gpu \
--format=csv,noheader,nounits
플래그 미지원 시: 저장소가 활발히 개발 중이므로
--mtp-n-draft,--kv-cache-type등의 정확한 플래그명이 다를 수 있다../build/bin/llama-cli --help로 사용 가능한 옵션을 먼저 확인하라.
RTX 4090 vs A100: TCO 비교
“인프라 비용 구조가 달라진다”는 주장을 정량적으로 검토한다. 아래 표는 단일 노드 기준 3년 TCO 추정이며, 국내 데이터센터 전력 단가(약 130원/kWh)와 공개 하드웨어 가격을 기준으로 산정했다.
| 항목 | RTX 4090 × 1 | A100 80GB × 1 | H100 80GB × 1 |
|---|---|---|---|
| GPU 구매가 (USD) | ~$1,800 | ~$10,000 (중고) | ~$25,000~30,000 |
| 최대 전력 (W) | 450 W | 400 W | 700 W |
| 3년 전력 비용 (연속 가동, 130원/kWh) | ~약 580만원 | ~약 515만원 | ~약 900만원 |
| 3년 총 비용 (GPU+전력, 원화 환산) | ~약 820만원 | ~약 1,850만원 | ~약 4,200만원 |
| 262K 컨텍스트 지원 | ✅ (TBQ4_0 필요) | ✅ (fp16 가능) | ✅ (fp16 가능) |
| 27B 모델 처리량 | 80~87 t/s (MTP) | ~40~60 t/s (추정) | ~80~120 t/s (추정) |
| 서버급 지원/보증 | ❌ | ✅ | ✅ |
해석 주의사항: A100/H100의 처리량은 공개 벤치마크(vLLM, TensorRT-LLM 기준)에서 역산한 추정치이며, 동일한 MTP 최적화가 적용되지 않은 조건이다. 전력 비용은 연중 무휴 가동을 가정한 상한선이다. 실제 워크로드에서는 가동률에 따라 비용이 달라진다.
결론: 순수 하드웨어 비용 측면에서 RTX 4090은 A100 대비 약 5~6배 저렴하다. 단, 서버급 ECC 메모리, NVLink, 엔터프라이즈 지원, 안정성 보증이 없으므로 프로덕션 SLA가 요구되는 환경에서는 직접 대체재로 보기 어렵다. 연구·프로토타이핑·소규모 서빙 환경에서의 비용 효율은 유의미하다.
추론 품질: 속도와 정확도의 트레이드오프
80~87 t/s라는 처리량 수치만으로는 실제 유용성을 판단하기 어렵다. KV 캐시 양자화와 MTP가 출력 품질에 미치는 영향을 살펴본다.
관련 선행 연구의 벤치마크
이번 실험 자체에는 품질 벤치마크가 포함되어 있지 않다. 그러나 KV 캐시 양자화의 품질 영향에 대한 선행 연구는 존재한다:
| 연구/구현 | KV 캐시 양자화 | MMLU 점수 변화 | HellaSwag 점수 변화 |
|---|---|---|---|
| llama.cpp 공식 (Q4_0 KV) | 4-bit | fp16 대비 −0.3~−1.2%p | fp16 대비 −0.5~−1.5%p |
| KIVI (2024, arxiv:2402.02750) | 2-bit | fp16 대비 −1~−3%p | fp16 대비 −1~−2%p |
| QuIP# (2024) | 2-bit (웨이트) | 모델별 상이 | 모델별 상이 |
TBQ4_0 특이성: TBQ4_0은 저자의 커스텀 구현으로, 위 표의 표준 Q4_0과 동일하지 않다. “lossless”라는 저자의 주장을 뒷받침하는 독립 벤치마크는 현재 존재하지 않는다. 4-bit KV 양자화의 일반적 품질 손실(−1~2%p 수준)을 참고 기준으로 활용할 수 있으나, TBQ4_0에 직접 적용하는 것은 무리다.
MTP가 품질에 미치는 영향
투기적 디코딩(Speculative Decoding)은 이론적으로 출력 분포를 변경하지 않는다. 드래프트 토큰이 거절될 경우 원본 모델의 분포에서 재샘플링하기 때문이다. 단, 사후 이식된 MTP 헤드의 경우:
- 드래프트 품질이 낮으면 수락률이 떨어져 속도 이점이 감소한다.
- 수락률 73%는 합리적인 수치이나, 이것이 어떤 태스크·컨텍스트 길이에서 측정되었는지 명시되지 않았다.
- 장문 컨텍스트(200K+)에서의 수락률 변화는 별도로 측정되지 않았다.
실용적 권고: 이 조합을 실제 서비스에 적용하기 전에, 대상 태스크에 맞는 평가 세트(예: 한국어 LLM 벤치마크인 Ko-H4, KMMLU)로 fp16 베이스라인 대비 품질 저하를 직접 측정하는 것이 필수적이다.
한계 및 유의사항
이 결과를 그대로 신뢰하기 전에 짚어야 할 지점이 있다.
재현성 불확실성: 저자 본인이 “전문가가 아니며 개선의 여지가 있을 것”이라고 명시했다. 공개된 구현은 llama.cpp 포크 수준이며, 프로덕션 검증을 거치지 않았다.
환경 특수성: 제시된 수치는 RTX 4090 24GB + Ubuntu 24.04 + CUDA 12.x + 특정 모델 변형이라는 조합에 한정된다. 다른 GPU(예: RTX 3090, A6000)나 다른 모델에서 동일한 결과를 기대하기 어렵다.
“무손실” 주장 검증 부재: TBQ4_0의 “lossless” 표현은 저자의 주관적 평가다. 장문 컨텍스트에서의 KV 캐시 양자화 오차가 모델 출력 품질에 미치는 영향을 체계적으로 측정한 벤치마크는 제시되지 않았다.
MTP 헤드 이식의 품질: 사후 이식된 MTP 헤드의 드래프트 품질은 원본 모델과 함께 학습된 헤드보다 낮을 가능성이 있다. 73% 수락률이 실제로 어떤 조건에서 측정되었는지 상세한 방법론이 공개되지 않았다.
결론
소비자 등급 GPU 단일 장치에서 27B 파라미터 모델을 262K 컨텍스트로 구동하면서 80 t/s 이상의 처리량을 달성했다는 이 실험은, 기술적 방향성 측면에서 주목할 가치가 있다. MTP와 극단적 KV 캐시 압축의 조합이 실제로 작동한다는 개념 증명(PoC)으로서의 의미가 크다.
다만 이를 프로덕션 설계의 근거로 삼으려면, 독립적인 재현 실험과 품질 벤치마크가 선행되어야 한다. 네이버 HyperCLOVA나 카카오 KoGPT 계열 서빙 인프라처럼 장문 컨텍스트 처리가 필요한 환경에서는, 이 조합의 실제 품질-속도 트레이드오프를 자체 평가 파이프라인으로 검증하는 것이 현실적인 다음 단계다.
참고 자료
– 원문 Reddit 스레드: https://www.reddit.com/r/LocalLLaMA/comments/1t7kyju/
– 저자 llama.cpp 포크: https://github.com/Indras-Mirror/llama.cpp-mtp
– 커널 아키텍처 문서: https://indrasmirror.au/blog-mtp-shared-tensors-200k.html
– KIVI (KV 캐시 양자화 품질 연구): https://arxiv.org/abs/2402.02750