从LLM中完全消除矩阵乘法,效果出奇得好,10亿参数跑在FPGA上接近大脑功耗

d866633941ed68e82deb74a9dc8f53dc.png

来源:机器之心‍‍
本文约3700字,建议阅读5分钟本文介绍了矩阵乘法(MatMul)中GPU专门针对MatMul操作进行优化的过程。

让语言模型「轻装上阵」。

一直以来,矩阵乘法(MatMul)稳居神经网络操作的主导地位,其中很大原因归结为 GPU 专门针对 MatMul 操作进行了优化。这种优化使得 AlexNet 在 ILSVRC2012 挑战赛中一举胜出,成为深度学习崛起的历史性标志。

在这当中,有个值得注意的点是,AlexNet 利用 GPU 来提高训练速度,超越了 CPU 的能力,至此,GPU 的加入使得深度学习仿佛赢得了「硬件彩票」。

尽管 MatMul 在深度学习中很流行,但不得不承认的是它占据了计算开销的主要部分,主要表现为 MatMul 在训练和推理阶段消耗大部分执行时间和内存访问。

目前为止,研究者已经开始借助其他更简单的操作替代 MatMul,主要有两种。

  • 第一种策略是使用初等运算代替 MatMul,例如,在卷积神经网络 (CNN) 中,用有符号加法代替乘法;

  • 第二种方法是使用二值或三值化量化,将 MatMul 值在累加之前要么翻转要么清零。比如脉冲神经网络 (SNN) 使用二值激活,而二值化网络 BNN 使用量化权重。

在语言建模方面,BitNet 等技术的出现表明量化的可扩展性, 但这种方式仍然保留了昂贵的矩阵 - 矩阵相乘(MMM)的自注意力机制。研究者尝试过多种努力,但 MatMul 操作在 GPU 上仍然是资源密集型的。

既然 MatMul 占据了 LLM 整体计算成本,且随着 LLM 向更大的嵌入维度和上下文长度扩展时,这种成本只会增加。这引发了一个问题:是否有可能完全从 LLM 中消除 MatMul 操作? 

85dba8a0ae8a38b103f357f26d3adfa8.png

在这项工作中,来自加州大学圣克鲁兹分校等机构的研究者证明了 MatMul 操作可以完全从 LLM 中消除,同时在十亿参数尺度下保持强大的性能。

4dfdca10248359084aa95f84aed5c523.png

  • 论文地址:https://arxiv.org/pdf/2406.02528

  • 项目地址:https://github.com/ridgerchu/matmulfreellm

  • 论文标题:Scalable MatMul-free Language Modeling

实验表明,该研究提出的 MatMul-free 模型达到了与最先进的 Transformer 相当的性能,后者在推理期间需要更多的内存,规模至少为 2.7B 参数。

此外,论文还研究了扩展定律,发现随着模型规模的增加,MatMul-free 模型与全精度 Transformer 之间的性能差距逐渐缩小。

研究者还提供了一种高效的 GPU 模型实现方式,在训练期间相比未优化的基线模型减少了多达 61% 的内存使用。通过在推理时利用优化的内核,模型内存消耗可以比未优化的模型减少超过 10 倍。 

最后,研究者在 FPGA 上构建了一个自定义硬件解决方案,他们以 13W 的功耗处理了十亿参数规模的模型,超出了人类可读的吞吐量,使 LLM 更接近大脑般的效率。

网友看后不禁感叹道:看来有大事要发生了。

71ae20c7de4c23143624be0917e9b993.png

不过,受到计算资源的限制,研究者还没有在非常大的模型(如参数大于100B的模型)上测试MatMul-free模型的有效性,因此其实战效果还有待观察。

方法介绍

该研究构建了首个可扩展的MatMul-free语言模型 (Matmul-free LM),通过在密集层中使用加法操作以及在自注意力类函数中使用元素级 Hadamard 乘积完成。 

具体来说,三值权重消除了密集层中的 MatMul,类似于 BNN。为了从自注意力中移除 MatMul,该研究优化了门控循环单元 (GRU) ,使其仅依赖于元素级乘积,并表明该模型可与最先进的 Transformer 相媲美,同时消除了所有 MatMul 运算。

论文详细介绍 MatMul-free 语言模型(LM)的各个组成部分。

具有三值权重的 MatMul-free 密集层

在标准密集层中,输入和权重矩阵之间的 MatMul 可以表示为:

eaca1b69f3d98e9dcf4a12ecd95e26bd.png

为了避免使用基于 MatMul 的密集层,该研究采用 BitNet 来替换包含 MatMul 的密集层,即使用 BitLinear 模块,这些模块使用三值权重将 MatMul 操作转换为纯加法操作。当使用三值权重时,权重矩阵 W 中的元素被限制在集合 {-1, 0, +1} 中。带有三值权重的 MatMul 可以表达为: 

06464cac320c774c1198d486c19422d7.png

