BitNet:微软 1-bit 大模型本地推理框架完整指南
microsoft/BitNet(bitnet.cpp)是微软开源的 1-bit 大模型官方推理框架,当前 Star 数约 41.2k,采用 MIT 协议。它专为 BitNet b1.58 这类三值(1.58-bit)大模型优化,提供了一套在 CPU 和 GPU 上都能快速、无损推理的优化内核,支持 x86 与 ARM 两种主流 CPU 架构。在 ARM CPU 上,它比同精度模型快 1.37 到 5.07 倍,模型越大收益越明显;同时能耗降低 55.4% 到 70.0%。在 x86 CPU 上,加速比达到 2.37 到 6.17 倍,能耗降低 71.9% 到 82.2%。更夸张的是,它能在单颗 CPU 上跑起 100B 参数的 BitNet b1.58 模型,速度达到每秒 5 到 7 个 token,接近人类阅读速度,让本地跑大模型不再是梦。对普通用户来说,这意味着一台普通笔记本就能跑起参数量相当于 GPT-3 级别的模型,而且不用独显,风扇都不怎么转,办公场景下也能安静使用。对企业来说,1-bit 模型意味着可以在边缘设备、工厂网关、医院内网等没网或隐私敏感的场景里部署大模型,不用把数据发到云端。微软还在持续扩展生态,2026 年 7 月刚发布了 VibeASR.cpp,用 BitNet I2_S 量化做实时多语种语音识别,在 x86(AVX2)和 ARM(NEON)上用很少线程就能做到 RTF<1,说明 1-bit 路线已经从语言模型扩展到了语音、嵌入等更多模态。对开发者来说,bitnet.cpp 还提供了在线 Demo,不想本地编译可以先在网页上试效果,满意了再拉源码,降低了试用门槛。
一、项目官方信息
| 项目 | 信息 |
|---|---|
| GitHub 仓库 | microsoft/BitNet |
| 协议 | MIT |
| 官方 2B 模型 | BitNet-b1.58-2B-4T |
| 技术报告 | arXiv:2410.16144 |
| 在线演示 | Azure 在线 Demo |
| GPU 内核 | gpu/README.md |
二、项目背景与核心特性
BitNet b1.58 是微软提出的一种新模型范式:把权重从传统的 16 位浮点压缩到三值(-1、0、+1),平均每个权重只占 1.58 bit,模型体积缩小到原来的几分之一,推理时只用加法和查表,不需要浮点乘法,因此在 CPU 上也能跑很快。bitnet.cpp 就是为这套范式做的官方推理引擎,基于大名鼎鼎的 llama.cpp 框架二次开发,内核借鉴了微软 T-MAC 的查找表方法论。对研究者来说,bitnet.cpp 的意义在于它第一次把 1-bit 模型从论文里的数字变成了普通人笔记本上能跑的东西,也证明了三值权重在真实任务上的可用性。BitNet 的论文从 2023 年 10 月的 BitNet: Scaling 1-bit Transformers 开始,到 2024 年 2 月的 The Era of 1-bit LLMs 正式提出 1.58-bit 范式,再到 2024 年 10 月 bitnet.cpp 1.0 发布,整个路线是连贯的。2024 年 11 月还发了 BitNet a4.8,把激活值也压到 4-bit,进一步提升效率。2025 年 2 月的 bitnet.cpp 系统论文 则详细讲了整个推理框架的架构和设计,想深入原理的可以看,里面有很多内核优化的细节,是学习 1-bit 推理的好材料,值得反复研读。
核心特性:
- CPU 无损推理。 在 x86 和 ARM 上都做了专门内核优化,三值权重直接用查表加速,不需要浮点运算,内存占用极小。所谓"无损",指的是和全精度模型比,输出质量几乎不掉点,但速度快了好几倍、功耗低了一大截。2026 年 1 月还发布了 CPU 推理优化版,并行内核加了可配置的分块和嵌入量化,在原实现基础上再提速 1.15 到 2.1 倍,越新的 CPU 收益越大,具体性能可以看 src/README.md,里面有不同硬件的实测数据,方便用户预估自己机器能跑多快,心里有数。
- 官方 GPU 内核。 2025 年 5 月发布了官方 GPU 推理内核,把 1-bit 推理从 CPU 扩展到 GPU,进一步加速部署。有显卡的用户可以享受更高吞吐,适合做小规模服务。GPU 内核单独放在 gpu/README.md 里,和 CPU 内核是分开的两条构建路径,用户按需选,做线上服务选 GPU,个人玩选 CPU,两者性能差好几倍,按需选择即可。
- 官方 2B 模型。 BitNet-b1.58-2B-4T 是第一个官方 BitNet b1.58 模型,24 亿参数、4 万亿 token 训练,性能对标同尺寸全精度模型,支持对话模式,拿来就能聊天。在 x86 CPU 上比全精度快 6.17 倍,ARM 上快 5.07 倍,能耗降低 82.2%(x86)和 70.0%(ARM),是目前最成熟的 1-bit 对话模型,新手入门首选,下载完就能跑,不用折腾配置,开箱即用。
- 1-bit 嵌入模型。 2026 年 7 月还发布了 BitNet-embedding-0.6B 和 BitNet-embedding-270M,是首批 1-bit 嵌入模型,CPU 推理比 F16 快 1.3 到 2.3 倍,适合做 RAG 检索和向量数据库。0.6B 模型在 8 线程预填充时比 F16 快 1.42 到 2.28 倍,270M 快 1.32 到 1.74 倍,2 bit 权重无损推理,x86 上有专门的 I2_S 转换内核,做 RAG 检索时速度快很多,是本地知识库的好搭档,配合向量数据库做企业内网检索很合适,隐私又快。
- 多内核支持。 提供 I2_S、TL1、TL2 三种量化内核,分别适配不同模型和硬件,用户按需选择。I2_S 是最新的优化内核,在 x86 上表现最好;TL1 主要在 ARM 上用;TL2 是另一种布局,部分社区模型用它。官方还在 2026 年 7 月出了 I2_S 转换和推理优化指南,专门讲嵌入模型怎么转,照着做就行,不用自己摸索,新手也能搞定,转换过程有详细步骤,照着抄就行。
- 社区模型兼容。 除了官方模型,还兼容 bitnet_b1_58-large、bitnet_b1_58-3B、Llama3-8B-1.58 以及 Falcon3 系列等社区模型,生态在慢慢长大。Falcon3 家族覆盖 1B 到 10B,Falcon-E 家族覆盖 1B 到 3B,都是 TII 做的 1.58-bit 指令模型,拿来就能做对话,选型空间很大,从 0.7B 到 10B 都有得选,用户可以根据自己的硬件挑合适的大小,不用硬上大模型,小内存也能玩。
README 附有性能对比图、2B 模型 benchmark 图、嵌入模型预填充性能图,直观展示 1-bit 模型在 CPU 上的速度和能效优势。本系列封面使用仓库官方图,保持风格统一,便于读者识别。
三、环境要求
- Python ≥ 3.10
- CMake ≥ 3.22
- Clang ≥ 18(Windows 安装 Visual Studio 2022,勾选"使用 C++ 的桌面开发"、"C++ CMake 工具"、"Git for Windows"、"C++ Clang 编译器"、"MSBuild 支持 LLVM 工具集")
- 强烈建议用 conda 管理环境
Linux 下如果用 apt 装 clang,注意 Ubuntu 22.04 默认源里 clang 版本不够,一定要加 LLVM 官方源。Debian/Ubuntu 可以用官方脚本装 Clang:bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"。注意 Clang 版本太低会编译失败,一定要 18 以上。Windows 用户建议直接装 Visual Studio 2022 社区版,它会把 CMake、Clang、MSBuild 一起装好,省得自己一个个配,新手装起来最省心。
Debian/Ubuntu 可以用官方脚本装 Clang:bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"。注意 Clang 版本太低会编译失败,一定要 18 以上。Windows 用户建议直接装 Visual Studio 2022 社区版,它会把 CMake、Clang、MSBuild 一起装好,省得自己一个个配。
四、从源码构建
Windows 用户请始终用 VS2022 的开发人员命令提示符或 PowerShell 执行以下命令,否则会找不到编译器。
- 克隆仓库(含子模块,必须加
--recursive,否则 llama.cpp 子模块拉不下来):
git clone --recursive https://github.com/microsoft/BitNet.git
cd BitNet
如果 clone 时忘了加 --recursive,后面再补 git submodule update --init --recursive 也行,不然编译时会报缺 llama.cpp 代码。国内用户 clone 慢的话可以用镜像站加速。
- 安装依赖:
conda create -n bitnet-cpp python=3.10
conda activate bitnet-cpp
pip install -r requirements.txt
用 conda 隔离环境是为了不污染系统 Python,避免和别的项目打架。
- 下载模型并构建环境:
huggingface-cli download microsoft/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
setup_env.py 会自动检测 CPU 架构、选合适的内核、编译 llama.cpp 子模块,第一次跑要等几分钟,之后增量编译就快了。国内用户下载 HuggingFace 慢的话可以加 HF_ENDPOINT=https://hf-mirror.com 走镜像。
setup_env.py 常用参数:--hf-repo 指定 HuggingFace 模型仓库(支持 1bitLLM/bitnet_b1_58-large、1bitLLM/bitnet_b1_58-3B、HF1BitLLM/Llama3-8B-1.58-100B-tokens、tiiuae/Falcon3 系列);--model-dir 指定模型目录;--quant-type 选 i2_s 或 tl1;--quant-embd 把嵌入层量化到 f16;--use-pretuned 用预调优的内核参数,省得自己调。第一次跑建议直接加 -p 用预调优参数,等熟悉了再自己折腾分块大小和线程数,新手别一上来就调,容易调崩,先用预调优参数跑通再说,别折腾。
五、使用方法
1. 基础推理
python run_inference.py -m models/BitNet-b1.58-2B-4T/ggml-model-i2_s.gguf -p "You are a helpful assistant" -cnv
第一次跑会先加载模型到内存,2B 模型加载大概几秒钟,之后就能出字了。对话模式下输入完会一直保持上下文,可以连续聊多轮。
常用参数:-m 模型路径;-n 生成 token 数;-p 提示词;-t 线程数;-c 上下文大小;-temp 温度;-cnv 开启对话模式(此时 -p 内容作为系统提示词)。对话模式适合和模型聊天,加了这个参数后体验更接近 ChatGPT,模型会记住上下文。线程数一般设到物理核心数,别超太多,不然反而慢,上下文大小按显存调,显存小就设小一点,够用就行。
2. 性能基准
python utils/e2e_benchmark.py -m /path/to/model -n 200 -p 256 -t 4
跑基准前先把模型加载完,测的是生成阶段的吞吐,不含预填充。
-m 模型路径(必填);-n 生成 token 数(默认 128);-p 提示词 token 数(默认 512);-t 线程数(默认 2)。如果想测试自家模型布局,还可以先用 utils/generate-dummy-bitnet-model.py 生成一个假模型,再跑基准,不用真的下载大模型就能测内核速度。这个工具对开发者特别有用,调内核参数时不用每次都加载完整模型,省时间,是做性能优化的好帮手,强烈推荐。
3. 从 safetensors 转换
huggingface-cli download microsoft/bitnet-b1.58-2B-4T-bf16 --local-dir ./models/bitnet-b1.58-2B-4T-bf16
python ./utils/convert-helper-bitnet.py ./models/bitnet-b1.58-2B-4T-bf16
转换完会在同目录生成 gguf 文件,之后用 run_inference.py 加载即可。
把 bf16 的 safetensors 权重转成 bitnet.cpp 可用的 gguf 格式,方便自己训练或微调后的模型上线。转换脚本会自动把权重量化到三值,不需要手动算量化参数,一键搞定,新手也能转。
4. GPU 推理
参考 gpu/README.md,官方提供了 GPU 内核,把 1-bit 推理从 CPU 扩展到 GPU,适合有显卡的用户做高吞吐服务。GPU 路径和 CPU 路径是分开构建的,需要单独配置 CUDA 环境,性能比 CPU 更高,但门槛也更高,适合做线上服务而不是个人玩,小团队用 GPU 做内部服务很合适,成本比云端大模型低很多。
六、支持的模型
选模型时主要看两点:一是你的 CPU 是 x86 还是 ARM,二是你想要对话模型还是嵌入模型。官方 2B 模型是对话用的,嵌入模型是做 RAG 检索用的,别下错。社区模型里 Llama3-8B 最大,8B 三值模型在 CPU 上也能跑,只是速度慢一点。Falcon3 系列是 TII 做的指令模型,支持多轮对话,适合做客服或助手,按场景选就行,别盲目上大模型。
官方模型包括 BitNet-b1.58-2B-4T(2.4B)、BitNet-embedding-0.6B、BitNet-embedding-270M;社区模型包括 bitnet_b1_58-large(0.7B)、bitnet_b1_58-3B(3.3B)、Llama3-8B-1.58-100B-tokens(8B)、Falcon3 家族(1B-10B)、Falcon-E 家族(1B-3B)。不同模型在 x86/ARM 上支持的内核不同,官方 README 有详细对照表,选模型前先看一眼表,避免下错权重。官方也明确说,他们用现有的开源 1-bit 模型来演示推理能力,希望 bitnet.cpp 的发布能推动更大规模、更多 token 的 1-bit 模型发展,让 1-bit 路线从实验走向生产,未来能看到 70B 级别的 1-bit 模型在普通服务器上跑,那才是真正的本地大模型,不用再买昂贵的 GPU,成本能降一个数量级。
七、常见问题
Q1:构建时 llama.cpp 在 log.cpp 里报 std::chrono 相关错误? A:这是 llama.cpp 新版本引入的问题,参考 这个 commit 修复即可,把对应代码改回去就行,改完重新跑 setup_env.py,不用全部重编译,只增量编译 llama.cpp 子模块就行,省时间。
Q2:Windows 上 conda 环境里怎么用 clang 构建?
A:先运行 clang -v 确认 clang 可用。如果提示"不是内部或外部命令",说明环境没初始化:命令提示符运行 VsDevCmd.bat -startdir=none -arch=x64 -host_arch=x64;PowerShell 运行 Import-Module 加载 Microsoft.VisualStudio.DevShell.dll 后执行 Enter-VsDevShell。初始化完就能正常调用 VS 工具链,然后再切回 conda 环境跑构建脚本,顺序别搞反,先初始化 VS 再激活 conda,不然会报找不到编译器。
八、相关链接
- 仓库:microsoft/BitNet
- 官方模型:BitNet-b1.58-2B-4T
- 技术报告:arXiv:2410.16144
- bitnet.cpp 系统论文:arXiv:2502.11880
- 基础框架:llama.cpp
- 内核方法论:T-MAC
- 1-bit 嵌入模型:BitNet-embedding-0.6B、BitNet-embedding-270M
- I2_S 转换指南:docs/bitnet-embeddings-i2s-guide.md
- CPU 优化说明:src/README.md
- VibeASR.cpp:microsoft/VibeASR.cpp
- BitNet 训练技巧:The Era of 1-bit LLMs PDF
BitNet 代表了大模型本地化的另一条路线:不是靠顶级 GPU 堆参数,而是从权重本身压缩入手,让小设备也能跑大模型。如果你受限于硬件又想体验开源大模型,bitnet.cpp 是 2026 年最值得试的项目之一。它和 llama.cpp 是两种思路:llama.cpp 是把已有 FP16 模型量化跑在 CPU 上,bitnet.cpp 是从训练阶段就用 1-bit 权重,天生就为 CPU 设计,速度更快、功耗更低,是本地大模型的未来方向之一,值得持续关注。