玩一玩微软的 1 bit 模型:BitNet. 一个 CPU 就能跑起来的大模型
<p><strong><font size="1" color="gray">作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!</font></strong></p><ul>
<li><font size="1" color="gray">cnblogs博客</font></li>
<li><font size="1" color="gray">zhihu</font></li>
<li><font size="1" color="gray">Github</font></li>
<li><font size="1" color="gray">公众号:一本正经的瞎扯</font><br>
<img alt="" loading="lazy" src="https://img2022.cnblogs.com/blog/1457949/202202/1457949-20220216153819145-1193738712.png" class="lazyload"></li>
</ul>
<hr>
<p>能不能用 1 个 CPU 加很少的内存就能把大模型跑起来?<br>
微软开源的 BitNet (https://github.com/microsoft/BitNet) 实现了这一点。<br>
可以通过这个网址去在线体验这个模型的效果:https://demo-bitnet-h0h8hcfqeqhrf5gf.canadacentral-01.azurewebsites.net/</p>
<p><img alt="image" loading="lazy" src="https://img2024.cnblogs.com/blog/1457949/202603/1457949-20260320172444228-1231251996.png" class="lazyload"></p>
<p>我在官方代码的基础上做了一个 Dockerfile,有 docker 环境就能轻松编译和运行。<br>
请看:https://github.com/ahfuzhang/BitNet</p>
<h1 id="编译">编译</h1>
<p>使用如下步骤可以编译这个 BitNet 模型的运行环境:</p>
<pre><code class="language-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
</code></pre>
<p>运行完后, docker image ls -a | grep -i bitnet 可以看见一个 1.7G 的镜像。</p>
<h1 id="运行">运行</h1>
<ul>
<li>直接输入提示词的模式</li>
</ul>
<pre><code class="language-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'? "
</code></pre>
<ul>
<li>对话模式</li>
</ul>
<pre><code class="language-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
</code></pre>
<ul>
<li>可以发现:1 个 cpu, 512mb 内存就能跑起来,出 token 的速度也很快</li>
<li>-t 这个参数是设置线程数的,线程数要与 docker 分配的核数一致</li>
<li>-c 是上下文窗口大小</li>
<li>-n 是输出内容的限制</li>
<li><code>-temp</code> 是温度值。测试发现,小于 0.7 会出现随机的重复单词。</li>
</ul>
<h1 id="感受">感受</h1>
<p>如果你问我 1045 乘以 6596 等于多少?<br>
我会立即回答你:2368794 !<br>
你别管对不对,你就说快不快吧……</p>
<p>BitNet 的问题还非常多:</p>
<ul>
<li>在 MacOS 下运行,出现随机的无意义的单词;</li>
<li>有时候,会把输出过的一段话循环的反复输出</li>
<li>有时候,会不断重复某个单词停不下来</li>
<li>有时候,对于知识性的问题,还是勉强得到了正确可读的结果</li>
</ul>
<p>希望这个 BitNet 能够尽快完善,未来能够在手机上运行起来一个本地知识库 —— 一般性的人类知识被包含在一个手机可运行的 APP 中!</p><br><br>
来源:https://www.cnblogs.com/ahfuzhang/p/19745157
頁:
[1]