手写CUDA内核跑不过Triton自动生成的代码,专家调优失败,最后发现问题根本不在显存。一个AI优化另一个AI的推理过程,上演了一出技术圈的反转剧。
手写代码打不过机器生成
大模型跑起来靠的是显卡里一堆叫SM的计算单元。每个SM单元都有自己的高速缓存,叫共享内存。A100显卡每个SM有164KB共享内存,而RTX 3090只有100KB。少了整整64KB,相当于少了将近四成的临时工作空间。
工程师手写的CUDA内核,针对A100做了极致优化。里面的分块尺寸参数——128、64、32、64这些数字——是反复调出来的最优解。但把这些代码直接搬到RTX 3090上跑,结果让人傻眼:85毫秒。同样的功能,用Triton自动生成的版本只跑74毫秒。
手写的,输给了机器自动写的。精度一模一样,速度慢了15%。
这件事捅出来的人是Alexey Fateev。他用的工具叫Prime Agent,一个能自我改进的编程智能体。他让Prime Agent去优化SageAttention内核,为的是让Minimax H3在RTX 3090上跑得更快。结果Prime Agent发现了一个尴尬的事实:人类手写的代码,在3090上就是跑不过编译器自动生成的版本。
分块尺寸的陷阱
工程师第一反应是:分块尺寸不对。CTA分块尺寸(线程块分块尺寸)是GPU编程里最关键的参数之一,它决定了每个计算单元一次处理多少数据。A100的共享内存大,可以用比较大的分块;3090的共享内存小,理论上应该用更小的分块。
于是先试了缩小分块:从默认配置改成64x64。这样每个线程块占用的共享内存更少,理论上能让更多线程块同时运行,提升占用率。结果更慢了:78.75毫秒。
这个结果反常识。共享内存更小,缩小分块应该能缓解压力,为什么反而更慢?因为GPU性能不只取决于共享内存容量,还涉及缓存命中率、内存访问模式、计算单元利用率等一系列因素。
瓶颈藏在意想不到的地方
团队换了个方向:反着来,把分块加大到128x128。加大分块意味着每个线程块处理更多数据,计算密度更高,但占用的共享内存也更多。结果张量管道(tensor pipe,负责矩阵乘法的硬件单元)的忙碌程度达到了77%。
关键发现来了:瓶颈根本不在共享内存。
这个结论推翻了最初的假设。工程师们一直以为是3090的100KB共享内存拖了后腿,但实验数据表明,即便把分块加大到128x128,共享内存也不是限制因素。真正的瓶颈在别处。
那Triton为什么能赢?Triton的自动调优器会在目标GPU上实际运行多种编译配置,测量性能后选出最优的那个。它不需要工程师事先知道每个显卡的硬件参数,靠实测数据说话。手写CUDA内核的硬编码常数是工程师根据A100的规格手工调出来的,到了3090上就水土不服了。
结果反转后的连锁反应
最终方案让人意外:保留了手写CUDA内核,做了针对性修复。没有改用Triton版本,也没有完全重写,而是在原有代码基础上找到真正的问题并修正。
这个结果意味着什么?一个AI智能体(Prime Agent)被派去优化另一个AI模型(Minimax H3)的推理性能。它发现人类写的优化代码在特定硬件上不如编译器自动生成的代码。然后它协助工程师定位了真正的问题——不是共享内存容量,而是其他因素。
Prime Agent的设计理念很特别:它给模型一个持久的编程环境(IPython内核),让模型可以直接用代码操作自己的历史、工具和子智能体。上下文被当作变量来处理,子智能体被当作函数来调用。这跟传统的工具调用方式完全不同。
一个AI给另一个AI打工的时代
Alexey Fateev在后续推文里透露,他的实验 backlog 已经堆满了。接下来要做的包括:在不同模型之间做KV缓存传输(KV cache transfer,一种加速推理的技术)、测试一种叫RestoreKV的新方法。
KV缓存(KV Cache,键值缓存)是大模型推理时的关键优化技术,它缓存了前面计算过的键值对,避免重复计算。不同模型之间的KV缓存传输涉及到格式转换和内存管理,是个复杂的工程问题。
RestoreKV来自一篇论文,声称能在不损失质量的前提下恢复KV缓存。如果这项技术真能落地,意味着大模型推理可以更高效地利用缓存,减少重复计算。
这些实验都需要硬件支持。RTX 3090虽然已经是几年前的显卡,但在AI推理优化领域依然是重要的测试平台。
回到最开始那个问题:手写CUDA内核为什么输给了Triton自动生成的代码?因为GPU编程的优化空间正在从人工经验转向自动化探索。工程师凭经验调出来的常数,在特定硬件上可能不是最优解。而自动调优器通过实测数据找到的配置,往往能意外地击败人类直觉。
这不是说工程师没用了。最终修复手写内核、定位真正瓶颈的,还是人类。只是工具链在变,AI辅助编程正在从“帮我写代码”进化到“帮我发现我自己发现不了的问题”。
总结: 一个AI智能体发现手写CUDA内核在RTX 3090上跑不过自动生成的版本。工程师试了缩小分块反而更慢,最后发现瓶颈不在共享内存。AI辅助编程正在进入新阶段——不仅能写代码,还能发现人类想不到的优化方向。