--- title: bitnet up: --- ## 重現論文實驗 - install ``` sudo bash -c 'bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"' pyenv install miniconda3 pyenv activate miniconda3 conda create -n bitnet-cpp python=3.9 conda activate bitnet-cpp sudo apt install clang git clone --recursive https://github.com/microsoft/BitNet.git pip install -r requirements.txt pip install -U "huggingface_hub[cli]" huggingface-cli download microsoft/BitNet-b1.58-2B-4T-gguf --local-dir ~/models/BitNet-b1.58-2B-4T sudo apt install cmake python setup_env.py -md ~/models/BitNet-b1.58-2B-4T -q i2_s ``` - run ``` pyenv activate miniconda3 conda activate bitnet-cpp python run_inference.py -m ~/models/BitNet-b1.58-2B-4T/ggml-model-i2_s.gguf -p "You are a helpful assistant" -cnv ``` python setup_env.py -md ~/models/BitNet-b1.58-2B-4T -q i2_s 使用**INT2_S(Signed 2-bit 量化)**。 #### BitNet 論文 筆記 - [1-bit AI Infra: Part 1.1, Fast and Lossless BitNet b1.58 Inference on CPUs]() - 背景 - BitNet 將模型權重壓縮至接近1-bit,提升效率 - 貢獻 - 開發 bitnet.cpp,支援BitNet b1.58模型的快速、無損推理。 - 引入多種**優化核心(Kernels)**:I2_S、TL1、TL2,根據不同場景優化記憶體占用和計算速度。 - 結果 - :::spoiler 速度提升 ![截圖 2025-04-26 下午6.38.17](https://hackmd.io/_uploads/Hyi7SS01xl.png) ::: - :::spoiler 能耗提升 ![截圖 2025-04-26 下午6.39.30](https://hackmd.io/_uploads/SypErrAyee.png) ::: - :::spoiler 準確度 - ![截圖 2025-04-26 晚上7.03.50](https://hackmd.io/_uploads/BkLSBrA1xx.png) ::: - 未來展望 - 擴展至行動裝置(如iPhone/Android)、GPU、NPU等平台 - 名詞解釋 - **1-bit LLMs** - 接近只使用1個bit(-1, 0, 1)來表示,從而大幅降低記憶體與運算需求。 - **bitnet.cpp** - BitNet b1.58設計的**推理框架**,支援在CPU上快速、低能耗、無損失(lossless)的推理。 - **Lossless Inference(無損推理)** - 模型推理結果與原始高精度(例如FP32浮點數)推理結果完全一致,沒有任何精度上的差異。 - **Energy Efficiency(能耗效率)** - 測量單位是每產生一個Token所需的焦耳數(J/Token) - **I2_S Kernel** - 將每個權重轉換成2-bit表示,推理時再轉回原值,適合需要高速且有多執行緒支持的場景。 ![截圖 2025-04-26 晚上7.17.25](https://hackmd.io/_uploads/HkQ8rrA1xx.png) - **TL1 Kernel** - 兩個權重打包成4-bit索引,並透過查表(Lookup Table, LUT)方式推理,適合少量執行緒且記憶體有限時使用。 ![截圖 2025-04-26 晚上7.17.53](https://hackmd.io/_uploads/rkxDSBCJex.png) - **TL2 Kernel** - 類似TL1,但把三個權重打包成5-bit索引,進一步提升壓縮率,非常適合記憶體或頻寬受限的設備,如行動裝置或邊緣運算。 ### 閱讀 BitNet 程式 - run_inference.py - 執行 build/bin/llama-cli - setup_env.py - compile code - https://deepwiki.com/microsoft/BitNet