🚀 BitNet b1.58 2B4T - ネイティブ1ビットLLMのスケーリング
このリポジトリには、Microsoft Researchによって開発された、20億パラメータ規模の最初のオープンソースのネイティブ1ビット大規模言語モデル(LLM)であるBitNet b1.58 2B4Tの重みが含まれています。
このモデルは、4兆トークンのコーパスで学習されており、ネイティブ1ビットLLMが、同規模の主要なオープンウェイト、フル精度モデルと同等の性能を達成しながら、計算効率(メモリ、エネルギー、レイテンシ)において大きな利点を提供できることを示しています。
➡️ 技術レポート: BitNet b1.58 2B4T Technical Report
➡️ 公式推論コード: microsoft/BitNet (bitnet.cpp)
✨ 主な機能
モデルのバリエーション
Hugging Faceには、いくつかのバージョンのモデル重みが用意されています。
モデルの詳細
属性 |
详情 |
モデルアーキテクチャ |
Transformerベースで、BitLinear レイヤー(BitNetフレームワーク)で修正されています。Rotary Position Embeddings (RoPE) を使用し、FFNレイヤーで2乗ReLU(ReLU²)活性化関数を使用し、subln 正規化を採用しています。線形または正規化レイヤーにはバイアス項がありません。 |
量子化方式 |
ネイティブ1.58ビットの重みと8ビットの活性化(W1.58A8)です。重みは順伝播中にabsmean量子化を使用して3値{-1, 0, +1}に量子化され、活性化はabsmax量子化(トークンごと)を使用して8ビット整数に量子化されます。重要なのは、このモデルはこの量子化方式で最初から学習されており、学習後に量子化されていません。 |
パラメータ数 |
約20億 |
学習トークン数 |
4兆 |
コンテキスト長 |
最大シーケンス長は4096トークンです。非常に長いコンテキストを必要とするタスク(事前学習長を超える場合や、特殊な長期推論タスクの場合)で最適な性能を得るには、最終的な微調整段階の前に中間的な長シーケンス適応/学習を行うことをお勧めします。 |
学習段階 |
1. 事前学習: 公開テキスト/コードと合成数学データを使用した大規模な学習で、2段階の学習率と重み減衰スケジュールが使用されます。2. 教師付き微調整 (SFT): 命令追従と会話データセットで微調整され、合計損失集約と特定のハイパーパラメータチューニングが使用されます。3. 直接嗜好最適化 (DPO): 嗜好ペアを使用して人間の嗜好に合わせて調整されます。 |
トークナイザー |
LLaMA 3トークナイザー(語彙サイズ: 128,256) |
📦 インストール
必要条件
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)
高度な使用法
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 |
学習トークン数 (事前学習) |
9T* |
2T** |
18T |
11T |
1.1T |
4T |
ARC-Challenge |
37.80 |
38.40 |
46.67 |
43.52 |
44.80 |
49.91 |
ARC-Easy |
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は蒸留を使用しています。
📄 ライセンス
モデルの重みとコードは、MITライセンスの下で公開されています。
⚠️ 重要提示
このモデルを標準のtransformersライブラリで使用する場合、必要なフォークを使用しても、速度、レイテンシ、またはエネルギー消費の面での性能効率の向上は期待できません。transformers内の現在の実行パスには、BitNetアーキテクチャの利点を活用するために必要な特殊な、高度に最適化された計算カーネルが含まれていません。transformersを介してモデルを実行すると、このフレームワーク内の標準のフル精度モデルと同等、または潜在的に劣る推論速度とエネルギー使用量になる可能性があります。量子化された重みのためにメモリ使用量が減少することがありますが、主な計算効率の利点はこの標準のtransformers使用パスでは利用できません。技術論文で示されている効率的な利点を達成するには、専用のC++実装であるbitnet.cppを使用する必要があります。
💡 使用建议
このモデルは研究および開発目的で意図されています。SFTとDPOを使用して調整されていますが、予期しない、偏った、または不正確な出力を生成する可能性があります。責任を持って使用してください。