所有大型语言模型都在1.58比特中

内容

1比特LLM时代:所有大型语言模型都在1.58比特

马舒明 王宏宇11脚注标记: 1 马凌霄 王磊 王文辉 韩少翰 董丽 王瑞平 薛继龙 魏芙茹⋄normal-⋄{}^{\diamond}start_FLOATSUPERSCRIPT ⋄ end_FLOATSUPERSCRIPT https://aka.ms/GeneralAI 具有相等贡献。⋄⋄\diamond⋄ 通讯作者。马舒明、马凌霄、王磊、王文辉、韩少翰、董丽、薛继龙、魏芙茹隶属于微软研究院。王宏宇和王瑞平隶属于中国科学院大学。

摘要

最近的研究,如 BitNet [23],正在为新一代 1 位大型语言模型(LLMs)铺平道路。在这项工作中,我们介绍了一种 1 位LLM变体,即 BitNet b1.58,其中LLM的每个单个参数(或权重)都是三元数 {-1, 0, 1}。它在困惑度和最终任务性能方面与相同模型大小和训练令牌的全精度(即FP16或BF16)Transformer LLM相匹配,同时在延迟、内存、吞吐量和能耗方面显著更具成本效益。更重要的是,1.58 位LLM定义了一种新的缩放定律和培训新一代既高性能又具有成本效益的LLMs的方法。此外,它还实现了一种新的计算范式,并为设计专门针对 1 位LLMs 优化的硬件打开了大门。

Refer to caption

Refer to caption

图1:1位LLMs(例如,BitNet b1.58)提供帕累托解决方案,以降低LLMs的推理成本(延迟、吞吐量和能耗),同时保持模型性能。BitNet b1.58的新计算范式需要采取行动,设计专为1位LLMs优化的新硬件。

1比特LLM时代

近年来,人工智能领域的大型语言模型(LLMs)在规模和能力上取得了快速增长。这些模型在各种自然语言处理任务中表现出色,但其不断增长的规模给部署带来了挑战,并引发了对其高能耗所带来的环境和经济影响的担忧。解决这些挑战的一种方法是使用后训练量化技术,为推断创建低比特模型。这种技术降低了权重和激活的精度,显著减少了LLMs的内存和计算需求。目前的趋势是从16位转向更低位数,如4位变体。然而,尽管后训练量化在工业LLMs中被广泛使用,但它并不是最佳选择。

最近关于1比特模型架构的研究,如BitNet,提出了一个有望降低LLM成本同时保持性能的方向。普通LLM采用16位浮点值(即FP16或BF16),而任何LLM的主要部分都是矩阵乘法。因此,主要的计算成本来自浮点加法和乘法运算。相比之下,BitNet的矩阵乘法只涉及整数加法,为LLM节省了大量能量成本。由于许多芯片中计算性能的基本限制是功耗,节能也可以转化为更快的计算。

除了计算之外,在推断过程中,将模型参数从DRAM传输到芯片上加速器(例如SRAM)的过程可能会很昂贵。已经有尝试扩大SRAM以提高吞吐量,但这会比DRAM引入更高的成本。与全精度模型相比,1比特LLM在容量和带宽方面都具有更低的内存占用。这可以显著降低从DRAM加载权重的成本和时间,从而实现更快、更高效的推断。

在这项工作中,我们介绍了一个重要的1位LLM变体,名为BitNet b1.58,其中每个参数都是三元的,取值为{-1, 0, 1}。我们在原始的1位BitNet中添加了一个额外的值0,导致在二进制系统中有1.58位。BitNet b1.58保留了原始1位BitNet的所有优点,包括其新的计算范式,几乎不需要乘法运算进行矩阵乘法,并且可以高度优化。此外,它与原始1位BitNet具有相同的能耗,并且在内存消耗、吞吐量和延迟方面比FP16 LLM基线更高效。此外,BitNet b1.58提供了两个额外的优势。首先,由于模型权重中包含0,BitNet b1.58对特征过滤的显式支持使其建模能力更强,这可以显著提高1位LLM的性能。其次,我们的实验表明,使用相同配置(例如,模型大小、训练标记等),从3B大小开始,BitNet b1.58可以在困惑度和最终任务性能方面与完整精度(即FP16)基线相匹配。

2 BitNet b1.58

BitNet b1.58基于BitNet架构,这是一个使用BitLinear替换_nn.Linear_的Transformer。它是从头开始训练的,具有1.58比特权重和8比特激活。与原始BitNet相比,它引入了一些修改,我们在下面总结。

量化函数。

