第289章 視界技能,初試身手
韓路一意念一動,這座數據工廠的模型被迅速拉近。
他現在不是在外面觀看,而是置身其中了。
從裡面看,這座工廠極為壯觀。
每一個線程塊都是一座樓高的機械臂,數量之多,一眼望不到頭,它們整齊地排列成陣列,在半空中有條不紊地運動,帶起的氣流讓空氣都在震顫。
腳下是密密麻麻的傳送帶,無數發光的數據塊在上面高速滑行,偶爾有幾個數據塊碰撞,進出短暫的電光,隨即消散無蹤。
頭頂則是層疊的共享內存儲物格,每一個格子都在以驚人的速度吞吐著數據,進進出出,像呼吸一樣。
整個場景令人震撼,但是在這麼近距離的仔細觀察下,很多不合理的地方也變得極為明顯。
幾個巨型計算核心都還有著很多空位,但是數據塊被堵在傳送帶上運不進來,這些計算核心都在高速空轉。
明明旁邊的幾條傳送帶上空空如也,幾個機械臂卻把所有的數據往一個已經堆滿的傳送帶上塞,塞不下的時候,幾個機械臂就呆呆地等在半空中,一動不動。
這種情況,用計算機科學的術語來說,就是線程阻塞了。
韓路一仔細觀察了一會兒,心裡只有一個想法。
這工廠還能跑起來,也真是難為它了。
視界的數據在眼前浮現出來。
【當前算子:FusedAttentionBackward】
【目標:完成L100適配,並進行軟硬體協同調優】
【當前狀態:未適配】
【備份路徑:拆分為13個通用算子執行】
【單步耗時:46.8ms】
【顯存讀寫量:理論最優值的5.7倍】
【利用率:31%】
看著這些數據,韓路一的眉毛輕輕一挑。
難怪趙文淵和江松然一提到訓練就頭疼。
推理路徑上還能靠工程手段投機取巧,訓練這邊就沒有那麼好糊弄了。
反向算子的吞吐拉不上去,L100這輛車,明明有著跑車的性能,卻硬生生跑出了拖拉機的速度。
沒關係,讓我調調你,調調就好了。
韓路一切換了一下視角,又做了一下視野覆蓋。
很快,一條條數據流水線浮現在他的眼前,那些順暢的通路被渲染成了藍色,堵塞的通路則呈現刺眼的紅色。
有點像在看模擬城市的交通俯瞰視角。
他揮了揮手,幾個機械臂重新調整了搬運的節奏和對準的方向,很快,那些紅色的線條都變成了淺藍色。
這下舒服了。
【策略:塊內重計算(Block—wiserecompute)】
【顯存讀寫下降: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
回車。
下班。
在韓路一下樓離開辦公室的同時,十三樓的人工智慧基礎設施組,有不少人還在加班o
江松然今天開組會的時候已經把接下來的計劃傳達過了,全力做L100的推理適配。
全組的人壓力都很大。
給國產卡做算子適配,這在全國、乃至全世界都是最前沿的工作啊。
這種工作,是最不敢保證交付時間的,都是沒人做過的東西,你根本沒辦法預測會在什麼地方出個填不平的大坑。
但是江松然說話的語氣很篤定,雖然沒有說明確的時間線,但是大家都感覺到了江松然的決心。
任務分配到人,每個人負責幾個算子,按照優先級從高到低做,只要求功能實現,先不做性能調優,做完了就提交評審,然後再做下一個。
工作量很大,所以有不少人都自願留下來加班。
范小天是其中一個。
源智基礎設施團隊的高級工程師,薪水拿的不低,但他不是為了錢來的。
他不一樣,他是為了理想。
畢竟,如果一個人靠著英偉達的股票已經實現了財務自由的話,他接下來的工作不去追求理想,又去追求什麼呢?
當然,范小天一般不會把這句話說出來。
因為聽起來太欠揍了。
但他確實是組裡最資深、最有話語權的人之一。
原因很簡單,他以前在英偉達做的就是類似的工作一給大模型訓練框架里的內核(Kernal)做適配,做性能分析(Profiling)工具。
但就是因為他的履歷,他對公司現在的方向不太看好。
太急功近利了。
太想畢其功於一役了。
在硬體上做適配,做調優,和做網際網路不一樣。
這裡需要的不是什麼快速疊代、小步快跑,這是一件必須沉下心來,慢慢扣、慢慢做的事情。
心急吃不了熱豆腐。
干起活來很痛苦,這是很正常的。
今天拿起分析工具一跑,運算效率又波動了,為什麼?
不知道啊,可能是因為顯存訪問模式不一樣了,可能是因為寄存器壓力不一樣了,也可能是編譯器展開方式不一樣了。
想知道為什麼,只能一個一個試過去。
拿著分析數據一點點猜。
所以江松然把訓練算子適配的任務壓下來的時候,范小天就很不舒服。
但他也能猜到原因。
一定是大老闆給的壓力太大,把江松然的進度壓變形了。
畢竟這麼不切實際的任務,不像是一個在行業里幹了十幾年的老兵能派出來的。
大老闆可能是不懂,也可能是有投資人那邊的壓力,也可能是模型做的太好、心態飄了。
反正不管怎麼樣,范小天已經給源智在心裡調低了評分。
理想終究是錯付了。
搖了搖頭,把這些雜念趕出大腦,他在公司提供的連結下單了晚餐的外賣,然後開了一聽可樂。
哪怕老闆再傻逼,活還是要干,畢竟他拿的薪水也不低。
范小天面前的屏幕上,開著的是江松然共享的算子適配列表。
作為團隊裡最資深最有經驗的幾名工程師之一,他分配到的幾個算子都是比較有難度的,還全是紅色的。
其中最難的就是這個FusedAttentionBackward【注意力融合反向算子】。
范小天看著這個名字,揉了揉太陽穴,忍不住嘆了一口氣。
這玩意兒太難啃了。
范小天以前在英偉達的時候,類似的融合反向算子也不是普通工程師能隨便碰的。
這裡面的步驟太多了,什麼Attention反向、Softma數值穩定、共享內存布局、寄存器生命周期、Warp內通信、多級Tiling,還有訓練框架調度。
這裡面哪一樣單獨拿出來,都夠一個新人研究幾個月的。
把它們融合在一起,要保證所有的算子都能在內核上運行無誤,還要保證效率,還要確保內存不溢出,這簡直是地獄級的難度。
在硬體調優的所有工作里,這也算得上是皇冠上的明珠。
說實話,這種活范小天以前是輪不上做的。
這也就是來了源智,矮子裡面拔將軍,只能讓他頂上了。
至於做到和英偉達一樣的效率,他是想也沒有想的,做不到。
大概估算一下排期,如果給他幾個熟手一起,加班加點的干,可能幾周時間能把正確性跑通。
至於性能優化,那沒幾個月是干不下來的,幹完之後能到英偉達基準的百分之八十就夠他出去和前同事吹牛的了。
就這,還得看L100的編譯器配不配合。
開始工作前先上柱香,看能不能讓機魂大悅。
硬體做得時間久了,人都變迷信起來了。
范小天沒打算做【注意力融合反向算子】,他準備把難啃的骨頭留到最後啃—有可能做著做著大家發現實在做不出來,這個骨頭就不用啃了。
他在關閉瀏覽器前又瞥了一眼。
然後關掉了瀏覽器。
范小天站了起來,準備去取外賣。
突然,他整個人一愣。
剛才那個頁面,我是不是看見什麼了?
什麼呢?
范小天心神不寧地往前走了兩步,又退了回來。
雖然可能是看錯了,但要是不確定一下的話,總覺得心裡不舒服。
他鬼使神差地又打開了剛才關掉的頁面,發現真的有東西。
【注意力融合反向算子】的代碼庫有個新提交。
「FusedAttentionBackward adapter completed"
做完了?誰這麼大口氣啊?
范小天點開看了看提交者的用戶名。
null—��intelligence. com,范小天仔細想了想,想不起這是誰的用戶名。
公司分配的郵箱都是按照名字來的,像他的用戶名就是fan. ��
intelligence.com。
怎麼還有人可以給自己起名的?
這誰啊?
范小天抬起頭來環顧了一圈,想看看是不是哪個同事在搞惡作劇,但是感覺沒有人在注意這邊。
他又低下頭打開了提交的代碼。
代碼量並不大。
但是他看著看著就瞪大了眼睛。