字: 大 中 小
关灯 护眼
渡口文学 > 首富从看见信息面板开始 > 第二百八十八章 你不知道NullPointer是谁?

第二百八十八章 你不知道NullPointer是谁?

    范小天把这不算太长的代码从头看到尾,又从尾看到头。

    然后又从头看到尾。

    整整看了半个小时。

    说实话,他没看懂。

    没看懂不是因为代码写得烂;恰恰相反,是代码写得太优雅了。

    优雅得不像适配层的代码。

    适配层的代码有个特点:它需要追求极致性能,但这也是有代价的——有时候不得不牺牲可读性。

    这跟做互联网的程序员不一样:对他们来说,程序的运算效率并不是最重要的,可读性反而更重要。

    因为代码终究是写给人看的:一个组里那么多工程师,今天你写,明天我写,如果你写的东西别人都看不懂,就很容易出Bug;至于这个程序会不会快或慢几十毫秒,相对来说没那么重要。

    所以互联网程序的代码往往不需要极致优化,但代码规范要求却很严格。

    而硬件适配层的代码就不一样了:可读性当然也重要,但硬件的使用效率往往追求极致——几毫秒的效率损耗会在高强度运行下被成千上万倍地放大,所以里面经常会有各种奇技淫巧的骇客(hack)方法。

    所谓骇客方法,是编程里的黑话,指那种不太规范、但好用的方法。

    比如在显卡里,正常应该在运行时计算显存和内核的比例;可这个数又不常变化,运行时计算等于凭空增加损耗,所以骇客方法就是把这个比例写死在代码里。

    虽然这会导致代码放到别的硬件上完全没法用,因为比例是写死的,但能提高运行效率。

    然而,刚刚提交的这段代码里,没有范小天平时看到的各种难以理解的骇客方法。

    简单、简洁、优雅,没有任何注释,可代码本身就能让你看明白它在干什么。

    就是这种看得懂,反而让范小天看不懂了。

    块内重计算的策略他认识,这是FlashAttention的核心思想之一:用重计算换显存,理论上可以把显存读写量降到接近理论最优值。

    但问题在于,把这个策略移植到L100上可不是一件容易的事。

    因为L100的共享内存布局和英伟达家的卡不一样,英伟达的实现没法直接搬过来,必须重新写一套专门适配L100内存架构的版本。

    这个版本要怎么写?得靠真实的性能分析(Profiling)数据反复校准。

    可我们现在连性能分析工具(Profiler)都还没写出来呢。

    这就相当于在没有仪表盘、没有导航,甚至没有地图的道路上赛车,还要排水渠过弯,把每一个弯道都跑出理论极限。

    这怎么可能?藤原拓海来了也做不到吧。

    所谓外行看热闹,内行看门道。

    在英伟达干了这么多年,范小天太清楚这个部分有多难写了。

    这可不是光懂内存管理原理就够的,你还得对这块芯片的实际行为研究透了才行。因为芯片到了纳米级别,理论和现实之间的偏差只有跑真实数据才能量化。

    这每一样单独拿出来,都是个大项目。

    说白了,这是个得软硬件都有人懂、还得有人专门研究过L100的专家团队坐在一起才能做出来的活儿。

    怎么突然一份完整代码就出现在代码库里了?

    这代码——不会没法用吧?

    抱着试一试的心态,范小天把刚才提交的这份代码从代码库里拉(pull)到本地,建了个测试环境,开始跑正确性验证。

    他盯着跑起来的进度条,一边打开外卖软件看了一眼,一边漫不经心地等第一个报错弹出来。

    呀,外卖已经送到半天了,我的面要坨了。

    等一会儿报错了,就先去把外卖拿回来。

    范小天这么想着,抬起头看向屏幕。

    他只看到满屏绿色的PASS。

    这一套验证测试有几百个,一个一个跑过去,不算快,也不算慢。

    一行一行的PASS还在日志里输出。

    PASS。

    PASS。

    ……

    PASS。

    范小天就这么盯着屏幕又看了十分钟,所有测试都跑完了,全都通过。

    最后一行日志:

    All tests passed 414/414。

    范小天又把外卖的事忘在脑后了,现在满脑子想的都是一件事:

    这个实现——

    效率怎么样?

    因为没有性能分析工具,他没办法读取L100显卡上的各项指标,像SM(Streaming Multiprocessor,流式多处理器)利用率、显存读写效率这些东西,也就没法计算这个实现的运算效率到底有多少。

    但还有个取巧的法子,也是源智团队一直在用的:读不了指标没关系,可以直接计时,再和英伟达的卡比一比,看看能达到竞品卡的多少效率。

    按说这个阶段还没到测效率的时候,可看着这么优雅的代码,范小天忍不住了。

    万一呢?是吧?

    范小天迅速搭了个简单的计时基准:同样的Batch大小,同样的序列长度,同样的运算,分别在手头的L100和组里共享的一张H100上跑,计时,对比。

    这张H100可是传家宝,也不知道江工是从哪里搞来的,组里一起用来做性能测试,大家都宝贝得不得了。

    参数设好,范小天看着提交键咽了口口水,才按下去。

    进度条跑起来,这次等的时间稍微长一点,因为性能测试要连续测好几轮取平均值,保证测试稳定性。

    大概三分钟。

    结果出来了。

    L100平均每步用时4.6毫秒。

    对标的英伟达H100平均每步用时4.8毫秒。

    比英伟达还快!

    比英伟达的H100还快!

    范小天把脸凑近屏幕,又看了一遍。

    他以为自己看错了。

    他又往后退了退,眯着眼睛,又看了一遍。

    百分之一百零四点二。

    之前源智团队一直把运算效率达到H100的百分之多少作为性能测试基准。

    但这次,L100直接超过了H100,超了百分之四点二!

    不对。

    不对不对不对。

    范小天把测试工具调出来,准备再跑一遍。

    要是刚才那遍跑错了怎么办?

    又是三分钟。

    结果和刚才一样。

    L100在【注意力融合反向算子】上的单步运算速度稳定超过H100。

    范小天抬起头,眼里露出迷茫的神色。

    这个世界是怎么了?

    我不是回来追求理想、报效祖国、突破万恶的美弟国主义算力封锁的吗?

    怎么突然一下,国家就不需要我的帮助了?

    怎么国产卡已经算力突破了?

    范小天在椅子上坐了很久,没有动。

    这时,模型组的小牛从外面进来,手里提着一个外卖盒。

    “范哥,这是你的外卖啊?我看放在门口,帮你带进来了,都凉了。”小牛把外卖盒放在范小天桌上,准备回工位加班。

    小牛还正在为结丹而努力呢。今天下午猛猛肝了一个任务,一个新的成长事件已经在“深蓝”里弹出来了。他相信照这么下去,离金丹期就不远了,肯定能比小杨先进阶。

    可以可以,金丹在望,元婴可期,我就是源智的化神老祖。

    这时,范小天才回过神来。他抬头看向小牛,问了一个问题。

    “诶,你知道谁的账号是null-pointer吗?”

    小牛用奇怪的眼神看了一眼范小天:“你不知道?”

    范小天一愣:怎么,我应该知道吗?

    “这是谁啊?”

    小牛用手指了指天上,开口说道:

    “那是韩总的账号啊。”
『加入书签,方便阅读』