過去十年是深度學習的“黃金十年”,它徹底改變了人類的工作和娛樂方式,並且廣泛應用到醫療、教育、產品設計等各行各業,而這一切離不開運算硬體的進步,特別是GPU的革新。
深度學習技術的成功實現取決於三大要素:第一個是演算法。 1980年代甚至更早提出了大多數深度學習演算法如深度神經網路、卷積神經網路、反向傳播演算法和隨機梯度下降等。
#第二是資料集。訓練神經網路的資料集必須夠大,才能讓神經網路的效能優於其他技術。直至21世紀初,Pascal和ImageNet等大數據集才得以現世。 第三是硬體。只有硬體發展成熟,才能將大型資料集訓練大型神經網路的所需時間控制在合理的範圍內。業界普遍認為:比較「合理」的訓練時間大概是兩週。
至此,深度學習領域燃起了燎原之火。 如果把演算法和資料集看作是深度學習的混合燃料,那麼GPU就是點燃它們的火花,當強大的GPU可用來訓練網路時,深度學習技術才變得實用。
此後,深度學習取代了其他演算法,被廣泛應用於影像分類、影像偵測、語音辨識、自然語言處理、時序分析等領域,甚至在圍棋和西洋棋方面也能看到它的身影。隨著深度學習潛入人類生活的各個層面,模型訓練和推理對硬體的要求也越來越高。
#從2012年AlexNet出現到2016年ResNet問世,影像神經網路的訓練算力消耗(以petaflop/s-day為單位)增加了將近2個數量級,而從2018年的BERT到近年的GPT-3,訓練算力消耗增加了近4個數量級。在此期間,由於某些技術的進步,神經網路的訓練效率明顯提升,由此節省了不少算力,否則算力消耗的成長還會更誇張。
研究人員想用更大的無監督語言資料集訓練更大的語言模型,然而,儘管他們已經擁有4000個節點的GPU集群,但在合理訓練時間內能處理的運算還是非常有限。這就意味著,深度學習技術的發展有多快,取決於硬體發展有多快。
如今,深度學習模式不僅越來越複雜,而且應用範圍也越來越廣。因此,也需要持續提升深度學習的表現。 那麼,深度學習硬體究竟該如何持續提升?英偉達首席科學家Bill Dally無疑是回答這一問題的權威,在H100 GPU發布前,他在一次演講中回顧了深度學習硬體的現狀,並探討摩爾定律失效的情況下持續提升性能擴展的若干方向。 OneFlow社群對此進行了編譯。
從2012年的K20X到2020年的A100,GPU的推理效能提高到原來的317倍。這就是我們所說的“黃氏定律”,這種發展速度比“摩爾定律”快得多。
#
GPU的推理性能提升但不同於“摩爾定律”,在“黃氏定律”中,GPU的性能提升不完全依賴製程技術的進步。上圖分別以黑、綠、藍三色標示了這幾種GPU,分別代表它們使用了三種不同的製程技術。早期的K20X和M40使用的是28奈米製程;P100、V100和Q8000使用的是16奈米製程;A100使用的是7奈米製程。製程技術的進步大概只能讓GPU的效能提升到原來的1.5或2倍。而整體317倍的效能提升絕大部分歸功於GPU架構和線路設計的完善。
2012年,英偉達推出了一款Kepler架構GPU,但它並不是專為深度學習設計的。英偉達在2010年才開始接觸深度學習,當時還沒有考慮為深度學習量身訂做GPU產品。
#Kepler (2012)Kepler的目標使用場景是影像處理和高效能運算,但主要用於影像處理。因此,它的特點是高浮點運算能力,它的FP32計算(單精度浮點數計算)速度達到近4 TFLOPS,記憶體頻寬達到250 GB/s。基於Kepler出色的性能表現,英偉達也將它視為自家產品的基準線。
Pascal (2016)後來,英偉達在2016年推出了Pascal架構,它的設計更適合深度學習。英偉達經過一些研究後發現,不少神經網路都可以用FP16(半精度浮點數計算)訓練,因此Pascal架構的大部分型號都支援FP16計算。
下圖這款Pascal GPU的FP32運算速度可達10.6 TFLOPS,比前一款Kepler GPU高出不少,而它的FP16運算則更快,速度是FP32的兩倍。
Pascal架構也支援更多複雜指令,例如FDP4,這樣就可以將取得指令、解碼和取得運算元的開銷分攤到8個算術運算中。相較於先前的融合乘加(Fuse Multiply-Add)指令只能將開銷分攤到2個算術運算,Pascal架構可以減少額外開銷帶來的能耗,轉而將其用於數學運算。
Pascal架構也使用了HBM顯存,頻寬達到732 GB/s,是Kepler的3倍。之所以增加頻寬,是因為記憶體頻寬是深度學習效能提升的主要瓶頸。此外,Pascal使用了NVLink,可以連接更多機器和GPU集群,從而更好地完成大規模訓練。
英偉達為深度學習推出的DGX-1系統就使用了8個基於Pascal架構的GPU。
#Volta (2017)2017年,英偉達推出了適用於深度學習的Volta架構,它的設計重點之一是可以更好地分攤指令開銷。 Volta架構中引入了Tensor Core,用於深度學習的加速。 Tensor Core可以用指令的形式與GPU連接,其中的關鍵指令是HMMA (Half Precision Matrix Multiply Accumulate,半精度矩陣乘積累加),它將2個4×4 FP16矩陣相乘,然後將結果加和到一個FP32矩陣中,這種運算在深度學習中很常見。透過HMMA指令,就可以將獲取指令和解碼的開銷透過分攤降低到原來的10%到20%。
剩下的就是負載問題。如果想要超越Tensor Core的效能,那就應該在負載上下功夫。在Volta架構中,大量的能耗和空間都被用於深度學習加速,所以即使犧牲可程式性,也不能帶來太多效能提升。
#Volta也升級了HBM顯存,記憶體頻寬達到900 GB/s,也使用了新版本的NVLink,可以讓建置叢集時的頻寬增加到2倍。此外,Volta架構也引進了NVSwitch,可以連接多個GPU,理論上NVSwitch最多可以連接1024個GPU,建構一個大型共享記憶體機器。
#Turing (2018)2018年,英偉達推出了Turing架構。由於之前的Tensor Core大獲成功,所以英偉達又順勢推出了Integer Tensor Core。因為大部分的神經網路用FP16即可訓練,做推理時也不需要太高的精確度和太大的動態範圍,用Int8即可。所以,英偉達在Turing架構中引進了Integer Tensor Core,讓效能提升到原來的2倍。
Turing架構也使用了GDDR記憶體,以支援那些有高頻寬需求的NLP模型和推薦系統。當時有人質疑稱,Turing架構的能源效率比不上市面上的其他加速器。但仔細計算,會發現其實Turing架構的能源效率更高,因為Turing用的是G5顯存,而其他加速器用的是LPDDR記憶體。我認為,選擇G5顯存是一個正確的決定,因為它可以支援同類產品沒能支援的高頻寬需求的模型。
我對Turing架構深感驕傲的一點是,它還配備了支援光線追蹤(Ray Tracing)的RT Core。英偉達在2013年才開始研究RT Core,在短短5年後就正式推出了RT Core。
Ampere (2020)2020年,英偉達發布了Ampere架構,讓當年發布的A100實現了效能飛躍,推理速度可達1200 Teraflops以上。 Ampere架構的一大優點是,它支援稀疏性。我們發現,大部分神經網路都是可以稀疏化的,也就是說,可以對神經網路進行“剪枝”,將大量權重設定為0而不影響它的準確率。但不同神經網路的可稀疏化程度不同,這就有些棘手。例如,在保證不損失準確率的前提下,卷積神經網路的密度可以降低至30%到40%,而全連結神經網路則可降低至10%到20%。
傳統觀點認為,由於運算稀疏矩陣套件的開銷較大,所以如果密度無法降到10%以下,權衡之下不如運算密集矩陣套件。我們一開始和史丹佛大學合作研究稀疏性,後來做出了很好的機器,它們在矩陣密度達到50%時也能高效運行,但要想讓稀疏矩陣在電源門控(power gating)方面比密集矩陣比較優越還是很困難,這也是我們一直想突破的地方。
最終,我們攻破難題研發出了Ampere,秘訣就是結構化稀疏。
結構化稀疏# Ampere架構規定矩陣的每4個數值中,非零值不能超過2個,也就是通過去掉非零值來壓縮權重。透過輸入碼字(code word)判斷哪些權重應保留,並用碼字判斷這些非零權重應該乘以哪些輸入激活,然後相加,完成點乘操作。這種做法非常高效,讓Ampere架構在大多數神經網路上的效能提升到原來的2倍。
此外,Ampere架構還有不少創新點,例如Ampere內建了TF32(即TensorFloat-32)格式,它結合了FP32的8位指數位和FP16的10位尾數位。 Ampere也支援BFLOAT格式,BFLOAT的指數位與FP32相同,尾數位比FP32少,所以可以視為FP32的縮減版。上述的所有資料格式都支援結構化稀疏,所以無論是用FP16和TF32訓練,或是用Int8和Int4推理,都可以得到結構化稀疏帶來的高效能。
#隨著Ampere在量化方面做得越來越好,它可以應用在許多神經網路上並保證高效能。 Ampere有6個HBM堆棧,且HBM顯存的頻寬也有所升級,達到2TB/s。端對端推理時,Ampere的運算能力可達3.12 TOPS/W(Int8)和6.24 TOPS/W(Int4)。
##
GPU推理表現提升的三大因素總結深度學習過去的發展,GPU推理表現8年提升317倍主要歸功於三大因素:
首先,最重要的是數字表示(number representation)法的發展。
FP32的精確度太高,導致算術運算的成本太高。後來Turing和Ampere架構支援Int8,大大提升了GPU的每瓦效能。 Google發表論文公佈TPU1時表示,TPU1的優勢就在於它是專門為機器學習量身訂製的。實際上,Google應該是在拿自家的TPU1和英偉達的Kepler進行比較(如前所述,Kepler並非專門為深度學習而設計),所以TPU1的優勢歸根結底可以說是Int8相較於FP32的優勢。
其次,GPU支援複雜指令。
Pascal架構新增了點乘指令,然後Volta、Turing和Ampere架構新增了矩陣乘積指令,讓開銷得到分攤。在GPU中保留可編程引擎可以帶來很多好處,它可以像加速器一樣高效,因為每項指令完成的任務非常多,每項指令的開銷分攤幾乎可以忽略不計。
最後,過程技術的進步。
晶片製程從28奈米發展到如今的7奈米,為GPU性能提升做出了一定的貢獻。下列例子可以讓你更能理解開銷分攤的效果:如果執行HFMA操作,「乘」和「加」2個操作合計只需1.5pJ(皮焦耳,Picojoules),然而獲取指令、解碼和獲取操作數需要30pJ的開銷,分攤下來開銷就會高達2000%。
而如果執行HDP4A操作,就可以將開銷分攤到8個操作,使開銷下降至500%。而HMMA操作,由於絕大部分的能耗都用於負載,開銷僅22%,IMMA則更低,為16%。因此,雖然追求可程式性會增加少量開銷,但採取不同的設計可帶來的效能提升更加重要。
##以上談論的都是單一GPU的效能,但訓練大型語言模型顯然需要多個GPU,因此也要改善GPU之間的連接方式。 我們在Pascal架構中引進NVLink,後來的Volta架構採用了NVLink 2,Ampere架構採用了NVLink 3,每一代架構的頻寬都翻了一倍。此外,我們在Volta架構中推出了第一代NVSwitch,又在Ampere架構推出了第二代。透過NVLink和NVSwitch,可以建構超大型的GPU叢集。另外,我們也推出了DGX box。
#DGX box##2020年,英偉達收購了Mellanox,所以現在可以提供包含Switches和Interconnect在內的整套資料中心解決方案,供建置大型GPU叢集之用。此外,我們還配備了DGX SuperPOD,它在AI性能記錄500強名單上排行前20。以往,用戶需要客製化機器,現在只需要購置一台可以部署DGX SuperPOD的預配置機器,就可以獲得DGX SuperPOD帶來的高效能。此外,這些機器也非常適用於科學計算。
#
從前,用單一機器訓練單一大型語言模型需要幾個月之久,但透過建構GPU叢集就可以大幅提高訓練效率,因此,優化GPU叢集連線和提升單一GPU的性能同樣重要。
接下來談談英偉達的加速器研發工作。英偉達把加速器視為試驗新技術的載體,成功的技術最終會被應用到主流GPU。 可以這樣理解加速器:它有一個由記憶體層次結構輸入的矩陣乘法單元,接下來要做的是讓大部分的能耗用於矩陣乘法計算,而不是用於資料搬運。
為了這個目標,我們在2013左右啟動了NVIDIA DLA項目,它是一款開源產品,配套非常完善,與其他深度學習加速器別無二致。但DLA有大型MAC陣列,支援2048次Int8、1024次Int16或1024次FP16操作。
DLA有兩個獨特之處:一是支援稀疏化。我們從容易實現的目標開始著手,所有的資料傳輸,包括從DMA到Unified Buffer和從Unified Buffer到MAC陣列,都只涉及非零值,透過編碼決定哪些元素被留下,然後對這些元素進行解壓縮,再輸入MAC陣列進行運算。
DLA解壓縮的方式比較巧妙,它不會在MAC陣列中輸入零值,因為這會讓一連串的資料都變成零。相反,它設定了單獨的線路表示零值,當乘法器在任一輸入中接收到該線路時,就會鎖定乘法器內的數據,然後發送輸出,輸出的數據不會增加任何數值,這種數據門控(Data Gating)的能源效率非常高。
二是在硬體層級支援Winograd變換。要知道,如果要做卷積,例如m×n的捲積核,在空間域就需要n的2次方個乘法器和加法器,但如果在頻域,就只需要逐點相乘。 所以大型捲積核在頻域運算比在空間域運算更有效率。根據卷積核大小的不同,對部分影像網路而言,Winograd變換可以帶來4倍的效能提升。
EIE(2016)2016年,我在史丹佛和我當時的學生韓松(MIT EECS助理教授、原深鑑科技共同創辦人)一起研究EIE (Efficient Inference Engine)。這是對稀疏化的初步探索之一。我們在硬體層面支援CSR(Compressed Sparse Row)矩陣表示,這種做法非常高效,在密度為50%時,甚至比全密度運算還要節能。
後來發現,如果想讓加速器更有效率,應該建立向量單元陣列,這樣每個引擎不會只執行單一乘加,而是每個循環每個PE(Processing Element)執行16×16=256個乘加。但當我們開始建構向量單元陣列時,發現很難有效率地實現稀疏化,於是轉而採用結構化稀疏。
EIE處理標量單元時,它將指標結構儲存在單獨的記憶體中,然後透過管線階段來處理指標結構,決定哪些資料可以相乘,繼而執行乘法,將運算結果放置在適當的位置。這一整套流程運作得非常有效率。 我們也發現,提高神經網路運算效率的方法除了「剪枝」實現稀疏化之外,還有量化。因此,我們決定使用碼本量化(codebook quantization)。在以位元數表示的資料方面,碼本量化是提升效率的最佳方法。所以我們對codebook(碼本)進行了訓練。
事實證明,如果你能使用反向傳播來捕捉梯度下降,那就可以將反向傳播運用到任何事物中。所以我們在碼本中使用反向傳播,訓練了給定精度的最優碼字集。假設碼本有7個比特,那麼你將會得到128個碼字,我們就在神經網路中找到最優的128個碼字來訓練。
#碼本量化面臨一個問題:數學運算的開銷很高。因為不管碼本有多大,實際數值是多少,你都需要在RAM(隨機存取記憶體)中進行查找。實際數值必須以高精度表示,而你無法將這些碼字準確地表示出來。 因此,我們在高精度數學方面花了很多精力。從壓縮的角度來看,這樣做的效果很好,但從數學能量(math energy)的角度來看,就顯得不是很划算,所以在後續工作中我們就放棄了這項技術。
#Eyeriss(2016)Joel Emer(同時任職於英偉達和麻省理工大學)和麻省理工大學的Vivienne Sze一起建構了Eyeriss,主要解決了平鋪問題,或者說是如何限制計算,以此來將資料搬運(data movement)最小化。典型的方法是使用行固定(row stationary),在行中傳播權重,輸出在列中激活,並最大限度地減少資料搬運消耗的能量。
SCNN(2017)我們現在仍在進行稀疏性研究。 2017年,我們為稀疏編譯(神經網路的進化版)搭建了一台名為SCNN(Sparse CNNs)的機器,我們所做的是:將與處理稀疏性相關的所有複雜問題都轉移到輸出上。讀取所有的輸入激活,同時明確它們需要去往哪裡,因此這裡的「f寬向量」是典型的向量輸入激活。
我們一次會讀取四個輸入激活,四個權重,每個權重都需要乘以每個輸入激活。這只是一個關於把結果放在哪裡的問題,所以我們用f乘f計算。
在座標計算中,我們取輸入活化和權重的指數,計算出在輸出活化中需要求和結果的位置。然後在這些累加器緩衝區上做了一個資料發散(scatter_add)計算。在此之前,一切都非常有效。但事實證明,將不規則性轉移到輸出上不是一個好方法,因為在輸出中,精度實際上是最廣泛的。當你傾向於累加,做了八位權重,八位激活,累加到了24位。這裡我們用寬位元累加器(wide accumulators )做了大量的資料搬運,效果優於做更密集一點的資料搬運。不過提升也沒有想像的那麼多,也許是密度單元能量的50%。
#SIMBA(RC18)(2019)# 我們要做的另一件事是:用現有加速器建造一個多晶片模組-SIMBA(RC18),在2018年產生了做此研究的想法,同時這款晶片也展示了許多巧妙的技術。它有一個很好的PE架構,該晶片則在其中間提供了一個非常有效的信令技術(signaling technology)。現在該架構擴展到了完整的36個晶片,其中每個晶片都有一個4x4的PE矩陣,在這個單位中,每個PE又有8個寬向量單位,因此我們能夠得到128 TOPS的運算能力,每個Op有0.1 pJ,大約相當於10 TOPS/W。
從中我們學到了很多關於權衡(trade-offs)的東西。 我們意識到:建構這些PE陣列宛如建立一個非常大的設計空間(design space),關乎如何建構記憶體層次結構,如何排程資料等等,對此我們建立了一個叫做MAGNET的系統。
MAGNET上圖是一個於2019年發表在ICCAD(國際電腦輔助設計會議)上的設計空間探索系統,主要用於列舉其設計空間,如:每個向量單元應該有多寬,每個PE有多少向量單元,權重緩衝區有多大,累加器緩衝區有多大,激活緩衝區有多大等等。後來發現,我們需要去做另一個層級的緩存,於是增加了權重收集器和累加器收集器。
MAGNET RESULTS透過這種額外的快取級別,我們最終取得了成功。這顯示這裡的資料流是不同的,而權重固定資料流最初是由Sze和Joel來完成的。你將大部分能量投到了資料路徑以外的事情上,例如投入累積緩衝區、權重緩衝區和輸入緩衝區。但透過這些混合資料流,權重固定,局部輸出固定,輸出固定,局部權重固定,能夠在數學運算中獲得幾乎三分之二的能量,並且可以減少花在這些記憶體陣列中的能量,從而在內存層次結構的另一個層上進行處理。這使得現在的每瓦性能達到約為20 TOPS。
#VS-Quant##2021年,在MLSYS(The Conference on Machine Learning and Systems,機器學習與系統會議)會議上,我們引入了VS-Quant,以此來探索出一種在壓縮比特數(這方面碼本量化效果很好)和數學開銷方面都很划算的量化方式。我們使用整數表示,但同時想要縮放該整數表示,以便可以表示出整數的動態範圍。
但事實證明,如果你現在將其應用到整個神經網絡,那麼效果不會很好,因為神經網路上有很多不同的動態範圍,所以VS-Quant的關鍵是:我們對一個相對較小的向量施加了一個單獨的比例因子(scale factor),大約透過在32個權重上進行上述操作,動態範圍會小得多。我們可以把這些整數放在上面,也可以對其調整優化。
也許我們沒有將離群值準確地表示出來,但更好地表示了其餘數字。如此一來,我們就可以用相對低精度的權重和活化來換取較高的精確度。所以我們現在有多個比例因子(scale factors ):一個是權重因子,一個是活化因子。
#Energy, Area, and Accuracy Tradeoff# 我們基本上是在向量層級進行這些運算,結果如Bert-base所示。與不進行權重訓練相比,我們可以透過訓練在某些情況下節省20%的能量和70%的空間,上圖的綠色表示基本上沒有損失準確性;藍色、橙色和紅色表示準確性更高或更低。但即使在藍色水平,準確性也相當高了。
透過VS-Quant和一些其他調整,我們在這些語言模型上進行了試運行。在語言模型上運行比在大約為120 TOPS/W的圖像模型上運行要困難得多。
Accelerators所以對於加速器,先做一個矩陣乘法器。我們需要提出一種平鋪方法,一種採用神經網路的七個巢狀循環計算方法。本質上是將其中一些循環複製到記憶體系統的各層,以最大限度地重複使用每層的記憶體層次結構,並儘量減少資料搬運。#
我們也研究了稀疏性,在壓縮方面很不錯。它基本上增加了記憶體頻寬和通訊頻寬,減少了記憶體和通訊的能量。稀疏性發展的下一個層次是:當你有一個零值,只需單獨發送一條線表示零值,而不必在每個循環中切換到8或16位元。
Ampere架構可以透過使用結構化稀疏來重複使用乘法器,這是一種很有效的方法,只需要幾個多工器的開銷(基本上可以忽略不計)。在進行指標運算時,我們也可以重複使用乘法器,從中可獲得2倍的效能。數值表徵(number representation)非常重要。我們從EIE開始(譯者註:Efficient Inference Engine,韓松博士在ISCA 2016上的論文。實現了壓縮的稀疏神經網路的硬體加速。與其近似方法的ESE獲得了FPGA2017的最佳論文。),試圖做碼本,但這使得數學上的縮放很昂貴。
最後,在加速器中試驗成功的技術最終會被運用到GPU中。這是一種很好的測試方式,我們認為,GPU是一個針對特定領域硬體的平台,它的記憶體系統非常好,網路流暢,能夠讓深度學習應用運行得非常快。
#
##Future Directions接下來談談深度學習硬體的未來。上圖是一個能量流向餅狀圖,從中可以看到大部分都流向於資料路徑,其背後有大約50%是關於數學運算,所以我們想讓數學運算的能量消耗更少;剩下很多流向內存和數據搬運。其中綠色的是資料搬運,其餘部分是輸入緩衝區、權重緩衝區、累加緩衝區和累加收集器,佔比都有不同。 我們正在研究降低數學運算的能量消耗,最好的方法就是將其轉移到對數系統。因為在對數係統中,乘法變成了加法,而加法的耗能通常要低得多。另一個辦法是轉為更小的數值,這可以透過VS-Quant實現。透過更精確地量化,我們可以用較低的精度數從神經網路中獲得同等的精度。
我們希望能將平鋪做得更好,例如在某些情況下,可能會在記憶體層次結構中添加更多層,這樣就可以降低記憶體能量,也可以使記憶體電路和通訊電路的效果更好。 在Ampere架構上,我們已經在結構化稀疏的工作是一個很好的開始,但我認為我們可以透過降低密度或選擇多個密度來調整活化和權重,以此做得更好。 隨著研究的深入,製程技術也會帶來一些電容縮放的進展。
62012年發布Kepler架構以來,GPU的推理表現(inference performance)每年都在翻倍成長。發展到現在,很大程度上要歸功於不斷更好的數位表示。這次我們談了很多內容,例如從Kepler架構的FP32到FP16到Int8再到Int4;談到了透過分配指令開銷,使用更複雜的點積;談到了Pascal架構,Volta架構中的半精密矩陣乘累加,Turing架構中的整數矩陣乘累加,還有Ampere架構和結構稀疏。
關於Plumbing我談得很少,但Plumbing卻非常重要。透過Plumbing來佈置片上記憶體系統和網絡,由此可以充分利用強大的Tensor Cores(張量核心)。對於Tensor Cores來說,使其在Turing架構中每秒執行一千兆的操作,並將資料輸入到執行通用基準測試中,以此來安排分支記憶體、片上記憶體和它們之間的互連互通以及正常運行,都非常重要。#
展望未來,我們準備嘗試將各種新技術應用到加速器中。前面提到,我們已經就稀疏性和平鋪技術進行了多次實驗,並在MAGNet專案中試驗了不同的平鋪技術和數值表示等等。但我們仍然倍感壓力,因為深度學習的進步其實取決於硬體效能的持續提升,讓GPU的推理性能每年都翻倍是一項巨大的挑戰。
其實我們手上的牌打得差不多了,這意味著我們必須開始研發新的技術,以下是我認為值得關注的四個方向:
#首先,研究新的數字表示,例如對數(Log number),以及比EasyQuant更巧妙的量化方案;
##其次,繼續深入研究稀疏性;
然後,研究儲存電路與通訊電路;
#最後,改良現有的製程技術。
7#Dejan Milojicic:需要多大的矩陣卷積才能將Winograd演算法轉換成更有效率的捲積實現?
Bill Dally:我認為,3×3的矩陣卷積就很高效。當然,卷積越大,效率越高。
Dejan Milojicic:高頻寬記憶體(High Bandwidth Memory, HBM)的記憶體頻寬是如何計算的?是透過所有的GPU核同時存取記憶體嗎?
Bill Dally:每個HBM堆疊都有一個單獨的幀緩衝區,像Ampere架構有六個堆疊。我們的記憶體頻寬是透過每個記憶體控制器以全頻寬運行來計算的。各個GPU核之間都有一個緩存層,然後我們的片上網路的頻寬是HBM頻寬好幾倍,所以基本上只需運行一小部分的串流多處理器就能使HBM達到飽和。
Dejan Milojicic:有NVLink的分散式運算如何運作?誰來決定具體執行哪一個計算?在多個GPU上做scatter-gather時,哪些地方會產生開銷以及會產生哪些開銷?
Bill Dally:程式設計師會決定把資料和執行緒放在什麼位置,而你只需在GPU上啟動執行緒和資料以及確定它們的運行位置。採用NVLink進行連線的系統具備一大優勢,那就是它是一個共享的位址空間,傳輸相對較小資料時的開銷也相當小,所以我們在網路中採取叢集通訊。
通常情況下,如果你在深度學習中做資料並行,那麼每個GPU都會運行相同的網絡,但處理的是同一資料集的不同部分,它們會各自累積權重梯度,之後你再共享各個GPU上的梯度並累積所有梯度,然後再加入權重。集群通訊就非常擅長處理這樣的工作。
Dejan Milojicic:我們到底該為所有應用創建通用的深度學習加速器,還是分別創建專用的加速器,例如視覺加速器或自然語言處理加速器?
Bill Dally:#在不影響效率的情況下,我認為加速器當然越通用越好,英偉達的GPU在加速深度學習效率方面堪比專用加速器。真正重要的是,機器學習領域正在以驚人的速度向前發展。
幾年前,大家還在使用循環神經網路處理語言,然後Transformer出現並以迅雷不及掩耳之速取代了RNN,轉眼間所有人都開始使用Transformer進行自然語言處理。同樣,就在幾年前,每個人都在使用CNN來處理影像,雖然現在仍有不少人在使用卷積神經網絡,但越來越人開始使用Transformer來處理影像。#
因此,我並不支援產品過度專用化或為某一網路創建專用加速器,因為產品的設計週期通常需要持續好幾年時間,而在此期間,人們很可能已經不再使用這種網路了。我們必須具備敏銳的眼光,及時洞察產業變化,因為它時刻都在以驚人的速度發展。
Dejan Milojicic:摩爾定律對GPU效能和記憶體佔用有何影響?
Bill Dally:摩爾定律認為,電晶體成本會隨時間逐年降低。今天,積體電路上可容納的電晶體數量確實越來越多,晶片製程也實現了從16奈米到7奈米的飛躍,積體電路上的電晶體密度越來越大,但單一電晶體的價格卻並未降低。因此,我認為摩爾定律有些過時了。
儘管如此,在積體電路上能容納更多的電晶體仍是一件好事,這樣我們就能夠建造更大規模的GPU。雖然大型GPU的能耗也會更高,價格也更昂貴,但這總歸是件好事,因為我們能夠打造一些從前無法建置的產品。
Dejan Milojicic:如果開發者比較重視PyTorch這樣的框架,那麼他們應該從硬體的進步中學習什麼來讓自己的深度學習模型運行更高效?
Bill Dally:##這個問題很難回答。框架在抽象硬體方面做得很好,但仍有一些影響模型運行速度的因素值得研究。我們可以嘗試做的是,當想出更好的技術時,例如更好的數值表示方法,可以嘗試將各種不同的技術與框架結合,看看哪種方法更有效,這是研發工作不可或缺的環節。
Dejan Milojicic:英偉達是否正在實驗新的封裝方法?
Bill Dally:我們一直在對各種封裝技術進行各種實驗,弄清楚它們能做什麼和不能做什麼,以便在適當的時機將它們部署到產品。例如其中一些專案在研究多晶片模組,用焊接凸點、混合鍵結做晶片堆疊,其實有很多簡潔的封裝技術。
Dejan Milojicic:英偉達的Tensor Core和Google的TPU相比,誰更勝一籌? Bill Dally:我們對Google最新的TPU並不了解,但他們之前推出的TPU都是專用引擎,基本上都內建了大型的乘加器陣列。
TPU獨立的單元來處理非線性函數和批量歸一化(batch norm)之類的事情,但我們的方法是建立一個非常通用的計算單元流式多處理器(SM),只需非常通用的指令就可以讓它做任何事情,然後再用Tensor Core來加速矩陣乘法部分。因此,Tensor Core和Google的TPU都有類似的乘加器陣列,只是我們使用的陣列相對較小。
Dejan Milojicic:英偉達最大的對手是誰? Bill Dally:英偉達從來不跟其他公司比較,最大的對手就是我們自己,我們也不斷地挑戰自己,我認為這才是正確的態度。如果我們一味地把其他人視為競爭對手,反而放緩我們前進的腳步。不必過度關注其他人在做什麼,我們真正應該關注的是哪些事情是可能實現的。我們所做的事就像在追求光速,我們更專注於怎樣才能做到最好,以及距離光速還有多遠,這才是真正的挑戰。
Dejan Milojicic:你對量子運算有何看法?量子模擬是深度學習挑戰的自然延伸嗎?#
Bill Dally:2021年3月,我們發布了一款名為「cuQuantum」的軟體開發工具包。 Google先前也研發了具有53個量子位元的計算機,並稱自己實現了「量子優越性」。一些傳統計算機無法完成的計算,用cuQuantum在五分鐘內就能完成了。所以,如果想真正做到精準的量子演算法,而不是今天的吵雜中型量子(Noisy Intermediate-Scale Quantum,NIST)計算,GPU應該是最佳選擇。
英偉達的傳統GPU電腦是目前最快的量子電腦之一,阿里巴巴也在類似的經典運算中取得了不錯的成績,這恰好印證了我們的結論。我們對量子運算的看法是:英偉達不會因為這一技術領域的任何動態而感到驚訝。
實際上,我們也成立了一個研究團隊來追蹤量子運算領域的前沿動態,例如IBM宣布研製出了具有127個量子位元的晶片。我們也一直在追蹤量子位元數量和相干時間(coherence time)等方面的進展。
考慮到所需的量子位元數量、量子位元的準確性、雜訊對量子的干擾以及量子糾錯所需的開銷,我認為未來五到十年內,量子計算都無法實現商用。 我最樂觀的看法是,大概五年後,人們將開始進行量子化學模擬,這應該最有可能做到的。但在那之前,還有很多物理上的難題需要解決。很多人還沒有意識到,量子計算機就是模擬計算機,而模擬計算機需要非常精確且易於隔離,否則任何與環境的耦合都會導致結果不一致。
Dejan Milojicic:在你看來,機器何時才能達到通用人工智慧(AGI)的水平?
Bill Dally:我對這個問題的看法比較負面。試看一些比較成功的人工智慧用例,例如神經網絡,其實它本質上就是通用函數擬合器。神經網路可以透過觀察來學習函數,所以它的價值還是體現在人工感知而不是人工智慧。
雖然我們目前已經取得了不錯的成果,但還是可以繼續研究如何使用人工智慧和深度學習來提高生產力,從而改善醫療、教育,為人們帶來更加美好的生活。其實,我們不需要AGI來做到這些,而應該重視如何最大程度地利用現有技術。距離AGI還有很長的路要走,我們也必須弄清楚到底什麼是AGI。
以上是英偉達首席科學家:深度學習硬體的過去、現在與未來的詳細內容。更多資訊請關注PHP中文網其他相關文章!