HuggingFace镜像/bitnet-b1.58-2B-4T
模型介绍文件和版本分析
下载使用量0

BitNet b1.58 2B4T - 原生1位大语言模型的规模化探索

本仓库包含BitNet b1.58 2B4T的权重文件。该模型是由微软研究院开发的首个开源、原生1位、参数量达20亿级别的大语言模型(LLM)。

在4万亿 tokens 的语料上训练后,该模型证明了原生1位大语言模型能够达到与同等规模主流开源全精度模型相当的性能,同时在计算效率(内存、能耗、延迟)方面具有显著优势。

➡️ 技术报告: BitNet b1.58 2B4T 技术报告

➡️ 官方推理代码: microsoft/BitNet (bitnet.cpp)

模型变体

Hugging Face 上提供了该模型权重的多个版本:

  • microsoft/bitnet-b1.58-2B-4T(本仓库):包含经过压缩的1.58位权重,针对高效推理进行了优化。部署时请使用此版本。

  • microsoft/bitnet-b1.58-2B-4T-bf16:包含 BF16 格式的主权重。仅用于训练或微调。

  • microsoft/bitnet-b1.58-2B-4T-gguf:包含 GGUF 格式的模型权重,与 bitnet.cpp 库兼容,适用于 CPU 推理。

模型详情

  • 架构: 基于 Transformer,使用 BitLinear 层进行了改进(BitNet 框架)。
    • 采用旋转位置编码(RoPE)。
    • 在 FFN 层中使用平方 ReLU(ReLU²)激活函数。
    • 采用 subln 归一化。
    • 线性层和归一化层中均无偏置项。
  • 量化: 原生1.58位权重和8位激活值(W1.58A8)。
    • 权重在前向传播过程中使用绝对值均值量化(absmean quantization)量化为三元值 {-1, 0, +1}。
    • 激活值使用绝对值最大值量化(absmax quantization)量化为8位整数(按 token 进行)。
    • 关键在于,该模型是基于此量化方案从头开始训练的,而非训练后量化。
  • 参数量: ~20亿
  • 训练 tokens: 4万亿
  • 上下文长度: 最大序列长度为 4096 tokens。
    • 建议: 对于需要超长上下文的任务(超出预训练长度或用于特定的长推理任务),建议在最终微调阶段之前进行中间的长序列适配/训练。
  • 训练阶段:
    1. 预训练: 在公开文本/代码和合成数学数据上进行大规模训练,采用两阶段学习率和权重衰减策略。
    2. 有监督微调(SFT): 在指令遵循和对话数据集上进行微调,使用求和损失聚合和特定超参数调优。
    3. 直接偏好优化(DPO): 使用偏好对将模型与人类偏好对齐。
  • 分词器: LLaMA 3 分词器(词汇表大小:128,256)。

如何使用(借助transformers)

关于效率的重要提示

请注意,即使使用所需的分支版本,在标准transformers库中使用此模型时,也不要期望获得性能效率方面的提升(如速度、延迟或能耗的改善)。

transformers库当前的执行路径中并不包含利用BitNet架构优势所需的专用、高度优化的计算核心。通过transformers运行此模型时,无论是在CPU还是GPU上,推理速度和能耗都可能与该框架内标准全精度模型相当,甚至可能更差。

虽然您可能会观察到由于权重量化而减少的内存使用量,但主要的计算效率优势无法通过这种标准的transformers使用方式实现。

要实现技术论文中展示的效率优势,您必须使用专用的C++实现:bitnet.cpp。

要求

pip install git+https://github.com/shumingma/transformers.git

我们正积极与 Hugging Face 团队合作,将必要代码整合到 transformers 主库中。此安装方法未来可能会发生变化。

示例

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "microsoft/bitnet-b1.58-2B-4T"

# Load tokenizer and model
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16
)

# Apply the chat template
messages = [
    {"role": "system", "content": "You are a helpful AI assistant."},
    {"role": "user", "content": "How are you?"},
]
chat_input = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt").to(model.device)

# Generate response
chat_outputs = model.generate(chat_input, max_new_tokens=50)
response = tokenizer.decode(chat_outputs[0][chat_input.shape[-1]:], skip_special_tokens=True) # Decode only the response part
print("\nAssistant Response:", response)

如何使用(配合 bitnet.cpp)

有关详细的编译步骤、使用示例和命令行选项,请参考 bitnet.cpp GitHub 仓库。

评估

BitNet b1.58 2B4T 已与同等规模的主流开源全精度大语言模型进行了对比评估。以下是主要结果(所有模型均为指令微调版本):

基准测试LLaMA 3.2 1BGemma-3 1BQwen2.5 1.5BSmolLM2 1.7BMiniCPM 2BBitNet b1.58 2B
内存(非嵌入)2GB1.4GB2.6GB3.2GB4.8GB0.4GB
延迟(CPU 解码)48ms41ms65ms67ms124ms29ms
能耗(估算)0.258J0.186J0.347J0.425J0.649J0.028J
训练 tokens(预训练)9T*2T**18T11T1.1T4T
ARC-Challenge37.8038.4046.6743.5244.8049.91
ARC-Easy63.1763.1376.0162.9272.1474.79
OpenbookQA34.8038.8040.8046.0040.2041.60
BoolQ64.6574.2278.0475.7880.6780.18
HellaSwag60.8057.6968.2871.7170.8168.44
PIQA74.2171.9376.1276.1276.6677.09
WinoGrande59.5158.4862.8368.9861.8071.90
CommonsenseQA58.4842.1076.4163.5571.7471.58
TruthfulQA43.8038.6646.6739.9041.4145.31
TriviaQA37.6023.4938.3745.9734.1333.57
MMLU45.5839.9160.2549.2451.8253.17
HumanEval+31.1037.2050.6028.0043.9038.40
GSM8K38.2131.1656.7945.114.4058.38
MATH-50023.0042.0053.0017.6014.8043.40
IFEval62.7166.6750.1257.9136.8153.48
MT-bench5.436.406.125.506.575.85
平均值44.9043.7455.2348.7042.0554.19

*LLaMA 3.2 1B 采用了剪枝和蒸馏技术。

**Gemma-3 1B 采用了蒸馏技术。

许可证

模型权重和代码根据 MIT 许可证 发布。

免责声明

本模型仅供研究和开发使用。尽管已通过 SFT 和 DPO 努力对其进行对齐,但它仍可能产生意外、有偏见或不准确的输出。请负责任地使用。