BitNet.cpp 是专为 1 位大型语言模型 (LLM),特别是 BitNet b1.58 模型设计的官方推理框架。本文档介绍了 BitNet.cpp 系统的核心架构、组件和功能。有关环境设置的信息,请参阅入门;有关运行推理的详细说明,请参阅运行推理。
BitNet.cpp 提供了一套优化的内核,可在 CPU 硬件上实现 1.58 位模型的快速无损推理。该框架致力于在消费级硬件上运行三元权重模型时实现最大性能和能源效率,并对 ARM 和 x86 CPU 架构进行了特别优化。
主要功能包括
BitNet.cpp 扩展了 llama.cpp 框架,并针对 1 位模型推理进行了专门优化。该系统由几个核心组件协同工作,以提供高效的模型执行。
BitNet.cpp 框架基于 llama.cpp 构建,并添加了用于处理 1 位模型的专用组件
来源:README.md9-11 README.md34-36
BitNet.cpp 的核心创新在于其专门的内核实现,可高效处理 1 位/三元权重。该系统利用 T-MAC 首创的查找表方法,实现了显著的性能提升。
关键优化技术包括
BitNet.cpp 在运行 1 位模型时,与标准实现相比可提供显著的性能提升
| CPU 架构 | 加速比 | 能耗降低 |
|---|---|---|
| ARM CPU | 1.37 倍 - 5.07 倍 | 55.4% - 70.0% |
| x86 CPU | 2.37 倍 - 6.17 倍 | 71.9% - 82.2% |
这些性能提升对于大型模型更为显著,使得 BitNet.cpp 在消费级硬件上运行大型模型时特别有效。该框架使得在单个 CPU 上运行高达 100B 参数的模型,其速度可与人类阅读速度相媲美(每秒 5-7 个 token)。
来源:README.md11
BitNet.cpp 官方支持以下模型
| 模型 | 参数 | ARM 支持 | x86 支持 |
|---|---|---|---|
| BitNet-b1.58-2B-4T | 2.4B | TL1, I2_S | TL2, I2_S |
| bitnet_b1_58-large | 0.7B | TL1, I2_S | TL2, I2_S |
| bitnet_b1_58-3B | 3.3B | TL1 | TL2 |
| Llama3-8B-1.58 | 8.0B | TL1, I2_S | TL2, I2_S |
| Falcon3 系列 | 1B-10B | TL1, I2_S | TL2, I2_S |
该框架支持不同的内核类型
BitNet.cpp 工作流包括两个主要阶段:模型准备和推理执行。
设置过程由 setup_env.py 协调,它执行以下操作:
convert-hf-to-gguf-bitnet.py 将 Hugging Face 模型转换为 GGUF 格式来源:README.md143-183 README.md184-203
推理过程通过 run_inference.py 启动,它执行以下操作:
llama-cli 可执行文件构建适当的命令BitNet.cpp 利用模块化架构,与 llama.cpp 集成,同时添加了用于 1 位模型推理的专用组件。
该系统包含几个协同工作的关键组件
setup_env.py):协调整个设置过程convert-hf-to-gguf-bitnet.py):将 Hugging Face 模型转换为 GGUF 格式codegen_tl1.py, codegen_tl2.py):生成适用于 ARM 和 x86 的优化内核run_inference.py):提供用户友好的推理运行接口该系统动态生成针对特定模型和硬件平台量身定制的优化内核,从而实现最大性能。内核中使用的查找表方法显著加速了矩阵乘法运算,这是 LLM 推理中的计算瓶颈。
来源:README.md144-203 README.md204-231
BitNet.cpp 基于 llama.cpp 框架,并通过为 1 位模型提供专用功能对其进行了扩展。该集成利用了 llama.cpp 成熟的推理基础设施,同时专门为三元权重添加了优化的内核和模型处理。
有关以下内容的更多详细信息: