|
3 | 3 | **[TurboQuant](https://arxiv.org/abs/2504.19874) (ICLR 2026) KV 캐시 압축을 구현한 독립형 C 추론 엔진. 래퍼가 아닌 자체 구축, 외부 의존성 없음.** |
4 | 4 |
|
5 | 5 | []() |
6 | | -[]() |
| 6 | +[]() |
| 7 | +[]() |
7 | 8 | []() |
8 | 9 |
|
9 | | -``` |
10 | | -Qwen3.5-35B-A3B MoE (IQ2_XXS, GGUF): |
11 | | - baseline: "The capital of France is Paris." ✓ |
12 | | - 1-bit K: "The capital of France is Paris." ✓ ← 동일 출력 |
13 | | -
|
14 | | -Gemma 3 4B perplexity (101 토큰): |
15 | | - FP16 KV: PPL = 35.99 |
16 | | - 1-bit K + Q4 V: PPL = 36.00 (+0.03%) |
| 10 | +## 왜 TurboQuant인가? |
17 | 11 |
|
18 | | -GPU 백엔드: CUDA | Metal | Vulkan (AMD) | ROCm/HIP (AMD) | NEON | AVX2 |
19 | 12 | ``` |
| 13 | + ┌─────────────────────────────────────────────────┐ |
| 14 | + │ 기존 양자화 vs TurboQuant │ |
| 15 | + ├─────────────────────────────────────────────────┤ |
| 16 | + │ MSE(복원 오차) 최적화 내적(attention이 │ |
| 17 | + │ 실제로 하는 것) │ |
| 18 | + │ ↓ 내적 추정에 최적화 │ |
| 19 | + │ 2/pi 편향 발생 │ |
| 20 | + │ ↓ 증명 가능하게 │ |
| 21 | + │ ↓ 저비트에서 비편향 │ |
| 22 | + │ 품질 저하 │ |
| 23 | + │ ↓ 1-bit KV = │ |
| 24 | + │ 동일 출력 │ |
| 25 | + └─────────────────────────────────────────────────┘ |
| 26 | +``` |
| 27 | + |
| 28 | +**결과: 1-bit KV 캐시, 품질 손실 제로. 270M~35B 검증.** |
20 | 29 |
|
21 | 30 | --- |
22 | 31 |
|
23 | | -## 빠른 시작 |
| 32 | +## 핵심 결과 |
24 | 33 |
|
25 | | -```bash |
26 | | -git clone https://github.com/quantumaikr/TurboQuant.cpp && cd TurboQuant.cpp |
27 | | -cmake -B build -DCMAKE_BUILD_TYPE=Release -DTQ_BUILD_TESTS=ON |
28 | | -cmake --build build -j$(nproc) |
29 | | -ctest --test-dir build # 31/31 통과해야 합니다 |
| 34 | +### KV 압축 — 1-bit에서 바이트 동일 |
30 | 35 |
|
31 | | -./build/tq_run model.tqm -p "Hello" -k turbo_kv_1b -v q4 |
| 36 | +``` |
| 37 | +┌──────────────────┬──────────────────────────────────────────────────┐ |
| 38 | +│ │ 출력 (greedy, T=0) │ |
| 39 | +├──────────────────┼──────────────────────────────────────────────────┤ |
| 40 | +│ FP16 baseline │ "The capital of France is Paris." │ |
| 41 | +│ 1-bit K (ours) │ "The capital of France is Paris." ← 동일 │ |
| 42 | +├──────────────────┼──────────────────────────────────────────────────┤ |
| 43 | +│ 모델 │ Qwen3.5-35B-A3B MoE (IQ2_XXS GGUF) │ |
| 44 | +│ 하드웨어 │ 16GB Mac Air M3, RSS 4.7GB │ |
| 45 | +└──────────────────┴──────────────────────────────────────────────────┘ |
32 | 46 | ``` |
33 | 47 |
|
34 | | -> 이것은 llama.cpp 포크나 래퍼가 아닌, 처음부터 자체 구축한 독립 추론 엔진입니다. |
35 | | -> 모델은 TQM 포맷(사전 양자화) 또는 GGUF Q8_0(실험적)으로 로딩합니다. |
36 | | -
|
37 | | ---- |
38 | | - |
39 | | -## 지원 모델 |
| 48 | +### Perplexity — 거의 제로 열화 |
40 | 49 |
|
41 | | -| 모델 | 파라미터 | 포맷 | 속도 (6T) | KV 압축 | |
42 | | -|------|----------|------|-----------|---------| |
43 | | -| **Qwen3.5-35B-A3B** | 35B (3B 활성) | GGUF IQ2_XXS | ~1.0 tok/s | 1-bit K ✓ (byte-identical) | |
44 | | -| **Gemma 3 4B** | 4B | TQM | 20.2 tok/s | PPL +0.03%, 모든 KV 타입 ✓ | |
45 | | -| **Qwen3.5-0.8B** | 752M | TQM/GGUF | 80.1 tok/s | 모든 KV 타입 ✓ | |
46 | | -| **Gemma 3 270M** | 270M | TQM | 176 tok/s | 모든 KV 타입 ✓ | |
| 50 | +``` |
| 51 | +Gemma 3 4B, 101 토큰, teacher-forced: |
47 | 52 |
|
48 | | -아키텍처: Gemma 3 (슬라이딩 윈도우, GeGLU), Qwen3.5 (DeltaNet 하이브리드), Qwen2-MoE (top-K 라우팅, 공유 전문가). |
| 53 | + FP16 KV ████████████████████████████████████ 35.99 PPL |
| 54 | + 1-bit K + FP16 V ████████████████████████████████████ 35.99 PPL (+0.00%) |
| 55 | + 1-bit K + Q4 V ████████████████████████████████████ 36.00 PPL (+0.03%) |
| 56 | + 1-bit K + Q2 V █████████████████████████████████████████ 42.23 PPL (+17.3%) |
| 57 | +``` |
49 | 58 |
|
50 | | -GGUF: Q8_0 검증 완료. IQ2_XXS/IQ2_S 역양자화 구현 (E8 lattice codebook). 35B MoE 로딩 + 추론 검증 (RSS 4.7GB on 16GB Mac). |
| 59 | +### 메모리 절감 — 32K 컨텍스트 |
51 | 60 |
|
52 | | ---- |
| 61 | +``` |
| 62 | +Gemma 3 4B, 32K 토큰: |
53 | 63 |
|
54 | | -## KV 압축 |
| 64 | + FP16 K+V ████████████████████████████████████████████ 4,352 MB |
| 65 | + 1-bit K+Q4 V ████████ 885 MB (4.9x 절감) |
| 66 | + 1-bit K+Q2 V ██████ 613 MB (7.1x 절감) |
| 67 | + └──────┬──────┬──────┬──────┬──────┬──────┘ |
| 68 | + 0 500 1000 1500 2000 2500 MB |
| 69 | +``` |
55 | 70 |
|
56 | | -Key는 RHT + 부호 해싱(1비트) 또는 Lloyd-Max 코드북(3/4비트)으로 압축. |
57 | | -Value는 독립적으로 Q4 또는 Q2로 양자화. |
| 71 | +### 양자화 품질 매트릭스 |
58 | 72 |
|
59 | | -```bash |
60 | | -./build/tq_run model.tqm -p "Hello" -k turbo_kv_1b -v q4 # 4.9x 총 K+V |
61 | | -./build/tq_run model.tqm -p "Hello" -k turbo_kv_1b -v q2 # 7.1x 총 K+V |
62 | | -./build/tq_run model.tqm -p "Hello" -k turbo_kv_3b # 3-bit keys, FP16 values |
63 | | -./build/tq_run model.tqm -p "Hello" -M # 메모리 통계 |
64 | | -``` |
| 73 | +| 방법 | K 비트 | V 비트 | 압축률 | PPL 영향 | 품질 | |
| 74 | +|------|--------|--------|--------|----------|------| |
| 75 | +| FP16 baseline | 16 | 16 | 1.0x | — | 기준 | |
| 76 | +| **1-bit K + FP16 V** | **1** | **16** | **1.8x** | **+0.00%** | **바이트 동일** | |
| 77 | +| **1-bit K + Q4 V** | **1** | **4** | **4.9x** | **+0.03%** | **거의 무손실** | |
| 78 | +| 1-bit K + Q2 V | 1 | 2 | 7.1x | +17.3% | coherent | |
| 79 | +| 3-bit K + FP16 V | 3 | 16 | 1.6x | +0.00% | 바이트 동일 | |
65 | 80 |
|
66 | | -| 구성 | K+V/토큰 (Gemma 4B) | 압축률 | PPL 영향 | |
67 | | -|------|---------------------|--------|----------| |
68 | | -| FP16 K+V | 136.00 KB | 1.0x | 기준 | |
69 | | -| 1-bit K + FP16 V | 74.38 KB | 1.8x | +0.00% | |
70 | | -| 1-bit K + Q4 V | 27.62 KB | 4.9x | +0.03% | |
71 | | -| 1-bit K + Q2 V | 19.12 KB | 7.1x | +17.3% | |
| 81 | +### 가중치 양자화 — 1-bit, 품질 손실 제로 |
72 | 82 |
|
73 | | -> K-only 양자화(V는 FP16)는 perplexity 무손실. |
74 | | -> Q4 V는 +0.03% PPL — 사실상 무손실. Q2 V는 눈에 띄게 저하. |
| 83 | +| 방법 | Q8 대비 압축 | 품질 (4B Qwen3.5) | |
| 84 | +|------|-------------|-------------------| |
| 85 | +| Q8 (int8) | 1.0x | 기준 | |
| 86 | +| Q4 (4-bit) | 2.0x | 바이트 동일 | |
| 87 | +| **1-bit sign hash** | **8.4x** | **바이트 동일** | |
| 88 | +| Q4+Q2 progressive | 1.3x (6-bit) | 코사인 0.999 | |
75 | 89 |
|
76 | 90 | --- |
77 | 91 |
|
78 | | -## 알고리즘 |
| 92 | +## 빠른 시작 |
79 | 93 |
|
80 | | -``` |
81 | | -Key: key → L2 정규화 → RHT → Lloyd-Max 코드북 (b-1 bits) → QJL 부호 (1 bit) |
82 | | - 1-bit: 부호만 → XOR + popcount attention |
| 94 | +```bash |
| 95 | +git clone https://github.com/quantumaikr/TurboQuant.cpp && cd TurboQuant.cpp |
| 96 | +cmake -B build -DCMAKE_BUILD_TYPE=Release -DTQ_BUILD_TESTS=ON |
| 97 | +cmake --build build -j$(nproc) |
| 98 | +ctest --test-dir build # 32/32 통과해야 합니다 |
83 | 99 |
|
84 | | -Value: value → 블록별 Q4/Q2 양자화 → packed nibble에서 직접 fused 누적 |
85 | | -``` |
| 100 | +# TQM 포맷 (사전 양자화, 가장 빠름) |
| 101 | +./build/tq_run model.tqm -p "Hello" -k turbo_kv_1b -v q4 |
86 | 102 |
|
87 | | -[TurboQuant 논문](https://arxiv.org/abs/2504.19874) (ICLR 2026)은 일반 양자화기가 내적 추정에 체계적 편향을 도입함을 증명. RHT + QJL 보정으로 추정기가 증명 가능하게 비편향. |
| 103 | +# GGUF 포맷 (llama.cpp 생태계) |
| 104 | +./build/tq_run model.gguf -p "Hello" -k turbo_kv_1b |
| 105 | +``` |
88 | 106 |
|
89 | 107 | --- |
90 | 108 |
|
91 | | -## 분석 도구 |
| 109 | +## 지원 모델 |
92 | 110 |
|
93 | | -```bash |
94 | | -./build/tq_run model --ppl input.txt -k turbo_kv_1b -v q4 # perplexity |
95 | | -./build/tq_run model --profile-kv -k turbo_kv_1b -p "text" # 활성값 분포 |
96 | | -./build/tq_run model --recommend -k turbo_kv_1b -p "text" # 레이어별 비트 할당 |
97 | | -./build/tq_run model --calibrate -k turbo_kv_1b -p "text" # 코드북 캘리브레이션 |
98 | | -./build/tq_run model --attn-entropy -k turbo_kv_1b -p "text" # attention 엔트로피 |
99 | | -bash bench/auto_profile.sh model # 전체 파이프라인 |
100 | | -``` |
| 111 | +| 모델 | 파라미터 | 포맷 | 속도 (6T, M3) | 1-bit KV 검증 | |
| 112 | +|------|----------|------|--------------|---------------| |
| 113 | +| **Qwen3.5-35B-A3B** | 35B (3B 활성) | GGUF IQ2_XXS | ~1-4 tok/s | 바이트 동일 ✓ | |
| 114 | +| **Qwen3.5-4B** | 4B | GGUF Q8_0 | ~15 tok/s | 바이트 동일 ✓ | |
| 115 | +| **Qwen3.5-0.8B** | 752M | TQM / GGUF | 35 tok/s | 바이트 동일 ✓ | |
| 116 | +| **Gemma 3 4B** | 4B | TQM | 20 tok/s | PPL +0.03% ✓ | |
| 117 | +| **Gemma 3 270M** | 270M | TQM | 176 tok/s | 바이트 동일 ✓ | |
| 118 | + |
| 119 | +아키텍처: Gemma 3 (슬라이딩 윈도우, GeGLU), Qwen3.5 (DeltaNet 하이브리드), Qwen2-MoE (256 전문가, top-8, 공유 전문가). |
101 | 120 |
|
102 | 121 | --- |
103 | 122 |
|
104 | | -## 검증 |
| 123 | +## 알고리즘 |
105 | 124 |
|
106 | | -| 항목 | 결과 | 재현 방법 | |
107 | | -|------|------|----------| |
108 | | -| Perplexity (1b K + Q4 V) | PPL +0.03% vs FP16 | Gemma 4B `--ppl` | |
109 | | -| 비편향성 | 상대 bias < 0.2%, 10만 샘플 | `test_unbiased` | |
110 | | -| Attention 코사인 (1-bit) | 0.634 = 이론 한계 2/pi | `test_attention_distribution` | |
111 | | -| Lloyd-Max 코드북 | MSE가 정보이론 최적의 1.18배 이내 | `test_codebook_theory` | |
112 | | -| 코드북 캘리브레이션 | 실제 활성값에서 MSE 49.7% 개선 | `--calibrate` | |
113 | | -| 누적 오차 (16 레이어) | 코사인 0.998 (Q4), 준선형 성장 | `test_cumulative_error` | |
114 | | -| NEON/스칼라 일치성 | 14개 경로 검증 | `test_neon_scalar` | |
115 | | -| 엣지케이스 | 29개 (NaN, Inf, n=1, dim=0) | `test_edge_cases` | |
116 | | -| ASan + UBSan | 31/31 클린 | `scripts/sanitize.sh` | |
117 | | -| Rate-distortion gap | Q4: 하한 대비 2.41배 | `test_rate_distortion` | |
| 125 | +``` |
| 126 | +기존 양자화기: TurboQuant: |
| 127 | + key → 가장 가까운 격자점으로 반올림 key → RHT → Lloyd-Max 코드북 → QJL 잔차 |
| 128 | + ↓ 편향된 내적 ↓ 비편향 내적 (증명됨) |
| 129 | + ↓ 1-2비트에서 품질 저하 ↓ 1-bit = 동일 출력 |
| 130 | +``` |
118 | 131 |
|
119 | | -벤치마크: `bench/ablation_test.sh`, `bench/kv_quality_bench.sh`, `bench/long_quality_test.sh`, `bench/sampling_test.sh` |
| 132 | +| 단계 | 무엇 | 왜 | |
| 133 | +|------|------|-----| |
| 134 | +| **RHT** | Randomized Hadamard Transform | outlier를 균등 분배 → 스칼라 양자화 가능 | |
| 135 | +| **Lloyd-Max** | 최적 스칼라 코드북 | 이론 최적의 1.18배 이내 MSE | |
| 136 | +| **QJL** | 잔차에 1-bit 부호 해시 | 내적 추정을 증명 가능하게 비편향으로 | |
| 137 | +| **1-bit 극한** | RHT 후 부호만 | XOR + popcount attention, 1.2 ns/key | |
120 | 138 |
|
121 | 139 | --- |
122 | 140 |
|
123 | | -## FAQ |
124 | | - |
125 | | -**Q: "1-bit attention 코사인 0.634는 너무 낮지 않나?"** |
126 | | -2/pi = 0.637이 부호 양자화의 정보이론적 최대값. 우리 0.634가 이 한계에 도달. 더 높은 코사인이 필요하면 3-bit(0.918) 사용. |
| 141 | +## 검증 & 벤치마크 |
127 | 142 |
|
128 | | -**Q: "llama.cpp KV 양자화와 뭐가 다른가?"** |
129 | | -llama.cpp는 uniform min-max. TurboQuant는 RHT + Lloyd-Max + QJL 잔차 보정으로 증명 가능한 비편향 내적 추정. 코드북 centroid 이론 검증 완료 (`test_codebook_theory`). |
| 143 | +### 이론적 보장 — 실측 검증 |
130 | 144 |
|
131 | | -**Q: "Perplexity는?"** |
132 | | -측정 완료. Gemma 4B 1-bit K + Q4 V: PPL = 36.00 vs 35.99 기준 (+0.03%). K-only 양자화는 정확히 무손실 (PPL 동일). `--ppl` 플래그 참조. |
| 145 | +| 주장 | 이론 | 측정값 | 테스트 | |
| 146 | +|------|------|--------|--------| |
| 147 | +| 비편향 내적 | bias → 0 | 상대 bias < 0.2% | `test_unbiased` (10만 쌍) | |
| 148 | +| 1-bit 코사인 = 2/pi | 0.6366 | 0.634 | `test_attention_distribution` | |
| 149 | +| Lloyd-Max MSE 최적 | 1.18x gap | 확인됨 | `test_codebook_theory` | |
| 150 | +| 코드북 캘리브레이션 | — | MSE 49.7% 감소 | `--calibrate` | |
| 151 | +| 누적 오차 제한 | 준선형 | 16레이어 후 cos 0.998 | `test_cumulative_error` | |
133 | 152 |
|
134 | | -**Q: "NEON 코드가 정확한가?"** |
135 | | -모든 NEON 경로를 스칼라 참조와 비교 검증 (`test_neon_scalar`). Q4 dequant nibble 인터리빙 버그를 검증 과정에서 발견 후 수정. ASan + UBSan 31개 전체 스위트 클린. |
| 153 | +### 성능 오버헤드 |
136 | 154 |
|
137 | | -**Q: "RHT 오버헤드는?"** |
138 | | -128차원 벡터당 147 ns (NEON 벡터화). 1-bit attention: 1.2 ns/key. matmul (~1ms/레이어) 대비 무시 가능. `bench/bench_kv_overhead.cpp` 참조. |
| 155 | +``` |
| 156 | +128차원 벡터당 양자화 비용: |
139 | 157 |
|
140 | | -**Q: "소형 모델만 지원?"** |
141 | | -아니요. 270M~35B까지 검증. Qwen3.5-35B-A3B MoE (IQ2_XXS, 9.9GB)가 16GB Mac Air M3에서 RSS ~4.7GB로 mmap 기반 실행. KV 압축은 아키텍처 독립적이며 수정 없이 스케일. |
| 158 | + uniform_4b █ 148 ns |
| 159 | + turbo_kv_1b ████ 659 ns |
| 160 | + turbo_kv_3b ████████████████████████████████ 11,066 ns |
142 | 161 |
|
143 | | -**Q: "AMD GPU 지원?"** |
144 | | -Vulkan과 ROCm/HIP 백엔드가 구현되어 컴파일 가능 (`-DTQ_BUILD_VULKAN=ON` 또는 `-DTQ_BUILD_ROCM=ON`). AMD 하드웨어에서 아직 미테스트 — 기여 환영. |
| 162 | +1-bit attention 비용/key: 1.2 ns (XOR + popcount) |
| 163 | +RHT 변환: 147 ns (NEON 벡터화) |
| 164 | +레이어당 matmul: ~1,000,000 ns |
145 | 165 |
|
146 | | -**Q: "어떤 GGUF 포맷이 작동하나?"** |
147 | | -Q8_0은 coherent output 검증 완료. Q5_K/Q6_K는 비순환 레이어에서 작동. IQ2_XXS/IQ2_S 역양자화 구현 완료 (E8 lattice codebook). DeltaNet 레이어는 순환 상태 민감도로 Q8_0 이상 필요. |
| 166 | +→ 양자화 오버헤드는 추론 시간의 <0.1% |
| 167 | +``` |
148 | 168 |
|
149 | 169 | --- |
150 | 170 |
|
151 | | -## GPU 백엔드 |
152 | | - |
153 | | -AMD를 포함한 모든 주요 GPU 플랫폼에서 실행 가능. |
| 171 | +## GPU & 컴퓨트 백엔드 |
154 | 172 |
|
155 | 173 | | 백엔드 | 대상 | 상태 | 코드량 | |
156 | 174 | |--------|------|------|--------| |
157 | | -| **Metal** | Apple Silicon | 검증 (M3 테스트) | 4,002줄 | |
| 175 | +| **Metal** | Apple Silicon | 검증 (M3) | 4,002줄 | |
158 | 176 | | **NEON** | ARM CPU | 프로덕션 | 980줄 | |
159 | 177 | | **AVX2** | x86 CPU | 프로덕션 | 638줄 | |
160 | 178 | | **CUDA** | NVIDIA GPU | 컴파일 가능 (GPU 미테스트) | 2,146줄 | |
161 | 179 | | **Vulkan** | AMD + 크로스플랫폼 | 컴파일 가능 (GPU 미테스트) | 2,317줄 | |
162 | 180 | | **ROCm/HIP** | AMD ROCm | 컴파일 가능 (GPU 미테스트) | 2,174줄 | |
163 | 181 |
|
164 | | -```bash |
165 | | -cmake -B build -DTQ_BUILD_VULKAN=ON # AMD / 크로스플랫폼 |
166 | | -cmake -B build -DTQ_BUILD_ROCM=ON # AMD ROCm (CUDA 호환 API) |
167 | | -cmake -B build -DTQ_BUILD_CUDA=ON # NVIDIA |
168 | | -cmake -B build -DTQ_BUILD_METAL=ON # Apple Silicon |
169 | | -``` |
170 | | - |
171 | | -> AMD 사용자: Vulkan (크로스플랫폼) 또는 ROCm/HIP (네이티브) 선택 가능. |
172 | | -
|
173 | 182 | --- |
174 | 183 |
|
175 | | -## GGUF 모델 로딩 |
176 | | - |
177 | | -커뮤니티 GGUF 모델을 직접 로딩 — 변환 불필요. |
| 184 | +## GGUF 직접 로딩 |
178 | 185 |
|
179 | 186 | ```bash |
180 | 187 | ./build/tq_run model.gguf -p "Hello" -k turbo_kv_1b |
181 | 188 | # 지원: Q8_0, Q4_K, Q5_K, Q6_K, IQ2_XXS, IQ2_S, BF16, F16, F32 |
182 | | -# MoE: top-K 라우팅 + 공유 전문가 + SwiGLU |
| 189 | +# MoE: 256 전문가, top-8, 공유 전문가, SwiGLU |
183 | 190 | ``` |
184 | 191 |
|
185 | | -| 기능 | 상태 | |
186 | | -|------|------| |
187 | | -| GGUF v3 파서 (mmap) | 24개 양자화 타입 지원 | |
188 | | -| IQ2_XXS (E8 lattice) | 전체 codebook 역양자화 | |
189 | | -| IQ2_S (10-bit grid) | 전체 codebook 역양자화 | |
190 | | -| MoE 라우팅 | 256 전문가, top-8, 공유 전문가 | |
191 | | -| DeltaNet 하이브리드 | Qwen3.5 DeltaNet + self_attn | |
192 | | -| On-the-fly 가중치 역양자화 | FP32 변환 없이 ~5GB 절감 | |
193 | | - |
194 | 192 | --- |
195 | 193 |
|
196 | 194 | ## 기술 상세 |
197 | 195 |
|
198 | | -**자체 구축 추론 엔진** — 포크도 래퍼도 아닌, 모든 컴포넌트를 직접 작성. |
| 196 | +**30,000줄+ C/C++/Metal** — 모든 컴포넌트를 직접 작성, 외부 의존성 없음. |
| 197 | + |
| 198 | +- **12개 KV 양자화 타입** — RHT + Lloyd-Max + QJL (핵심 차별점) |
| 199 | +- **1-bit 가중치 양자화** — sign hash + L2 norm, 8.4x 압축, zero quality loss |
| 200 | +- **Fused Q4 attention** — packed nibble에서 직접 가중합 |
| 201 | +- **적응적 압축** — 레이어별 비트 추천, 온라인 코드북 캘리브레이션 |
| 202 | +- **GGUF v3 로더** — 24개 양자화 타입, IQ2 E8 lattice, MoE 디스패치 |
| 203 | +- **32개 테스트 스위트** — perplexity, 비편향성, 코드북 이론, NEON 일치성, 엣지케이스 |
| 204 | + |
| 205 | +--- |
| 206 | + |
| 207 | +## FAQ |
| 208 | + |
| 209 | +**Q: "1-bit 코사인 0.634가 너무 낮지 않나?"** |
| 210 | +아닙니다. 2/pi = 0.637이 부호 양자화의 정보이론 최대값. 우리 0.634가 이 한계와 일치. |
| 211 | + |
| 212 | +**Q: "llama.cpp KV 양자화와 차이는?"** |
| 213 | +llama.cpp는 uniform min-max. TurboQuant는 RHT + Lloyd-Max + QJL로 증명 가능한 비편향 내적. 코드북 이론 검증 완료. |
199 | 214 |
|
200 | | -- **30,000줄+ C/C++/Metal** — 19,600 코어 + 10,600 GPU 커널 — 외부 의존성 없음 |
201 | | -- **12개 KV 양자화 타입** — RHT + Lloyd-Max + QJL로 비편향 내적 |
202 | | -- **6개 컴퓨트 백엔드** — Metal (검증), NEON/AVX2 (프로덕션), CUDA/Vulkan/ROCm (컴파일 가능, GPU 미테스트) |
203 | | -- **Fused Q4 attention** — packed nibble에서 직접 가중합, dequant 버퍼 없음 |
204 | | -- **적응적 압축** — 레이어별 비트 추천, 온라인 코드북 캘리브레이션 (MSE 49.7% 개선) |
205 | | -- **GGUF v3 로더** — 24개 양자화 타입, IQ2 E8 lattice, MoE 전문가 디스패치, on-the-fly 역양자화 |
206 | | -- **31개 테스트 스위트** — perplexity, 비편향성, attention 분포, 코드북 이론, NEON 일치성, 엣지케이스, rate-distortion, 누적 오차 |
| 215 | +**Q: "Perplexity는?"** |
| 216 | +측정 완료. 1-bit K + Q4 V = PPL +0.03% (Gemma 4B). K-only = 정확히 무손실. |
| 217 | + |
| 218 | +**Q: "소형 모델만?"** |
| 219 | +270M~35B 검증 완료. 35B MoE가 16GB Mac에서 RSS 4.7GB로 실행. |
| 220 | + |
| 221 | +**Q: "RHT 오버헤드는?"** |
| 222 | +벡터당 147 ns. 1-bit attention: 1.2 ns/key. 추론 시간의 <0.1%. |
207 | 223 |
|
208 | 224 | --- |
209 | 225 |
|
|
0 commit comments