??過去十年是深度學習的“黃金十年”,它徹底改變了人類的工作和娛樂方式,并且廣泛應用到醫療、教育、產品設計等各行各業,而這一切離不開計算硬件的進步,特別是GPU的革新。
深度學習技術的成功實現取決于三大要素:第一是算法。20世紀80年代甚至更早就提出了大多數深度學習算法如深度神經網絡、卷積神經網絡、反向傳播算法和隨機梯度下降等。
第二是數據集。訓練神經網絡的數據集必須足夠大,才能使神經網絡的性能優于其他技術。直至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社區對此進行了編譯。
01?GPU架構演進史
從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)。
02?GPU推理性能提升的三大因素
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%。因此,雖然追求可編程性會增加少量開銷,但采取不同的設計可帶來的性能提升更加重要。
03?從單卡性能到GPU集群連接
以上談論的都是單個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的性能同樣重要。
04?深度學習加速器:新技術的試驗場
接下來談談英偉達的加速器研發工作。英偉達把加速器視為試驗新技術的載體,成功的技術最終會被應用到主流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是一個針對特定領域硬件的平臺,它的內存系統非常好,網絡流暢,能夠讓深度學習應用運行得非常快。
05?深度學習硬件的未來
Future Directions
接下來談談深度學習硬件的未來。上圖是一個能量流向餅狀圖,從中可以看到大部分都流向于數據路徑,其背后有大約50%是關于數學運算,所以我們想讓數學運算的能量消耗更少;剩下很多流向內存和數據搬運。其中綠色的是數據搬運,其余部分是輸入緩沖區、權重緩沖區、累加緩沖區和累加收集器,占比都有不同。
我們正在研究降低數學運算的能量消耗,最好的一個辦法就是將其轉移到對數系統。因為在對數系統中,乘法變成了加法,而加法的耗能通常要低得多。另一個辦法是轉為更小的數值,這一點可以通過VS-Quant實現。通過更精確地量化,我們可以用較低的精度數從神經網絡中獲得同等的精度。
我們希望能將平鋪做得更好,比如在某些情況下,可能會在內存層次結構中添加更多層,這樣就可以降低內存能量,也可以使內存電路和通信電路的效果更好。
在Ampere架構上,我們已經在結構化稀疏的工作是一個很好的開始,但我認為我們可以通過降低密度或選擇多個密度來調整激活和權重,以此做得更好。
隨著研究的深入,工藝技術也會帶來一些電容縮放的進展。
06?總結
2012年發布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更加巧妙的量化方案;其次,繼續深入研究稀疏性;然后,研究存儲電路和通信電路;最后,改良現有的工藝技術。
07?答聽眾問
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和谷歌的TPU相比,誰更勝一籌?
Bill Dally:我們對谷歌最新的TPU并不了解,但他們之前推出的TPU都是專用引擎,基本上都內置了大型的乘加器陣列。
TPU獨立的單元來處理非線性函數和批量歸一化(batch norm)之類的事情,但我們的方法是建立一個非常通用的計算單元流式多處理器(SM),只需非常通用的指令就可以讓它做任何事情,然后再用Tensor Core來加速矩陣乘法部分。因此,Tensor Core和谷歌的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。
編輯:黃飛
?
評論
查看更多