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

BitNet b1.58 2B4T - 原生1位大语言模型的扩展

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

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

➡️ 技术报告: 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 框架)。
    • 使用 Rotary Position Embeddings (RoPE) 旋转位置嵌入。
    • 在 FFN 层中使用平方 ReLU(ReLU²)激活函数。
    • 采用 subln 归一化。
    • 线性层和归一化层中无偏置项。
  • 量化: 原生1.58位权重和8位激活值(W1.58A8)。
    • 权重在前向传播过程中使用绝对均值量化(absmean quantization)量化为三元值 {-1, 0, +1}。
    • 激活值使用绝对最大值量化(absmax quantization,每 token)量化为8位整数。
    • 关键是,该模型是使用此量化方案从头开始训练的,而非训练后量化。
  • 参数: ~20亿
  • 训练 Tokens: 4万亿
  • 上下文长度: 最大序列长度为4096 tokens。
    • 建议: 对于需要超长上下文的任务(超出预训练长度或用于专门的长推理任务),建议在最终微调阶段之前进行中间的长序列适配/训练。
  • 训练阶段:
    1. 预训练: 使用两阶段学习率和权重衰减策略,在大规模公开文本/代码和合成数学数据上进行训练。
    2. 监督微调(SFT): 使用求和损失聚合和特定超参数调优,在指令遵循和对话数据集上进行微调。
    3. 直接偏好优化(DPO): 使用偏好对与人类偏好对齐。
  • 分词器: LLaMA 3 Tokenizer(词汇表大小: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
训练 token 量(预训练)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 对其进行了对齐优化,但仍可能产生意外、有偏见或不准确的输出。请负责任地使用。