BitNet

GitHub
1.9k 172 较难 1 次阅读 4天前MIT开发框架其他语言模型
AI 解读 由 AI 自动生成,仅供参考

BitNet 是一个基于 PyTorch 实现的开源项目,旨在将"1-bit 量化”技术应用于大型语言模型(LLM)。它核心解决了传统大模型参数量巨大、计算资源消耗高且推理速度慢的难题。通过将 Transformer 架构中的线性层替换为独特的 BitLinear 模块,BitNet 能将模型权重压缩至极致(接近 1.58 比特),在大幅降低显存占用和提升推理效率的同时,努力保持模型的预测性能。

该项目特别适合 AI 研究人员、深度学习开发者以及对模型轻量化有迫切需求的技术团队使用。其最大的技术亮点在于极简的集成方式:用户只需将代码中标准的 nn.Linear 层替换为 BitLinear 模块,即可快速构建或改造模型。此外,BitNet 还引入了结合多分组查询注意力机制(MGQA)的 BitAttention,进一步优化了长上下文处理能力和解码速度。需要注意的是,由于架构特性的改变,使用 BitNet 通常需要从头训练或对模型进行专门的微调,无法直接作用于已训练好的传统浮点模型。对于希望探索超低比特大模型前沿技术、或在有限硬件资源下部署高效 AI 应用的开发者而言,BitNet 提供了一个极具参考价值的实践框架。

使用场景

某边缘计算团队正致力于将大型语言模型部署到资源受限的物联网网关设备上,以提供本地化的智能客服响应。

没有 BitNet 时

  • 显存占用过高:传统 Transformer 模型中大量的浮点数线性层导致显存需求巨大,远超边缘设备(如 Jetson 系列)的承载能力,无法加载完整模型。
  • 推理延迟严重:在低算力芯片上进行高精度的浮点矩阵乘法运算耗时过长,用户发出请求后需等待数秒才能收到回复,体验极差。
  • 能耗难以控制:高频的浮点运算导致设备功耗激增,电池供电场景下续航时间大幅缩短,且容易引发过热降频。
  • 部署成本高昂:为了运行模型,不得不升级硬件或依赖云端推理,增加了额外的网络带宽成本和服务器开支。

使用 BitNet 后

  • 显存压缩显著:通过将 nn.Linear 替换为 BitLinear 模块,模型权重被量化为 1-bit,显存占用降低至原来的几分之一,轻松在边缘设备上跑通大模型。
  • 推理速度飞跃:利用 1-bit 二值化特性,复杂的乘法运算被简化为高效的按位加法和移位操作,首字生成延迟从秒级降至毫秒级,实现流畅对话。
  • 能效比大幅提升:极简的计算逻辑大幅降低了芯片负载,设备发热量明显减少,电池续航时间成倍延长,适合长期无人值守运行。
  • 本地化部署落地:无需依赖云端即可在低成本硬件上完成训练微调与推理,彻底消除了网络延迟隐患并保障了数据隐私安全。

BitNet 通过极致的 1-bit 量化架构,成功打破了大模型在边缘设备上的算力与存储瓶颈,让高性能 AI 真正走向端侧落地。

运行环境要求

操作系统
  • 未说明
GPU
  • 可选但推荐用于加速(特别是使用优化的 CUDA Kernel 时)
  • 需 NVIDIA GPU 支持 CUDA,显存大小取决于模型规模(示例代码涉及大矩阵运算),具体版本未说明
内存

未说明

依赖
notes1. 核心功能基于 PyTorch 实现。2. 若使用优化的 CUDA GEMM 内核,需运行 'python setup.py build_ext --inplace' 进行本地编译。3. 重要提示:现有预训练模型无法直接替换线性层使用 BitLinear,必须从头训练或进行微调。4. 项目包含多种变体(如 BitNetTransformer, BitMamba, OneBitViT 等)及针对 Hugging Face 模型的替换工具。5. 部分新功能(如 BitLinear 1.5)仍处于开发阶段,可能存在已知 bug。
python3.x (通过 pip3 安装推断)
torch
transformers (用于 Hugging Face 集成)
BitNet hero image

快速开始

多模态

BitNet

bitnet PyTorch中对论文《BitNet:为大型语言模型扩展1位Transformer》中的线性方法和模型的实现

论文链接:

BitLinear = 张量 -> 层归一化 -> 二值化 -> 绝对最大量化 -> 反量化

“BitNet架构的实现非常简单,只需替换Transformer中的线性投影(即PyTorch中的nn.Linear)即可。”——BitNet真的很容易实现,只需将线性层替换成BitLinear模块!

