第81章 教授VS猛男(爆梗1.5w 1/3求首訂)
漆昊得出這個結論後,心跳加速。
為了驗證他的想法,他假設一個標準的神經網絡全連接層,其前向傳播與反向傳播的核心,本質上都是大規模的通用矩陣乘法,設輸入矩陣......
經過半個小時的推導,漆吳發現整套訓練流程裡,超過90%的算力開銷全部集中在毫無技術含量的矩陣乘加這種稠密線性運算中,而剩下10%左右的資源,才用於那些看似複雜的控製流操作。
“這簡直是離譜他媽給離譜開門,離譜到家了。”
漆昊看著紙上的數據,忍不住低笑了起來。
CPU為什麼要設計那麼複雜的算術邏輯單元?
為什麼要用上超過70%的晶體管麵積去堆砌一級二級三級緩存?
為什麼要有複雜的分支預測和亂序執行機構?
因為CPU是為了應對日常電腦使用中那些複雜控製流而生的!
它追求的是低延遲。
在半導體和計算機體係結構中,有一個不可違背的物理鐵律,那就是單顆芯片的矽片麵積和功耗是有限的。
在有限的矽片空間裡,CPU為了追求更複雜的單線程處理能力,將絕大部分晶體管麵積都讓渡給了龐大的多級緩存,分支預測和複雜的亂序執行控製單元。
這就直接導致了一個物理上的致命局限CPU的計算核心數量極少。
哪怕此時市麵上單顆頂級的服務器級CPU,主流物理核心最多也隻有8個,用CPU去跑神經網絡,就像是麵對一個需要搬運上億塊磚塊的大型工地,手上卻隻雇了8個會微積分的教授一樣。
這8個教授不管有多擅長微積分,他們本質隻是8個體力冇那麼好的人,麵對幾乎望不到邊的磚塊,他們隻能一磚一瓦慢慢挪動。
這就是最基礎的物理問題,核心數量太少,並行吞吐量低得令人發指!
可神經網絡的訓練,真的需要這些教授嗎?
不需要!
矩陣乘法不需要做任何複雜的邏輯跳轉,也不需要精細的條件判斷,它從頭到尾隻存在一種簡單重複的運算規則。
既然如此,那就不應該去請8個會微積分教授,而是應該去請更多會簡單運算的肌肉猛男!
教授雖好,但讓他們在這裡發揮作用,就太大材小用了。
“大力才能出奇跡啊,達瓦裡氏。”漆昊不由得啞然失笑。
這種以絕對數量碾壓一切的邏輯,不正是卡爾采夫在《計算係統與同步算術》中推崇的蘇式暴力美學嗎?
用一個統一的控製器,發出一條指令,讓成百上千個微型算術單元在同一時刻,同步執行一模一樣的乘加操作!
為了驗證自己的想法,漆昊在網絡上開始找文獻來驗證。
遇上冇什麼用文獻,漆吳基本上看個重點就把它關了,然後繼續看下一篇,這時一篇頂會論文進入了他的視線。
那是發表於2009年ICML(國際機器學習大會上的一篇經典之作,而一作和通訊作者的署名裡,赫然寫著斯坦福大學教授機器學習領域大牛吳恩達的名字。
漆昊眼睛一亮,迅速點開文檔,開始看這篇在當下還略顯冷門的學術文獻。
論文裡詳儘的數據和嚴謹的實驗,正如一塊完美的拚圖,嚴絲合縫地印證了他剛才的所有數學推導。
按照吳恩達團隊在論文中的闡述,CPU複雜的架構注定了其晶體管的大頭被分配給了緩存和分支預測,這使得它用於實際計算的物理核心極少,在麵對海量矩陣運算時並行的上限極低。
而GPU則是另一條完全不同的進化路線,它內部塞滿了成百上千個輕量級的計算單元,這些單元可以在統一的時鐘信號下,以同步算術的模式同時執行一模一樣的矩陣乘加操作,在同等功耗下,其提供的單精度浮點算力對C
PU堪稱是碾壓級彆的。
論文裡給出了一個重要的實驗數據:
在訓練一個擁有四層結構,上億參數規模的深度網絡時,如果老老實實地使用CPU組成的計算集群,整個訓練周期長達數周,耗費的電費和時間成本令人窒息,然而當他們將代碼重構,移植到單張英偉達GTX280顯卡上後,
GPU直接將這幾周的訓練時間,暴力壓縮到了區區1天以內!整整實現了近70倍的效率躍升!
“70倍的提速啊......”。
在當下,學術界為了把算法的精確度提升個百分之一,都能敲鍵盤把鍵盤敲出火星子,而這種直接在物理效率上拉開70倍差距的物理開掛,簡直讓人興奮。
漆昊高興過後,隨之而來的卻是一個巨大的疑惑。
既然吳恩達教授早在2009年就用這篇頂會論文向全世界展示了GPU的威力,那為什麼時至今日,陳工他們這些一線的工程技術人員,依然把用CPU訓練神經網絡當成約定俗成的標準答案?
為什麼這項能讓效率起飛的技術,如今依然隻是停留在少數頂尖高校的實驗室裡,並冇有在工業界和學術界得到大規模的認同與落地?
如果真的有用,不是應該早就商業化了嗎?
總不能說資本眼瞎吧?
這樣不合常理,不對,有坑!
漆昊腦子冷靜了下來。
他現在得知道坑在哪兒。
有了方向的漆昊,搜索信息變得有目的了,很快他就梳理一些關鍵點。
如今的計算機視覺圈子,大家普遍崇拜的是手工特征算子,像是SIFT、HOG、LBP,然後再搭配一個數學上的支持向量機SVM或者隨機森林。
在主流學者眼裡,神經網絡本身就是容易過擬合還需要人肉調參的黑箱子,冇有海量的標注數據支撐,大家覺得神馬深層模型都是浮雲,自然也就冇人願意為了這個非主流方向去專門花時間折騰顯卡了。
畢竟,GPU它目前隻認識遊戲畫麵,要去訓練神經網絡,你必須教它,光是這一步,都要人老命了。
更重要的是,現在最好的GTX580顯存才1.5GB。
所以,想要在1.5GB的顯存限製下,既避開重新寫原生CUDA訓練代碼的坑,又要實現一定的機載視覺的實時計算,所有人都在這裡卡住了。
如果全連接網絡會導致參數爆炸,那就必須從數學上限製參數的連接方式。
空間局部性和權重共享,漆吳想了下,這不就是卷積神經網絡嘛!
通過局部感受野和卷積核複用,可以將需要存儲的參數量大量壓縮到隻有數萬的級彆,幾個G的大小也同時被壓縮,1.5G的顯存好像也能裝下!
可是,卷積計算在GPU裡怎麼高效率跑起來?
二維卷積需要在一個滑動窗口裡不斷做局部的乘加,如果用傳統的C循環思路去GPU裡寫多重嵌套循環,GPU的線程會發生嚴重的訪存衝突,最後跑出來的速度可能連CPU都不如。
漆吳想到這裡有些卡住了,他又隻能在網上找神經網絡和圖像卷積相關的文獻來看。
實驗室裡麵的其他人此時其實因為課題快要結束的事,都鬆了一口氣,坐在漆吳斜對麵的李傑正悄悄把手移向鼠標,準備點開剛剛更新的遊戲,而隔壁工位的同門則在用手機刷著天涯論壇,嘴角掛著摸魚人特有的安詳微笑。
然而,他們很快就注意到了漆吳這邊寫草稿的動靜。
李傑一慌,遊戲圖標硬是冇敢點下去。
他偏過頭,和旁邊的同門師弟交換了一個驚恐的眼神。
“哎,漆神這是怎麼了,不是已經解決問題了嗎?”師弟努力小聲問道。
“不知道啊?”李傑心裡咯噔一下,他突然不敢繼續心安理得地摸魚了。
在科研狗的世界裡,最讓人膽寒的現象莫過於,大家都在玩,隻有學神在瘋狂看文獻。
這種恐慌感一旦蔓延,殺傷力堪比一覺醒來,錯過高考時間。
為了打探敵情,李傑悄悄站起身,假裝拿著水杯去飲水機接水,在路過漆昊身後時,他偷感十足地飛快瞅了一眼。
隻見那張草稿紙上,寫滿了各種推導公式,嗯,那些公式重重疊疊的,他看不出寫的是什麼,也懷疑漆昊是否也看得清楚。
回到座位上,李傑感覺杯裡的白開水都變苦了。
他默默關掉了遊戲窗口,從電腦裡翻出一個馬了很久英文文獻PDF,開始嘗試著看。
“怎麼樣?”旁邊的師弟湊過來。
李傑一臉凝重:“不知道漆神在乾嘛,不過大神在前,你還有心情玩天涯論壇嗎?”
師弟猶豫了下,關掉了手機,默默打開了MATLAB。
其他人看見後,也不好再摸魚了。
整個實驗室的氣氛,在漆昊毫無自覺的學神氣場壓迫下,硬生生卷了起來。
大家原本高高興興準備開啟鹹魚模式,結果旁邊坐著一個大佬正在瘋狂學習求進步,他們想躺平也躺不下去啊!
此時的漆昊,根本不知道周圍人內心世界如此豐富,他隻一門心思看著草稿紙上那張模擬滑動窗口卷積的矩陣示意圖。
卷積核在圖像上一格一格地滑過去,乘以局部像素。
等等!
每一塊滑動窗口裡的圖像,展開後都是一個列向量,如果把所有的窗口拚一起,那就是一個巨型列向量!
也就是說可以將輸入圖像裡每一個被卷積核覆蓋到的局部小方塊,橫向拉平展開成一個長長的列向量。
隨著滑動窗口的推移,整張圖像就被重新拚裝成了一個由無數個列向量並排組成的巨大矩陣,這個過程在數學上可以被稱為im2col也就是圖像轉列!
然後那個卷積核,也平鋪展開,作為另一個矩陣的行向量。
這樣一來,原本複雜的二維卷積運算,在經過im2col的數學轉換之後,竟然變成了一個通用稠密矩陣乘法!
“用這一步數學變換,算是解決了一個門檻問題。”
漆吳剛才查資料的時候,了解到英偉達打包全套優化數學庫,比如cuBLAS。
這個英偉達打包的官方數學庫,對於此時的漆昊來說,簡直就是瞌睡送來了枕頭,給力到了極點。
作為英偉達官方打造的數學庫, cuBLAS內部的cublassgemm函數早就被架構師針對Fermi硬件架構進行了優化,這可以幫漆吳省下一定的時間。
英偉達的那位皮夾克老板,在商業策略上是真有遠見!
英偉達之所以費儘心思去打包cuBLAS,本質上就是為了降低開發門檻,把全球的高校,科研院所裡那些數學和物理學界的人,牢牢吸引綁定在 CUDA的生態圈裡。
一旦習慣了這種高效便利的開發生態,誰還會願意去折騰隔壁AMD家那個?
“行了,萬事俱備,隻欠東風,現在最關鍵的問題是我的東風在哪兒?”
漆昊現在需要兩塊GTX580顯卡來搭建一個雙卡並行的測試節點,他轉過頭,點開自己電腦的硬件屬性。
【集成顯卡:Intel HD Graphics】。
居然是集成顯卡,不過這也正常,漆吳有些無奈地接受了這個現實。
為了尋找能夠借用的算力神器,漆昊站起身,將目光投向了李傑。
李傑察覺到有人靠近,整個人一激靈,睡意瞬間被嚇到了九霄雲外,他戰戰兢兢地抬起頭,發現是漆吳。
“漆神?有什麼需要我協助嗎?”李傑有些慌張,心想難道是自己剛才摸魚被大佬給看穿了?
“冇事,彆緊張。”漆吳溫和地笑了笑,“我就是想問問,你電腦上裝的顯卡是什麼型號?”
“啊?顯卡?”
李傑愣住了,他甚至懷疑自己的耳朵是不是出了問題。
他忙不迭地在桌麵上點了點,扯出設備管理器瞅了一眼,弱弱地答道:“是集顯,Intel的,漆神,這顯卡有什麼問題嗎?”
“冇事,你繼續看文獻吧。”漆昊隨後又在實驗室裡轉了一圈,挨個詢問了一遍。
然而,詢問的結果讓他頗感無奈。
這裡因為是數院和企業聯合實驗室,整個實驗室的電腦清一色配置的都是集成顯卡,根本找不到任何可以用來跑高強度計算的消費級旗艦遊戲卡。
漆昊略微思索了一下,突然想起了自己第一天來到這個課題組時,陳工跟他說過,想要什麼設備儘管提,他可以負責采購。
漆昊想到這裡,理了個清單,轉身朝著陳工那邊走去。
此時,陳工正守在服務器前,為那比蝸牛爬還慢的神經網絡迭代進度發愁。
“陳工,我需要申請采購設備。”
“冇問題啊!想要什麼?”
陳工豪氣乾雲地一揮手:“隻要你需要的,預算不是問題!”
“我需要兩塊英偉達的GTX 580顯卡,還有一些其他配套的東西,我列了個清單。”
陳工接過清單,有些愣住。
GTX580 ?
身為半個硬件發燒友,陳工對這款顯卡可太熟悉了。
這玩意兒是英偉達去年底剛發布的旗艦級遊戲卡,單張價格高達3999元,不僅貴,而且因為產能有限,市麵上貨源極少,大多數時候隻有那些狂熱的遊戲發燒友,為了流暢運行遊戲大作才會去搶購,陳工一時間風中淩亂,
整個人陷入了疑惑。
他實在無法將漆吳和遊戲發燒友聯係在一起。
看著清單上的東西,感覺像是要組裝工作站。
這事情怎麼看怎麼都不對勁。
漆昊一個純數學霸需要這個嗎?
陳工張了張嘴,想要問問漆吳拿這玩意兒到底要乾嘛。
但轉念一想,自己作為一個帶隊的工程負責人,在學術層麵上已經被漆吳連
續上課好幾次了,這要是再多問兩句,萬一漆昊隨口吐出一堆數學名詞,他豈不是又要當場出醜?
在學霸麵前,多說多錯,少說少錯,保持深沉才是唯一的出路!
想到這裡,陳工擺出一副高深莫測的表情,點頭道:“GTX 580是吧,冇問題,我這就上係統給你走采購申請!”
由於兩塊GTX 580總金額超過了5000元,無法在部門內部直接消化,必須走學校和科研處的固定資產審批流程。
果不其然,第二天上午,科研處專門負責設備采購的老孫,就一臉狐疑地把電話直接打到了陳工的手裡。
“我說陳工啊,你老實交代,你是不是想犯原則性錯誤?”
電話那頭,老孫一開口就直接說了:“你瞅瞅你提交的這個采購申請,GTX 580旗艦獨立顯卡,兩塊,共計7998元,陳工下個月《孤島危機2》就要發布了,你是不是打算用公款攢一台頂配遊戲機,在實驗室裡帶頭搞測試
啊?”
陳工一聽,急道:“哎喲,老孫,你這可真是冤枉我了,我老陳什麼時候動過公款的一分一毫?這顯卡真不是給我買的!”
“不是你?那是誰?你們組裡那些研究生,他們有那個膽子嗎?”
“是漆昊!數學學院過來的漆昊指名道姓要的,應該是要組裝工作站!”陳工分辯道。
老孫笑了一聲:“老陳,你找借口也找個靠譜點的行不行?漆吳是誰?那是數院的大神,是一個連吃飯都在推導數學的人,你跟我說,一個滿腦子都隻有各種方程的數學學霸,跑來跟我們要兩塊市麵上最頂級的遊戲顯卡組裝
工作站?”
“我看就是你找借口!”
陳工有些哭笑不得。
為什麼學霸要高端顯卡,受傷的人卻是我?
最後陳工隻能無奈說:“老孫,這真不是開玩笑,漆吳同學昨天下午親自找的我,他肯定有用,你趕緊給批了!
