AI計算特性
設計和部署一款專用芯片需要平衡各種指標,不同的場景下關注的指標不一樣,其芯片設計的思路也會存在差異,常見的芯片設計指標包括:
功耗:芯片電路在工作時所消耗的能量。
峰值性能:芯片每秒計算操作數的總和。
吞吐量:單位時間芯片能夠處理的數據量。
面積:晶體管數量越多,芯片尺寸越大,工藝越精密,芯片尺寸越小。
靈活性:靈活性和可編程能力越高,適應的場景越多。
成本:包括芯片設計費用和單個芯片生成加工費用。
從計算能力上看,芯片中參與計算的內核數量越多對數據傳輸的帶寬要求越高,以GPU為例,其中包含幾百到幾千個計算Core,當這些Core同時讀寫數據時對數據帶寬的占用是相當高的。其次,從計算粒度上看,只有當峰值計算能力小于等于最大帶寬時,才能達到最佳的計算效率,雖然片上存儲能提供極高的帶寬和讀寫性能,但其會占用有限的芯片面積,所以需要在性能和帶寬上進行平衡。再次,從通用性上看,可編程能力越強,能使用的應用場景越多,但為了兼容更多的應用,則在架構設計上會存在一定的平衡和冗余,這往往會導致其在單一任務中的性能存在一定程度的下降,所以需要在定制化實現極致產品性能和軟件可編程擴大場景范圍上進行平衡。
訪存
深度神經網絡包含大量的網絡層,每一層的又包含大量的參數以及中間特征數據,數據訪問量和計算量都很大。例如,卷積層包含大量多維卷積核,在計算上滑窗式的卷積運算使得卷積核參數需要多次重復參與運算,由于卷積核參數量一般要遠大于緩存的容量,所以大多時候參數需要反復從主存中訪問。比如,早期AlexNet擁有6000萬參數量,最新的基于Transformer架構的ChatGPT則達到了1750億參數量,如此巨大的參數量不僅需要占用巨大的存儲空間,如何進行高效運算對訪存帶寬、內存管理以及計算都有很高要求。
通常在芯片設計中可以通過增加計算核心的數量來提高系統的并行度,當并行度提高后,數據的讀寫就會成為瓶頸,即遇到“內存墻”。內存訪問可以通過以下幾個方面來解決:
1.通過增加片上緩存大小和寄存器數量,或提高訪存總線帶寬等來提升訪存效率,進而減少數據等待的時間;
2.讓數據盡可能在片上多停留,避免重復訪問主存次以減少計算單元的等待時間;
3.通過數據流的模式讓數據不必經過主存就可以在不同計算單元之間進行通信和流動。
由于深度學習前一層計算結果在下一層計算會被接著用上,模型參數在不同時鐘周期中也反復使用。第一種方案通過增加片上存儲減少了數據被重復寫回和加載的開銷。第二種方案直接把復用的數據放在片上Buffer實現數據復用,復用方式和粒度更加精細可控。第三種方案則是讓前一周期計算的結果流動到其他計算核心上,在下一周期不用發生訪存操作的情況下就可以直接參與計算,Google TPU采用的脈動陣列和流行的DataFlow數據流架構,都是采用的這一思路設計的。
功耗
深度學習由于參數量過于龐大,而片上存儲空間有限無法全部存儲,絕大部分數據被存放在主存中,這必然會造成頻繁的存儲器訪問,大多數深度學習任務中數據訪存造成的功耗要高于計算造成的功耗,其中,最靠近計算單元的寄存器功耗最小,而最遠的片外DRAM的功耗則其的200倍。所以如何讓數據盡可能多地在片上存儲中停留和復用可以有效減少數據訪存的功耗,但片上存儲又受到成本和面積的約束,不可能無限的增大,如何解決大規模數據訪存帶來的功耗問題是低功耗AI芯片需要重點解決難點。
稀疏性
稀疏性(Sparsity),是指深度學習網絡模型具有非常大的參數和特征容量,在計算中包含大量對0的乘法和加法的操作。在計算中0乘上任何數都是0,0加上任何數都是原來的數,對0參與的乘加過程如果可以不使用計算單元直接輸出結果0,這樣可以節省運算產生的功耗,如果可以不需要到內存讀寫數據,則可以減少了數據搬移的開銷。
在深度學習中稀疏化主要包括兩種:模型稀疏和短暫稀疏。模型稀疏與模型參數有關,一方面模型參數中本身包含大量0或者非常小的值,另一方面在訓練的過程中增加一些正則化和門控函數(gating functions)增加模型參數的稀疏化。短暫稀疏與模型的運算過程有關,它與輸入數據和模型參數都有關,比如Dropout和ReLU等算子的輸出數據就是高度稀疏的數據。統計表明,AlexNet、VGG、ResNet等經典網絡的稀疏性可以達到 90%左右,如果能有效利用網絡的稀疏性可以顯著提高網絡的運算效率。
混合精度
由于神經網絡本身具有一定的冗余性,在經過精心的設計和調優后,低精度的神經網絡也可以實現整體準確率不變或者只有很小的準確率損失,而使用低精度計算則可以極大地減少計算和存儲負擔并降低功耗。實驗表明,使用16位浮點乘法和32位浮點加法在AlexNet、VGG、ResNet等網絡上進行訓練的精度損失可以忽略不計,使用8位定點乘法和16位定點加法進行推理,精度損失幾乎沒有。
低精度計算已經成為AI芯片的一個趨勢,尤其在推理芯片中更加明顯。低精度計算不僅需要在算法上能夠實現低精度訓練和模型量化,還需要在指令架構設計和硬件計算單元上能夠支持低精度運算,它是一個軟硬件結合的整體解決方案。隨著AI對低功耗和高性能需求不斷提高,神經網絡也從32bit浮點運算逐步向16bit、8bit、4bit 甚至二值化網絡等多種低精度運算擴展。
通用性
當前深度學習網絡層數越來越深、網絡層更加豐富、拓撲結構也更加復雜。神經網絡深度已經從早前的VGG十幾層網絡發展到ResNet的幾百層,甚至上千層的網絡,不僅包含卷積層、深度可分離卷積、全連接層、循環層、上下采樣、尺度變換以及激活函數層等大量不同功能的網絡層,還包括殘差連接、長短記憶網絡、Transformer等復雜的多層連接拓撲結構。由于不同網絡層的計算和訪存特性都存在較大的差異,因而與之匹配的最佳硬件架構也存在較大的不同,例如,針對卷積網絡特性設計的硬件在運行長短記憶網絡(Long Short-Term Memory, LSTM)時只能發揮其不到20%的性能。
AI專用芯片的性能跟通用性是一個相互平衡的過程,一個芯片在某些特定網絡結構上的性能越強、功耗越低,那么它往往就越不靈活、通用性越差。例如,Google TPU可以輕松做到遠高于GPU的性能和能效比,但這是以犧牲芯片的可編程性和通用性為代價的。目前在語音、文字、圖像、視頻等不同應用場景下使用的網絡架構還無法做到完全統一,在同一領域下的不用場景和任務上深度學習的網絡也存在一定的差異,新的深度學習算法和網絡結構還在不斷的演變中,可能AI芯片還未投產上市,當前的網絡架構已經淘汰,被其他更優的網絡架構替代了。
目前AI芯片企業采用的技術方案和策略各不相同,一類最激進的企業,采用算法固化方案,這一做法芯片研發周期最短、單一算法的性能與功耗比可以做到極致,但其限制了芯片的通用性和靈活性,比如第一代Google TPU;一類是升級現有可編程處理器,使其在性能與芯片通用性上達到較好的平衡,成本也相對可控,目前這一類中GPU依然是主流。還有一類是設計全新的芯片架構,這一做法能夠在性能與通用性上達到更好的平衡,但芯片研發投入成本大且需要較長的研發周期,比如寒武紀NPU和Google TPU。
當前AI芯片的發展還處于初級階段,市場上主要以定制化的專用AI芯片和具備一定的靈活性的弱編程AI芯片為主,隨著算法和芯片制造工藝的不斷發展和完善,支持潛在的新網絡架構特性且具備足夠彈性和拓展性的AI高性能芯片會逐漸到來。參考GPU的發展歷史,早期的GPU是專門用來做圖形加速計算的,由于生產工藝和制程的限制,必須采用定制化的專用硬件設計方案才能滿足圖形渲染對性能和功耗的要求。隨著圖像加速行業的發展和算法的快速迭代更新,以及芯片生成工藝的提升,逐漸出現了具有弱編程特性的GPGPU,再到后來的CUDA使得GPU具備了更強的可編程能力并極大的拓展其應用領域,使GPU不僅能加速視頻渲染、還能做科學分析、天文計算和AI加速等更通用的并行計算任務。
鄭重聲明:文中僅代表作者觀點,不代表本公司觀點,本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或者刪除,感謝您的關注!