为了将权重限制在-1、0或+1,我们采用了一个_absmean_量化函数。首先,它通过权重矩阵的平均绝对值对其进行缩放,然后将每个值四舍五入为{-1, 0, +1}中最接近的整数:

| W ilde{W}=\mathrm{RoundClip}(\frac{W}{\gamma+\epsilon},-1,1),\overline{W}=\mathrm{RoundClip}(\frac{W}{\gamma+\epsilon},-1,1) | (1) |

| RoundClip⁢(x,a,b)=max⁡(a,min⁡(b,round⁢(x))),RoundClip𝑥𝑎𝑏𝑎𝑏round𝑥\mathrm{RoundClip}(x,a,b)=\max(a,\min(b,\mathrm{round}(x))),roman_RoundClip ( italic_x , italic_a , italic_b ) = roman_max ( italic_a , roman_min ( italic_b , roman_round ( italic_x ) ) ) , | (2) |\n| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- |

| γ=1n⁢m⁢∑i⁢j|Wi⁢j|.𝛾1𝑛𝑚subscript𝑖𝑗subscript𝑊𝑖𝑗\gamma=\frac{1}{nm}\sum_{ij}|W_{ij}|.italic_γ = divide start_ARG 1 end_ARG start_ARG italic_n italic_m end_ARG ∑ start_POSTSUBSCRIPT italic_i italic_j end_POSTSUBSCRIPT | italic_W start_POSTSUBSCRIPT italic_i italic_j end_POSTSUBSCRIPT | . | (3) | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | - | --- |

激活函数的量化函数遵循 BitNet 中相同的实现,不同之处在于我们在非线性函数之前不对激活进行缩放到范围 \[0,Qb\]0subscript𝑄𝑏\[0,Q_{b}]。相反,所有激活都被缩放到 \[−Qb,Qb\]subscript𝑄𝑏subscript𝑄𝑏\[-Q_{b},Q_{b}] 每个标记,以消除零点量化。这对于实现和系统级优化更加方便和简单,同时在我们的实验中对性能几乎没有影响。

类似 LLaMA 的组件。

