CPU也能跑100B模型
最近微软和国科大等机构提交的一篇仅6页的论文,其副标题为所有的LLM,都将是1.58 bit的。(原始论文地址:https://arxiv.org/abs/2402.17764) 该论文的研究成果BitNet b1.58在原来BitNet的基础进行了优化,增加了额外的0值。实验在3B模型大小时与Llama作比较,速度提高了2.71倍的同时,GPU内存使用几乎仅是原先的四分之一。而且当模型的规模越大时,速度上的提升和内存上的节省就会更加显著。 2024年9月18日 发表文章《将 LLMs 精调至 1.58 比特:使极端量化变简单》。(原文中文版地址:https://huggingface.co/blog/zh/1_58_llm_extreme_quantization)。原文表示:随着大语言模型(LLMs)规模和复杂性的增长,寻找减少它们的计算和能耗的方法已成为一个关键挑战。一种流行的解决方案是量化,其中参数的精度从标准的16位浮点(FP16)或32位浮点(FP32)降低到8位或4位等低位格式。虽然这种方法显著减少了内存使用量并加快了计算速度,但往往以准确性为代价。过度降低精度可能导致模型丢失关键信息,从而导致性能下降。 BitNet是一种特殊的transformers架构,它用仅三个值:(-1, 0, 1)表示每个参数,提供了每个参数仅为1.58 ($log_2(3)$) 比特的极端量化。然而,这需要从头开始训练一个模型。虽然结果令人印象深刻,但并非每个人都有预算来进行大语言模型的预训练。为了克服这一限制,我们探索了一些技巧,允许将现有模型精调至 1.58 比特!继续阅读以了解更多! 2024 年 10 月 17日,微软发布了开源框架 bitnet.cpp 1.0 。 bitnet.cpp是专为1-bit LLMs(例如BitNet b1.58)设计的官方推理框架。它配备了一套优化内核,能够在CPU上实现1.58-bit模型的快速且无损推理(后续将增加对NPU和GPU的支持)。 bitnet.cpp的首个版本专注于CPU推理。在ARM CPU上,bitnet.cpp的加速比达到1.37倍至5.07倍,其中大型模型获得的性能提升更为显著。此外,它还能将能耗降低55.4%至70.0%,进一步提升了整体效率。在x86 CPU上,加速比则在2.37倍至6.17倍之间,能耗降低71.9%至82.2%。值得一提的是,bitnet.cpp能够在单个CPU上运行100B BitNet b1.58模型,其推理速度与人类阅读速度相近(每秒5-7个标记),这极大地提升了在本地设备上运行LLM的潜力。更多详细信息,请参阅技术报告。
目前可用的 b.158 模型如下: 1bitLLM/bitnet_b1_58-3B 1bitLLM/bitnet_b1_58-large 1bitLLM/bitnet_b1_58-xl HF1BitLLM/Llama3-8B-1.58-100B-tokens Fine-tuned on 100B tokens for maximum performance. HF1BitLLM/Llama3-8B-1.58-Linear-10B-tokens Fine-tuned with a Linear Lambda scheduler on 10B tokens. HF1BitLLM/Llama3-8B-1.58-Sigmoid-k100-10B-tokens Fine-tuned with a Simgoid Lambda scheduler with k=100 on 10B tokens.
在华为云买了一台Flexus 云服务器做实验。机器配置为:区域 华南-广州4核 | 8GiB | 系统盘 180GiB | 流量包 1,200GB | 峰值带宽 6Mbit/s| Ubuntu 20.04 server 64bit 。

环境设定
pip install -r requirements.txt
pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
apt install cmake clang
开始编译和运。一定要记得设置HF_ENDPOINT环境变量,让模型从国内的镜像进行下载。
export HF_ENDPOINT='https://hf-mirror.com'
python setup_env.py --hf-repo HF1BitLLM/Llama3-8B-1.58-100B-tokens -q i2_s
python run_inference.py -m models/Llama3-8B-1.58-100B-tokens/ggml-model-i2_s.gguf -p "Daniel went back to the the the garden. Mary travelled to the kitchen. Sandra journeyed to the kitchen. Sandra went to the hallway. John went to the bedroom. Mary went back to the garden. Where is Mary?\nAnswer:" -n 6 -temp 0