第一百八十三章 这不是有戏了吗?(2 / 2)

scaled_dot_product_attention

这是变形金刚(transformer)架构中比较重要的一个算子,可以说没有这个就做不了大模型。

「n卡那边有专门的函数,性能和精度都做过深度优化,我手头连个等价实现都没有。」

韩路一拉过一个椅子坐在电脑前,接过滑鼠,打开浏览器把相关的cuda原始码、国产显卡的ir文档、hcclsdk都打开来。

赵文渊在旁边看的一愣:

「韩总,你要干什麽?——你不会是要,自己写吧。」

韩路一头也没抬:「试一试。」

试一试?赵文渊心里吐槽,韩总,这可是一个团队几个月的工作量。

韩路一已经打开视界,把cuda实现中的几个关键地方都扫了出来,然後把要适配国产显卡的要点总结了一下。

接着韩路一在赵文渊的电脑上打开了姜亦心的ai智能体编程工具。

但他没把视界看到的关键信息都输进去。

他想先看一眼,仅靠模型自己能做到什麽程度。

他输入了第一段提示词:

「把这个cuda算子翻译成国产卡ir实现。要求精度误差小於1e-5,性能不低於n卡实现的70%。下面三份文档作为上下文。」

然後把浏览器里的连结地址都打了进去。

很快ai智能体开始自己分解任务、解决任务,最後汇总。

三分钟後,第一版结果出来了。性能接近68%,但精度偏差太大了。

一个大大的红色fail显示在屏幕上。

赵文渊在旁边松了一口气。

这才正常嘛。

他对韩路一说:「韩总你看,这就是我说的难点,做不过来——」

韩路一没有回应赵文渊。

他重新打开cuda的原始码,开了视界。

普通人看代码,看到的是字符。赵文渊看代码,看到的是逻辑。

但视界让韩路一看到的是另一层东西,不只是代码在做什麽,还有代码为什麽这样做。

每一个设计选择背後的权衡,都像批注一样浮现在代码旁边。

为什麽softmax没有用最直觉的实现方式,而是拆成了三个阶段?因为直觉实现在长序列上会有数值溢出。

为什麽矩阵乘的分块是这个尺寸,不大也不小?因为再大sharedmemory放不下,再小会产生内存冲突。

这些东西没有写在任何文档里。它们是英伟达的工程师经过无数次实验之後沉淀下来的经验,藏在代码的结构里,只有真正理解硬体的人才能读出来。

赵文渊不是读不懂代码,他只是没办法在几天之内,就把别人几年的工程经验全部提炼出来。

但是视界可以,韩路一可以。

韩路一关掉第一版的提示词,重新输入。

这一次,他没有让智能体自由发挥。

而是把视界看到的东西直接输入进去。

「softmax必须使用onlinealgorithm三阶段,不要使用naivesoftmax。当前精度问题出在第二阶段reduce,局部最大值和指数和更新顺序要保持一致。」

「矩阵乘tile使用64x64,tile过大sharedmemory不够,过小会增加bankconflict。」

「reduce时按4-stride展开,避免bankconflict。」

「k/v矩阵按row-major缓存在sharedmemory,避免跨bank连续冲突。」

「先保证精度,再做性能优化。」

回车。

智能体又开始勤勤恳恳的劳动了。

五分钟後,一个大大的绿色pass出现在屏幕上。

赵文渊在旁边眼珠子都快要瞪出来了。

「不是……这怎麽回事?」

他不顾韩路一还坐在电脑前,把头凑到屏幕前面,把测试报告从头到尾看了一遍。

精度误差:2.3e-6,远低於1e-5的要求。

性能:n卡实现的83%。

不是70%,是83%。

赵文渊又把生成的代码拉出来,逐行看了一遍。

他越看越沉默。

这段代码根本不是那种「能跑就行」的粗糙实现:softmax用的是三阶段onlinealgorithm,reduce的展开策略乾净利落,sharedmemory的使用几乎没有浪费。

这是一个对底层硬体有深刻理解的人才能写出来的东西。

不,准确地说,是一个对底层硬体有深刻理解的人,才能指导ai写出来的东西。

赵文渊转过头,看着韩路一。

「韩总,你第二次输入的那些提示词——softmax三阶段、tile64x64、4-stride展开——你怎麽知道的?」

韩路一靠在椅背上:「我看了文档。」

「我去,原来你看了文档啊,不早说。」赵文渊先开了个玩笑,然後声音突然拔高了,「我也看了两天文档,跑了十几个测试,我都没找到这个tile尺寸,你看了几分钟就看出来了?」

韩路一没有回答,只是笑了笑。

赵文渊盯着他看了好一会儿,最後像是泄了气一样靠回椅子上。

「行吧。」他说,「我不问了。」

他之前不是没想过用ai来做这些工作,但是ai根本做不了。每次跑出来的结果,不是卡死,就是偏差太大。

怎麽韩路一一上手就好用了?

赵文渊现在只想火速删掉发给韩路一的那个共享文档的标题。

韩路一在他眼前,把他觉得不可能的事情做出来了。

如果这个不是偶然呢?

如果scaled_dot_product_attention可以这样做,那其他算子呢?

什麽暂无可行性啊?

什麽叫「别想了,没戏」啊?

这不是有戏了吗?

他现在非常想让那个前同事过来现场看看。

举报本章错误( 无需登录 )