LLaMA架构 19, 20已成为开源LLM的事实支柱。为了拥抱开源社区,我们的BitNet b1.58设计采用了类似LLaMA的组件。具体来说,它使用了RMSNorm 27、SwiGLU 16、rotary embedding 14,并移除了所有偏见。这样,BitNet b1.58可以轻松集成到流行的开源软件中(例如Huggingface、vLLM 8,以及llama.cpp111https://github.com/ggerganov/llama.cpp)。

| 模型 | 大小 | 内存 (GB)↓normal-↓\downarrow↓ | 延迟 (ms)↓normal-↓\downarrow↓ | PPL↓normal-↓\downarrow↓ | | ------------ | ---- | -------------------------------- | --------------------------------- | ------------------------ | | LLaMA LLM | 700M | 2.08 (1.00x) | 1.18 (1.00x) | 12.33 | | BitNet b1.58 | 700M | 0.80 (2.60x) | 0.96 (1.23x) | 12.87 | | LLaMA LLM | 1.3B | 3.34 (1.00x) | 1.62 (1.00x) | 11.25 | | BitNet b1.58 | 1.3B | 1.14 (2.93x) | 0.97 (1.67x) | 11.29 | | LLaMA LLM | 3B | 7.89 (1.00x) | 5.07 (1.00x) | 10.04 | | BitNet b1.58 | 3B | 2.22 (3.55x) | 1.87 (2.71x) | 9.91 | | BitNet b1.58 | 3.9B | 2.38 (3.32x) | 2.11 (2.40x) | 9.62 |

表1:BitNet b1.58和LLaMA LLM的困惑度以及成本。

| 模型 | 大小 | ARCe | ARCc | HS | BQ | OQ | PQ | WGe | 平均 | | ------------ | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | LLaMA LLM | 700M | 54.7 | 23.0 | 37.0 | 60.0 | 20.2 | 68.9 | 54.8 | 45.5 | | BitNet b1.58 | 700M | 51.8 | 21.4 | 35.1 | 58.2 | 20.0 | 68.1 | 55.2 | 44.3 | | LLaMA LLM | 1.3B | 56.9 | 23.5 | 38.5 | 59.1 | 21.6 | 70.0 | 53.9 | 46.2 | | BitNet b1.58 | 1.3B | 54.9 | 24.2 | 37.7 | 56.7 | 19.6 | 68.8 | 55.8 | 45.4 | | LLaMA LLM | 3B | 62.1 | 25.6 | 43.3 | 61.8 | 24.6 | 72.1 | 58.2 | 49.7 | | BitNet b1.58 | 3B | 61.4 | 28.3 | 42.9 | 61.5 | 26.6 | 71.5 | 59.3 | 50.2 | | BitNet b1.58 | 3.9B | 64.2 | 28.7 | 44.2 | 63.5 | 24.2 | 73.2 | 60.5 | 51.2 |

表2:BitNet b1.58和LLaMA LLM在最终任务上的零样本准确率。

3 结果

我们将 BitNet b1.58 与我们复现的 FP16 LLaMA LLM 在不同规模下进行了比较。为了确保公平比较,我们在 RedPajama 数据集上对模型进行了 1000 亿标记的预训练。我们评估了零样本性能在一系列语言任务上,包括 ARC-Easy、ARC-Challenge、Hellaswag、Winogrande、PIQA、OpenbookQA 和 BoolQ。我们还报告了在 WikiText2 和 C4 数据集上的验证困惑度。

我们比较了LLaMA LLM和BitNet b1.58的运行时GPU内存和延迟。结果是使用FasterTransformer222https://github.com/NVIDIA/FasterTransformer代码库进行测量的,该代码库针对GPU设备上LLM推理延迟进行了优化。Ladder的2位内核 ef22也集成到了BitNet b1.58中。我们报告了每个输出标记的时间,因为这是推理的主要成本。

1总结了BitNet b1.58和LLaMA LLM的困惑度和成本。它显示,BitNet b1.58在3B模型大小方面开始与完整精度的LLaMA LLM匹配,同时速度快2.71倍,GPU内存使用量少3.55倍。特别是,具有3.9B模型大小的BitNet b1.58速度快2.4倍,内存消耗少3.32倍,但性能明显优于LLaMA LLM 3B。

2报告了零样本准确性在最终任务上的详细结果。我们遵循了_lm-evaluation-harness_333https://github.com/EleutherAI/lm-evaluation-harness的流程进行评估。结果显示,随着模型规模的增加,BitNet b1.58与LLaMA LLM之间的性能差距逐渐缩小。更重要的是,BitNet b1.58可以在3B规模开始时与全精度基线的性能相匹配。与困惑度的观察类似,最终任务结果显示,BitNet b1.58 3.9B在更低的内存和延迟成本下优于LLaMA LLM 3B。这表明BitNet b1.58是对最先进LLM模型的帕累托改进。

内存和延迟

Refer to caption

Refer to caption

图2:随着模型大小变化,BitNet b1.58的解码延迟(左)和内存消耗(右)。

我们进一步将模型规模扩大到7B、13B和70B,并评估了成本。图2展示了延迟和内存的趋势,显示随着模型规模的增加,加速比增加。特别是,BitNet b1.58 70B比LLaMA LLM基准线快4.1倍。这是因为_nn.Linear_的时间成本随着模型规模增加而增长。内存消耗遵循类似的趋势,因为嵌入保持全精度,对于更大的模型,其内存占比较小。延迟和内存都是使用2比特内核进行测量的,因此仍有优化的空间来进一步降低成本。

能源

我们还估计了BitNet b1.58和LLaMA LLM的算术运算能耗。我们主要关注矩阵乘法的计算,因为它对LLMs的成本贡献最大。图3展示了能耗成本的构成。BitNet b1.58的大部分是INT8加法计算,而LLaMA LLM包括FP16加法和FP16乘法。根据文献 [7, 28 ]中的能耗模型,BitNet b1.58在7nm芯片上的矩阵乘法算术运算能耗节省了71.4倍。我们进一步报告了512个标记模型的端到端能耗。我们的结果显示,随着模型规模的增加,与FP16 LLaMA LLM基准相比,BitNet b1.58在能耗方面变得越来越高效。这是因为_nn.Linear_的百分比随着模型规模的增加而增加,而其他组件的成本在较大模型中较小。

Refer to caption

Refer to caption

图3:BitNet b1.58在7纳米工艺节点上的能耗与LLaMA LLM的比较。左侧是算术运算能耗的组成部分。右侧是不同模型尺寸下的端到端能耗成本。

吞吐量

| 模型 | 大小 | 最大批处理大小 | 吞吐量(标记/秒) | | ------------ | ---- | -------------- | --------------------- | | LLaMA LLM | 70B | 16 (1.0x) | 333 (1.0x) | | BitNet b1.58 | 70B | 176 (11.0x) | 2977 (8.9x) |

表3:BitNet b1.58 70B和LLaMA LLM 70B之间吞吐量的比较。

我们比较了在两张80GB的A100卡上使用流水线并行性的BitNet b1.58和LLaMA LLM 70B参数的吞吐量 6,以便LLaMA LLM 70B可以在这些设备上运行。我们增加了批处理大小,直到GPU内存限制达到,序列长度为512。表3显示,BitNet b1.58 70B可以支持LLaMA LLM的批处理大小高达11倍,从而实现8.9倍的更高吞吐量。

BitNet b1.58正在启用一种新的缩放定律,涉及模型性能和推理成本。作为参考,我们可以根据图23中的结果,对1.58位和16位不同模型大小之间的等效性进行比较。

  • • 13B BitNet b1.58比3B FP16 LLM在延迟、内存使用和能耗方面更高效。
  • • 30B BitNet b1.58比7B FP16 LLM在延迟、内存使用和能耗方面更高效。
  • • 70B BitNet b1.58比13B FP16 LLM在延迟、内存使用和能耗方面更高效。

使用 2T 代币进行培训

训练令牌数量对LLMs至关重要。为了测试BitNet b1.58在令牌方面的可伸缩性,我们按照StableLM-3B的数据配方,使用2T令牌训练了一个BitNet b1.58模型[17],这是最先进的开源3B模型。这两个模型在由Winogrande[15]、PIQA[1]、SciQ[21]、LAMBADA[12]和ARC-easy[25]组成的基准测试上进行了评估。我们在表4中报告了零-shot准确率。对于使用准确率和归一化准确率测量的任务,我们取两者的平均值。StableLM 3b在2T令牌上的结果直接取自其技术报告。我们的研究结果表明,BitNet b1.58在所有最终任务上表现出优异性能,表明1.58-bit LLMs也具有强大的泛化能力。

| 模型 | Tokens | Winogrande | PIQA | SciQ | LAMBADA | ARC-easy | 平均 | | --------------- | ------ | ---------- | ----- | ----- | ------- | -------- | ----- | | StableLM-3B | 2T | 64.56 | 76.93 | 90.75 | 66.09 | 67.78 | 73.22 | | BitNet b1.58 3B | 2T | 66.37 | 78.40 | 91.20 | 67.63 | 68.12 | 74.34 |

表4:BitNet b1.58与StableLM-3B在2T令牌下的比较。

4 讨论与未来工作

1 位混合专家 (MoE) LLMs

Mixture-of-Experts (MoE) 已被证明是 LLMs 的一种具有成本效益的方法。虽然它显著减少了计算 FLOPs,但高内存消耗和芯片间通信开销限制了其部署和应用。这些挑战可以通过 1.58 位 LLMs 来解决。首先,减少的内存占用减少了部署 MoE 模型所需的设备数量。此外,它显著减少了在网络间传输激活的开销。最终,如果整个模型可以放置在单个芯片上,就不会有开销。

LLMs中对长序列的本地支持

在LLM时代,处理长序列的能力已经成为一个关键需求。长序列推理面临的一个主要挑战是KV缓存引入的内存消耗。BitNet b1.58代表了朝着原生支持长序列迈出的重要一步,它将激活从16位减少到8位,允许在相同资源下将上下文长度加倍。这可以进一步无损地压缩到4位甚至更低,用于1.58位LLM,这部分我们留作未来工作。

使用1.58比特的LLM有潜力极大地提高语言模型在边缘和移动设备上的性能。这些设备通常受到内存和计算能力的限制,这可能会限制LLM的性能和规模。然而,1.58比特LLM减少的内存和能耗使它们能够部署在这些设备上,实现了以前不可能的广泛应用。这可以极大地增强边缘和移动设备的功能,并实现LLM的新颖应用。此外,1.58比特LLM对CPU设备更友好,而CPU设备是边缘和移动设备中主要使用的处理器。这意味着BitNet b1.58可以在这些设备上高效执行,进一步提高它们的性能和功能。

1比特LLM的新硬件

近期的工作,比如 Groq444,展示了建立特定硬件(例如,LPUs)用于LLMs的有希望的结果和巨大潜力。更进一步,我们设想并呼吁采取行动,设计专门针对1比特LLMs进行优化的新硬件和系统,考虑到BitNet中启用的新计算范式。

参考资料

总结
这篇文章介绍了一种新的1比特大型语言模型(LLM)BitNet b1.58,其中每个参数都是三元的{-1, 0, 1}。相比于全精度的Transformer LLM,在性能和成本效益方面具有竞争力。1.58比特的LLM定义了训练新一代高性能、成本效益的LLM的新规律和方法。BitNet b1.58通过减少推理成本(延迟、吞吐量和能耗)提供了帕累托解决方案,同时保持模型性能。该模型的计算范式为设计专门优化的硬件打开了大门。文章详细介绍了BitNet b1.58的构架和量化函数,以及与全精度模型的性能对比和优势。