Transformers 文档

BitNet

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

BitNet

BitNet 用专门的 BitLinear 层替换了多头注意力(Multi-Head Attention)和前馈网络中的传统线性层。BitLinear 层使用三元精度(值为 -1、0 和 1)量化权重,并将激活量化为 8 位精度。

Alt Text
采用 BitLinear 层的 BitNet 架构。

BitNet 模型无法动态量化。它们需要在预训练或微调期间进行量化,因为它是一种量化感知训练 (QAT) 技术。在训练期间,权重通过对称的每张量量化被量化为三元值。

  1. 计算权重矩阵绝对值的平均值并用作尺度。
  2. 将权重除以尺度,对值进行四舍五入,将其限制在 -1 和 1 之间,然后重新缩放以继续进行全精度计算。
  3. 激活使用 absmax 量化(对称的每通道量化)量化到指定的比特宽度(8 位)。这包括将激活缩放到 [−128,127] 的范围。

请参阅此 PR,以使用 Nanotron 预训练或微调 1.58 位模型。对于微调,请将 Hugging Face 模型转换为 Nanotron 格式。请在此 PR 中找到转换步骤。

使用 from_pretrained() 加载 BitNet 量化模型。

from transformers import AutoModelForCausalLM
path = "/path/to/model"
model = AutoModelForCausalLM.from_pretrained(path, device_map="auto")

内核

@torch.compile 用于解包权重并执行前向传播。它实现起来非常简单,并且能显著提高速度。未来版本中将集成额外的优化内核。

资源

阅读 将 LLM 微调至 1.58 位:极致量化轻松实现,了解更多关于 BitNet 模型如何训练和微调的信息。

< > 在 GitHub 上更新