第二百八十八章 你不知道NullPointer是谁?
神医圣手小说推荐阅读:和离后,神医王妃野翻全京城、越界心动、NBA:开局满级力量,库里被我惊呆了、龙族:从西游记归来的路明非、狐说、服软、她和暗恋的大佬官宣了、人民的财产(电视剧突围原著)、和穿来的儿子上综艺后爆红了、这游戏也太真实了、鲤鱼王的精灵模拟器、轻负、印卡是游戏王的一部分
范小天把这不算太长的代码从头看到尾,又从尾看到头。
然後又从头看到尾。
整整看了半个小时。
说实话,他没看懂。
没看懂不是因为代码写的烂,恰恰相反,是代码写的太优雅了。
优雅的不像是适配层的代码。
适配层的代码有个特点。
它需要追求极致的性能,但这也是有代价的,有时候不得不牺牲可读性。
这和做网际网路的程式设计师不一样,对他们来说,程序的运算效率并不是最重要的,可读性反而更重要。
因为代码终究是写给人看的,一个组里那麽多工程师,今天你来写,明天我来写,如果你写的东西别人都看不懂,那就很容易出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吗?」
小牛用奇怪的眼神看了一眼范小天:「你不知道?」
范小天一愣,怎麽,我应该知道吗?
「这是谁啊?」
小牛用手指了指天上,开口说道:「那是韩总的帐号啊。」
>
http://www.shenyishengshou.com/yt128808/49589512.html
请记住本书首发域名:www.shenyishengshou.com。神医圣手手机版阅读网址:www.shenyishengshou.com
然後又从头看到尾。
整整看了半个小时。
说实话,他没看懂。
没看懂不是因为代码写的烂,恰恰相反,是代码写的太优雅了。
优雅的不像是适配层的代码。
适配层的代码有个特点。
它需要追求极致的性能,但这也是有代价的,有时候不得不牺牲可读性。
这和做网际网路的程式设计师不一样,对他们来说,程序的运算效率并不是最重要的,可读性反而更重要。
因为代码终究是写给人看的,一个组里那麽多工程师,今天你来写,明天我来写,如果你写的东西别人都看不懂,那就很容易出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吗?」
小牛用奇怪的眼神看了一眼范小天:「你不知道?」
范小天一愣,怎麽,我应该知道吗?
「这是谁啊?」
小牛用手指了指天上,开口说道:「那是韩总的帐号啊。」
>
http://www.shenyishengshou.com/yt128808/49589512.html
请记住本书首发域名:www.shenyishengshou.com。神医圣手手机版阅读网址:www.shenyishengshou.com