由于三值化权重d59c5ea3d827d7d107159ee06a4a1780.png只能从 {−1, 0, +1} 中取值,因而 MatMul 中的乘法运算可以用简单的加法或减法运算代替:

cea925f4260bb8203949ef049ea09258.png

因此,三值化 MatMul 可以写成如下:

af266a94dcbf5a92bc3195977a9ab8ce.png

算法 1 为量化融合 RMSNorm 和 BitLinear 算法的流程图:

1887df25f0a0a7ccc05eb005c702d785.png

MatMul-free 语言模型架构

研究人员采用了 Metaformer 的观点,该观点认为 Transformer 由两部分组成:token mixer(用于混合时间信息,即自注意力机制)和 channel mixer(用于混合嵌入 / 空间信息,即前馈网络,门控线性单元 GLU )。该架构的高级概览如图 2 所示。

fe1b32567d3b0c902cc04e53b647531a.png

自注意力机制是现代语言模型中最常用的 token mixer,它依赖于三个矩阵 Q、K 和 V 之间的矩阵乘法。为了将这些操作转换为加法,研究人员至少对两个矩阵进行二值化或三值化处理。

假设所有密集层的权重都是三值的,他们将 Q 和 K 量化,得到一个三值的注意力图,从而消除自注意力中的乘法操作。但是,以这种方式训练的模型无法成功收敛。一个可能的解释是,激活值包含对性能至关重要但难以有效量化的异常值。

为了解决这一挑战,研究人员探索了不依赖于矩阵乘法的替代方法来混合 token。

通过采用结合了逐元素操作和累积的三值 RNN,可以构建一个MatMul-free 的 token mixer。在各种 RNN 架构中,GRU 因其简单高效而著称,它在比长短期记忆网络(LSTM)使用更少的门控单元和结构更简单的情况下,实现了类似的性能。因此,研究人员选择 GRU 作为构建 MatMul-free token mixer 的基础。

为了实现 MatMul-free 的通道混合,研究人员采用了门控线性单元(GLU),它在许多现代 LLM 中得到了广泛应用,包括 Llama 、Mistral 和 RWKV。一个适应了 BitLinear 的 GLU 版本可以表达如下:

90bd006b8c01e9d099ddd16e094f38f9.png

这里的通道混合器仅由密集层组成,这些层已被三值化累积操作所替代。通过在 BitLinear 模块中使用三值权重,研究人员可以消除对昂贵 MatMul 的需求,这样不仅使通道混合器在计算上更加高效,同时还保持了其在跨通道混合信息方面的有效性。

实验

该研究的重点是在中等规模的语言建模任务上测试 MatMul-free 的语言模型。研究人员将两种变体的 MatMul-free 语言模型与复现的高级 Transformer 架构(基于 Llama-2 的 Transformer++)在三个模型大小上进行比较:370M、13 亿和 27 亿参数。

为了公平比较,所有模型都在 SlimPajama 数据集上进行了预训练,其中 370M 模型训练了 150 亿个 token,而 13 亿和 27 亿模型各训练了 1000 亿个 token。

模型训练使用了 8 个 NVIDIA H100 GPU。370M 模型的训练时间大约为 5 小时,13 亿模型为 84 小时,27 亿模型为 173 小时。

MatMul-free 语言模型的扩展规律

研究团队评估了MatMul-free 语言模型和 Transformer++ 在 370M、13 亿和 27 亿参数模型上的扩展规律,如图 3 所示。

为便于比较,MatMul-free LM 和 Transformer++ 中的每个操作都被同等对待。但请注意,Transformer++ 中的所有权重和激活都是 BF16 格式,而MatMul-free 语言模型中的 BitLinear 层使用三元参数,激活为 BF16。因此,MatMul-free 语言模型的平均运算成本要低于 Transformer++。

1ea6e24fb20a033b2475f784cb20ec38.png

有意思的是,与 Transformer++ 相比,MatMul-free 语言模型的扩展投影显示出更陡峭的下降趋势,这表明MatMul-free语言模型在利用额外计算资源提高性能方面更为高效。

因此,MatMul-free 语言模型的扩展曲线预计将在大约 10^23 次浮点运算(FLOPs)处与 Transformer++ 的扩展曲线相交。这个计算规模大致相当于训练 Llama-3 8B(使用 1.5 万亿个 token 训练)和 Llama-2 70B(使用 2 万亿个 token 训练)所需的 FLOPs,这表明MatMul-free 语言模型不仅在效率上胜出,而且扩展时在损失方面也可能表现更好。

下游任务

学习率是语言模型训练中一个关键的超参数,当模型处于三元 / 二元权重状态时,对学习率变得更加敏感。为了确定最优学习率,研究人员使用 370M 模型,批量大小为 50k 个 token,在 1.5e−3 到 3e−2 的范围内进行了搜索。这次搜索的结果如图 4 (c) 所示。

