第185章 這不是有戲了嗎?
第一百八十三章 這不是有戲了嗎?
一月十一日,周一。
上午九點,韓路一走進前灘中心十二樓,源碼科技的辦公室。
周末剛過,辦公室里已經恢復了工作日的節奏。開放工位區里零星坐著幾個來的早的工程師,兩個人一邊看屏幕一邊低聲討論,茶水間門口還有人端著咖啡往回走。
看見韓路一,他們都停下來打招呼。
沒人奇怪韓路一為什麼幾天沒在公司,又突然回來,大家都漸漸適應大老闆的神出鬼沒了。
韓路一沒有去自己的辦公室,而是先去了蘇念念的辦公室。
蘇念念的電腦屏幕上正放著陳建業發來的評審流程數據。她看到韓路一過來,點了點頭,又轉頭把注意力放在屏幕上。
「你回來啦。」
韓路一笑了:「累死我了,周末睡了兩天回血。我不在的時候還順利嗎?」
蘇念念聽他這麼說,抬頭仔細觀察了一下他的臉色,才放下心來,說:
「上次和你說的,小姜做的那個智能體編程,你應該去開發區看一眼。」
「效果很好?」韓路一挑了挑眉。
蘇念念笑了笑:「給你留個驚喜,等小姜來了你去問她,她提前準備了報告呢。」
韓路一出門看了看,姜亦心已經在工位上了。
韓路一走過去,站在姜亦心的工位旁邊,輕輕敲了敲隔板。
「韓總,你回來啦!」姜亦心轉過頭,嚇了一小跳。
「蘇總說你做的智能體效果很好?」
「是錢曉樂和我一起做的。」姜亦心一邊拉數據一邊強調,「韓總你看,這是上周的數據。」
「全公司一線開發共三十人,上周合併代碼分支一百二十七個。」
姜亦心指了指右邊的柱狀圖。
「之前的數據是平均每周四十七個。」
她又指了指左邊的柱狀圖。
「但是這個數字還沒到頂,因為大家都在適應。」
姜亦心又在數據上加了一個篩選條件。
「你看,錢曉樂,她用的最早,上周二一天就合併了十個代碼分支,這可都是生產項目。」
韓路一看著這個數據,不禁身體前傾,把右手撐在了姜亦心面前的桌子上。
他自己做了五年多的程式設計師,他知道每天十個合併是什麼概念。
一個代碼合併包括從理解任務需求,和其他部門溝通,同步信息,完成改動,編寫單元測試一系列步驟。改動有大有小,但是平均下來,一人一天能有一個合併就是合理的工作量了。
現在錢曉樂一個人就做了十個人的量。
從很多年前開始,矽谷就鼓吹「十倍工程師」的概念,指的是一個非常厲害的天才程式設計師可以一個人做出十個普通程式設計師的貢獻。
現在的錢曉樂,至少在這一天裡,已經接近了「十倍工程師」的樣子了。
更重要的是,這種能力不是天賦。
而是工具帶來的!
只要使用流程繼續優化,源碼科技的三十個開發,產出還會被整體再抬高一個檔次。
「代碼質量呢?把合併的改動拉出來我看看。」韓路一問道。
姜亦心早有準備:「智能體首次提交的通過率現在是百分之六十七。大概有三分之一的任務現在的智能體還沒法獨立完成,會卡死,這個時候需要人工介入。」
然後她直接打開代碼庫,找出了錢曉樂最近合併的改動。
韓路一開視界掃過去,基本全是綠的。
這是非常誇張的效率提升了。
三十個人干出來一百個人的活來。
本來上個月韓路一還在盤算,如果要把開發團隊從三十人擴到六十人,光是招聘、面試、入職培訓,最快也要三個月。而海城這個市場上,能招到的合格工程師,月薪沒有三萬打不住。
三十個人,一年就是一千多萬的人力成本。
可是不招人,源碼業務發展的又太快,需求都做不過來了。
現在姜亦心和錢曉樂搞出來的這個東西,等於他不用多花一分錢,憑空多了七十個人。
不對。
比多七十個人還好。
多七十個人意味著多七十個人的管理成本、溝通成本、磨合期。
而智能體不需要開會,不需要團建,不需要一對一溝通,管理成本大大降低了。
韓路一看向姜亦心,認真地說:「小姜,這個工具的優先級提到最高。你需要什麼資源,直接找蘇總要。」
姜亦心還是第一次見韓總用這種語氣說話。
「好的韓總!」姜亦心頓了一下,補充道:
「對了,還要多虧陳總新設計的評審流程,我們最近在開發基於大模型的評審工具,除了用BugKiller做bug檢測之外,還加入對代碼風格和可維護性的建議。」
聽到「陳總」兩個字,韓路一恍惚了一下,他還以為是陳博文。
然後他才意識到,姜亦心指的是陳建業。
哦,對了,他升技術負責人了。
韓路一又表揚了姜亦心兩句,給小姜夸的都不好意思了才離開。
他還要去十三樓模型組的地方找趙文淵。
……
「文淵,你說的不太順利,具體是指什麼?」韓路一問道。
「韓總,國產適配的事,恐怕不可行。」趙文淵苦著一張臉,開口道。
「技術上有難度?」韓路一挑了挑眉,已經準備自己開視界上了。
「不是。」趙文淵嘆了口氣,「工程量太大了。」
「CUDA做了十幾年的生態,你讓我帶著模型組這幾個人,別說適配生態了,一個算子的遷移都搞不定。」
韓路一倒是不覺得意外。
生態要是好做,國內的這些硬體廠商早做完了,哪還有這些問題?
「拿個例子來看看。」韓路一說。
趙文淵覺得韓路一有點兒多此一舉。
就算你再能寫,也不能讓你一個一個寫過去啊。
況且你不是已經在做標註了嗎?
趙文淵沒把這些話說出來,乖乖的從代碼庫里找出了一個算子的代碼做例子。
scaled_dot_product_attention
這是變形金剛(Transformer)架構中比較重要的一個算子,可以說沒有這個就做不了大模型。
「N卡那邊有專門的函數,性能和精度都做過深度優化,我手頭連個等價實現都沒有。」
韓路一拉過一個椅子坐在電腦前,接過滑鼠,打開瀏覽器把相關的CUDA原始碼、國產顯卡的IR文檔、HCCL SDK都打開來。
趙文淵在旁邊看的一愣:
「韓總,你要幹什麼?——你不會是要,自己寫吧。」
韓路一頭也沒抬:「試一試。」
試一試?趙文淵心裡吐槽,韓總,這可是一個團隊幾個月的工作量。
韓路一已經打開視界,把CUDA實現中的幾個關鍵地方都掃了出來,然後把要適配國產顯卡的要點總結了一下。
接著韓路一在趙文淵的電腦上打開了姜亦心的AI智能體編程工具。
但他沒把視界看到的關鍵信息都輸進去。
他想先看一眼,僅靠模型自己能做到什麼程度。
他輸入了第一段提示詞:
「把這個 CUDA算子翻譯成國產卡 IR實現。要求精度誤差小於 1e-5,性能不低於 N卡實現的70%。下面三份文檔作為上下文。」
然後把瀏覽器里的連結地址都打了進去。
很快AI智能體開始自己分解任務、解決任務,最後匯總。
三分鐘後,第一版結果出來了。性能接近 68%,但精度偏差太大了。
一個大大的紅色FAIL顯示在屏幕上。
趙文淵在旁邊鬆了一口氣。
這才正常嘛。
他對韓路一說:「韓總你看,這就是我說的難點,做不過來——」
韓路一沒有回應趙文淵。
他重新打開CUDA的原始碼,開了視界。
普通人看代碼,看到的是字符。趙文淵看代碼,看到的是邏輯。
但視界讓韓路一看到的是另一層東西,不只是代碼在做什麼,還有代碼為什麼這樣做。
每一個設計選擇背後的權衡,都像批註一樣浮現在代碼旁邊。
為什麼softmax沒有用最直覺的實現方式,而是拆成了三個階段?因為直覺實現在長序列上會有數值溢出。
為什麼矩陣乘的分塊是這個尺寸,不大也不小?因為再大shared memory放不下,再小會產生內存衝突。
這些東西沒有寫在任何文檔里。它們是英偉達的工程師經過無數次實驗之後沉澱下來的經驗,藏在代碼的結構里,只有真正理解硬體的人才能讀出來。
趙文淵不是讀不懂代碼,他只是沒辦法在幾天之內,就把別人幾年的工程經驗全部提煉出來。
但是視界可以,韓路一可以。
韓路一關掉第一版的提示詞,重新輸入。
這一次,他沒有讓智能體自由發揮。
而是把視界看到的東西直接輸入進去。
「softmax必須使用 online algorithm三階段,不要使用 naive softmax。當前精度問題出在第二階段 reduce,局部最大值和指數和更新順序要保持一致。」
「矩陣乘 tile使用64x64,tile過大 shared memory不夠,過小會增加 bank conflict。」
「reduce時按4-stride展開,避免 bank conflict。」
「K/V矩陣按 row-major緩存在 shared memory,避免跨 bank連續衝突。」
「先保證精度,再做性能優化。」
回車。
智能體又開始勤勤懇懇的勞動了。
五分鐘後,一個大大的綠色PASS出現在屏幕上。
趙文淵在旁邊眼珠子都快要瞪出來了。
「不是……這怎麼回事?」
他不顧韓路一還坐在電腦前,把頭湊到屏幕前面,把測試報告從頭到尾看了一遍。
精度誤差:2.3e-6,遠低於1e-5的要求。
性能:N卡實現的83%。
不是70%,是83%。
趙文淵又把生成的代碼拉出來,逐行看了一遍。
他越看越沉默。
這段代碼根本不是那種「能跑就行」的粗糙實現:softmax用的是三階段online algorithm,reduce的展開策略乾淨利落,shared memory的使用幾乎沒有浪費。
這是一個對底層硬體有深刻理解的人才能寫出來的東西。
不,準確地說,是一個對底層硬體有深刻理解的人,才能指導AI寫出來的東西。
趙文淵轉過頭,看著韓路一。
「韓總,你第二次輸入的那些提示詞——softmax三階段、tile 64x64、4-stride展開——你怎麼知道的?」
韓路一靠在椅背上:「我看了文檔。」
「我去,原來你看了文檔啊,不早說。」趙文淵先開了個玩笑,然後聲音突然拔高了,「我也看了兩天文檔,跑了十幾個測試,我都沒找到這個tile尺寸,你看了幾分鐘就看出來了?」
韓路一沒有回答,只是笑了笑。
趙文淵盯著他看了好一會兒,最後像是泄了氣一樣靠回椅子上。
「行吧。」他說,「我不問了。」
他之前不是沒想過用AI來做這些工作,但是AI根本做不了。每次跑出來的結果,不是卡死,就是偏差太大。
怎麼韓路一一上手就好用了?
趙文淵現在只想火速刪掉發給韓路一的那個共享文檔的標題。
韓路一在他眼前,把他覺得不可能的事情做出來了。
如果這個不是偶然呢?
如果scaled_dot_product_attention可以這樣做,那其他算子呢?
什麼暫無可行性啊?
什麼叫「別想了,沒戲」啊?
這不是有戲了嗎?
他現在非常想讓那個前同事過來現場看看。
(還有更新耶)