新闻

  • 新迭代 🔥 论文《1位LLM时代:所有大型语言模型都在1.58位内》提出了全新的迭代版本,我们正在实现它。加入Agora Discord并贡献你的力量吧!点击加入
  • 新优化 第一个BitLinear已经优化完毕,我们现在有了一个将BitLinear融入注意力机制的BitAttention BitMGQA。多组查询注意力因其快速解码和长上下文处理能力而广受认可,感谢Frank提供的易于使用的实现!
  • BitLinear 1.5发布 🔥:新的BitLinear 1.5仍在开发中 🔥 文件在此 目前仍存在一些问题,比如反量化算法,而且我们还需要用逐元素相加替代乘法运算。如果你能在这方面提供帮助,那就太棒了。
  • 注意:要使用BitLinear,模型显然需要从头开始进行微调;仅仅在已训练好的模型中更换线性方法是行不通的。请务必进行微调或从零开始训练。

致谢

  • Dimitry、Nullonix:感谢他们的分析以及代码审查与修订工作
  • Vyom:感谢他提供了4080显卡用于训练!

安装

pip3 install bitnet

使用

我们在本项目及examples文件夹中提供了丰富的示例脚本。如果你在Discord上需要某个用例的帮助,请随时告知我们!

BitLinear

  • 这是论文中的主要创新——BitLinear层的示例!
import torch

from bitnet import BitLinear

# 输入
x = torch.randn(10, 1000, 512)

# BitLinear层
layer = BitLinear(512, 400)

# 输出
y = layer(x)

print(y)

BitLinearNew

import torch
from bitnet import BitLinearNew

# 创建一个形状为(16, 10)的随机张量
x = torch.randn(16, 1000, 512)

# 创建一个输入大小为512、输出大小为20、具有2个组的BitLinearNew实例
layer = BitLinearNew(
    512,
    20,
)

# 将输入x通过BitLinearNew层进行前向传播
output = layer(x)

# 打印输出张量及其形状
print(output)
print(output.shape)

BitNetTransformer

  • 完整实现了图示中的Transformer结构,包含多头注意力和BitFeedforward层
  • 不仅可用于文本处理,还可用于图像,甚至视频或音频处理
  • 全面支持残差连接和跳跃连接,以促进梯度流动
# 导入必要的库
import torch
from bitnet import BitNetTransformer

# 创建一个随机整数张量
x = torch.randint(0, 20000, (1, 1024))

# 初始化BitNetTransformer模型
bitnet = BitNetTransformer(
    num_tokens=20000,  # 输入中唯一标记的数量
    dim=1024,  # 输入和输出嵌入的维度
    depth=6,  # Transformer层数
    heads=8,  # 注意力头数
    ff_mult=4,  # 前馈网络中隐藏层维度的倍增因子
)

# 将张量通过Transformer模型传递
logits = bitnet(x)

# 打印输出张量的形状
print(logits)

BitAttention

该注意力机制已被修改为使用BitLinear代替默认的线性投影。同时,它采用了多组查询注意力而非常规多头注意力,以实现更快的解码速度和更长的上下文处理能力。

import torch
from bitnet import BitMGQA

# 创建一个形状为(1, 10, 512)的随机张量
x = torch.randn(1, 10, 512)

# 创建一个输入大小为512、具有8个注意力头和4层的BitMGQA模型
gqa = BitMGQA(512, 8, 4)

# 将输入张量通过BitMGQA模型传递,并获取输出及注意力权重
out, _ = gqa(x, x, x, need_weights=True)

# 打印输出张量和注意力张量的形状
print(out)

BitFeedForward

  • 如图所示的前馈网络,包含BitLinear和GELU:
  • 线性层 -> GELU -> 线性层
  • 你还可以添加Dropout、层归一化或其他层,以构建更强大的前馈网络。
import torch
from bitnet import BitFeedForward

# 创建一个形状为(10, 512)的随机输入张量
x = torch.randn(10, 512)

# 创建一个BitFeedForward实例,参数如下:
# - input_dim: 512
# - hidden_dim: 512
# - num_layers: 4
# - swish: True(使用Swish激活函数)
# - post_act_ln: True(在每次激活后应用层归一化)
# - dropout: 0.1(以0.1的概率应用Dropout)
ff = BitFeedForward(512, 512, 4, swish=True, post_act_ln=True, dropout=0.1)

# 将输入张量x通过BitFeedForward网络处理
y = ff(x)

# 打印输出张量的形状
print(y)  # torch.Size([10, 512])

推理

from bitnet import BitNetInference

bitnet = BitNetInference()
bitnet.load_model("../model_checkpoint.pth")  # 下载模型
output_str = bitnet.generate("那只狗跳过了 ", 512)
print(output_str)

Hugging Face使用

import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer

from bitnet import replace_linears_in_hf

# 从Hugging Face的Transformers库加载模型
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# 将线性层替换为BitLinear
replace_linears_in_hf(model)

# 示例待分类文本
text = "将此处替换为你的文本"
inputs = tokenizer(
    text, return_tensors="pt", padding=True, truncation=True, max_length=512
)

# 进行推理
model.eval()  # 将模型设置为评估模式
with torch.no_grad():
    outputs = model(**inputs)
    predictions = torch.nn.functional.softmax(outputs.logits, dim=-1)
    print(predictions)

