首富从AI浪潮开始 第326节
明明旁边的几条传送带上空空如也,几个机械臂却把所有的数据往一个已经堆满的传送带上塞,塞不下的时候,几个机械臂就呆呆地等在半空中,一动不动。
这种情况,用计算机科学的术语来说,就是线程阻塞了。
韩路一仔细观察了一会儿,心里只有一个想法。
这工厂还能跑起来,也真是难为它了。
视界的数据在眼前浮现出来。
【当前算子:FusedAttentionBackward】
【目标:完成L100适配,并进行软硬件协同调优】
【当前状态:未适配】
【备份路径:拆分为13个通用算子执行】
【单步耗时:46.8ms】
【显存读写量:理论最优值的5.7倍】
【利用率:31%】
看着这些数据,韩路一的眉毛轻轻一挑。
难怪赵文渊和江松然一提到训练就头疼。
推理路径上还能靠工程手段投机取巧,训练这边就没有那么好糊弄了。
反向算子的吞吐拉不上去,L100这辆车,明明有着跑车的性能,却硬生生跑出了拖拉机的速度。
没关系,让我调调你,调调就好了。
韩路一切换了一下视角,又做了一下视野覆盖。
很快,一条条数据流水线浮现在他的眼前,那些顺畅的通路被渲染成了蓝色,堵塞的通路则呈现刺眼的红色。
有点像在看模拟城市的交通俯瞰视角。
他挥了挥手,几个机械臂重新调整了搬运的节奏和对准的方向,很快,那些红色的线条都变成了浅蓝色。
这下舒服了。
【策略:块内重计算(Block-wise recompute)】
【显存读写下降:37%】
效果出来了。
韩路一手指挥动间,刚才的策略改动已经变成了优雅的代码,仿佛被一只看不见的手输入到了屏幕上的代码编辑器里。
接下来是调整数据块的大小。
为了让巨大的数据运算可以在很多显卡的很多计算核心上并行运算,在进入运算管线之前,这些原始数据必须按照一定的规则进行切分,在子计算完成之后,再进行合并运算,把所有的结果汇总起来。
数据块要切多大,对芯片工程师和算子工程师来说,都是不小的挑战,想要找到不大不小正合适的点,只能先通过数学方法进行粗算,然后在一次次地进行工程验证。
如果做纯数学运算不可以吗?
答案是不可以。
现在的GPU芯片,包括其他的计算核心如电脑CPU,或者手机芯片,采用的都是十纳米上下的制程量级。
像L100,是七纳米制程。
这是什么概念呢?
一根头发丝的直径大约是七万纳米,也就是说,如果把一根头发丝横切开来,可以并排放下整整一万根七纳米的晶体管。
在这个尺度下,传统经典物理学已经开始失效了。
电子不会再老老实实地沿着预设的路径运动,它们会隧穿,会跨越本不该跨越的绝缘层,直接跑到不该去的地方。
这意味着你用数学推导出来的“最优方案”,实际跑起来往往达不到理论极限。
物理世界会在最后一步给你打个折扣,而折扣打多少,则在每一块芯片都不完全相同。
所以工程师在规划切分数据块的时候,必须留有冗余;而冗余留多少,就要靠真实数据来校准了。
单是在这一步所要花费的时间,就要以月来计算。
但是对韩路一来说,这是一件一目了然的事情。
他伸出手,手指轻轻一捏,视界中虚拟的数据块就相应变小,传送带上的流动水流也更顺畅了起来,但是因为数据块太小,运算核心的负载也肉眼可见的降了下来,大量的空转让核心发出冷峻的嗡嗡声。
从视界的数据上看,整体的数值吞吐量反而下降了。
然后他的手指又微微张开,数据块相应变大,传送带上也变得更密集,整个流水线的运转效率再次提升。
很快,传送带开始承受压力,眼看着就要崩溃了。
这时候,韩路一的手指停了下来。
这就是最佳大小了。
在意念世界中,韩路一手掌一挥,这个最佳参数也被写进了电脑上的代码里。
易如反掌。
在虚拟投影的世界里,韩路一漂浮在半空中,俯视着经过调整之后正在高速有序的运转的机械工厂,心里涌出一种快感。
这种快感,就像是把俄罗斯方块堆的高高的,只留出边上的一个空列,来了一个长条一落到底,一下消除四行。
那样一种快感。
这是一种专属于工程师的快感。
韩路一再次打开视界,检查一下这个算子适配的实现情况。
【当前算子:FusedAttentionBackward】
【优化策略:块内重计算+数据块(Tile)大小校准】
【单步耗时:46.8ms→ 4.6ms】
【显存读写量:理论最优值的1.09倍】
【利用率:31%→ 91%】
【状态:已适配?】
韩路一看了一眼这组数字,脸上露出一点笑容。
单步耗时缩短到原来的十分之一,利用率从三成拉到九成以上,显存读写也逼近了理论极限。
他轻轻地吐出一口气。
这才是L100应该有的样子。
做完了这个最难的算子的适配,韩路一对新研发出来的这个视界技能【算子适配】有了一个大概的了解。
网上所有能找到的硬件、编译、调优知识,视界全都吸收进去了,最后做出来的这个视界技能,更是把工程验证的过程直接变成了意念里的沙盒游戏。
至于效率嘛……大概是一个大型工程师团队的几千倍以上。
竟然如此强大。
视哥,不差。
韩路一正准备一鼓作气接着做下一个算子的工作,只需要退出现在加载的【注意力融合反向算子】模块,然后再载入——
突然,他眼前充满科幻色彩的半透明界面和虚拟的硬件模型闪烁了两下,消失了。
韩路一错愕地眨了眨眼,意识到,是精力用尽了。
自从视界升级到四级,精力上限提升到一千之后,他已经不怎么需要省着用视界了,可以说是想开就开,有的时候忘了关就一直开。
这还是他第一次把精力用尽。
韩路一默默回想了一下,开始做适配前的精力值是多少来着?
六百多?
他低头看了一下时间,还不到六点。
也就是说,不到一个小时的时间,他已经把可能要耗费大型工程团队几个月时间的工作做完了,同时消耗掉了六百多点精力。
这么看来,今晚是没办法继续肝了,但是在视界如此给力的情况下,只要规划好精力的分配,一个月之内把所有的算子适配都做完是完全可行的。
韩路一满意地点了点头,手动在电脑上敲上了提交命令。
git add .&& git commit -m 'FusedAttentionBackward adapter completed'&& git push
回车。
下班。
……
在韩路一下楼离开办公室的同时,十三楼的人工智能基础设施组,有不少人还在加班。
江松然今天开组会的时候已经把接下来的计划传达过了,全力做L100的推理适配。
全组的人压力都很大。
给国产卡做算子适配,这在全国、乃至全世界都是最前沿的工作啊。
这种工作,是最不敢保证交付时间的,都是没人做过的东西,你根本没办法预测会在什么地方出个填不平的大坑。
上一篇:这个导演不讲规矩
下一篇:我在中东造军火,被全球通缉?
