近年来,人工智能领域的大型语言模型(LLMs)在规模和功能上迅速增长。在广泛的自然语言处理任务中展示了卓越的性能,但随着不断增长的模型大小给实施部署带来了挑战,并引发了对其高能耗和高成本的问题。解决这些挑战的一种方法是使用后训练量化来创建推理的low-bit模型。这种技术降低了权重和激活的精度,显著减少了LLMs的内存和计算需求。趋势是从16位转向更低位,比如4位变体。然而,尽管在工业LLMs中被广泛使用,后训练量化并不是最优的。那么下面展开的论题就是我们今天的重点关注对象。
由微软和中国中科院大学在最新一项研究中所提出的结论——所有的LLM,都将是1.58 bit的。
大语言模型参数将传统方式以16位浮点数(如FP16或BF16)形式的存储变成“三进制”,即在原始BitNet的基础上增加了一个额外的0值,也就是 {-1, 0, 1}。注意:这里的“1.58 bit”并不是指每个参数占用1.58字节的存储空间,而是指每个参数可以用1.58位的信息来表示。
如图所示:1-bit LLMs(BitNet b1.58) 提供了一种帕累托解决方案,可以降低LLMs的推断成本(延迟、吞吐量和能耗),同时保持模型性能。BitNet b1.58的新计算范式需要做的是设计专门优化于1-bit LLMs的新硬件。
转换之后,矩阵中的计算就只会涉及到整数的加法,因此会让大模型在保持一定精度的同时,显著减少所需的存储空间和计算资源。显著降低从DRAM加载权重的成本和时间,从而实现更快、更高效的推理。
BitNet b1.58是基于BitNet架构,是一种Transformer,用BitLinear替换了nn.Linear。与原始的BitNet相比,主要变化在量化函数和类似Llama组件。
为了将权重约束为-1、0或+1,我们采用了一个绝对均值(absmean)量化函数。首先将权重矩阵按其平均绝对值进行缩放,然后将每个值四舍五入到最接近的整数值{-1, 0, +1}之一:
激活的量化函数遵循BitNet中相同的实现,除了不会在非线性函数之前将激活缩放到范围[0,Qb]。相反,每个token的激活都缩放到[−Qb,Qb]以消除零点量化。由于模型权重中包含了0,因此它对特征过滤的显式支持使其建模能力更强,这可以显著提高1位LLMs的性能。
BitNet b1.58的设计采用类似Llama的组件。RMSNorm、SwiGLU、rotary embedding,并移除了所有偏差。通过这种方式,BitNet b1.58可以轻松地集成到主流的开源软件(如Huggingface、vLLM和llama.cpp2)中。
实验表明,当使用相同的配置(例如,模型大小、训练令牌等)时,BitNet b1.58可以与全精度(即FP16)基线在困惑度和最终任务性能方面相匹配
在3B模型上,BitNet b1.58开始与全精度LLaMA LLM的困惑度相匹配,同时速度是后者的2.71倍,GPU内存使用量减少了3.55倍。特别是,具有3.9B模型大小的BitNet b1.58速度是后者的2.4倍,内存消耗减少了3.32倍,但性能明显优于LLaMA LLM 3B。当模型的规模越大时(例如70B),速度上的提升和内存上的节省就会更加显著!
nn.Linear的比例随着模型大小的增加而增加,BitNet b1.58在能耗方面变得越来越高效。
吞吐量
BitNet b1.58 70B可以支持LLaMA LLM的批处理大小的11倍,吞吐量提高了8.9倍。在b1.58位和FP16之间的不同模型大小之间关系:
13B BitNet b1.58在延迟、内存使用和能耗方面比3B FP16 LLM更高效
30B BitNet b1.58在延迟、内存使用和能耗方面比7B FP16 LLM更高效
70B BitNet b1.58在延迟、内存使用和能耗方面比13B FP16 LLM更高效
使用2Ttoken训练
BitNet b1.58在所有任务准确率上都取得了优异的性能,表明1.58位LLMs也具有强大的泛化能力。
结论:1.减少LLM推理显存开销;2.同等算力和显存下支持更多参数;3.与完整精度(即FP16或BF16)的Transformer LLM在模型大小和训练令牌方面相匹配,无论是困惑度还是最终任务性能,同时在延迟、内存、吞吐量和能耗方面显著更具成本效益。
【点击➕关注】:小贾探AI
本人投身于互联网软件行业近十载,专注于WEB工程落地、大数据领域、图谱领域以及AI领域(大模型-GPT-应用落地),平时会在公众号不定期发布一些技术类和实践类的文章,欢迎关注,一起进步一起成长~