内容提要
PrismML发布Ternary Bonsai 2 27B三元量化多模态模型,27.36B参数压缩至5.9GB,保留基座98.2%分数。但权重存于旋转基底,运行时需执行Walsh-Hadamard变换,原版llama.cpp与Ollama无法运行。TensorSharp通过显式校验变换契约、转码自定义格式接入该模型,拒绝静默跑错,代价是内存增加6%至29%,性能略慢于官方基线。
延伸解读
旋转基底:三元量化模型运行的关键
Ternary Bonsai 2 27B 的权重并非直接存储为 -1/0/+1,而是存放在一个旋转基底上。运行时必须对激活值执行 Walsh-Hadamard 变换,否则网络输出将完全错误。TensorSharp 文档明确指出,仅将权重解释为普通三元数会得到错误的网络。因此,任何推理引擎若跳过这些变换,即使能加载并生成 token,结果也是无意义的。这解释了为何原版 llama.cpp 和 Ollama 无法直接运行该模型。
TensorSharp 的显式校验与转码策略
TensorSharp 在加载权重前会校验完整的变换契约,包括变换版本、块大小、符号表等元数据。遇到未知布局时直接拒绝加载,避免静默错误。同时,它将模型转码为自定义格式,代价是内存占用增加:PQ2_0 约多 6%,PTQ1_0 约多 29%。这种用内存换兼容性和可验证性的取舍,体现了工程上的谨慎。
性能与内存的权衡
根据 TensorSharp 在 Apple M5 Pro 上的测量,模型级 decode 比官方 llama.cpp 基线慢 5.4%(PQ2)和 3.0%(PTQ1),PQ2 并发 4 的 HTTP 吞吐低 12.8%。旋转变换本身有开销,转码后的权重也更占内存。此外,KV 缓存随上下文线性增长,27B 模型约 64 KiB/token,规划内存时需叠加转码开销。这些数据表明,低比特推理的瓶颈已从压缩转移到运行时基础设施。
适用场景与限制
TensorSharp 的集成目前仅支持单设备 GGML 后端,纯托管 CPU、CUDA、MLX 和张量并行配置会被拒绝。验证覆盖了基本功能,但 262k 上下文、CUDA、Vulkan、iOS 等未经验证。对于 .NET 生态开发者,它提供了可审计、可嵌入的参考实现,但不 fork 上游库。若追求最省事路径,PrismML 官方 demo 仓库仍是普通用户的首选。
Q&A
Ternary Bonsai 2 27B 是什么模型?它的量化效果如何?
Ternary Bonsai 2 27B 是 PrismML 发布的三元量化多模态模型,将 27.36B 参数压缩至 5.9GB,权重仅用 -1、0、+1 三个值存储,配合 FP16 分组缩放。在 20 项基准上平均得分 83.9,保留基座模型 98.2% 的分数,数学与编码几乎无损,指令遵循甚至反超基座,但知识与推理、视觉各下降约 3%。
为什么原版 llama.cpp 和 Ollama 无法直接运行 Ternary Bonsai 2 27B?
因为该模型的权重存储在旋转基底上,运行时必须执行 activation 侧的 Walsh–Hadamard 变换,而该变换尚未合并进上游 llama.cpp。如果运行时跳过这些变换,输出的将是一个从未训练过的网络的结果,导致乱码或静默错误。
TensorSharp 是如何集成 Ternary Bonsai 2 27B 的?
TensorSharp 通过显式校验变换契约、转码自定义格式来接入模型。它加载权重前校验完整的 prism.hadamard.* 元数据,遇到未知变换布局直接拒绝,宁可跑不起来也不静默跑错。集成散布在五个文件中,复用现有 Qwen 3.5 实现,将 PRISM 变换插入既有路径。
TensorSharp 集成 Ternary Bonsai 2 27B 的代价是什么?
代价是内存占用增加:无损展开会增大量化负载,PQ2_0 约多 6%,PTQ1_0 约多 29%。性能也略慢于官方基线:模型级 decode 比基线慢 5.4%(PQ2)和 3.0%(PTQ1),PQ2 并发 4 的 HTTP 吞吐低 12.8%。
TensorSharp 对 Ternary Bonsai 2 27B 的验证流程包括哪些内容?
验证流程覆盖精确 raw-token 参照、单路/并行流式请求、算术、结构化 JSON、工具调用、两个投影器、解析器测试。基线是 PrismML 官方的 llama.cpp 分支(bdc23b56 提交)。文档强调,连 PQ2_0/PTQ1_0 都加载不了的上游构建不构成有效性能对比对象。
运行 Ternary Bonsai 2 27B 时内存如何规划?有哪些优化开关?
总内存 = 权重 + KV 缓存 +(用图像输入时的)视觉塔。27B 的 KV 缓存约 64 KiB/token,随上下文线性增长。PrismML 侧提供两个开关:BONSAI_KV4=1 将 KV 缓存量化为 4bit(约缩至三分之一),BONSAI_MMPROJ_CPU=1 将视觉投影器移到系统内存(释放约 0.9GiB 显存)。TensorSharp 用户还需叠加转码开销,加载后权重内存比文件体积大 6% 到 29%。
TensorSharp 集成方案有哪些已知限制?
初始集成只接受单设备 GGML backend,纯托管 CPU、直连 CUDA、MLX、张量并行配置都会被直接拒绝。验证仅为功能性冒烟测试,262k 上下文、CUDA、Vulkan、iOS、张量并行均未验证。性能目标尚未达成,且样本量有限,小幅差异不构成普遍性能优势的证据。