license: mit
license_link: https://huggingface.co/microsoft/bitnet-b1.58-2B-4T/blob/main/LICENSE
language:
- en
pipeline_tag: text-generation
tags:
- 聊天
- 比特网络
- 文本生成
- 大语言模型
library_name: transformers
BitNet b1.58 2B4T - 原生1比特大语言模型规模化实践
本仓库包含由微软研究院开发的BitNet b1.58 2B4T模型权重,这是首个开源的20亿参数规模原生1比特大语言模型(LLM)。
该模型在4万亿token语料上训练完成,证明了原生1比特大语言模型在保持与同规模全精度开源模型相当性能的同时,能显著提升计算效率(内存占用、能耗、延迟)。
➡️ 技术报告: BitNet b1.58 2B4T技术报告
➡️ 官方推理代码: microsoft/BitNet (bitnet.cpp)
模型变体
Hugging Face提供多个权重版本:
模型详情
- 架构: 基于Transformer的BitNet框架改进
- 采用旋转位置编码(RoPE)
- 前馈网络使用平方ReLU(ReLU²)激活
- 应用
subln
归一化
- 线性层和归一化层无偏置项
- 量化: 原生1.58比特权重与8比特激活(W1.58A8)
- 前向传播时采用绝对值均值量化将权重转为三元值{-1, 0, +1}
- 使用绝对值最大值量化(按token)将激活转为8位整数
- 关键区别:该模型直接采用此量化方案从头训练,而非训练后量化
- 参数量: ~20亿
- 训练token量: 4万亿
- 上下文长度: 最大4096token
- 建议: 对于超出预训练长度或需要长程推理的任务,建议在最终微调前进行中间阶段的长序列适应训练
- 训练阶段:
- 预训练: 采用两阶段学习率和权重衰减策略,在公开文本/代码和合成数学数据上训练
- 监督微调(SFT): 使用指令跟随和对话数据集,采用损失聚合和特定超参调优
- 直接偏好优化(DPO): 基于人类偏好对进行对齐
- 分词器: LLaMA 3分词器(词表大小:128,256)
使用方法(配合transformers
)
重要效率说明
请注意:即使使用定制分支,通过标准transformers库运行本模型也无法获得性能优势(速度、延迟或能耗方面)
当前transformers的执行路径缺乏针对BitNet架构优化的专用计算内核。通过transformers运行时的推理速度和能耗可能与同框架下的全精度模型相当甚至更差
虽然量化权重可能降低内存占用,但技术报告中展示的主要计算效率优势必须通过专用C++实现bitnet.cpp才能获得
环境要求
pip install git+https://github.com/huggingface/transformers.git@096f25ae1f501a084d8ff2dcaf25fbc2bd60eba4
示例代码
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "microsoft/bitnet-b1.58-2B-4T"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16
)
messages = [
{"role": "system", "content": "你是一个有帮助的AI助手。"},
{"role": "user", "content": "你好吗?"},
]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
chat_input = tokenizer(prompt, return_tensors="pt").to(model.device)
chat_outputs = model.generate(**chat_input, max_new_tokens=50)
response = tokenizer.decode(chat_outputs[0][chat_input['input_ids'].shape[-1]:], skip_special_tokens=True)
print("\n助手回复:", response)
使用方法(配合bitnet.cpp
)
请参考bitnet.cpp GitHub仓库获取详细编译步骤、使用示例和命令行选项
评估结果
BitNet b1.58 2B4T与同规模主流全精度开源LLM对比评估结果(均为指令微调版本):
基准测试 |
LLaMA 3.2 1B |
Gemma-3 1B |
Qwen2.5 1.5B |
SmolLM2 1.7B |
MiniCPM 2B |
BitNet b1.58 2B |
内存占用(非嵌入层) |
2GB |
1.4GB |
2.6GB |
3.2GB |
4.8GB |
0.4GB |
延迟(CPU解码) |
48ms |
41ms |
65ms |
67ms |
124ms |
29ms |
能耗(估算) |
0.258J |
0.186J |
0.347J |
0.425J |
0.649J |
0.028J |
预训练token量 |
9T* |
2T** |
18T |
11T |
1.1T |
4T |
ARC挑战赛 |
37.80 |
38.40 |
46.67 |
43.52 |
44.80 |
49.91 |
ARC简易题 |
63.17 |
63.13 |
76.01 |
62.92 |
72.14 |
74.79 |
OpenbookQA |
34.80 |
38.80 |
40.80 |
46.00 |
40.20 |
41.60 |
BoolQ |
64.65 |
74.22 |
78.04 |
75.78 |
80.67 |
80.18 |
HellaSwag |
60.80 |
57.69 |
68.28 |
71.71 |
70.81 |
68.44 |
PIQA |
74.21 |
71.93 |
76.12 |
76.12 |
76.66 |
77.09 |
WinoGrande |
59.51 |
58.48 |
62.83 |
68.98 |
61.80 |
71.90 |
常识QA |
58.48 |
42.10 |
76.41 |
63.55 |
71.74 |
71.58 |
真实性QA |
43.80 |
38.66 |
46.67 |
39.90 |
41.41 |
45.31 |
琐事QA |
37.60 |
23.49 |
38.37 |
45.97 |
34.13 |
33.57 |
MMLU |
45.58 |
39.91 |
60.25 |
49.24 |
51.82 |
53.17 |
人类评估+ |
31.10 |
37.20 |
50.60 |
28.00 |
43.90 |
38.40 |
GSM8K |
38.21 |
31.16 |
56.79 |
45.11 |
4.40 |
58.38 |
数学500题 |
23.00 |
42.00 |
53.00 |
17.60 |
14.80 |
43.40 |
IFEval |
62.71 |
66.67 |
50.12 |
57.91 |
36.81 |
53.48 |
MT基准测试 |
5.43 |
6.40 |
6.12 |
5.50 |
6.57 |
5.85 |
平均分 |
44.90 |
43.74 |
55.23 |
48.70 |
42.05 |
54.19 |
*LLaMA 3.2 1B采用剪枝与蒸馏技术
**Gemma-3 1B采用蒸馏技术
许可协议
模型权重与代码基于MIT许可证发布
偏见、风险与限制
模型预测可能延续训练数据中的偏见
对非英语语言和特定领域的支持有限
存在生成不准确或有害内容的风险
Bitnet模型在回答选举相关查询时错误率较高,可能提供不准确或非权威的选举信息。我们正在改进该领域的表现。用户应通过所在地区选举机构核实选举相关信息
免责声明
不建议未经充分测试就将BitNet b1.58用于商业或实际应用。本模型仅供研发目的使用。尽管通过SFT和DPO进行了对齐,仍可能产生意外、偏见或不准确的输出。请负责任地使用