作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!
能不能用 1 个 CPU 加很少的内存就能把大模型跑起来?
微软开源的 BitNet (https://github.com/microsoft/BitNet) 实现了这一点。
可以通过这个网址去在线体验这个模型的效果:https://demo-bitnet-h0h8hcfqeqhrf5gf.canadacentral-01.azurewebsites.net/
我在官方代码的基础上做了一个 Dockerfile,有 docker 环境就能轻松编译和运行。
请看:https://github.com/ahfuzhang/BitNet
编译
使用如下步骤可以编译这个 BitNet 模型的运行环境:
bash
git clone https://github.com/ahfuzhang/BitNet.git
cd BitNet
# 克隆子仓库
git submodule update --init --recursive
# docker build
docker build -t local-bitnet:latest .
# 或者 make -f Makefile.docker build TAG=latest
运行完后, docker image ls -a | grep -i bitnet 可以看见一个 1.7G 的镜像。
运行
- 直接输入提示词的模式
bash
docker run --rm -it \
--cpuset-cpus="8" \
-m 512m \
local-bitnet:latest \
python3 run_inference.py -m models/BitNet-b1.58-2B-4T/ggml-model-i2_s.gguf -t 1 -c 4096 -n 1024 -temp 0.7 -p "explain what is '1-bit model'? "
- 对话模式
bash
docker run --rm -it \
--cpuset-cpus="8" \
-m 512m \
local-bitnet:latest \
python3 run_inference.py -m models/BitNet-b1.58-2B-4T/ggml-model-i2_s.gguf -t 1 -c 4096 -n 1024 -temp 0.7 -p "" -cnv
- 可以发现:1 个 cpu, 512mb 内存就能跑起来,出 token 的速度也很快
- -t 这个参数是设置线程数的,线程数要与 docker 分配的核数一致
- -c 是上下文窗口大小
- -n 是输出内容的限制
-temp是温度值。测试发现,小于 0.7 会出现随机的重复单词。
感受
如果你问我 1045 乘以 6596 等于多少?
我会立即回答你:2368794 !
你别管对不对,你就说快不快吧......
BitNet 的问题还非常多:
- 在 MacOS 下运行,出现随机的无意义的单词;
- 有时候,会把输出过的一段话循环的反复输出
- 有时候,会不断重复某个单词停不下来
- 有时候,对于知识性的问题,还是勉强得到了正确可读的结果
希望这个 BitNet 能够尽快完善,未来能够在手机上运行起来一个本地知识库 ------ 一般性的人类知识被包含在一个手机可运行的 APP 中!