Hacker News 中文摘要

RSS订阅

使用Codex自动研究:如何实现232倍更快的内核 -- Auto-research with codex: How I achieved a 232x Faster Kernel

文章摘要

作者在GPU Mode的自动研究竞赛中,针对QR分解问题实现了232倍于基准的加速,最终排名第12。文章分享了其方法、学习心得及遇到的瓶颈,重点在于循环工程而非数学细节。

文章总结

好的,这是根据您的要求,对原文进行中文重述和精简后的版本。


如何用Codex实现232倍加速:GPU Mode QR分解竞赛经验分享

本文分享了作者在GPU Mode与Core Automation联合举办的自动研究主题竞赛中的经历。竞赛要求实现批量的紧凑型Householder QR分解(QR分解)。作者在183名参赛者中排名第12,实现了比基准方案快232倍的加速。

竞赛简介

  • 问题:给定一批形状为 batch x n x n 的FP32 CUDA矩阵A,需要输出与 torch.geqrf(A) 相同的紧凑型Householder QR表示:一个上三角为R、下三角存储Householder向量的H矩阵,以及一个反射系数向量tau。
  • 验证:通过 torch.linalg.householder_product(H, tau) 重建Q,并验证 A ≈ QRQ⊤Q ≈ I
  • 排名:根据所有形状和条件情况的几何平均运行时间排序。关键矩阵尺寸包括512x512、1024x1024、2048x2048和4096x4096。

为什么这个问题适合自动研究

  • GPU Mode提供了 popcorn CLI,使AI代理可以方便地测试、基准测试和提交结果。
  • 竞赛允许大量提交(作者在14天内提交了超过1500次),为代理提供了快速的反馈循环,使其能够不断优化。

作者的策略与学习过程

  1. 基础知识:作者具备GPU内核优化的基础知识(主要是Triton和部分CUDA),但并非该领域的专业人士。他通过Claude和YouTube视频学习了QR分解和Householder反射的原理。
  2. 核心算法:确定使用分块Householder算法(Blocked Householder algorithm)作为主要架构,并采用WY更新(trailing WY-update)来将串行工作转化为更适合矩阵乘法(GEMM)的形式。
  3. 工具选择:主要使用OpenAI的Codex(GPT-5.5),因为作者认为其在Triton方面表现更好,且 /compaction 功能非常有效。同时使用Claude Pro和Modal进行性能分析。
  4. 工作流程
    • 设置:让Codex完成基础设置,包括问题描述、提交指南和日志文件。
    • 目标驱动:使用 /goal 指令让模型循环工作,直到达到特定目标(如“仅使用Triton或CUDA,在n=512上超越当前最佳成绩”)。
    • 监督与引导:通过 /btw/side 在不中断主循环的情况下检查代理状态,并每隔2-3小时提供指导,将模型引向正确的方向。
    • 突破性想法:性能提升的关键在于一系列结构性的改变,例如:为所有形状实现分块WY QR、使用Triton编写面板内核、采用Cholesky-ORHR处理大矩阵、使用CUDA图消除启动开销、融合V/T布局组装、固定形状内核特化等。

克服局部最优解的挑战

当性能提升到一定程度后,模型容易陷入局部最优解。作者采用了以下策略:

  • 候选束(Beam of Candidates):同时维护3-5个有潜力的想法家族,而不是只专注于当前最佳方案。这允许模型尝试更大胆的结构性改变,即使初期表现不佳。
  • 人类介入:在模型长时间停滞不前时,作者作为“秘密武器”进行干预和引导。
  • 鼓励冒险:明确指示模型承担更多风险,尝试雄心勃勃的想法。
  • 使用更强的顾问模型:让Codex调用Claude等更强大的模型来获取更多样化的想法。
  • 频繁清理与重构:定期清理环境、归档旧文件、简化代码,保持工作空间清晰。

可以做得更好的地方

  • 针对不同输入分布(如低秩矩阵)编写数据检测器并加以利用。
  • 更彻底地移除库函数(如使用自定义三角求逆代替PyTorch的 triangular_solve)。
  • 让尾部矩阵常驻在fp16中,避免反复的数据类型转换。
  • 更早地引入候选束策略。
  • 编写更稳健的性能分析器来测试混合精度情况。
  • 更好地利用B200 GPU的第五代张量核心指令(tcgen05)。

结论

作者最终以232倍的加速比获得第12名。他认为,领域知识对于加速“自动研究”或“循环工程”至关重要,既能优化工具链设计,也能更有效地进行人工引导。他个人倾向于构建针对特定问题的工具链,而非通用的自改进框架。

评论总结

根据评论内容,主要观点和论据如下:

1. LLM在代码优化中的高效应用(认可度高) - 评论1(Almondsetat)指出,LLM在给定约束、验证方式和明确目标后,能自主完成代码优化循环,例如为视频压缩编解码器生成SSE/AVX实现,使单核性能翻倍,并开始创建CUDA实现。关键引用:"I gave it the repository... it generated SSE and AVX implementations... almost doubled performance";"If the LLM can verify itself and course-correct you can basically leave it on autopilot"。 - 评论8(myshapeprotocol)称赞自动化工具实现232倍加速是"incredible engineering feat"。

2. 对现有AI公司的挑战(认可度中等) - 评论2(Jackobrien)认为,单个工程师借助LLM就能完成如此工作,使OpenAI/Anthropic等公司显得"pretty weak"。

3. 训练数据与领域适配性(认可度中等) - 评论3(tosh)推测,LLM在GPU内核和SIMD方面表现优异,可能是因为训练数据丰富,或该领域特别适合语言模型处理。关键引用:"Training material seems to be especially rich re GPU kernels and SIMD";"a sub-domain that language models are a great fit for and humans have trouble with"。

4. 自动化循环的局限与风险(认可度中等) - 评论5(shken)指出,当循环中缺乏验证反馈时,LLM可能失败而不自知,例如需要凭据或设置的任务。关键引用:"Nothing in the loop could tell the agent it had failed, so it said done and moved on"。 - 评论7(spwa4)强调,自动化研究虽能产出未知结果,但"it's harder to do with an LLM than without",且失败时可能浪费大量成本。关键引用:"it's the only way to get something out of models... that they don't know yet";"when you fuck it up... you spent $1000 to find the quickest way to get a robot leg on the ground is just to crash it into the ground"。

5. 技术细节与质疑(认可度较低) - 评论9(amarcheschi)对Cholesky分解替代Householder的稳定性提出疑问,认为可能"faster but less stable in some cases"。 - 评论6(ramon156)指出某些提交可能省略规则,例如包含"bypass ban check"的代码行。

6. 写作风格评价(认可度低) - 评论10(sqquima)赞赏文章非AI生成,感觉"fresh to read a long wall of text that didn't seem to be AI generated"。