自动研究与编程助手:我如何实现232倍的内核加速
2026年7月8日 目录 简介 比赛简介 问题介绍 为什么这个问题适合自动研究 学习足够提出更好的问题(可选) QR分解的数学:霍斯特德变换 在阻塞霍斯特德算法的帮助下将串行工作缩小 其他挑战 Codex-maxxing 内核进度突破 突破思路 引入多样性以逃避局部极大值 实现提示 我可以做得更好的地方 结论 参考资料 致谢 简介 比赛简介 GPU模式与核心自动化最近举办了一场以自动研究为主题的比赛。问题陈述是实现批量的平方紧凑霍斯特德QR分解,即QR分解。我在183名参与者中排名第12,最终比基线解决方案快232倍。本文将介绍我怎么做到的。我将讨论我的方法、所学的经验和在比赛中遇到的瓶颈。这是我第一次认真尝试自动研究。有人会称之为“循环工程”,老实说,这也没问题。请注意,您不需要详细了解数学或问题本身就可以跟随本文的大部分内容。我专注于我的方法,而将数学和问题本身置于次要地位,因为大多数阅读本文的人并没有参与比赛。您可以在这里查看完整的比赛页面:问题链接和排行榜 这个比赛是GPU模式的《研究时代的线性代数内核》系列的一部分。 问题介绍 我们获得了一批形状为batch x n x n的平方FP32 CUDA矩阵A,并必须返回与torch.geqrf(A)相同的紧凑霍斯特德QR表示:一个H矩阵,其上三角形是R,下三角形存储霍斯特德向量,外加一个tau反射系数向量。检查器使用torch.linalg.householder_product(H, tau)重建Q,取R = triu(H),并验证:A≈QR, Q⊤Q≈I, Q⊤A≈R 在正确提交中,排行榜根据形状和条件的几何均值对运行时间进行了排名。重要的大小是512 x 512这样的批量平方矩阵,也有更大的1024, 2048和4096的情况。内部允许使用低位FP16、FP8或NVFP4,但返回的因子仍然必须满足FP32风格的QR检查。一个微小的3 x 3示例如下: A=[12−5146167−68−424−41]=[6/7−69/175−58/1753/7158/1756/175−2/76/35−33/35]⏟Q[1421−140175−700035]⏟R 这里Q是正交的,这意味着它的列是单位长度并且相互垂直,而R是上三角的,这意味着对角线以下的所有项都为零。比赛并没有要求我们直接打印稠密的Q和R;它要求提供紧凑的霍斯特德版本,以便检查器重建Q并从上三角中读取R。对于上面的3×3示例,第一个反射器直接将第一列(12, 6, −4)映射到 (−14, 0, 0) 上。这 −14 成为R11。具体如何运作在数学部分中有讨论。 为什么这个问题适合自动研究 GPU模式为参与者提供了提供友好的CLI,使其适合代理使用。代理可以利用这一点进行测试、基准测试,并直接提交到排行榜上。检查器还提供了形状方面的反馈,以及整体几何均值的时间。敏锐的观察者会注意到,这是编写循环的良好设置。代理渴望紧密的反馈循环。它们允许他们尽情地进行爬坡。 GPU模式比赛通常会提供某种方式来迭代内核。要么您直接提交,要么像Modal这样的赞助商提供积分。这里,组织者基本上允许无限提交,只要您把提交间隔开。如果您不这样做,队列会变长,大家的运行会超时。某一时刻,工作区甚至因为每个人都在频繁提交而耗尽了Modal积分。这是让学习变得可及的好方法。在14天的时间里,我提交了超过1500次。 学习足够提出更好的问题 我已经对GPU内核优化的基本知识(主要是在Triton中,对CUDA有一些理解)有一年经验,但没有在这个领域专业工作。我要告诉您的是,我在排行榜上周围的人中是一个籍籍无名之辈。排行榜上排名我上面的那个人(CUDA Colonel)是NVIDIA的一名首席工程师。不管怎么说,除了光环效应之外,由于我了解基本知识,并且最近阅读过GatedDeltaNet,我在一般的GPU内核术语上保持清醒。您对某事了解得越多,您就越能有效提示LLMs,因您将未知的未知项转化为已知的未知项。同时,值得注意的是,这场比赛是可以在没有领域知识的情况下进行的 - 就像您可能不会进入前十,但您只需依靠自己的工具/代理循环或其他即可获得比基线更令人满意的加速。我在比赛中的第一步是了解QR分解是什么以及如何实现。实现QR分解的方法有很多种 - 比如Gram-Schmidt和霍斯特德。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