第290章 你不知道NullPointer是誰?
第290章 你不知道NullPointer是誰?
范小天把這不算太長的代碼從頭看到尾,又從尾看到頭。
然後又從頭看到尾。
整整看了半個小時。
說實話,他沒看懂。
沒看懂不是因為代碼寫的爛,恰恰相反,是代碼寫的太優雅了。
優雅的不像是適配層的代碼。
適配層的代碼有個特點。
它需要追求極致的性能,但這也是有代價的,有時候不得不犧牲可讀性。
這和做網際網路的程式設計師不一樣,對他們來說,程序的運算效率並不是最重要的,可讀性反而更重要。
因為代碼終究是寫給人看的,一個組裡那麼多工程師,今天你來寫,明天我來寫,如果你寫的東西別人都看不懂,那就很容易出Bug。至於你寫的這個程序是不是會快或者慢幾十毫秒,相對來說不那麼重要。
所以網際網路程序的代碼往往不需要極致的優化,但是代碼規範的要求卻很嚴格。
而硬體適配層的代碼就不一樣了。
可讀性當然也重要,但是硬體的使用效率往往追求極致,幾毫秒的效率損耗會在高強度的運行下把成千上萬倍的放大,所以裡面經常會有各種奇技淫巧的駭客(hack)方法。
所謂駭客方法,是編程里的黑話,指的是那種不太規範,但是好用的方法。
比如說在顯卡里,正常應該運行時計算出顯存和內核的比例,但是這個數又不會經常變化,運行時計算憑空加了損耗,所以駭客方法就是把這個比例寫死在代碼里。
雖然這就導致這個代碼放到別的硬體上完全沒法用,因為比例是寫死的,但是能夠提高運行效率。
但是剛剛提交的這段代碼,裡面沒有范小天平時看到的各種難以理解的駭客方法。
簡單、簡潔、優雅,沒有任何注釋,但是代碼本身就能讓你看明白它在幹什麼。
就是這種看得懂反而讓范小天看不懂了。
塊內重計算的策略他認識,這是FlashAttention的核心思想之一,用重計算換顯存,理論上可以把顯存讀寫量降低到接近理論的最優值。
但問題在於,把這個策略移植到L100上可不是一件容易的事。
因為L100的共享內存布局和英偉達家的卡不一樣,英偉達的實現沒辦法直接搬過來用,必須重新寫一套專門適配L100內存架構的版本。
這個版本要怎麼寫?得靠真實的性能分析(Profiling)數據反覆校準。
可是我們現在連性能分析工具(Profiler)都還沒寫出來呢。
這就相當於在沒有儀錶盤、沒有導航,甚至沒有地圖的道路上賽車,還要排水渠過彎,把每一個彎道都跑出理論極限來。
這怎麼可能呢?藤原拓海來的也做不到吧。
所謂外行看熱鬧,內行看門道。
在英偉達幹了這麼多年,范小天太清楚這個部分有多難寫了。
本書首發 讀小說選 TW 看書網,🆂🅷🆄.🆃🆆超省心 ,提供給你無錯章節,無亂序章節的閱讀體驗
這可不是光懂內存管理的原理就夠的,你還得對這塊晶片的實際行為真的研究透了才行。因為晶片到了納米級別,理論和現實之間的偏差只有跑真實數據才能量化。
這每一樣,單獨拿出來,都是個大項目。
說白了,這是個得要軟硬體都有人懂,還得有人專門研究過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嗎?」
小牛用奇怪的眼神看了一眼范小天:「你不知道?」
范小天一愣,怎麼,我應該知道嗎?
「這是誰啊?」
>
范小天把這不算太長的代碼從頭看到尾,又從尾看到頭。
然後又從頭看到尾。
整整看了半個小時。
說實話,他沒看懂。
沒看懂不是因為代碼寫的爛,恰恰相反,是代碼寫的太優雅了。
優雅的不像是適配層的代碼。
適配層的代碼有個特點。
它需要追求極致的性能,但這也是有代價的,有時候不得不犧牲可讀性。
這和做網際網路的程式設計師不一樣,對他們來說,程序的運算效率並不是最重要的,可讀性反而更重要。
因為代碼終究是寫給人看的,一個組裡那麼多工程師,今天你來寫,明天我來寫,如果你寫的東西別人都看不懂,那就很容易出Bug。至於你寫的這個程序是不是會快或者慢幾十毫秒,相對來說不那麼重要。
所以網際網路程序的代碼往往不需要極致的優化,但是代碼規範的要求卻很嚴格。
而硬體適配層的代碼就不一樣了。
可讀性當然也重要,但是硬體的使用效率往往追求極致,幾毫秒的效率損耗會在高強度的運行下把成千上萬倍的放大,所以裡面經常會有各種奇技淫巧的駭客(hack)方法。
所謂駭客方法,是編程里的黑話,指的是那種不太規範,但是好用的方法。
比如說在顯卡里,正常應該運行時計算出顯存和內核的比例,但是這個數又不會經常變化,運行時計算憑空加了損耗,所以駭客方法就是把這個比例寫死在代碼里。
雖然這就導致這個代碼放到別的硬體上完全沒法用,因為比例是寫死的,但是能夠提高運行效率。
但是剛剛提交的這段代碼,裡面沒有范小天平時看到的各種難以理解的駭客方法。
簡單、簡潔、優雅,沒有任何注釋,但是代碼本身就能讓你看明白它在幹什麼。
就是這種看得懂反而讓范小天看不懂了。
塊內重計算的策略他認識,這是FlashAttention的核心思想之一,用重計算換顯存,理論上可以把顯存讀寫量降低到接近理論的最優值。
但問題在於,把這個策略移植到L100上可不是一件容易的事。
因為L100的共享內存布局和英偉達家的卡不一樣,英偉達的實現沒辦法直接搬過來用,必須重新寫一套專門適配L100內存架構的版本。
這個版本要怎麼寫?得靠真實的性能分析(Profiling)數據反覆校準。
可是我們現在連性能分析工具(Profiler)都還沒寫出來呢。
這就相當於在沒有儀錶盤、沒有導航,甚至沒有地圖的道路上賽車,還要排水渠過彎,把每一個彎道都跑出理論極限來。
這怎麼可能呢?藤原拓海來的也做不到吧。
所謂外行看熱鬧,內行看門道。
在英偉達幹了這麼多年,范小天太清楚這個部分有多難寫了。
本書首發 讀小說選 TW 看書網,🆂🅷🆄.🆃🆆超省心 ,提供給你無錯章節,無亂序章節的閱讀體驗
這可不是光懂內存管理的原理就夠的,你還得對這塊晶片的實際行為真的研究透了才行。因為晶片到了納米級別,理論和現實之間的偏差只有跑真實數據才能量化。
這每一樣,單獨拿出來,都是個大項目。
說白了,這是個得要軟硬體都有人懂,還得有人專門研究過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嗎?」
小牛用奇怪的眼神看了一眼范小天:「你不知道?」
范小天一愣,怎麼,我應該知道嗎?
「這是誰啊?」
>