🚀 BitNet b1.58 2B4T - 原生1位大語言模型的擴展
本倉庫包含了 BitNet b1.58 2B4T 的權重,這是由微軟研究院開發的首個開源、原生1位的20億參數規模大語言模型(LLM)。
該模型在4萬億個標記的語料庫上進行訓練,證明了原生1位大語言模型在計算效率(內存、能源、延遲)方面具有顯著優勢的同時,還能達到與同規模領先的開放權重全精度模型相當的性能。
➡️ 技術報告:BitNet b1.58 2B4T技術報告
➡️ 官方推理代碼:microsoft/BitNet (bitnet.cpp)
✨ 主要特性
- 首個開源的原生1位20億參數規模大語言模型。
- 在計算效率(內存、能源、延遲)方面具有顯著優勢。
- 性能與同規模領先的開放權重全精度模型相當。
📦 安裝指南
要求
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": "You are a helpful AI assistant."},
{"role": "user", "content": "How are you?"},
]
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("\nAssistant Response:", response)
📚 詳細文檔
模型變體
Hugging Face上提供了該模型權重的多個版本:
模型詳情
屬性 |
詳情 |
架構 |
基於Transformer,使用BitLinear 層(BitNet框架)進行修改。使用旋轉位置嵌入(RoPE);在FFN層使用平方ReLU(ReLU²)激活函數;採用subln 歸一化;線性層或歸一化層中無偏置項。 |
量化 |
原生1.58位權重和8位激活(W1.58A8)。前向傳播期間,使用絕對值均值量化將權重量化為三元值{-1, 0, +1};使用絕對值最大值量化(每個標記)將激活量化為8位整數。關鍵的是,該模型是使用此量化方案從頭開始訓練的,而非訓練後量化。 |
參數 |
約20億 |
訓練標記 |
4萬億 |
上下文長度 |
最大序列長度為4096個標記。建議:對於需要非常長上下文的任務(超出預訓練長度或用於專門的長推理任務),建議在最終微調階段之前進行中間長序列適應/訓練。 |
訓練階段 |
1. 預訓練:使用兩階段學習率和權重衰減計劃,在公共文本/代碼和合成數學數據上進行大規模訓練。2. 監督微調(SFT):使用求和損失聚合和特定超參數調整,在遵循指令和對話數據集上進行微調。3. 直接偏好優化(DPO):使用偏好對與人類偏好對齊。 |
分詞器 |
LLaMA 3分詞器(詞彙表大小:128,256)。 |
如何使用(使用bitnet.cpp
)
請參考bitnet.cpp GitHub倉庫,獲取詳細的編譯步驟、使用示例和命令行選項。
評估
BitNet b1.58 2B4T與同規模領先的開放權重全精度大語言模型進行了評估對比。以下是關鍵結果(所有模型均為指令調優版本):
基準測試 |
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 |
訓練標記(預訓練) |
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 |
CommonsenseQA |
58.48 |
42.10 |
76.41 |
63.55 |
71.74 |
71.58 |
TruthfulQA |
43.80 |
38.66 |
46.67 |
39.90 |
41.41 |
45.31 |
TriviaQA |
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 |
HumanEval+ |
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 |
MATH-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-bench |
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使用蒸餾。
重要提示
⚠️ 重要提示
使用標準的transformers庫(即使使用所需的分支)使用此模型時,請不要期望在性能效率(速度、延遲或能源消耗方面)有所提升。
當前transformers內部的執行路徑不包含利用BitNet架構優勢所需的專門、高度優化的計算內核。通過transformers運行模型可能會導致推理速度和能源使用與該框架內的標準全精度模型相當,甚至可能更差,無論是在CPU還是GPU上。
雖然由於量化權重,您可能會觀察到內存使用減少,但主要的計算效率優勢無法通過這種標準的transformers使用路徑獲得。
要實現技術論文中展示的效率優勢,您必須使用專用的C++實現:bitnet.cpp。
免責聲明
本模型僅用於研究和開發目的。儘管已通過SFT和DPO進行了對齊,但它仍可能產生意外、有偏差或不準確的輸出。請謹慎使用。
📄 許可證
模型權重和代碼根據MIT許可證發佈。