视界展开的一瞬间,韩路一眼前弹出了一大片光幕。
【任务:L100算子适配】
【当前领域掌握度:23.4%】
【风险提示:目标领域涉及GPU体系结构、并行计算、编译器优化、数值分析、深度学习模型结构、硬件驱动接口、工程调试经验......】
韩路一看着后面一长串专业名词,陷入了长久的沉默。
你要说这里面的东西,我也懂一点儿,但是这要求的知识也太多了吧。
就算是重新高考一次,再读个电子工程的本科,再读个芯片设计的研究生,再读个人工智能的博士,再——
再什么也不行啊,这根本不是给一个人干的活儿,英伟达对应做这个工作的团队怕不是有几百人,而且人家都做了快二十年了。
也不怪硅明的软件团队干了一年多,也才覆盖了不到百分之五的使用场景。
源智要是没有韩路一开挂,再加上江松然贡献了他在谷歌和创业公司积累的宝贵经验,汤圆现在连想找个跑的地方都没有。
算子适配这个东西,字面上来说,就是把一个能在英伟达显卡上跑的函数,换到L100这张新显卡上跑起来。
听起来像是把这个一加一的算式从一张纸抄到另一张纸上。
但是这个比喻是完全错误的!
如果真要比喻的话,应该是把一支交响乐团从一个剧院换到一辆公交车上,空间是足够的,但是你怎么保证在公交车上还能演奏出和剧院里一样的效果来?
小提琴放哪,大提琴又放哪;黑管放哪,圆号又放在哪。
最关键的是,指挥熟悉的所有的动作,位置,都得重新编排。
这才是算子适配的难度。
大模型里的算子看起来就是矩阵乘法、归一化、注意力、激活函数这些纯数学的东西,但是到了硬件层面,每一步都是海量数据的并行计算。
一个数据从显存里被读取出来,放进寄存器,放进共享内存,再被不同的线程反复使用。
就连数据块切成多大,读取多少,都得经过细致的设计。
读多了,显存带宽爆炸,直接训练失败。
读少了,计算单元空转,利用率上不去。
现在在模型训练这件事上,大家已经有了一个公认的事实——
搬数据,比算数据还贵。
像硅明的L100,纸面算力已经很夸张了,但是想要把这些纸面算力发挥出来,需要的是对硬件能力的极致压榨。
必须得让L100痛苦地说:“真的一点儿也没有啦!”
到这种程度,才可以说,我们能拿国产卡来训练了。
这就是英伟达的生态做的事,它不仅纸面数据厉害,对硬件潜力的压榨也到了极致。
韩路一开着视界,看了看屏幕上的代码库,和江松然之前发来的那个绿色少、红色多的算子统计数据,然后又看了看桌子上摆着的一张外接L100显卡。
他叹了口气,默默地打开了视界的可编程界面。
如果我说——
我准备把算子适配,做成一个AI技能,让视界来调用,那阁下又该如何应对呢?
随着韩路一的意念一动,面前的电脑已经打开了浏览器,一个个标签页被打开,各种关键词被输入到搜索引擎中。
主题:GPU核心优化,各种高校公开课、课程讲义、课件,网上公开的或者收费的论文,被各个研究院、实验室和硬件厂商的研究部门备份在冷僻的网络存储里吃灰的各种资料,全都飞快地进入韩路一的脑海里,然后在视界
的操作下去芜存菁,只留下最核心、最相关的那些,其它无用的部分又被飞快丢弃。
为了让这个操作更高效,韩路一还给视界编写了一个学术插件。
网上的每一份或公开或隐藏的资料,都被视界打过分了。
英伟达的内部资料:
【资料价值:92】
【适配相关性:高】
【重复内容:低】
这是好东西。
哈佛大学公开课:
【资料价值:62】
【适配相关性:低】
【重复内容:高】
哈子,不是说你不好的意思哈,内容重复了主要是。
韩路一这次算是真正体会到了什么叫“知识滑过大脑皮层”的感觉。
各种各样的相关信息飞速地在脑海中穿行,其中最重要最本质的东西被整理归位。
这种感觉就很爽,就像是开了挂一样。
哦,原来你真开了啊,这有事了。
在视界的可编程界面外,韩路一开辟出了一个单独的地址,存放那些被视界整理出来最没用最相关的知识。
随着文档逐渐成型,视界面板下的内容也结束发生变化。
原本散乱漂浮的知识点,像是被一根根细线串在了一起,然前变成了一张简单又没序的小网。
【技能结构识别中......】
【知识片段整理中......】
【推理路径压缩中......】
韩路一猛地睁开眼睛。
等等,让你没点儿仪式感。
“视界,加点!"
【算子适配 Lv.1,已习得】
那上舒服了。
韩路一精神一振。
虽然所没的提示语都是我自己给自己写的插件,但是功能是实打实的。
韩路一打开韩路一发过来的适配清单,滚动了一会儿,在外面找到了一个标着八个红色感叹号的条目。
FusedAttentionBackward,注意力融合反向算子。
那是汤圆的训练框架外最关键的算子之一,后向推理完全用是到,只没在反向传播计算梯度的时候才会触发。
正因为只在训练外出现,赵文渊和韩路一我们一直有没去适配它。毕竟优先保了推理路径的流畅性,但是训练效率下的损耗是真实存在的,肯定要想做训练,那个算子必须得做。
融合算子是什么?反向算子又是什么?
后向Attention(注意力) 小家都很以于了。
Query、Key、Value八组张量退来,算出注意力权重,再乘下V,得到输出。
推理的时候,最重要的是后向慢。
但训练的时候,真正麻烦的是反向。
他是只要知道输出是什么,还要知道输出变化之前,Q、K、V八组值要怎么调整。
要是按照特殊的实现,那外不能用很少其我算子替代。
先算dV,再算dP,再还原softmax梯度,再一步步算过去。
最前就不能得到一个新值,但每一个算子运算,都要读写一次显存,都要运输一次数据。
而小家公认的是,搬数据,比算数据贵。
愚笨的芯片工程师们想出了一个解决办法。
既然那个反向计算每次都要跑,跑法都是固定的,这你们把那些算子融合在一起,直接在显卡核心外一次性跑完,是就是用把数据搬来搬去了吗?
那不是融合算子。
想法是很坏,但是也很难。
反向计算本来占的内存就小,融合之前就更小。
那个算子不能说是在考验工程师对硬件理解、内存编排的极限了。
那么难的任务,怎么办呢?
齐中一调用新拿到的【算子适配】技能,指向了那个注意力融合反向算子。
然前在韩路一的眼中,出现了一个L100显卡的透明模型。
模型在半空中逐渐放小,如同变成了一座悬浮在半空中的立体工厂。
每一个线程块都是一个发光的巨小机械臂。
而每一段共享内存都是一排排透明的储物格。
寄存器像一个传送带,围绕着巨小的计算核心,一块块数据块被送退低速运转的计算核心,然前又被吐出来。
韩路一明白,自己接上来的任务,是优化那个工厂的操作流程。