结果显示,当学习率从 1.5e−3 增加到 1e−2 时,最终训练损失单调递减。只有当学习率超过 2e−2 时,模型才表现出不稳定。这一发现表明,以前使用三元权重的作品,如使用 1.5e−3 学习率的 BitNet,可能不是最优的,更高的学习率有可能带来更好的性能。

这些发现与 Deepseek LLM 的观察结果一致,后者发现传统大型语言模型(LLMs)的最佳学习率实际上比大多数 LLM 训练设置中通常报告的值要大。

有趣的是,研究人员还观察到,与使用较小学习率训练的模型相比,训练初期使用较大学习率训练的模型,在训练后期的阶段训练损失下降得更快。

a7484115e562baa3cdbc83ed21815b3c.png

研究人员根据训练时间和内存使用情况评估了他们提出的融合型 BitLinear 和传统型 BitLinear 实现,如图 4 (a-b) 所示。

实验表明,他们的融合操作器在更大的批量大小下,能够带来更快的训练速度,并减少内存消耗。当批量大小为 2 的 8 次方时,1.3B 参数模型的训练速度从每次迭代 1.52 秒提高到 1.21 秒,比 Vanilla 实现快了 25.6%。

此外,内存消耗从 82GB 减少到 32GB,内存使用减少了 61.0%。随着批量大小的增加,融合实现的性能显著提高,允许同时处理更多的样本,并减少总迭代次数。

图 4 (d) 展示了不同模型大小下,所提出的MatMul-free语言模型与 Transformer++ 在 GPU 推理内存消耗和延迟方面的比较。

在MatMul-free语言模型中,研究人员采用 BitBLAS 进行加速,以进一步提高效率。评估是在批量大小为 1,序列长度为 2048 的情况下进行的。

MatMul-free语言模型在所有模型大小上都显示出比 Transformer++ 更低的内存使用和延迟。

对于单层,MatMul-free 语言模型只需要 0.12 GB 的 GPU 内存,并且实现了 3.79 毫秒的延迟,而 Transformer++ 消耗了 0.21 GB 的内存,并且有 13.87 毫秒的延迟。随着模型大小的增加,MatMul-free 语言模型的内存和延迟优势变得更加明显。

值得注意的是,对于大于 2.7B 的模型大小,结果是使用随机初始化的权重进行模拟的。对于最大的 13B 参数模型,MatMul-free 语言模型仅使用 4.19 GB 的 GPU 内存,并且有 695.48 毫秒的延迟,而 Transformer++ 需要 48.50 GB 的内存,并表现出 3183.10 毫秒的延迟。

这些结果突出了MatMul-free语言模型所实现的效率增益,使其成为大规模语言建模任务的有希望的方法,特别是在推理期间。

为了测试MatMul-free语言模型功耗和有效性,研究人员使用 SystemVerilog 创建了一个 FPGA 加速器。概览如图 5 所示。

d6d03be14a3bc150f503b79d7d86b589.png

表 2 显示了单块(N = 1)单核实现的资源利用、功耗和性能。

f568f3f27b5dfb4039d3eb2fbe738c55.png

通过使用完整的 512 位 DDR4 接口,并对占据核心处理时间 99% 的 TMATMUL 功能单元进行并行化,预计在保持相同时钟速率的情况下,无需额外优化或流水线化,可以实现大约 64 倍的进一步加速,如表 3 所示。

bf86959e2a489923c495e7942e227788.png

编辑:王菁‍

校对:林亦霖bfa1b910b4a62fc453955cbbe28b9363.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
LLM(基于学习的管理方法)是一种在智能决策广泛应用的方法。LLM适用于各种领域,如金融、医疗、交通等。 首先,LLM利用机器学习算法对大量数据进行分析和预测。它可以通过学习历史数据的模式和趋势,将其应用于决策问题。通过分析数据,LLM可以发现隐藏在大量数据的规律和关联,为决策提供有力的支持。例如,在金融领域LLM可以分析市场数据、企业财务报表等信息,预测股票的涨跌趋势,从而帮助投资者做出明智的投资决策。 其次,LLM还可以进行优化和调整。它可以不断学习和改进,根据反馈信息进行自适应调整。通过与环境的互动,LLM可以不断优化模型,并根据情况调整决策策略。例如,在交通管理LLM可以通过分析交通流量数据,根据实时情况调整路线规划,降低交通拥堵,提高通行效率。 此外,LLM在智能决策的应用还包括风险评估、问题诊断和策略制定等方面。通过对历史数据和现有情况的分析,LLM可以预测潜在风险和问题,并提供相应的策略和措施。例如,在医疗领域LLM可以通过分析患者的病历和病情数据,预测患者的病情发展趋势,帮助医生制定更准确的治疗方案。 综上所述,LLM在智能决策的应用广泛且重要。它利用机器学习算法对大量数据进行分析和预测,为决策提供有力的支持。同时,LLM还可以进行优化和调整,根据环境的变化不断改进决策策略。LLM的应用可以提高决策的准确性和效率,在各个领域发挥重要作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值