魔搭ModelScope社区 04月24日 22:03
微软推出bitnet-b1.58-2B-4T:极致的量化,小巧而强大
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

微软推出的BitNet-b1.58-2B-4T模型,通过创新的三进制量化技术,在保持强大性能的同时,显著降低了模型大小和计算成本,为大语言模型在资源受限环境中的应用提供了新的可能性。该模型在指令调优版本中表现出色,并提供了便捷的推理方法,包括使用transformers库和bitnet.cpp,方便用户体验和部署。

💡BitNet-b1.58-2B-4T模型采用了三进制量化方案,即权重可以取三个值:+1、0或-1,而非传统的二值化(+1/-1)。

✨三进制量化引入了稀疏性,通过“0”值有效地“关闭”某些连接,提高模型容量,并可能使其更易于训练。

⚡️三进制权重在保持低精度的同时,提供了比二值权重更强的表示能力,有助于维持复杂语言任务的性能。

🚀与FP16相比,三进制权重仍然允许矩阵乘法以加减运算为主,保持了核心效率优势,从而降低了计算成本和能耗。

💻模型提供了两种推理方式,一是使用transformers库,二是使用bitnet.cpp,方便用户在不同环境下进行体验和部署。

2025-04-24 19:46 浙江

微软推出的bitnet-b1.58-2B-4T模型通过采用三进制量化方法,在大幅降低模型大小和计算成本的同时,保持了强大的性能,为大语言模型的应用提供了更高效的解决方案。

01

引言



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


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

而量化的最终理论极限是1位,其中权重被限制为仅两个值(例如 +1 和 -1)。


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


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

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

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


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


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


为什么是三进制的?


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


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


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


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


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

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


02

模型效果



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


03

最佳实践



使用transformers进行推理:

环境安装:

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

    示例代码

      import torchfrom modelscope import AutoModelForCausalLM, AutoTokenizermodel_id = "AI-ModelScope/bitnet-b1.58-2B-4T"# Load tokenizer and modeltokenizer = AutoTokenizer.from_pretrained(model_id)model = AutoModelForCausalLM.from_pretrained(    model_id,    torch_dtype=torch.bfloat16)# Apply the chat templatemessages = [    {"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 responsechat_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 partprint("\nAssistant Response:", response)

      使用bitnet.cpp推理

        git clone --recursive https://github.com/microsoft/BitNet.gitcd BitNet# 在个人电脑建议安装虚拟环境# 在魔搭免费CPU notebook资源不需要安装虚拟环境# python3.11 -m venv 3.11   # source 3.11/bin/activate pip install -r requirements.txtpip install modelscopemodelscope download AI-ModelScope/bitnet-b1.58-2B-4T-gguf --local_dir models/BitNet-b1.58-2B-4Tpython setup_env.py -md models/BitNet-b1.58-2B-4T -q i2_spython run_inference.py -m models/BitNet-b1.58-2B-4T/ggml-model-i2_s.gguf -p "You are a helpful assistant" -cnv

        推理性能(MAC M2芯片)


        点击阅读原文,即可跳转体验~



        👇点击关注ModelScope公众号获取
        更多技术信息~



        阅读原文

        跳转微信打开

        Fish AI Reader

        Fish AI Reader

        AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

        FishAI

        FishAI

        鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

        联系邮箱 441953276@qq.com

        相关标签

        BitNet 三进制量化 大语言模型 模型压缩
        相关文章