하드웨어: RTX 5090 | 모델: Qwen3.6-27B | 프레임워크: BeeLlama.cpp
전체 벤치마크 스크립트, 원시 데이터(raw data), 설정(config) 및 생성된 결과물(artifacts)은 요청 시 제공 가능합니다 — 아래에 DM을 보내거나 댓글을 남겨주세요. 지난 일주일 동안 Qwen3.6-27B 모델에서 DFlash Speculative Decoding (추측적 디코딩)과 KV Cache Compression (KV 캐시 압축) 전략을 결합하여 벤치마킹을 진행했습니다. 결과가 매우 놀라워 로컬 추론 (local inference)을 실행하는 분들과 공유하고자 합니다.
설정
GPU: NVIDIA RTX 5090 (32GB VRAM)
모델: Qwen3.6-27B (두 가지 양자화 버전: UD-Q5_K_XL 및 NVFP4-Q8_0)
Drafter (초안 작성 모델): Qwen3.6-27B-DFlash-Q5_K_M
프레임워크: BeeLlama.cpp (DFlash + TurboQuant/TCQ 지원)
PPL 데이터셋: WikiText-2
처리량 (Throughput): 커스텀 코딩 프롬프트 (코드 생성 작업)
요약 (TL;DR)
| 전략 | 속도 향상 (Speedup) | PPL Δ | 코드 품질 |
|---|
| q4_0/turbo4 ⭐ | 3.18x | +0.02% | 3.0/3.0 |
| HTML turbo4/turbo4 | 3.26x | +0.04% | |
| Tested turbo2_tcq/turbo2_tcq | 3.26x | +0.76% | 약간 하락 |
| Baseline (KV 압축 없음) | 2.92x | N/A | 2.33/3.0 |
q4_0/turbo4가 최적의 지점(sweet spot)입니다: PPL 저하가 +0.02%에 불과하면서 3.18배의 속도 향상을 보여주며, 이는 통계적으로 K_Q8_V_Q5_1 베이스라인과 구별할 수 없는 수준입니다.
- Q5_K_XL vs NVFP4-Q8_0: 어떤 양자화(Quantization)가 승리하는가?
DFlash가 활성화되었을 때 Q5_K_XL이 모든 지표에서 NVFP4-Q8_0를 압도합니다:
| 양자화 베이스라인 | 기본 tok/s | 최고 tok/s | 최대 속도 향상 |
| :--- | :--- | :--- | :--- |
| Q5_K_XL | 176.5 | 195.2 | 3.26x |
| NVFP4-Q8_0 | 157.2 | 152.6 | 2.83x |
Q5_K_XL은 베이스라인에서도 더 빠르며, KV 압축 전략에 따라 더 잘 확장(scale)됩니다.
- Perplexity (PPL): WikiText-2에서 측정된 KV 압축 품질 (낮을수록 좋음).
K_Q8_VQ5_1 베이스라인: PPL = 1.8046 ± 0.00295
| KV 전략 | K_Q8_VQ5_1 대비 PPL Δ |
| :--- | :--- |
| q4_0/turbo4 | 1.8050 (+0.02%) |
| turbo4/turbo4 | 1.8053 (+0.04%) |
| turbo4/turbo2_tcq | 1.8100 (+0.30%) |
| turbo4/tcq | 1.8132 (+0.48%) |
| turbo2_tcq/turbo2_tcq | 1.8184 (+0.76%) |
q4_0/turbo4 전략은 K_Q8_VQ5_1 베이스라인의 1 표준 편차(standard deviation) 이내에 있습니다.
재현 방법:
bash python -m tests.benchmark_kv_cache --model Qwen3.6-27B-UD-Q5_K_XL-kv_q4_0_turbo4-dflash-256k 3.
Drafter Model (초안 작성 모델): Anbeeld의 주장 확인
나의 결과는 Anbeeld가 언급한 대로 작은 Drafter 모델을 사용했을 때 약 3배의 속도 향상(speedup)이 있음을 확인해 줍니다:
- Drafter: Qwen3.6-27B-DFlash-Q5_K_M (동일한 아키텍처, 더 작은 양자화 (quant))
- Acceptance rate (수락률): KV 전략에 따라 30-51%
- Speedup range (속도 향상 범위): 2.58x ~ 3.26x
DFlash는 크로스 어텐션 (cross-attention) 메커니즘을 사용하기 때문에 (토큰 단위의 speculation이 아님), 더 작은 Drafter 모델로도 유용한 토큰 시퀀스를 제안할 수 있어 효율적입니다.
- Compression Strategy (압축 전략) 심층 분석
전략 권장 사항
| 목표 | 전략 | 속도 향상 및 PPL (Perplexity)
| :--- | :--- | :|
| 최적의 균형 (Best balance) | q4_0/turbo4 | 3.18x, +0.02% PPL |
| 최대 속도 (Maximum speed) | turbo4/turbo4 또는 turbo2_tcq/turbo2_tcq | 3.26x, +0.04-0.76% PPL |
| 최대 품질 (Maximum quality) | q8_0/q5_1 | 기준점 (Baseline), 메모리 소모 큼 |
- Code Quality (코드 품질): 압축이 생성을 망치는가?
Tetris 게임(CLI Python + 단일 파일 HTML)을 생성하여 벤치마크를 수행하였으며, 기능적 완성도에 따라 각 3회 반복하여 0-3점으로 점수를 매겼습니다:
| Config | CLI | HTML |
| :--- | :--- | :|
| Q5_K_XL + q4_0/turbo4 | 2.33/3.0 | 3.0/3.0 |
| Q5_K_XL baseline | 2.0/3.0 | 2.33/3.0 |
| Q5_K_XL + turbo2_tcq | 2.0/3.0 | 2.0/3.0 |
| NVFP4-Q8_0 + turbo2_tcq | 2.25/3.0 | 1.67/3.0 |
| NVFP4-Q8_0 baseline | 1.67/3.0 | 1.33/3.0 |
q4_0/turbo4를 사용한 KV 압축은 실제로 기준점(baseline)보다 코드 품질을 향상시켰습니다 (HTML 기준 2.33/3.0 대비 3.0/3.0).
모든 반복 회차에서 생성된 코드는 요청 시 제공 가능합니다.
Reproduction (재현) 명령
Perplexity (WikiText-2)
python -m tests.benchmark_kv_cache --model <model_key>
Throughput (코딩 작업)
python -m tests.benchmark_dflash --model <model_key>
Code quality (Tetris 생성)
python -m tests.benchmark_tetris --model <model_key>
Model keys는 config.yaml에 정의되어 있습니다.
실제 스크립트, 설정(config), 차트 또는 전체 종합 보고서에 관심이 있다면 DM이나 댓글로 연락해 주세요. 모든 자료를 보내드리겠습니다.
Reproducibility (재현 가능성)
완전한 재현을 위해 필요한 모든 리소스(벤치마크 스크립트, 설정, 원시 데이터, 생성된 코드 및 차트)를 포함한 공개 GitHub 저장소를 작업 중입니다. 현재 경로를 익명화하고 정리하는 작업을 진행하고 있습니다.
그동안, 이 포스트에서 언급된 모든 내용은 요청 시 제공 가능합니다 — 그냥 문의해 주세요. 링크:
BeeLlama.cpp: https://github.com/Anbeeld/beellama.cpp/
DFlash 논문: https://arxiv.org/abs/2602.06036
@수정: 참조 사항을 수정했습니다; 제가 베이스라인 (baseline)으로 사용 중인 KV 캐시 압축 (KV cache compression) 방식을 FP16에서 K_Q8_VQ5_1로 변경했습니다; beellama GitHub; Dflash 논문 참조는 /u/Rikers88 님이 r/LocalLLaMA에 제출했습니다 [링크] [댓글]