Bitnet.cpp:微軟開源1比特推理框架,CPU跑100B模型 精華
Hi,這里是Aitrainee,歡迎閱讀本期新文章。
前兩天,微軟開源了Bitnet.cpp,這是一個(gè)重磅消息。簡單來說,這意味著你現(xiàn)在可以在CPU上運(yùn)行像72B甚至更大的超級大模型。原因是這些模型的精度已經(jīng)降低到1位。
Bitnet.cpp是一個(gè)超級高效的1位LLM推理框架,你可以在本地設(shè)備上以高達(dá)六倍的速度運(yùn)行100B模型,并且能耗降低82.2%。
Bitnet.cpp 未來還會(huì)支持 NPU 和 GPU,它在 ARM CPU 上能讓模型速度提高 1.37 到 5.07 倍,同時(shí)能耗降低 55.4% 至 70%。在 x86 CPU 上,加速幅度在 2.37 倍到 6.17 倍之間,能耗減少 71.9% 至 82.2%。
這個(gè)框架能在單個(gè) CPU 上以每秒 5-7 個(gè)令牌的速度運(yùn)行 100B bitnet_b1_58 模型(BitNet框架中的一種1位量化的語言模型)。與人類閱讀速度相當(dāng),這顯著提升了在本地設(shè)備上運(yùn)行大型語言模型的潛力。
你現(xiàn)在可以在Ubuntu Linux、Window s 或 MacOS上安裝它,對了,Bitnet.cpp 不僅支持x86架構(gòu),還支持ARM架構(gòu)。
那么,讓我們看看它是如何工作的。
官方的部署:
簡單直接使用 bitnet.cpp 非常簡單,主要分為以下幾步:
- 1.克隆倉庫:
git clone --recursive https://github.com/microsoft/BitNet.git
- 2.安裝依賴:使用?
?conda?
? 創(chuàng)建環(huán)境并安裝依賴。 - 3.構(gòu)建項(xiàng)目:使用?
?setup_env.py?
? 腳本下載模型并構(gòu)建項(xiàng)目。 - 4.運(yùn)行推理:使用?
?run_inference.py?
? 腳本進(jìn)行推理。例如,運(yùn)行推理的命令如下:
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
我們實(shí)際走走:
首先,正如我之前所提到的,我們需要在Ubuntu上安裝clang和cmake。如果你使用Windows,只需安裝Visual Studio即可。
接下來,運(yùn)行以下命令來安裝LLVM工具鏈,這個(gè)命令會(huì)下載并執(zhí)行一個(gè)腳本,自動(dòng)安裝clang、cmake以及其他一些必要的庫。
bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
如果在Windows上,打開一個(gè)新的命令提示符或PowerShell窗口。然后,運(yùn)行以下命令:
Invoke-WebRequest -Uri https://apt.llvm.org/llvm.ps1 -OutFile llvm.ps1
powershell -ExecutionPolicy Bypass -File llvm.ps1
接下來,我們需要?jiǎng)?chuàng)建一個(gè)新的conda環(huán)境,以便安裝所需的依賴。運(yùn)行以下命令來創(chuàng)建一個(gè)名為myenv的環(huán)境,并安裝Python 3.9:
conda create -n myenv pythnotallow=3.9 -y & conda activate myenv
接下來,我們需要從GitHub上克隆所需的項(xiàng)目。運(yùn)行以下命令來遞歸克隆BitNet倉庫,并進(jìn)入該目錄:
git clone --recursive https://github.com/microsoft/BitNet.git && cd BitNet
接著是依賴:
pip install -r requirements.txt
接下來,我們將下載Hugging Face的模型。運(yùn)行以下命令:
python3 setup_env.py --hf-repo HF1BitLLM/Llama3-8B-1.58-100B-tokens -q i2 s
這將使用他們提供的setup_env.py腳本進(jìn)行設(shè)置。我們使用的是1.58位的LLM模型。在Hugging Face上,還有許多其他可用的模型。第一次運(yùn)行這個(gè)模型時(shí),它會(huì)用C編譯代碼,大約需要10分鐘。
讓我運(yùn)行這個(gè)模型??梢钥吹郊虞d時(shí)間非常快,總共處理了53個(gè)token,使用CPU的時(shí)間也很短。它加載了Llama模型,并應(yīng)用了適配器,同時(shí)告訴我們模型的層數(shù)和KV緩存等參數(shù)。
最后,它給出了模型的原始輸出和我們的LLM響應(yīng)。
這里是花費(fèi)的總用時(shí):12233ms
你可以問任何問題,比如現(xiàn)在我問它排球中有多少個(gè)L。
它會(huì)打印出結(jié)果:
雖然答案錯(cuò)誤,但無妨,主要是我們現(xiàn)在可以在CPU上運(yùn)行這個(gè)8B模型,速度也不算慢。
CPU配置如下:
BitNet 輕量、高效。體積僅為傳統(tǒng)模型的20%。摒棄了復(fù)雜的浮點(diǎn)運(yùn)算,采用簡單的整數(shù)運(yùn)算,使得計(jì)算變得快速而輕便,加載時(shí)間快。
此外,1位LLMs的訓(xùn)練還需從頭開始,因?yàn)樗鼈兣c現(xiàn)有模型有本質(zhì)上的不同。盡管有將現(xiàn)有模型量化為1位的建議,但BitNet的設(shè)計(jì)使得這種轉(zhuǎn)換并不簡單,雖然可能達(dá)到與Q1模型相似的質(zhì)量,但整體性能可能受到影響。因此,真正的高效訓(xùn)練仍需從零開始。
總之,若我們真的能夠在普通桌面CPU上以較快速度的運(yùn)行100B+的bitnet_b1_58 模型,或許我們將迎來一個(gè)新的黃金時(shí)代。
參考鏈接:
[1] github:https://github.com/microsoft/BitNet
[2] ????https://www.reddit.com/r/LocalLLaMA/comments/1g6jmwl/bitnet_inference_framework_for_1bit_llms/????
本文轉(zhuǎn)載自 ??AI進(jìn)修生??,作者: Aitrainee
