训练大型语言模型 (LLM) 的计算成本越来越难以控制。例如,GPT-4 的训练花费了 OpenAI 约 1 亿美元。这些成本主要来自矩阵乘法运算(简称 MatMul),研究人员和开发人员自然都试图彻底消除它或使其更高效。
“可扩展的无 MatMul 语言建模”论文介绍了一种突破性的方法,可正面解决此问题。通过从 LLM 中完全消除 MatMul,作者开发了一种模型,该模型在保持竞争性能的同时,还显著降低了计算和内存要求。
无 MatMul 的 LM 与 Transformer:内存和延迟比较
Source: Rui-Jie Zhu et. al
论文中的所有模型都可以在HuggingFace上找到— 您可以在 巴拿马赌博数据 线试用它们,也可以使用 HuggingFace 的库在本地试用。此外,研究人员还在GitHub上提供了他们的代码,让其他人可以训练他们的模型。
如果你想更好地理解矩阵乘法的立方时间复杂度,我推荐这篇《Big-O 符号和时间复杂度简介》 ,其中有一节专门介绍 MatMul LLM 的时间复杂度。
我还对 MatMul-free 和 MatMul LLM 进行了比较——你可以在这篇文章中找到它:Matmul-Free 与 MatMul LLM:速度和内存消耗。
大型语言模型中的 MatMul 瓶颈
现代基于 Transformer 的 LLM 严重依赖矩阵乘法运算,这是其核心组件(例如注意力机制和前馈层)的核心。MatMul 运算相关的计算和内存成本非常高,会影响训练和推理阶段。随着 LLM 规模的增加,参数数量和计算复杂性也会增加,从而使 MatMul 成为主要瓶颈。
这个问题的一个常见例子是,当 GPU 的 VRAM 不足以处理模型大小时,迫使用户改用 CPU 进行训练或运行推理。CPU 并未像 GPU 那样针对并行 MatMul 操作进行优化,导致计算速度明显变慢。这会形成一个令人沮丧的循环,由于内存限制,即使计算能力足够,也无法充分利用可用的硬件。
多年来,研究人员探索了各种策略来减少 MatMul 的计算负担。量化是一种流行的方法,它涉及降低权重和激活的精度。通过用更少的位表示数字,量化可以降低 MatMul 操作的计算成本和内存占用。
然而,这种方法通常会牺牲模型准确性,并且无法完全消除 MatMul。微软的BitNet等著名努力表明,使用二进制或三元量化可以扩展 LLM,但这些模型在某些部分(例如自注意力机制)仍然依赖于 MatMul 操作。
还提出了替代架构来解决 MatMul 的低效率问题。AdderNet 等方法在某些网络组件中用加法代替乘法,而二元/三元神经网络则利用简化的算术运算
虽然这些方法提供了一些改进,但它们通常无法完全消除 MatMul,并且仅针对模型的特定部分。因此,总体计算成本仍然很高,限制了 LLM 的可扩展性和效率。
无 MatMul 语言模型的工作原理
为了了解无 MatMul LM 的工作原理,让我们研究一下底层架构和关键组件。
用三元运算代替 MatMul
在传统神经网络中,密集层(连接两个连续层之间的所有神经元)依靠 MatMul 来转换输入数据。作者用使用三元权重的 BitLinear 层替换了这些层。它们的权重不是可以是任何实数,而是被限制为三个值:-1、0 或 1。
权重最初以全精度值进行训练,然后在训练期间,使用称为“绝对量化”的过程将其量化为三元值。此过程按权重矩阵的平均绝对值缩放权重矩阵,然后将每个元素四舍五入为最接近的三元整数(-1、0 或 1)。
通过这种简化,他们可以用加法和减法代替 MatMul 中的乘法。例如,将数字乘以 -1 与对其取反相同,乘以 0 的结果为 0,乘以 1 则数字保持不变。
核心组件:MLGRU 和 GLU
下图概述了 MatMul-Free 语言模型的关键组件,包括 MatMul-Free 线性门控循环单元 (MLGRU) 和 MatMul-Free 门控线性单元 (GLU):
无 MatMul 的 LLM:关键概念解释
-
- Posts: 485
- Joined: Mon Dec 23, 2024 4:58 am