西风发自凹非寺
量子位 | 公众号 QbitAI
微软以小搏大,发布首个开源 2B 参数规模“原生 1bit”LLM——
BitNet b1.58 2B4T,单 CPU 就能跑,性能与同规模全精度开源模型相当。
它采用三进制{-1, 0, 1}存储权重,相较于传统的 16 位浮点数可大幅降低显存需求。
只需 0.4GB 内存即可运行。
基于 4T token 语料训练,BitNet b1.58 2B4T 在保持性能的同时,计算效率突出。
单个 CPU 即可达到“与人类阅读速度”相当的速度,每秒5-7 个 token,CPU 端解码延迟 29ms,能耗低至 0.028J。
这种效率使其可在普通笔记本电脑甚至边缘设备上实时运行。
例如在苹果 M2 CPU 上快速运行:
另外值得一提的是,BitNet b1.58 2B4T 具有原生训练优势,与训练后量化(PTQ)模型对比,避免了 PTQ 常见的性能衰减
BitNet b1.58 2B4T 刚发布就吸引了大量网友点赞关注,作者们也当起了自己个儿的自来水。
如何实现原生 1bit?话不多说,一起来看看技术详情。
权重映射为三元值{-1, 0, +1}
BitNet b1.58 2B4T 模型基于 Transformer 架构,对核心组件进行了系统性改造。
传统 LLM 依赖 16bit 或 32bit 浮点数存储权重,而 BitNet b1.58 2B4T 采用一种称为absmean 的量化方案,将权重映射为三元值{-1, 0, +1},平均每个权重仅需 1.58bit(log₂3≈1.58)来表示。
模型内存占用骤降至 0.4GB,仅为同类全精度模型的1/5-1/12。
另外,线性投影中的激活值被量化为 8bit 整数,采用基于每 token 的absmax 量化策略,团队还引入subln 归一化,增强量化训练稳定性。
其它关键设计包括:
- 激活函数:前馈网络(FFN)子层采用 ReLU²替代常见的 SwiGLU,通过提升模型稀疏性,优化了 1bit 环境下的计算特性。
- 位置编码:使用旋转位置嵌入(RoPE)。
- 偏置消除:与 Llama 等架构一致,所有线性层和归一化层均移除偏置项,减少参数量并简化量化流程。
训练方面,BitNet b1.58 2B4T 采用三阶段训练:大规模预训练监督微调(SFT)和直接偏好优化(DPO)。
先是大规模预训练,模型经历了两阶段学习率调度:得益于 1bit 模型的训练稳定性,初期采用高学习率快速收敛;中期骤降至低水平,使模型能在高质量数据上精细化调整。配合动态权重衰减策略,模型在保持泛化能力的同时避免过拟合。
监督微调(SFT)阶段,值得注意的是,训练中采用损失函数求和而非平均策略,并延长了训练轮次,这一调整被证明对低精度模型的收敛至关重要。
直接偏好优化(DPO)阶段,基于 UltraFeedback、MagPie 等人类偏好数据集,模型通过无奖励模型的直接优化,提升了回答的安全性与用户满意度,避免了传统 RLHF 的高计算成本。
实验效果方面,BitNet b1.58 2B4T 内存占用仅为 0.4GB,CPU 端解码延迟 29ms,能耗低至 0.028J。
在数学推理任务 GSM8K 中,BitNet 以 58.38 的准确率远超 Llama 3.2-1B(38.21)和 Qwen2.5-1.5B(56.79);在常识推理任务 WinoGrande 中,BitNet 71.90 的得分超同类模型均值(63.55)。
团队特别指出,BitNet b1.58 2B4T 具有原生训练优势。与训练后量化(PTQ)模型对比,BitNet 的原生 1bit 训练策略避免了 PTQ 常见的性能衰减。
参数更大的 Llama3-8B 模型量化至 1bit 后,也难打 BitNet b1.58 2B4T。
和其它 1bit 模型相比,BitNet b1.58 2B4T 也有显著更强的整体性能,绝大多数基准测试中取得 SOTA。
有关 BitNet b1.58 2B4T 的具体表现,再来看几个例子。
让它生成几个笑话,笑话简短但也蛮有意思:稻草人为何成为成功的神经外科医生?回答是因为它在自己的领域很杰出(outstanding in his field)。
单 CPU 生成 97 个 token,总耗时 3.452 秒,每秒处理 28.1 token。
再让它基于 2000 年的背景,让一位 PowerPC 处理器爱好者和一位英特尔处理器爱好者进行五行辩论。
BitNet b1.58 2B4T 生成结果也很快,并且反映了那个时代科技行业的竞争特性。
微软在 1 bit LLM 上的探索
1 bit LLM 的实现方法,微软其实早在 2023 年就有相关研究,当时就称为 BitNet,用 BitLinear 替换了 nn.Linear
之后,微软原班人马在上一篇论文的基础之上做了优化,提出 BitNet b1.58,在原始 BitNet 的基础上增加了一个额外的0 值
也就是“The Era of 1-bit LLMs”这篇论文,用 6 页研究引发网友广泛关注。
这种方法发布后,也有不少人在这项研究的基础之上进行探索。Huggingface Transformers 还曾整合了 BitNet b1.58,运用一些技巧,使得现有模型可以直接微调到 1.58bit。
接着,微软还开发并开源了针对 GPU 和 CPU 平台的专用推理库
BitNet b1.58 采用独特量化方案(1.58bit 权重和 8bit 激活值,W1.58A8)需要专门的实现,标准深度学习库通常缺乏针对这种混合精度、低比特格式的优化内核,微软开发了专门针对 W1.58A8 矩阵乘法的自定义 CUDA 内核。
另外,微软还开源了 bitnet.cpp——一个用于 1 bit LLM CPU 推理的官方参考 C++ 库,提供针对标准 CPU 架构优化的内核,旨在高效适配模型的特定量化方案,尽可能避免通用量化库的开销或复杂的底层位操作。
技术报告:https://arxiv.org/abs/2504.12285