【免费下载链接】turboquant_plus
本文汇总 turboquant_plus 生态中 TQ4_1S 权重压缩方案(Config I / Hybrid / Premium 三种张量角色策略)的社区实测结果:覆盖 14+ 名独立测试者、14+ 款 GPU、13+ 个模型的压缩体积、PPL 质量损失、解码速度与权重+KV 缓存叠加压缩的完整数据。读完后你可以判断该方案是否适用于你的硬件与模型,并掌握从 Q8_0 GGUF 一键压缩、按模型家族选择配置、以及复现全部基准测试的具体操作。
TQ4_1S 是什么:一条命令的后训练权重压缩
TQ4_1S 权重压缩面向 llama.cpp 的生产 fork(TheTom/llama-cpp-turboquant,已合入 main),特点是后训练量化:无需重训练、无需校准数据,一条llama-quantize命令即可把 Q8_0 GGUF 模型压缩 28–42%。
格式原理(完整方法见论文 docs/papers/weight-compression-tq4.md):
- WHT 旋转:对每个 32 元素权重块做带黄金比例符号翻转的随机化 Hadamard 变换,解除坐标间相关性——与 TurboQuant KV 缓存压缩使用同一套旋转机制;
- Lloyd-Max 量化:旋转后的每个坐标独立映射到 N(0,1) 的最近最优质心;
- 双半块缩放:对元素 0–15 与 16–31 分别保存独立缩放因子(d0、d1)。
| 格式 | 质心数 | 位宽 | BPW | MSE | 打包方式 |
|---|---|---|---|---|---|
| TQ3_1S | 8 | 3 | 4.0 | 0.0346 | 跨字节(复杂) |
| TQ4_1S | 16 | 4 | 5.0 | 0.0095 | 半字节(简单) |
TQ4_1S 仅靠质心数翻倍就把量化误差降低了 72.5%。这个设计直接来自 turbo4 KV 缓存"复活"的经验:16 个最优质心 + 干净的 nibble 打包 + 无校正项,显著优于 8 质心加复杂补偿的 3+1 bit 方案。仓库内的 Python 参考实现印证了这套"旋转 + 最优标量量化"流程:代码本构造(对旋转后坐标分布用 Lloyd 算法求最优质心,1/2 bit 采用闭式解)与 PolarQuant 量化/反量化(抽取范数、旋转、最近质心索引、反旋转重缩放),快速结构化旋转(随机符号 + Hadamard,O(d log d))则在 rotation.py 中实现。
三种配置策略(Config I / Hybrid / Premium)是核心结论:压缩"哪些张量"比"用什么数学"更重要。
| 配置 | Attention (Q/K/V/output) | FFN gate/up | FFN down | 边界层保护 | 适用模型家族 |
|---|---|---|---|---|---|
| Config I | TQ4_1S | TQ4_1S | Q4_K | 前 2 + 后 2 层全 q8_0 | Qwen、Phi 及多数非 Llama 模型 |
| Hybrid | TQ4_1S | Q4_K | Q4_K | 前 2 + 后 2 层全 q8_0 | Llama 家族,最大压缩 |
| Premium | TQ4_1S | Q5_K | Q6_K | 前 4 + 后 4 层全 q8_0 | Llama 家族,最佳质量 |
社区测试范围总览
| 指标 | 数值 |
|---|---|
| 独立测试者 | 14+ |
| 测试 GPU | 14+款,跨 5 个硬件家族 |
| 测试模型 | 13+个,跨 7 个模型家族 |
| 相对 Q8_0 的压缩幅度 | 28–42% 更小 |
| PPL 影响(Qwen/Phi) | +0.4–3.9% |
| PPL 影响(Llama Hybrid) | +1.3–16%(随深度变化) |
| 未压缩模型的回归 | 零 |
| 权重 + KV 叠加惩罚 | 未测出额外惩罚 |
已测试模型一览
| 模型 | 参数量 | 家族 | 配置 | 压缩后体积 | PPL 增量 |
|---|---|---|---|---|---|
| Qwen2.5-1.5B | 1.5B | Qwen | Config I | 1.28G | +1.7–1.9% |
| Qwen2.5-3B | 3B | Qwen | Config I | 2.32G | +1.73% |
| Qwen2.5-7B | 7.6B | Qwen | Config I | 5.17G | +1.71% |
| Qwen3.5-27B | 26.9B | Qwen | Config I | 19.1G | +1.3–2.5% |
| Qwen3.5-35B MoE | 34.7B | Qwen | Config I | 21.6G | +1.4% |
| Qwen2.5-72B | 72.7B | Qwen | Config I | 45.8G | +3.9% |
| Phi-4 | 14.7B | Phi | Config I | 9.9G | +0.76–1.0% |
| Llama 3.1 70B | 70.6B | Llama | Hybrid | 40.2G | +16% |
| Llama 3.1 70B | 70.6B | Llama | Premium | 49.8G | +5.8% |
| Llama 3.2-3B | 3.2B | Llama | Hybrid | 2.10G | +1.9% |
| Mistral 7B v0.3 | 7.2B | Mistral | Hybrid | 4.40G | +1.28% |
| Mistral 7B v0.3 | 7.2B | Mistral | Premium | 5.46G | +0.41% |
| Gemma 4 31B | 30.7B | Gemma | Config I | 18.9G | TBD |
| Gemma 4 26B A4B MoE | 26B | Gemma | Config I | 24.4G | -2.3%(反而更好) |
我的 GPU 能跑吗:按硬件判断
下表列出每款 GPU 成功跑过的最大压缩模型。它不是完整的"模型×GPU"矩阵——"能否装下"取决于源量化、压缩配置、KV 缓存类型与上下文长度。需要精确数据时,请参考下文各家族的 before/after 体积自行估算。
| GPU | 显存 | 已跑通最大模型 | 状态 | 解码速度 vs Q8_0 | 测试者 |
|---|---|---|---|---|---|
| RTX PRO 6000 Blackwell | 96GB | 27B | 成功 | 109%(Config I 快于 Q8_0) | 社区(CUDA) |
| RTX 5090 | 32GB | 27B | 成功 | 107%(加载时转换) | 社区(CUDA) |
| RTX 4090 | 24GB | 14B Config I,27B+KV | 成功 | 63–67%(融合 kernel),100%(加载时转换) | 社区(CUDA) |
| RTX 4070 Ti | 12GB | 9B(目前仅 KV 压缩) | 成功 | 搭配 turbo3 KV 快 2.25x | 社区(CUDA) |
| RTX 3090 | 24GB | 7B | 成功 | 29%(融合 kernel) | 社区(CUDA) |
| 2x L40S | 96GB | 27B+ | 成功 | 81% | 社区(CUDA) |
| Dual 4090 | 48GB | 27B+ | 成功 | 71% | 社区(CUDA) |
| 4090 + 4060 | 混合 | 27B | 成功 | 82% | 社区(CUDA) |
| M5 Max | 128GB | 72B | 成功 | 94–102% | 内部(Metal) |
| M4 Max | 64GB | 27B | 成功 | 85–99% | 社区(Metal) |
| M2 Pro | 32GB | 7B | 成功 | 约 85% | 内部(Metal) |
| M1 Max | 64GB | 27B | 成功 | 63% | 社区(Metal) |
| 2x V100 | 40GB | 27B | 成功 | 109%(Config I 快于 Q8_0) | 社区(CUDA) |
| GTX 1080 Ti | 11GB | 7B | 成功 | 106–111%(Config I 快于 Q8_0) | 内部(CUDA) |
| AMD RX 9070 XT | 16GB | 1.5B | 成功 | 130%(Config I 快于 Q8_0) | 内部(HIP,Windows) |
| RTX 3050 | 6GB | 35B MoE(CPU offload) | 成功 | APEX-I-Quality,Windows CUDA 12.9 | 社区(CUDA) |
| AMD RX 6600 | 8GB | 1.1B(CPU 回退) | 警告 | GPU matmul 损坏(上游问题,非本方案之过) | 社区(HIP) |
注意:CUDA 解码速度因 kernel 版本而异。社区贡献者实现的"加载时 TQ4_1S→q8_0 转换"可以绕开 CUDA kernel 瓶颈,在压缩文件体积下获得 100% 的原生 q8_0 速度——这是 CUDA 平台上的实用取巧方案。
分模型家族结果与配置选择
Qwen — Config I(完全支持)
| 模型 | 源体积 | 压缩后 | 缩减 | PPL 增量 | 解码 % | 测试者 |
|---|---|---|---|---|---|---|
| Qwen2.5-1.5B | 1.76G | 1.28G | -27% | +1.7–1.9% | 96%(Metal)、70%(4090) | 多名测试者 |
| Qwen2.5-3B | 3.37G | 2.32G | -31% | +1.73% | 67%(4090) | 社区(CUDA) |
| Qwen2.5-7B | 7.54G | 5.17G | -31% | +1.71% | 64%(4090)、99%(M4 Max) | 社区(CUDA)、社区(Metal) |
| Qwen3.5-27B | 26.6G | 19.1G | -28% | +0.05%(PRO 6000)、+1.3%(Metal)、+2.5%(L40S) | 109%(PRO 6000)、99%(M5)、85%(M4)、81%(L40S)、107%(5090) | 多名测试者 |
| Qwen3.5-35B MoE | 34.4G | 21.6G | -37% | +1.4% | 102%(Metal) | 内部(Metal) |
| Qwen2.5-72B | 72.0G | 45.8G | -38% | +3.9%(8 块) | 95%(Metal) | 内部(Metal) |
Phi — Config I(完全支持)
| 模型 | 源体积 | 压缩后 | 缩减 | PPL 增量 | 解码 % | 测试者 |
|---|---|---|---|---|---|---|
| Phi-4 14B | 14.5G | 9.9G | -32% | +0.76–1.0% | 254%(Metal)、67%(4090) | 多名测试者 |
Phi-4 在 Metal 上解码快 2.5 倍的原因:36% 的体积缩减把瓶颈从内存带宽推向了计算侧(M5 Max 上如此)。
Llama — 必须用 Hybrid/Premium(FFN 对 WHT 敏感)
不要对 Llama 使用 Config I。请使用 Hybrid(FFN 全部 Q4_K)或 Premium(FFN 用 Q5_K/Q6_K)。
| 模型 | 配置 | 源体积 | 压缩后 | 缩减 | PPL 增量 | 解码 % | 测试者 |
|---|---|---|---|---|---|---|---|
| Llama 3.1 70B | Hybrid | 69.8G | 40.2G | -42% | +16% | 133%(Metal) | 内部(Metal) |
| Llama 3.1 70B | Premium | 69.8G | 49.8G | -29% | +5.8% | 快 | 内部(Metal) |
| Llama 3.2-3B | Hybrid | 3.19G | 2.10G | -34% | +1.9% | 98%(4090) | 社区(CUDA) |
| Llama 3.2-3B | Premium | 3.19G | 2.52G | -21% | +0.78% | 93%(4090) | 社区(CUDA) |
为什么 Llama 不同:在 FFN 层中,Llama 对每层量化误差的放大效应是 Qwen/Phi 的 6–8 倍,且随深度递增——3B 的 Llama 没问题,70B 则需要 Premium。论文 docs/papers/weight-compression-tq4.md 第 5.7 节记录了完整调查:WHT 之后的权重分布在统计上与 Qwen 无差异,误差放大差异是架构性的(误差如何在残差流中传播),目前尚未完全解释,属于开放研究问题。
Mistral — Hybrid/Premium(好于预期)
| 模型 | 配置 | 源体积 | 压缩后 | 缩减 | PPL 增量 | 解码 % | 测试者 |
|---|---|---|---|---|---|---|---|
| Mistral 7B v0.3 | Hybrid | 7.17G | 4.40G | -39% | +1.28% | 108%(4090) | 社区(CUDA) |
| Mistral 7B v0.3 | Premium | 7.17G | 5.46G | -24% | +0.41% | 99%(4090) | 社区(CUDA) |
Mistral 继承 LlamaModel,但质量损失远低于 Llama 70B。Premium 配置 +0.41% 的 PPL 增量实际上近乎免费。
Gemma — 可用,但 MoE 限制了权重压缩收益
| 模型 | 源体积 | 压缩后 | 缩减 | PPL 增量 | 解码 % | 测试者 |
|---|---|---|---|---|---|---|
| Gemma 4 26B A4B MoE | 25.0G | 24.4G | -2.3% | -2.3%(更好) | 100% | 社区(RTX 5090) |
Gemma 4 是 MoE 且稠密注意力层极少,权重压缩收益有限;真正的收益在 KV 缓存压缩(RTX 5090,Q4_K_XL,128k 上下文):
| KV 配置 | KV 体积 | 节省 |
|---|---|---|
| q8_0/q8_0 | 1,519 MiB | — |
| q8_0/turbo4 | 1,140 MiB | -380 MiB(-25%) |
| q8_0/turbo3 | 1,039 MiB | -480 MiB(-32%) |
节省幅度小于稠密模型,因为 Gemma 4 的混合滑窗架构把全上下文 KV 限制在 30 层中的 5 层。
注意:ffn_down请求q4_k时,在不兼容的张量形状上回退到了q5_0。
预量化 APEX-I-Quality(社区 GGUF)
mudler 的 APEX 量化集合提供预量化的 Config I GGUF,可跳过本地量化步骤。在 RTX 3050 6GB 上实测(Windows、CUDA 12.9、专家层 CPU offload):
| 模型 | 基线 PPL | 非对称 turbo3 PPL | PPL 增量 | KV 节省 |
|---|---|---|---|---|
| Qwen3.5-35B-A3B-APEX-I-Quality | 6.58 | 6.62 | +0.62% | -132 MiB |
| Qwen3-Coder-30B-APEX-I-Quality | 10.15 | 10.28 | +1.27% | -633 MiB |
叠加压缩:权重 + KV 缓存
权重压缩与 TurboQuant KV 缓存压缩可以叠加,未测出额外惩罚:
| 组合 | 确认方 | 备注 |
|---|---|---|
| Config I + turbo3 KV(35B MoE,32K 上下文) | 内部(M5 Max) | 总内存仅为基线的 59%,PPL +1.4% |
| Config I + turbo4 KV(27B) | 社区(2x L40S) | 叠加无额外惩罚 |
| Config I + turbo4 KV(全部 10 个模型) | 社区(RTX 4090) | 在每一个被测模型上均可叠加 |
| Config I + turbo4 KV(27B) | 社区(dual 4090) | 独立确认 |
| Config I + turbo3 KV(27B,32K 上下文) | 社区(RTX PRO 6000) | Config I+turbo3 比 Q8_0+turbo3 解码快 7%,工作集小 2.5 GiB |
| TQ4_1S + turbo3 KV(8B,100K 上下文) | 社区(RTX 4090) | 总计 5.8 GiB,长上下文下 turbo3 反而比 f16 快 |
独立验证一:TurboQuantDC(662 项测试,RTX 4090)
一个从零用 Python/PyTorch 实现(MIT 许可)的独立实现测试了 TQ4_1S 权重压缩 + TurboQuant KV 叠加,并跑了 600+ 配置扫描,是目前最全面的独立验证。
TQ4_1S 权重 + turbo3 KV 叠加(Llama 3.1 8B,RTX 4090)
| 权重 | 上下文 | KV 配置 | 解码 t/s | 备注 |
|---|---|---|---|---|
| TQ4_1S | 8,192 | f16 | 78.4 | |
| TQ4_1S | 8,192 | turbo3 | 86.5 | turbo3 更快(显存压力更小) |
| TQ4_1S | 48,000 | f16 | 72.9 | 接近 f16 上限 |
| TQ4_1S | 56,000 | f16 | OOM | f16 无法分配 |
| TQ4_1S | 65,536 | turbo3 | 85.8 | turbo3 仍在运行 |
| TQ4_1S | 100,000 | turbo3 | 72.7 | |
| TQ4_1S | 112,000 | turbo3 | OOM | turbo3 的上限 |
turbo3 在同一块 GPU 上把最大上下文从约 48K 扩展到约 100K(2.1 倍)。
显存预算(Llama 3.1 8B)
| 配置 | 权重 | KV @ 32K | 总计 | 最大上下文 |
|---|---|---|---|---|
| Q4_K_M + f16 KV | 4.58G | 约 4.0G | 约 8.6G | 约 48K |
| TQ4_1S + f16 KV | 4.77G | 约 4.0G | 约 8.8G | 约 48K |
| TQ4_1S + turbo3 | 4.77G | 约 1.0G | 约 5.8G | 约 100K |
| TQ3_1S + turbo3 | 3.90G | 约 1.0G | 约 4.9G | 约 110K+(估) |
单卡 RTX 4090 跑 70B(仅 KV 压缩,权重 Q2_K)
| 上下文 | f16 KV | turbo3 KV | 备注 |
|---|---|---|---|
| 2,048 | 1.94 t/s | 2.87 t/s | turbo3 快 48% |
| 8,192 | OOM | 2.68 t/s | f16 无法分配 |
| 16,384 | OOM | 2.83 t/s | turbo3 仍在运行 |
turbo3 把单张 4090 上 70B 的最大上下文从约 4K 扩展到约 16K(4 倍)。
PPL(wikitext-2,Llama 3.1 8B)
| 权重 | KV 配置 | PPL | KV 增量 |
|---|---|---|---|
| Q4_0 | f16 | 7.50 | 基线 |
| Q4_0 | q8_0/turbo3 | 7.55 | +0.67% |
| Q4_0 | q8_0/turbo4 | 7.53 | +0.36% |
| TQ3_1S | f16 | 9.46 | 基线(TQ3) |
| TQ3_1S | q8_0/turbo3 | 9.58 | +1.22% |
600+ 配置扫描的研究发现
| 发现 | 细节 |
|---|---|
| 边界层保护 | 前 2 + 后 2 层用更高精度可恢复约 90% 的质量差距,被独立确认 |
| QJL 有害 | 论文中的 QJL 阶段损害自回归生成质量;随机投影的方差在解码步间复合累积 |
| ResidualQuant | QJL 的即用替代方案:直接存储sign(r_rotated)。同样 1-bit 预算、无随机投影,质量匹配 f16 |
| 按头分配比特 | 高熵注意力头需要多 1 bit;均匀比特分配在低熵头上浪费预算 |
| FP16 热窗口 | 保留最后 64–128 个 token 为 f16 可消除误差累积,长上下文下成本近零(128/32K = 0.4%) |
备注:该测试者的环境下 TQ4_1S 的 PPL 评估会崩溃(ggml_backend_tensor_copy断言失败),速度基准正常,正在调查中。
独立验证二:WaveboSF(RTX 4090 + RTX 5090,spiritbuun fork)
对 Llama 3.1 8B Instruct Q4_K_M 使用启用 FA 标志的 fork 测试 KV 缓存压缩,覆盖两款 GPU:RTX 4090 24GB(Ada Lovelace,SM 89)与 RTX 5090 32GB(Blackwell,SM 120,CUDA 12.8)。
RTX 4090(Ada Lovelace,SM 89)
| K | V | pp512 vs f16 | tg128 vs f16 | 备注 |
|---|---|---|---|---|
| q8_0 | turbo4 | +8.4% | -6.2% | Ada 上最佳配置 |
| turbo4 | turbo4 | +3.4% | -16.8% | 对称配置解码惩罚 |
RTX 5090(Blackwell,SM 120,CUDA 12.8)
| K | V | LA | pp512 vs f16 | tg128 vs f16 | 备注 |
|---|---|---|---|---|---|
| q8_0 | turbo4 | 1 | -3.2% | -25.2% | 非对称依然胜出 |
| turbo4 | turbo4 | 1 | -8.0% | -37.8% | 对称配置解码惩罚 |
关键结论:
- 非对称 q8_0-K / turbo4-V 在两款 GPU 上都是明确赢家,prefill 与 decode 均优于对称配置;
- 对称 turbo4/turbo4 的解码惩罚在 Ada 上比非对称差近 3 倍,在 Blackwell 上差约 1.5 倍;
- Blackwell 的解码回退是结构性的,不是 bug:Ada 使用 dp4a 整数张量核心,Blackwell 使用 fp8/fp4 张量核心,架构失配使 turbo 反量化路径在 Blackwell 上的解码开销显著高于 Ada;
- LA=1(边界层高精度保护)在两款 GPU 上都同时带来质量收益和解码提速;
- 确认非对称推荐在 Ada(SM 89)与 Blackwell(SM 120)上均成立。
解码速度:分硬件汇总
| 硬件 | 后端 | 解码 vs Q8_0 | 备注 |
|---|---|---|---|
| M5 Max 128GB | Metal | 94–102% | V2.1 融合 kernel,NR0=8 |
| M4 Max 64GB | Metal | 85–99% | 7B 上 99%,27B 上 85% |
| M2 Pro 32GB | Metal | 约 85% | |
| M1 Max 64GB | Metal | 63% | 带宽较低(400 GB/s) |
| RTX 5090 | CUDA Blackwell | 107% | 加载时转换,社区测试者 |
| 2x L40S | CUDA Ada | 81% | 数据中心 |
| Dual 4090 | CUDA Ada | 71% | 社区(CUDA) |
| RTX 4090 | CUDA Ada | 63–67% | NR0 前的融合 kernel |
| RTX 3090 | CUDA Ampere | 29% | 仅融合 kernel |
为什么 CUDA 有差异:Metal 使用 V2.1 融合 kernel 且 NR0=8(把 WHT 旋转摊销到 8 行上);CUDA 融合 kernel 更新、仍在优化中。"加载时 TQ4_1S→q8_0 转换"则完全绕开这个问题,获得 100% 原生速度。
从源码结构看,Metal 路径的关键设计是"协作式 SIMD 预旋转":不再对每个权重块做逆 WHT,而是先用simd_shuffle_xor一次性预旋转激活向量(每元素约 10 FLOPs),随后反量化退化为质心查表 + 缩放;V2.1 融合 kernel 零 threadgroup 内存占用,最大化 threadgroup 并发度以掩盖内存延迟——这正是 docs/papers/weight-compression-tq4.md 5.6 节记录的 27B 解码回退(70%→99%)的修复思路:大模型上 threadgroup 内存压力会摧毁 GPU 占用率,需要 kernel 级缓解。
回归检查:未压缩模型零回归
在所有受测硬件上,未压缩模型均无回归:
| 硬件 | 基线偏差 | 测试者 |
|---|---|---|
| M5 Max | +0.04%(噪声) | 内部(Metal) |
| M2 Pro | 噪声范围内 | 内部(Metal) |
| 2x L40S | pp -0.2%,tg +0.04%(噪声) | 社区(CUDA) |
| RTX 5090 | Q2_K 与 Q4_0 零影响 | 社区(CUDA) |
| RTX 4090(Windows) | 所有标准类型噪声范围内 | 社区(CUDA) |
| RTX 4090(WSL2) | Q4_0 到 Q6_K 全部噪声范围内 | 社区(CUDA) |
已知问题
| 问题 | 状态 | 影响 |
|---|---|---|
GCC 13.3extern构建错误 | 已修复(e9c54d5) | 仅构建 |
GCC 13/14 ops.cpp 双重extern | 已知,修复待合入 | 仅构建 |
| 上游 attn_rot 图溢出(Phi-4) | 默认已禁用 | 无用户影响 |
| CPU 断言 n>4096 | 已修复(21110eb) | 仅 CPU 回退 |
| Gemma 4 head_dim=256 崩溃 | 已修复 | 拉取最新 PR head |
| TQ4_1S PPL 评估崩溃 | 调查中 | 速度基准正常,部分配置下 PPL 路径崩溃 |
| HIP gfx1032 matmul 中止 | 上游 rocBLAS 问题 | 非 TQ 特有问题 |
常见陷阱
| 错误 | 后果 | 修复 |
|---|---|---|
| 用 Q4_K_M 而非 Q8_0 作源 | 模型反而变大 | TQ4_1S(5.0 BPW)> Q4_K(4.5 BPW)。请使用 Q8_0 源。 |
| 用标准 llama.cpp 加载压缩 GGUF | failed to read tensor info | 使用带 TQ4_1S 支持的分支构建。标准 llama.cpp 不认识类型 ID 44/45。 |
缺少--allow-requantize标志 | requantizing from type q8_0 is disabled | 在 quantize 命令中加上--allow-requantize。 |
| 对 Llama FFN 使用 Config I | PPL +16% | Llama 家族请用 Hybrid 或 Premium 配置。 |
| 同层注意力中混用 TQ 与 Q8_0 | 输出乱码 | 同一层的 4 个注意力张量必须是同一种类型(原地旋转 kernel 的硬约束,见论文 3.4 节)。 |
| Windows CUDA 运行时错误 | DLL 找不到 | 把 CUDA bin 目录(如C:\CUDA\bin\x64)加入 PATH。 |
置信度评估
| 方面 | 置信度 | 依据 |
|---|---|---|
| Metal 上可运行 | 高 | 4 款 Apple Silicon 芯片、6+ 模型、零失败 |
| CUDA Ada 上可运行 | 高 | 4090、L40S、5090,Windows + WSL2 + Linux |
| CUDA Ampere 上可运行 | 中 | 3090 已测,3070 仅 KV |
| AMD HIP 上可运行 | 中 | RX 9070 XT(RDNA 4)可用且快 30%;RX 6600(gfx1032)GPU matmul 上游损坏 |
| 压缩比(28–42%) | 高 | 所有模型与硬件上一致 |
| 质量(Qwen/Phi) | 高 | 6 个模型、5+ 测试者,PPL +0.4–3.9% |
| 质量(Mistral) | 中 | 仅 1 个模型,+0.41–1.28% |
| 质量(Llama) | 中 | 依赖配置;3B 无问题,70B 需要 Premium |
| 权重 + KV 叠加 | 高 | 4+ 次独立确认 |
| 未压缩模型无回归 | 高 | 6 个硬件平台全部通过 |
复现与参与社区验证
快速复现(5 分钟)
从 llama-cpp-turboquant fork 构建后,对 Q8_0 GGUF 生成张量类型文件并量化。以 64 层的 Qwen3.5-27B 为例(Config I,边界 2+2,完整说明见 docs/getting-started.md):
# 生成 Config I 张量类型文件 python3 -c " n_layers = 64 # 按你的模型调整(Qwen2.5-7B 是 28,Llama 70B 是 80) boundary = 2 for i in range(boundary, n_layers - boundary): for t in ['attn_q', 'attn_k', 'attn_v', 'attn_output', 'ffn_gate', 'ffn_up']: print(f'blk.{i}.{t}.weight=tq4_1s') print(f'blk.{i}.ffn_down.weight=q4_k') " > config_i.txt # 从 Q8_0 源量化 ./build/bin/llama-quantize \ --allow-requantize \ --tensor-type-file config_i.txt \ model-Q8_0.gguf model-config-i.gguf Q8_0Llama 家族使用 Hybrid 或 Premium:
# Llama Hybrid:注意力 TQ4_1S,FFN 全部 Q4_K python3 -c " n_layers = 80 # Llama 3.1 70B for i in range(2, n_layers - 2): for t in ['attn_q', 'attn_k', 'attn_v', 'attn_output']: print(f'blk.{i}.{t}.weight=tq4_1s') for t in ['ffn_gate', 'ffn_up', 'ffn_down']: print(f'blk.{i}.{t}.weight=q4_k') " > llama_hybrid.txt # Llama Premium:注意力 TQ4_1S,FFN Q5_K/Q6_K,更宽边界 python3 -c " n_layers = 80 for i in range(4, n_layers - 4): for t in ['attn_q', 'attn_k', 'attn_v', 'attn_output']: print(f'blk.{i}.{t}.weight=tq4_1s') for t in ['ffn_gate', 'ffn_up']: print(f'blk.{i}.{t}.weight=q5_k') print(f'blk.{i}.ffn_down.weight=q6_k') " > llama_premium.txt ./build/bin/llama-quantize \ --allow-requantize \ --tensor-type-file llama_hybrid.txt \ model-Q8_0.gguf model-hybrid.gguf Q8_0基准测试命令
# PPL ./build/bin/llama-perplexity -m model-config-i.gguf \ -f wikitext-2-raw/wiki.test.raw # 速度 ./build/bin/llama-bench -m model-config-i.gguf -p 512 -n 128 # 叠加 TurboQuant KV 压缩 ./build/bin/llama-bench -m model-config-i.gguf \ -p 512 -n 128 -ctk q8_0 -ctv turbo4贡献你的测试结果
在你的硬件上测试后,把结果发布到 llama-cpp-turboquant 的 PR #45 讨论区。使用统一模板以便横向对比:
Model: Params: Source quant: Q8_0 Hardware: VRAM: Setup (single/multi GPU): Before (size, BPW): After (size, BPW): Compression %: Config (Config I / Hybrid / Premium): Speed: Baseline pp512: Baseline tg128: Compressed pp512: Compressed tg128: Compressed + turbo4 KV tg128: PPL (if measured): Baseline: Compressed: Delta: Issues: Verdict (works / partial / broken):要求:源必须是 Q8_0;必须同时包含基线与压缩后的运行数据;标注是纯权重压缩还是权重+KV 叠加。崩溃和失败与成功同样有价值。
适用前提与边界
- 源量化要求:必须有 Q8_0 GGUF 源;Q4_K_M 等已低比特模型几乎没有压缩空间(论文 5.5 节在 104B 模型上实测仅 7% 收益);
- 后端现状:Metal 后端最成熟(NR0=8 融合 kernel,解码 94–102%);CUDA 可用但融合 kernel 仍在优化,加载时转 q8_0 是务实选择;AMD HIP 在 RDNA 4 上可用(130% 速度),gfx1032 受上游 rocBLAS 问题影响;
- 模型家族差异:Qwen/Phi 用 Config I(+1.0–1.9% PPL),Llama 家族必须用 Hybrid/Premium,根因(Llama 残差流对量化噪声的 6–8 倍放大)尚未完全解释;
- 约束:同一层内 4 个注意力张量必须同类型(原地旋转 kernel 约束);
head_dim >= 128的标准注意力 + FFN 架构适用; - 数据时效:本文为持续更新的活文档汇总,原始数据截至 2026-04-04,来源为 llama-cpp-turboquant PR #45 评论区、社区测试与直接贡献者报告,完整结果见 docs/weight-compression-results.md,方法与实验过程见 docs/papers/weight-compression-tq4.md。
【免费下载链接】turboquant_plus
相关推荐
跨引擎 KV Cache 保真度实测:turboquant_plus 如何在 AMD MI300X 上对比 vLLM、SGLang 与 llama.cpp 的 8-bit KV 压缩
跨引擎 KV Cache 保真度实测:turboquant_plus 如何在 AMD MI300X 上对比 vLLM、SGLang 与 llama.cpp 的
Apache Hadoop压缩编解码器基准:压缩比与速度测试
Apache Hadoop压缩编解码器基准:压缩比与速度测试 1. 引言:Hadoop中的数据压缩挑战 在大数据处理中,存储和传输效率直接影响系统性能与成本。A
大数据分布式文件系统批处理任务调度集群管理终极免费开源方案:WeChatMsg完整指南,永久保存微信聊天记忆
终极免费开源方案:WeChatMsg完整指南,永久保存微信聊天记忆 你是否曾因手机更换、系统重装或意外故障,眼睁睁看着珍贵的微信对话记录消失无踪?那些与亲友的温
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考