内容提要
腾讯在AI编译器技术沙龙上介绍了FalconGEMM,一种基于低复杂度矩阵乘法的优化方案。它利用Strassen和AlphaTensor算法,通过LCMA框架统一描述,结合QDSL、算子融合和调度优化,在NVIDIA H20上超越cuBLAS,峰值性能提升10%-16%,并保持数值精度。该工作展示了从算法复杂度入手突破硬件性能瓶颈的新思路。
延伸解读
为何选择H20作为测试平台
文章指出,NVIDIA H20具有高显存带宽和相对较低的计算峰值,这种特性使得“增加数据处理、换取计算量下降”的策略更容易获得收益。在计算密集度不高的硬件上,减少乘法次数带来的理论优势更容易转化为实际性能提升,因此H20成为验证FalconGEMM效果的合适平台。
低复杂度算法的适用边界
FalconGEMM并非在所有情况下都优于传统GEMM。其本质是用额外的数据处理换取更少的乘法计算,因此只有在计算密度较高时才有优势。团队设计的Cost Model基于Roofline模型,通过分析计算量和访存量,判断何时采用LCMA以及选择哪种算法,确保在合适的场景下使用低复杂度算法。
数值精度问题的根源与缓解
早期实验中出现的明显误差主要源于低精度Cast,而非FP32累加本身。频繁的精度转换会丢失FP32尾数信息。FalconGEMM通过融合实现,在片上以FP32累加最终结果,减少中间Cast次数,从而缓解了精度问题。语言模型Benchmark显示,其与标准矩阵乘的最终得分几乎一致。
Q&A
FalconGEMM是什么?它主要解决什么问题?
FalconGEMM是腾讯提出的一种基于低复杂度矩阵乘法(LCMA)的优化方案,旨在突破传统GEMM Kernel接近硬件峰值后优化空间有限的问题。它利用Strassen和AlphaTensor等算法减少乘法次数,并通过统一框架、算子融合和调度优化,在NVIDIA H20上超越cuBLAS,峰值性能提升10%-16%。
Strassen算法是如何减少矩阵乘法的计算量的?
Strassen算法通过重新组合输入矩阵,将2×2矩阵乘的8次乘法减少到7次,再通过额外的加减操作恢复结果。当操作对象是子矩阵时,矩阵加法O(N²)与乘法O(N³)的复杂度差异使得这种交换有利。递归使用可进一步减少乘法次数,但会增加额外开销。
AlphaTensor在FalconGEMM中扮演什么角色?
AlphaTensor将矩阵乘法转化为张量分解问题,利用强化学习搜索更低秩的分解方式,发现不同M、N、K形状下可能存在多种低复杂度矩阵乘算法。FalconGEMM将其作为算法来源之一,扩展了低复杂度算法的空间。
FalconGEMM如何解决Strassen算法带来的数值精度问题?
FalconGEMM通过融合实现减少中间结果的精度转换。WGMMA输出保持FP32精度,直接在片上以FP32累加最终C,最后统一Cast回目标精度,避免了多次低精度Cast导致的误差累积。在语言模型Benchmark中,与标准矩阵乘的最终得分几乎一致。
FalconGEMM在GPU上实现时遇到了哪些挑战?如何解决?
主要挑战包括:中间访存开销大、负载不均衡、L2缓存抖动和功耗墙。解决方案:通过算子融合减少中间结果写回;借鉴Stream-K将Group拆分到多个SM以平衡负载;调整Group顺序改善L2局部性;使用Persistent Kernel支持灵活调度。
FalconGEMM的性能提升具体是多少?在什么硬件上测试?
在NVIDIA H20上,FP16和BF16测试中,FalconGEMM在大量矩阵形状上超过cuBLAS,峰值性能提升约10%-16%。
FalconGEMM如何决定何时使用低复杂度算法?
FalconGEMM设计了一个类似Roofline的Cost Model,分析不同方案的计算量、访存量,并结合GPU算力与带宽,估算瓶颈区间。根据M、N、K形状,判断常规GEMM与不同LCMA方案的收益边界,自动选择更合适的实现。
FalconGEMM未来的发展方向是什么?
未来计划包括:进一步融合Combine A/B,减少输入中间结果访存;将LCMA扩展至Attention,与Flash Attention结合,探索新的性能空间。