引言

随着大语言模型的发展,参数量逐渐扩大,大语言模型的训练和运行通常需要大量的计算资源,这也限制了大语言模型在一些场景尤其是端侧的应用,所以,探索剪枝,蒸馏等量化方式,已经成为大语言模型研究的一个重要方向。

近期微软开源了bitnet-b1.58-2B-4T模型,bitnet是一种在极低比特权重运行的模型架构。传统的量化如int8量化,甚至更低int4,int2等,通过进一步的降低精度,理论上提升了模型的工作效率,降低了模型工作需要的计算资源,但同时按照经验来看,量化的性能下降风险很大,随着精度的降低,保持模型的准确率越发的困难。

而量化的最终理论极限是1位,其中权重被限制为仅两个值(例如 +1 和 -1)。这就是二值神经网络 (BNN) 的领域。BitNet 的核心思想是通过采用 1 位权重表示来大幅降低 LLM 的计算成本。如果权重为二进制 (+1/-1),那么 Transformer 中计算最密集的运算——矩阵乘法——可以在很大程度上被简单的加减运算所取代。这有望带来以下优势:

  1. 大幅减少内存:存储权重仅需要一位,而不是 16 位或 32 位。

  2. 显著加速:加法在计算上比浮点乘法便宜得多。

  3. 更低的能耗:操作越简单,消耗的电量就越少。

然而,训练稳定且准确的 BNN,尤其是在 LLM 规模上,已被证明极其困难。在训练过程中直接将权重量化为 +1/-1 可能会阻碍学习过程,通常会导致与全精度模型相比质量损失显著。

虽然最初的 BitNet 概念可能旨在实现纯 1 位权重,但“b1.58”是另一种一种具体的、略有不同的量化方案。此名称对应于1.58 位表示,这在数学上源于使用三进制权重。三进制量化允许权重取三个值: +1、0 或 -1,而不仅仅是两个值 (+1, -1)。

为什么是三进制的?

  1. 引入稀疏性:将权重表示为“0”的能力使模型能够有效地“关闭”某些连接,从而引入稀疏性。这有利于提高模型容量,并且可能比纯二元网络(每个连接都必须为正或负)更容易训练。

  2. 提升表示能力(相对于 1 位):虽然精度仍然极低,但三种可能状态(+1、0、-1)比两种状态(+1、-1)提供了略高的灵活性。这种小幅提升对于维持复杂语言任务的性能至关重要。

  3. 保持效率:与二进制权重类似,三进制权重仍然允许矩阵乘法以加法/减法为主(乘以 +1、-1 或 0 较为简单)。相比 FP16,其核心效率优势基本保持不变。

“1.58 位”来自信息论计算:log₂(3) ≈ 1.58。每个参数大约需要 1.58 位信息来存储其状态(+1、0 或 -1)。

该实现可能涉及用nn.Linear自定义层替换 Transformer 架构中的标准层,该自定义BitLinear层在前向和后向传递期间对其权重强制实施此三元约束。

同时模型的size为20亿参数量,训练用的tokens为4T。

模型效果

BitNet b1.58 2B4T 与类似规模的领先开放权重全精度LLM 进行了比较。以下是主要结果(所有模型均为指令调优版本):

Benchmark

LLaMA 3.2 1B

Gemma-3 1B

Qwen2.5 1.5B

SmolLM2 1.7B

MiniCPM 2B

BitNet b1.58 2B

Memory (Non-emb)

2GB

1.4GB

2.6GB

3.2GB

4.8GB

0.4GB

Latency (CPU Decoding)

48ms

41ms

65ms

67ms

124ms

29ms

Energy (Estimated)

0.258J

0.186J

0.347J

0.425J

0.649J

0.028J

Training Tokens (Pre-train)

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

Average

44.90

43.74

55.23

48.70

42.05

54.19

最佳实践

使用transformers进行推理:

环境安装:

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

示例代码

import torch
from modelscope import AutoModelForCausalLM, AutoTokenizer

model_id = "AI-ModelScope/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?"},
]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
chat_input = tokenizer(prompt, 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['input_ids'].shape[-1]:], skip_special_tokens=True) # Decode only the response part
print("\nAssistant Response:", response)

使用bitnet.cpp推理

git clone --recursive https://github.com/microsoft/BitNet.git
cd BitNet
# 在个人电脑建议安装虚拟环境
# 在魔搭免费CPU notebook资源不需要安装虚拟环境
# python3.11 -m venv 3.11   
# source 3.11/bin/activate 

pip install -r requirements.txt
pip install modelscope

modelscope download AI-ModelScope/bitnet-b1.58-2B-4T-gguf --local_dir models/BitNet-b1.58-2B-4T

python setup_env.py -md models/BitNet-b1.58-2B-4T -q i2_s

python run_inference.py -m models/BitNet-b1.58-2B-4T/ggml-model-i2_s.gguf -p "You are a helpful assistant" -cnv

推理性能(MAC M2芯片)

 

点击链接,即可跳转体验~

https://www.modelscope.cn/models/AI-ModelScope/bitnet-b1.58-2B-4T

 

 

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