这篇论文介绍了一种名为 LP-GEMM 的新技术,它的核心目的是让计算机在处理一连串复杂的数学运算(特别是矩阵乘法,即 GEMM)时,跑得更快、更省力。
为了让你轻松理解,我们可以把计算机处理数据的过程想象成一家繁忙的物流仓库。
1. 现状:忙碌却低效的“标准仓库”
想象一下,你经营着一家名为"OpenBLAS"的物流仓库。每天,卡车(数据)都要把货物从 A 地运到 B 地,再运到 C 地。
2. 创新:LP-GEMM 的“流水线”策略
这篇论文提出的 LP-GEMM 就像是一个聪明的物流调度员。他意识到:如果货物是连续运输的,为什么每次都要重新打包呢?
他设计了一套新的**“三步走”策略**,把仓库分成了三个角色:
第一步:初始打包员 (Ini-GEMM)
- 任务: 负责接收第一辆卡车。他依然会拆包,但他会直接按照下一站(下一辆卡车)最喜欢的格式来摆放货物。
- 比喻: 就像你寄快递,直接按照收件人家里最方便的摆放方式打包,而不是先按标准格式包好,再让收件人拆开。
第二步:中间搬运工 (Mid-GEMM)
- 任务: 当货物从第一步传过来时,它已经是“完美格式”了!中间搬运工完全不需要拆包或重新打包,直接推着货物进行计算,然后保持原样传给下一站。
- 比喻: 就像传送带上的包裹,直接滑过,不需要停下来重新贴标签或换箱子。
第三步:最终整理员 (End-GEMM)
- 任务: 只有当货物到达最后一站,需要交付给最终用户时,整理员才会把货物拆包,恢复成标准的“货架格式”。
- 比喻: 只有到了目的地,才把货物摆成标准的展示架样子。
3. 核心优势:省去了“无用功”
通过这种**“布局传播”(Layout Propagation)**技术,LP-GEMM 消除了中间环节那些毫无意义的“拆包 - 重包”动作。
- 以前的 OpenBLAS: 拆包 -> 计算 -> 重包 -> 拆包 -> 计算 -> 重包 -> 拆包 -> 计算 -> 重包。
- 现在的 LP-GEMM: 拆包 -> 计算 -> (保持格式) -> 计算 -> (保持格式) -> 计算 -> 重包。
结果: 省去了大量的搬运和整理时间。
4. 实际效果:快得惊人
作者在两种不同的“卡车”(计算机芯片架构)上测试了这个方法:
- Intel x86 芯片(像重型卡车): 速度平均提升了 2.25 倍。
- RISC-V 芯片(像灵活的小货车): 速度提升甚至达到了 5 倍!
特别是在处理像 AI 大模型(如 Llama 3.2) 这种需要连续进行成千上万次矩阵运算的任务时,这种“不重新打包”的策略效果尤为明显。
5. 总结与比喻
如果把 AI 模型的计算过程比作做一道复杂的菜:
- 传统方法:每切一次菜,厨师都要先把菜摆成“标准盘”,切完再摆成“标准盘”,再切下一刀。虽然每次切菜都很专业,但摆盘的时间太长了。
- LP-GEMM 方法:厨师直接按照下一步烹饪需要的形状来切菜。切完直接下锅,不需要中间摆盘。只有最后装盘上桌时,才摆成漂亮的形状。
结论:
这篇论文告诉我们,在计算机世界里,有时候**“保持原样”**比“每次都追求完美标准”要高效得多。LP-GEMM 通过让数据在运算过程中“保持连贯的格式”,极大地减少了计算机的无效劳动,让 AI 跑得更快,更省电。
LP-GEMM 技术总结:将布局传播集成到 GEMM 操作中
1. 研究背景与问题 (Problem)
在现代科学计算和机器学习(ML)工作负载中,连续的依赖通用矩阵乘法(GEMM)序列往往占据了主要的执行时间。尽管现有的顶级 BLAS 库(如 OpenBLAS、Intel MKL)对单个 GEMM 调用进行了极致优化,但它们受限于标准的 BLAS API 规范。
核心痛点:
- 冗余的数据打包与解包(Redundant Packing/Unpacking): 标准 BLAS 库要求每个 GEMM 调用独立地将输入矩阵打包(Packing)成适合微内核(Micro-kernel)计算的特定内存布局,并在计算完成后将输出解包(Unpacking)回标准的行/列主序布局。
- 流水线效率低下: 在连续的 GEMM 操作中(例如 Transformer 或 MLP 层),前一个操作的输出立即作为下一个操作的输入。标准库会在每个边界处执行“解包 -> 重新打包”的过程,导致大量的内存带宽浪费和计算资源闲置,而这些操作对于连续计算而言是多余的。
- 缺乏跨操作优化: 现有的优化主要集中在单个内核的微架构调优上,忽略了操作序列之间的数据布局连续性。
2. 方法论 (Methodology)
本文提出了 LP-GEMM (Layout Propagation GEMM),一种对 OpenBLAS GEMM 内核的分解方案,旨在通过**布局传播(Layout Propagation)**消除连续 GEMM 操作间的冗余数据移动。
核心设计思想
LP-GEMM 打破了 BLAS 必须返回标准内存布局的限制,允许数据在连续操作间保持优化的内部打包布局。它将传统的 GEMM 操作分解为三个专门化的内核:
初始 GEMM (Ini-GEMM):
- 负责接收原始数据并进行初始打包。
- 执行计算,并将结果以**传播布局(Propagated Layout)**存储,而不是标准布局。
- 这是布局传播链的起点。
中间 GEMM (Mid-GEMM):
- 接收前一个操作已打包好的数据。
- 跳过打包步骤,直接利用现有的布局进行计算。
- 计算结果继续以相同的传播布局存储,供下一个操作使用。
- 这是消除冗余开销的关键环节。
结束 GEMM (End-GEMM):
- 负责传播链的终止。
- 执行计算,并将最终结果解包回标准的 BLAS 内存布局,以便后续非 GEMM 操作或用户访问。
技术实现细节
- 微内核设计: 定义了两种微内核:
- Propagate-Layout µkernel: 维持传播布局,计算顺序与存储顺序一致,最大化空间局部性。
- Default µkernel: 用于结束传播,将数据重新排序为标准布局。
- 内存布局统一: 强制统一了三个要素:(1) 读取输入的打包布局,(2) 计算时的迭代顺序,(3) 最终存储的布局。这使得输出可以直接作为下一个操作的输入,无需中间转换。
- 步长处理 (Strided Loads/Stores): 为了处理非连续内存访问(如分块矩阵),引入了额外的参数来定义数据块的存储步长,确保在保持布局传播的同时支持复杂的矩阵操作。
3. 关键贡献 (Key Contributions)
- LP-GEMM 分解架构: 提出了一种将 OpenBLAS GEMM 操作分解为
ini-GEMM、mid-GEMM 和 end-GEMM 的新范式,有效利用了数据布局传播。
- Llama-3.2 独立实现: 使用纯 C++ 和 BLAS 级 GEMM 调用,独立实现了 Llama-3.2 的推理路径(包括 Attention 层),验证了该方法在实际大模型中的可行性。
- 其他算子的适配: 在 AVX-512 架构上实现了 Softmax、RoPE(旋转位置编码)和 RMSNorm 等常见 ML 算子,使其能够直接利用 LP-GEMM 的传播布局,减少了中间转换开销。
- 跨架构验证: 在 x86 (AVX-512) 和 RISC-V (RVV 1.0) 两种截然不同的架构上进行了广泛评估,证明了该方法的通用性。
4. 实验结果 (Results)
研究在 Intel Xeon Gold 6252 (x86) 和 SpacemiT X60 (RISC-V) 平台上进行了评估,对比对象包括 OpenBLAS、Intel MKL、BLIS 和 FlashGEMM。
连续 GEMM 性能提升:
- 在 x86 架构上,针对连续 GEMM 序列,LP-GEMM 相比 OpenBLAS 实现了平均 2.25 倍 的加速。
- 在 RISC-V 架构上,针对 Attention 类工作负载,加速比高达 5 倍。
- 对于中间内核(Mid-GEMM),由于消除了打包开销,相比 OpenBLAS 实现了约 1.5x 到 2x 的中位数加速。
与商业库对比:
- 在 x86 上,LP-GEMM 的中间/结束内核性能与高度优化的 Intel MKL 相当,甚至在某些场景下更具优势,尽管 MKL 的初始内核优化更极致。
- 在 RISC-V 上,LP-GEMM 显著优于其他现有方案,因为 OpenBLAS 在 RISC-V 上的解包开销较大,而 LP-GEMM 完全避免了这一点。
实际工作负载 (Llama-3.2):
- 在 Llama-3.2 的 Attention 层中,LP-GEMM 在小输入尺寸下实现了高达 2 倍 的加速。
- 随着序列长度增加,RISC-V 上的加速比呈线性增长趋势,这归因于 LP-GEMM 避免了 OpenBLAS 中随矩阵增大而恶化的非连续内存访问开销。
连续 GEMM 基准测试:
- 在由三个连续 GEMM 组成的基准测试中(模拟 DNN 瓶颈块),LP-GEMM 在大多数测试用例中均优于 OpenBLAS 和 FlashGEMM。
5. 意义与结论 (Significance & Conclusion)
- 范式转变: LP-GEMM 证明了从“优化单个孤立内核”向“优化端到端工作负载流”转变的巨大潜力。它表明,通过理解操作序列间的交互,可以挖掘出比单纯微架构调优更多的性能空间。
- 消除冗余: 研究明确指出,在连续矩阵乘法中,**打包/解包(Packing/Unpacking)**往往是主导成本,而非微内核本身的计算。LP-GEMM 通过消除这些冗余步骤,显著提升了计算效率。
- 实用性与兼容性: 虽然 LP-GEMM 不完全兼容标准 BLAS API(因为输出布局不同),但其对现有代码的侵入性很小。通过引入少量参数(如步长),即可集成到现有的 ML 框架中。
- 未来方向: 该方法不仅适用于 GEMM,还暗示了将布局传播扩展到卷积(Convolutions)等其他算子的可能性,为编译器驱动的优化框架提供了新的思路。
总结: LP-GEMM 是一种高效、通用的优化技术,通过打破 BLAS 的布局限制,利用数据在连续操作间的自然连续性,显著降低了内存带宽压力并提升了计算吞吐量,特别是在资源受限的 RISC-V 边缘设备和大规模 Transformer 模型推理中表现卓越。
每周获取最佳 machine learning 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。