# 处理预测结果
predicted_class_id = predictions.argmax().item()
print(f"预测的类别ID:{predicted_class_id}")

# 如果你知道分类标签,可以将预测的类别ID映射到具体的标签上
# labels = ["标签1", "标签2", ...]  # 定义与模型类别对应的标签
# print(f"预测的标签:{labels[predicted_class_id]}")

替换PyTorch模型中的线性层

import torch
from torch import nn
from bitnet import replace_linears_in_pytorch_model

# 定义一个简单模型
model = nn.Sequential(
    nn.Linear(10, 20),
    nn.ReLU(),
    nn.Linear(20, 30),
)

print("替换前:")
print(model)

# 将 nn.Linear 替换为 BitLinear
replace_linears_in_pytorch_model(model)

print("替换后:")
print(model)

# 现在可以使用该模型进行训练或推理
# 例如,将一个随机输入传递给模型
input = torch.randn(1, 10)
output = model(input)

优化的 CUDA 内核

python setup.py build_ext --inplace

import torch
import gemm_lowbit_ext  # 导入编译后的模块

# 示例用法
a = torch.randn(10, 20, dtype=torch.half, device='cuda')  # 示例张量
b = torch.randn(20, 30, dtype=torch.half, device='cuda')  # 示例张量
c = torch.empty(10, 30, dtype=torch.half, device='cuda')  # 输出张量

w_scale = 1.0  # 示例缩放因子
x_scale = 1.0  # 示例缩放因子

# 调用自定义的 CUDA GEMM 操作
gemm_lowbit_ext.gemm_lowbit(a, b, c, w_scale, x_scale)

print(c)  # 查看结果

BitLora

BitLora 的实现!

import torch
from bitnet import BitLora

# 随机文本张量
x = torch.randn(1, 12, 200)

# 创建 BitLora 模型实例
model = BitLora(in_features=200, out_features=200, rank=4, lora_alpha=1)

# 进行前向传播
out = model(x)

# 打印输出张量的形状
print(out.shape)

BitMamba

import torch
from bitnet import BitMamba

# 创建一个大小为 (2, 10)、值在 0 到 100 之间的随机张量
x = torch.randint(0, 100, (2, 10))

# 创建一个 BitMamba 模型实例,输入大小为 512,隐藏层大小为 100,输出大小为 10,深度为 6
model = BitMamba(512, 100, 10, 6, return_tokens=True)

# 将输入张量传递给模型并获取输出
output = model(x)

# 打印输出张量
print(output)

# 打印输出张量的形状
print(output.shape)

BitMoE

import torch
from bitnet.bit_moe import BitMoE

# 创建输入张量
x = torch.randn(2, 4, 8)

# 创建一个指定输入和输出维度的 BitMoE 模型
model = BitMoE(8, 4, 2)

# 对模型进行前向传播
output = model(x)

# 打印输出
print(output)

1 位视觉 Transformer

这个想法突然冒出来,但看起来非常有趣,因为你可以利用 bitlinear 来处理视觉任务,实现超高压缩。如果能编写一个脚本,我们愿意提供计算资源来在 ImageNet 上训练它。接下来的阶段就是训练一个视觉-语言联合模型,比如 gpt-4o。

import torch
from bitnet import OneBitViT

# 创建 OneBitViT 模型实例
v = OneBitViT(
    image_size=256,
    patch_size=32,
    num_classes=1000,
    dim=1024,
    depth=6,
    heads=16,
    mlp_dim=2048,
)

# 生成一个随机图像张量
img = torch.randn(1, 3, 256, 256)

# 将图像传递给 OneBitViT 模型以获得预测
preds = v(img)  # (1, 1000)

# 打印预测结果
print(preds)

许可证

MIT

引用

@misc{2310.11453,
Author = {Hongyu Wang and Shuming Ma and Li Dong and Shaohan Huang and Huaijie Wang and Lingxiao Ma and Fan Yang and Ruiping Wang and Yi Wu and Furu Wei},
Title = {BitNet: Scaling 1-bit Transformers for Large Language Models},
Year = {2023},
Eprint = {arXiv:2310.11453},
}

待办事项

  • 再次检查 BitLinear 的实现,确保其完全符合论文中的描述
  • 实现 BitNetTransformer 的训练脚本
  • 在 Enwiki8 数据集上进行训练,复制 Lucidrains 仓库中的代码和数据
  • 基准测试性能
  • 研究针对非可微反向传播的直通估计器
  • 实现 BitFeedForward
  • 清理代码库
  • 为每个模块添加单元测试
  • 实现来自 论文 的新版本 BitNet1.5b
  • 在 CUDA 中实现 BitNet15b
  • 实现低比特 GEMM CUDA 内核

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|2天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|3天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

144.7k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.9k|★★☆☆☆|2天前
开发框架图像Agent

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|昨天
插件开发框架

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|2天前
语言模型图像Agent