Bitnet.cpp:微软开源1比特推理框架,CPU跑100B模型 精华
Hi,这里是Aitrainee,欢迎阅读本期新文章。
前两天,微软开源了Bitnet.cpp,这是一个重磅消息。简单来说,这意味着你现在可以在CPU上运行像72B甚至更大的超级大模型。原因是这些模型的精度已经降低到1位。
Bitnet.cpp是一个超级高效的1位LLM推理框架,你可以在本地设备上以高达六倍的速度运行100B模型,并且能耗降低82.2%。
Bitnet.cpp 未来还会支持 NPU 和 GPU,它在 ARM CPU 上能让模型速度提高 1.37 到 5.07 倍,同时能耗降低 55.4% 至 70%。在 x86 CPU 上,加速幅度在 2.37 倍到 6.17 倍之间,能耗减少 71.9% 至 82.2%。
这个框架能在单个 CPU 上以每秒 5-7 个令牌的速度运行 100B bitnet_b1_58 模型(BitNet框架中的一种1位量化的语言模型)。与人类阅读速度相当,这显著提升了在本地设备上运行大型语言模型的潜力。
你现在可以在Ubuntu Linux、Window s 或 MacOS上安装它,对了,Bitnet.cpp 不仅支持x86架构,还支持ARM架构。
那么,让我们看看它是如何工作的。
官方的部署:
简单直接使用 bitnet.cpp 非常简单,主要分为以下几步:
- 1.克隆仓库:
git clone --recursive https://github.com/microsoft/BitNet.git
- 2.安装依赖:使用
conda
创建环境并安装依赖。 - 3.构建项目:使用
setup_env.py
脚本下载模型并构建项目。 - 4.运行推理:使用
run_inference.py
脚本进行推理。例如,运行推理的命令如下:
python run_inference.py -m models/Llama3-8B-1.58-100B-tokens/ggml-model-i2_s.gguf -p "Your prompt here" -n 6 -temp 0
我们实际走走:
首先,正如我之前所提到的,我们需要在Ubuntu上安装clang和cmake。如果你使用Windows,只需安装Visual Studio即可。
接下来,运行以下命令来安装LLVM工具链,这个命令会下载并执行一个脚本,自动安装clang、cmake以及其他一些必要的库。
bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
如果在Windows上,打开一个新的命令提示符或PowerShell窗口。然后,运行以下命令:
Invoke-WebRequest -Uri https://apt.llvm.org/llvm.ps1 -OutFile llvm.ps1
powershell -ExecutionPolicy Bypass -File llvm.ps1
接下来,我们需要创建一个新的conda环境,以便安装所需的依赖。运行以下命令来创建一个名为myenv的环境,并安装Python 3.9:
conda create -n myenv pythnotallow=3.9 -y & conda activate myenv
接下来,我们需要从GitHub上克隆所需的项目。运行以下命令来递归克隆BitNet仓库,并进入该目录:
git clone --recursive https://github.com/microsoft/BitNet.git && cd BitNet
接着是依赖:
pip install -r requirements.txt
接下来,我们将下载Hugging Face的模型。运行以下命令:
python3 setup_env.py --hf-repo HF1BitLLM/Llama3-8B-1.58-100B-tokens -q i2 s
这将使用他们提供的setup_env.py脚本进行设置。我们使用的是1.58位的LLM模型。在Hugging Face上,还有许多其他可用的模型。第一次运行这个模型时,它会用C编译代码,大约需要10分钟。
让我运行这个模型。可以看到加载时间非常快,总共处理了53个token,使用CPU的时间也很短。它加载了Llama模型,并应用了适配器,同时告诉我们模型的层数和KV缓存等参数。
最后,它给出了模型的原始输出和我们的LLM响应。
这里是花费的总用时:12233ms
你可以问任何问题,比如现在我问它排球中有多少个L。
它会打印出结果:
虽然答案错误,但无妨,主要是我们现在可以在CPU上运行这个8B模型,速度也不算慢。
CPU配置如下:
BitNet 轻量、高效。体积仅为传统模型的20%。摒弃了复杂的浮点运算,采用简单的整数运算,使得计算变得快速而轻便,加载时间快。
此外,1位LLMs的训练还需从头开始,因为它们与现有模型有本质上的不同。尽管有将现有模型量化为1位的建议,但BitNet的设计使得这种转换并不简单,虽然可能达到与Q1模型相似的质量,但整体性能可能受到影响。因此,真正的高效训练仍需从零开始。
总之,若我们真的能够在普通桌面CPU上以较快速度的运行100B+的bitnet_b1_58 模型,或许我们将迎来一个新的黄金时代。
参考链接:
[1] github:https://github.com/microsoft/BitNet
[2] https://www.reddit.com/r/LocalLLaMA/comments/1g6jmwl/bitnet_inference_framework_for_1bit_llms/
本文转载自 AI进修生,作者: Aitrainee