0帧起手本地跑一下BitNet

前言

BitNet是微软近期推出的极限精简的推理框架,官方的介绍里,详细介绍了它的架构优势,以及和其他模型的对比实验,总结起来就是不挑设备,不占资源,不减性能!俩字儿牛x,仨字儿很牛x,四个字儿....

但毕竟还是小尺寸模型,笔者在本地试了一下,多数情况下基本是不可用的哈,但在边缘计算场景可能会很有用武之地的,算是个小灵通吧。大家感兴趣可以到官方仓库看一下。

地址:github.com/microsoft/B...

这里呢,咱们就从开发者角度,0帧起手,在本地跑一下他这个模型小灵通~

环境配置

虽然咱这是0帧起手,但一些常见的环境安装和配置,也会一笔带过,给出官方文档地址,不过多赘述。也正犹豫是0帧起手,所以各路大神们可以略过啦

此外,这里笔者的演示环境是在Windows环境。

c++相关环境

windows环境下,官方文档推荐大家安装Visual Studio 2022,在Installer中,包含了运行本模型需要的大部分运行环境,包括CMake,clang等,安装步骤如下。

打开Visual Studio Installer,点击【修改】按钮,如果没有安装Visual Studio 2022的话,直接进入安装窗口。

勾选"使用C++的桌面开发"选项

切换到"单个组件"选项卡,检索并勾选"适用于Windows的C++ CMake工具","对LLVM(clang-cl)工具集的MSBuild支持"以及"适用于Windows的C++ Clang编译器(版本号)"

完成之后,点击"修改"或者"安装"即可。

注意,这样一通操作下来,空间占用会超过10G,要提前查看自己机器的存储空间是否吃紧。

当C++相关环境配置完成后,后续的步骤,都需要在**开发者的命令提示符或者PowerShell环境**下进行,这点官方文档也给出了重点说明

Conda

Conda是一个开源的软件包管理和环境管理系统,主要用于管理软件包和创建独立的计算环境。它跟Docker的设计理念有点像,都是提供了一定程度额环境隔离,解决"在我的机器上可以运行"的问题。

更具体的概念,大家可以自行Gpt或者到Conda官网看一下哈,咱们只说配置。

下载

首先,咱们到Conda的官网进行下载,这里呢,官方提供了2种下载模式,一个是大而全的Anaconda Installer,另一种是精简的Miniconda Installer,均提供了Win,Mac和Linux三种的安装包。

关于选择哪种安装模式,官方也给出了专门的介绍文档,大家可以参考一下,地址:www.anaconda.com/docs/gettin...

我这里呢,使用的是Miniconda的安装方式。

安装配置

安装过程比较简单,就是双击安装包,一路下一步即可!

注意,由于我这里使用的精简版安装包,所以有一些配置是需要手动进行的,这里主要是配置一下环境变量,把Miniconda安装路径下的condabin配置到环境变量的path里。

安装完成后,在控制台里验证一下安装

bash 复制代码
# 输出一下版本信息
conda -V
# 列一下环境列表
conda env list

正确输出信息即为安装成功

配置依赖

Conda安装完成后,创建Conda环境,并安装依赖,这一段没啥说的,直接按文档来即可。

bash 复制代码
# (Recommended) Create a new conda environment
conda create -n bitnet-cpp python=3.9
conda activate bitnet-cpp

pip install -r requirements.txt

下载模型

文档里介绍的方式是,通过huggingface-cli进行下载,这里我实际测试,是需要科学上网才能正常下载的,大家到这如果进行不下去,可以试试直接到huggingface官网手动把模型下载下来应该也行,这个我自己没有试过,模型地址:huggingface.co/microsoft/b...

我这里因为已经下载好了,所以用huggingface-cli执行下载,就直接显示完成。

编译

按文档说明执行

bash 复制代码
python setup_env.py -md models/BitNet-b1.58-2B-4T -q i2_s

这里需要注意的是,截止到2025.4.27号,如果你是在这之前克隆的bitnet库,那到编译这一步大概率是走不通的,这点官方文档里也说明了,由于本项目上游的llama.cpp项目有几个文件存在bug,c++文件丢失了引用,所以我们需要手动的把这几个文件修复一下,官方也给了修复地址在这里:github.com/tinglou/lla...

这里我们就直接参照他的说明修改一下就行,不会c++也没问题,分别修复一下四个文件

  • ...\3rdparty\llama.cpp\common\common.cpp
  • ...\3rdparty\llama.cpp\common\log.cpp
  • ...\3rdparty\llama.cpp\examples\imatrix\imatrix.cpp
  • ...\3rdparty\llama.cpp\examples\perplexity\perplexity.cpp

...代表bitnet项目的根目录。

修复的内容是一样的,在头部添加一下引用即可

cpp 复制代码
#include <chrono>

然后,基本就可以通过编译了,这里可能需要稍等一小会儿才会编译完成。

其他环境

本地测试

经过漫长的环境配置之后,终于可以测试了,执行以下代码,启动对话窗口。

bash 复制代码
python run_inference.py -m models/BitNet-b1.58-2B-4T/ggml-model-i2_s.gguf -p "You are a helpful assistant" -cnv

结束语

至此,我们就基本完成了本地部署BitNet的工作了,就像文章开头说过的,目前,本地跑的BitNet模型,并不是一个全精度模型,尺寸很小,所以可以流畅的运行在CPU环境下,且内存占用率极低,但实际测试大部分的对话它是理解错误的,也就是不是很可用,但这东西如果专门用来探索边缘计算的场景,经过调教之后,应该也能发挥很大的用处。

好啦,就这样啦,期待下一篇更有趣的探索。

相关推荐
柏油4 小时前
MySQL InnoDB 行锁
数据库·后端·mysql
咖啡调调。4 小时前
使用Django框架表单
后端·python·django
白泽talk4 小时前
2个小时1w字| React & Golang 全栈微服务实战
前端·后端·微服务
摆烂工程师4 小时前
全网最详细的5分钟快速申请一个国际 “edu教育邮箱” 的保姆级教程!
前端·后端·程序员
一只叫煤球的猫4 小时前
你真的会用 return 吗?—— 11个值得借鉴的 return 写法
java·后端·代码规范
Asthenia04125 小时前
HTTP调用超时与重试问题分析
后端
颇有几分姿色5 小时前
Spring Boot 读取配置文件的几种方式
java·spring boot·后端
AntBlack5 小时前
别说了别说了 ,Trae 已经在不停优化迭代了
前端·人工智能·后端
@淡 定5 小时前
Spring Boot 的配置加载顺序
java·spring boot·后端