亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

微軟開源1位大模型:BitNet b1.58讓百億參數模型在單CPU上本地運行

微软的BitNet项目在GitHub上的地址是https://github.com/microsoft/BitNet

大型语言模型(LLMs)已经改变了人工智能的格局,其庞大的规模带来了巨大的计算成本。如果能大幅提高这些模型的效率而不牺牲性能会怎么样?研究人员正是通过BitNet b1.58实现了这一点,开启了1位元LLM的新时代。

bitnet.cpp 在 Apple M2 上运行 BitNet b1.58 3B 模型的一个示例

在我们继续之前,如果你对这个话题感兴趣,并且想支持我:

  1. 给我鼓掌点赞10次;这会对我有很大帮助。👏
  2. 在Medium上关注我,获取我最新的文章,别忘了来玩哦。
1-bit LLMs的前景

传统的大型语言模型(LLM)使用16位浮点数(FP16)来存储其参数,这需要大量的内存和计算资源支持。BitNet b1.58则采取了激进的做法:它将每个参数简化为仅三个值:-1、0或1。这一简单的改变带来了显著的效率提升,实现了高效的运算,同时保持了模型的准确性。

  • 4.1倍更快的70B参数模型推理速度
  • 内存消耗降低至原来的7.16倍
  • 矩阵乘法能耗减少至原来的1/71.4
  • 大批次处理时,吞吐量提升8.9倍

最好的部分是,这些效率提升几乎没有牺牲任何性能。从30亿参数起步,BitNet b1.58在各种基准测试中的表现不低于甚至超越传统的大型语言模型。

解析BitNet b1.58中的量化

BitNet b1.58 的量化过程旨在将模型权重量化为三个值 −1, 0, 1,从而同时保持较高的准确性,实现显著的计算效率和内存效率。接下来是一个简单的解释:

1. 量化过程

量化函数是关键,它负责将权重从全精度转换为三值(ternary)权重。它主要包含两个步骤。

A. 权重缩放:权重矩阵 W 通过其平均绝对值 γ 进行缩放,这里的 γ 是指整个矩阵的平均绝对值。这样可以确保所有权重相对于矩阵规模进行了归一化处理。缩放因子 γ 可以通过下面的公式来计算:

这里,nm 是权重矩阵的维度,所有权重的绝对值之和提供了一个缩放因子,表示权重的平均绝对值。这个缩放让权重值更均匀,更容易被量化。

B. 四舍五入和截断:在缩放之后,每个权重都四舍五入到最接近 {-1, 0, 1} 集合中的整数值。此操作通过名为 RoundClip 的函数来完成,确保结果值被限制在这个三值集合内:

在这里,ϵ 是一个小数值,用于确保数值稳定性考虑。RoundClip 函数会将缩放后的权重四舍五入到最接近的整数,并确保该值位于 -1 和 1 之间。

比如,量化过程示例:

假设我们有一个权重矩阵如下所示:

首先,我们来计算缩放系数(缩放系数γ):

缩放因子的公式

注意: 绝对值(记作 |x|)表示一个数在数线上离零的距离,不管这个数是正数还是负数。可以把它想象成测量一个数离零有多远。

例如,|-0.7| 可以表示为:

  • -0.7在数轴上位于零点左边0.7个单位
  • 绝对值仅仅给我们距离:0.7个单位,因此:
  • |-0.7| = 0.7(负数转换为正数)
  • |0.5| = 0.5(正数保持原样)
  • |0.1| = 0.1(同样,正数保持原样)

所以:

γ = ¼(0.3 + 0.7 + 0.5 + 0.1)
这意味着γ等于这些数的平均值。

等于0.4

其次:我们将权重矩阵的值放大 γ 倍:

接下来,我们将权重矩阵 W 的每个元素除以 γ,这样可以标准化权重。

四舍五入和取整公式

我们将 γ 改为 0.4

