News Hacker|极客洞察

266 63 天前 github.com
🤨微软 BitNet:面向 CPU 的 1.58‑bit(三态)推理框架可声称跑 100B,但无已训练 100B 模型且质量/可扩展性存疑
没训练 100B 却宣称能跑 100B,谁信?

🎯 讨论背景

此讨论围绕微软在 GitHub 发布的 BitNet 项目与相关论文展开:作者提供了 bitnet.cpp(一个针对 1.58‑bit/三态权重做了大量工程优化的推理框架)和若干小规模示例模型与基准。社区在评估时把重点放在三个问题:一是仓库与宣传是否将“能在 CPU 上运行 100B”描述得过于夸大(实际上公开权重仅到 2–3B);二是 1.58‑bit(三态/trit)编码在内存带宽、位运算及解包成本上的权衡;三是原生三态训练(用 BitLinear 等替代层)与事后量化(PTQ、GGUF、int4)的成本/质量比较。讨论还拓展到硬件层面(HBM、定制向量指令、NPUs)以及大尺度训练的成本与风险。

📌 讨论焦点

标题误导与框架不是已训练模型

多数评论指明标题与报道会产生误导:GitHub 上的 bitnet.cpp 是一个为 1.58‑bit(三态)权重优化的推理框架,而不是发布了已训练的 100B 权重。仓库演示和官方可下载的权重都只涉及到 2B/3B 等小模型(有评论提到 Hugging Face 上最新的权重为 2B),社区没有找到任何可以下载或复现的 >10B、尤其是 100B 的三态模型。虽然论文/技术报告在文字里写到在 125M 到 100B 范围内进行了评估,但没有公开的 100B 权重或训练运行日志,GitHub issue 也有人指出文档容易被误读。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6]

1.58‑bit(trit)编码与实现细节

社区普遍解释 1.58‑bit 实际上就是三态(trit)编码:参数取值 {-1,0,1},信息论上 log2(3)≈1.58496 位。实现上有多种打包方法——理论上可把 5 个三态符号放入一字节,但为降低解包复杂度,BitNet/实现选择了更简单的打包或用 2 位表示以减少运算开销。对计算内核有具体影响:三态乘加可以通过位运算、xor 与 popcount 等技巧实现(评论里给出了具体的 dot 计算表达式),但也会引入拆包/展开的额外开销,项目里“1‑bit”与“1.58‑bit”用词混用导致认知混淆。

[来源1] [来源2] [来源3] [来源4] [来源5]

性能、内存带宽与能耗优势

多条评论把注意力放在工程优势上:量化后的高密度打包能显著降低内存带宽占用,这是运行大型模型在 CPU 上的主要瓶颈。若论文中的数字可复现,作者宣称单个 CPU 上对 100B 级模型能达到 5–7 tok/s,并在多线程下线性加速(有演示在 8 线程下接近 70–73 tok/s);此外报告在 CPU 推理上可节省约 70–82% 的能耗。不过有人提醒 5–7 tok/s 对阅读体验偏慢,且实际效果受限于 DRAM/HBM、缓存和平台的内存层次结构。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6]

训练成本、可扩展性与质量临界的担忧

关键分歧在于能否把小模型的正面结论放大到 100B 尺度:BitNet 的主张是用 BitLinear 等原生三态架构从头训练(通常以 bf16),而不是对已有浮点模型做极端 PTQ。评论指出这类原生训练在算力、稳定性和超参上没有成熟经验,训练一个原生 100B 三态模型的风险和成本与训练常规模型相当甚至更高。微软没有发布任何旗舰级 100B 三态权重,使得社区对可扩展性、损失地形在大尺度下的表现以及实际收益持谨慎甚至怀疑态度;也有人猜测公司内部优先级或与 GPU 生态的商业关系影响了是否投入大规模训练。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6]

现有演示与模型质量问题

多名评论者直接质疑仓库演示的输出质量:示例文本重复“水循环”段落、反复引用同一伪造参考(如“Jenkins, 2010”),整体表现被评价为接近 GPT‑2 水平且存在循环复用文本的问题。公开的基线模型规模很小(2B/3B),训练语料量也有限,因此在数学、推理等任务上表现薄弱或不稳定。虽然在某些基准或任务上小模型能取得局部不错的分数,但示例不足以证明在大尺度下依旧能保持可接受质量。

[来源1] [来源2] [来源3] [来源4] [来源5]

定制硬件与 NPU 的机会

很多评论认为三态量化在定制推理硬件上具有吸引力:两位或三态的加法/乘法在硅上实现远比浮点简单,可构建更大但更便宜的向量化指令集并把数据接入更高带宽的内存(或 HBM)。社区也指出 PC/SoC 级别的 NPUs(神经处理单元)和 iGPU 混合内核已能在某些任务上带来多倍加速与低功耗,但软件兼容性与工具链仍是门槛。还有讨论把 CPU 与内存更紧密集成(或用 SRAM 巨芯片)来化解带宽瓶颈的可行性与成本权衡。

[来源1] [来源2] [来源3] [来源4] [来源5]

量化技术路线的比较(PTQ、GGUF、int4 等)

讨论把原生三态训练与 post‑training quantization(PTQ)以及社区常用的 GGUF q2/q3 量化生态进行对比:PTQ 是在训练完成后对权重压缩,极端量化时能力往往断崖;BitNet 的立场是原生三态训练能学到更适配低位宽的表征,但代价是昂贵训练和不确定性。评论者普遍认为,对于已有大型模型,int4 或成熟的 PTQ 流程目前在成本与性能上是更现实的折中;同时也有例子显示极端量化后的模型经量化微调或校准可以部分修复质量损失。

[来源1] [来源2] [来源3] [来源4] [来源5]

📚 术语解释

trit(1.58‑bit,三态): 三态参数表示法,参数取值集合通常为 {-1,0,1},其信息量为 log2(3)≈1.58496 位(故称 1.58‑bit)。用于以比二进制更高密度编码权重以节省内存带宽,实际实现有多种字节打包策略以平衡解包开销。

BitLinear: BitLinear:BitNet 论文提出的自定义线性层,设计用于原生三态训练(从头训练模型时替换标准 Linear),通常需配合 bf16 训练流程以尽量保住性能,区别于对预训练浮点模型的事后量化。

PTQ(post‑training quantization): PTQ:在模型训练结束后对权重进行离线量化(如 int8、int4 等)以减小模型体积和加速推理,优点是快速且成本低,但在极端低位宽下往往会出现显著性能下降。

GGUF(Q2/Q3): GGUF:社区常用的模型权重存储/加载与量化格式(在 llama.cpp 生态里常见),Q2/Q3 指低比特或多态量化设置,方便本地快速加载与推理。