把每个矩阵的权重值除以0.4

也就是说,经过调整后的权重矩阵是:

第三,我们来应用 RoundClip 功能:

现在我们对缩放矩阵中的每个元素应用 RoundClip 函数:RoundClip 函数的工作原理如下:

RoundClip(x,a,b)=max(a,min(b,round(x)))

或翻译为:

圆整裁剪(x,a,b)=max(a,min(b,round(x)))

  • 第一步,将值取整到最接近的整数。
  • 第二步,将结果限制在-1和1之间。

咱们一个个来看吧

  • 对于这个数值 0.75 ,四舍五入后得到 1。由于 1 在该范围内,我们保持原样。因此,RoundClip(0.75,−1,1)=1。
  • 对于这个数值 −1.75 ,四舍五入后得到 −2。由于 −2 在该范围之外,我们将它裁剪为 −1。因此,RoundClip(−1.75,−1,1)=−1。
  • 对于这个数值 1.25 ,四舍五入后得到 1。由于 1 在该范围内,我们保持原样。因此,RoundClip(1.25,−1,1)=1。
  • 对于这个数值 0.25,四舍五入后得到 0。由于 0 在该范围内,我们保持原样。因此,RoundClip(0.25,−1,1)=0。

最终的量化矩阵如下:

在对每个元素应用 RoundClip 函数之后,得到的量化权重矩阵是:

所以,这里有个矩阵:

量化为

摘要:
  • 按照其平均绝对值(γ)缩放了原始权重矩阵。
  • 每个元素都被四舍五入到最接近的整数,并被限制在-1到1的范围内,从而得到了一个三值量化矩阵。
在本地运行 bitnet.cpp 推理框架,适用于1位LLMs:例如 BitNet b1.58:

需求

所需软件版本:

     Python>=3.9  
    cmake>=3.22  
    clang>=18

克隆这个仓库。

     git clone --recursive https://github.com/microsoft/BitNet.git;  
    cd BitNet

注:上述命令用于克隆BitNet仓库并进入仓库目录。

安装依赖

     # (推荐)新建一个 conda 环境.
    conda create -n bitnet-cpp: python=3.9  
    conda activate bitnet-cpp:  

    pip install -r requirements.txt

开始项目:

     # 从Hugging Face下载模型,将其转换为量化gguf格式,然后完成项目设置  
    python setup_env.py --hf-repo HF1BitLLM/Llama3-8B-1.58-100B-tokens -q i2_s  

    # 或者你可以手动下载模型,并使用本地路径运行  
    huggingface-cli download HF1BitLLM/Llama3-8B-1.58-100B-tokens --local-dir models/Llama3-8B-1.58-100B-tokens  
    python setup_env.py -md models/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 回到了花园。Mary 去了厨房。Sandra 先去了厨房,然后去了走廊。Sandra 去了走廊。John 去了卧室。Mary 又回到了花园。Mary 在哪里?\n答案是:" -n 6 -temp 0  

    # 输出:  
    # Daniel 回到了花园。Mary 去了厨房。Sandra 先去了厨房,然后去了走廊。Sandra 去了走廊。John 去了卧室。Mary 又回到了花园。Mary 在哪里?  
    # 答案是:Mary 在花园里。
结论部分

BitNet b1.58 处于高效人工智能的前沿,将1位精度模型带入主流。凭借其优化的内核技术、显著节省能源以及减少计算成本,BitNet 代表了可持续人工智能部署的未来。BitNet b1.58 奠定了坚实的技术基础,从高效的量化技术到动态代码生成,使其能够有效地在各种硬件架构上扩展。通过减少计算成本,它为在边缘设备或能源受限的环境中运行大规模 LLM 打开了大门。

合作 🤝: 有没有有趣的AI项目想一起做?我随时可以合作一起做AI和机器学习项目,也希望能认识一下其他领域的专业人士。随时可以合作

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消