AI加速器的軟硬體協同最佳化探討

構建高效AI系統的一個重要指導思想是軟硬體協同設計,這是因為軟體演算法和硬體架構在神經網路應用中互相影響、緊密耦合。考慮到AI系統的軟硬體協同最佳化,主要有三個因素影響神經網路的高效部署:工作負載、峰值效能和計算效率。更小的工作負載意味著神經網路模型的儲存量和計算量更少,對於神經網路的高效部署無疑是有利的。但是,工作負載的變化可能會影響AI加速器的硬體架構設計。例如,採用變換域快速演算法,比如FFT和Winograd來替換二維卷積,會改變計算過程中乘法和加法之間的比例,也會改變資料的訪問模式。此外,利用神經網路的稀疏性,將稠密矩陣變換為稀疏矩陣,甚至會改變資料描述格式和整個計算系統的資料流。另一方面,從演算法設計的角度,過於輕量的神經網路模型可能導致識別準確率和泛化能力的下降。因此,在合理設計神經網路模型架構和引數量的同時,應結合硬體架構設計來選擇相匹配的快速演算法和稀疏化方案,確保整個計算系統的準確性和高效性。

AI加速器的軟硬體協同最佳化探討

AI系統的軟硬體協同設計:從神經網路模型到指令生成

更高的峰值效能意味著AI系統具備更強的算力,然而峰值效能通常與AI系統的計算單元數量和頻率成正比,峰值效能越高通常會導致成本和功耗也越高。在提高峰值效能的同時節省成本的一種可行方法是簡化操作,例如使用更少的位元位寬來表示神經網路中的資料和權重:神經網路模型自身的魯棒性使得我們可以使用16位或8位定點運算來替換32位浮點運算,引入的準確率損失可忽略不計。峰值效能和表示精度之間的折衷會影響演算法和硬體設計。

計算效率反映了AI系統是否已充分利用計算單元。精巧的記憶體架構設計可為計算單元提供足夠的資料,從而確保計算模型的流水線不會因為缺少資料而出現停頓或氣泡,這是實現高效率的關鍵。為此,需要同時考慮片上和片外儲存以設計合理的層次化儲存架構。對於片上儲存部分,需要利用資料的區域性性和重用性,以使資料儘可能長時間地保留在快取記憶體中。對於片外儲存部分,增加頻寬有助於提高計算效率,但也會導致更高的成本和功耗。在理論頻寬相同的情況下,需要增加資料包的突發長度才能充分利用頻寬,這要求人員選擇設計合理的資料儲存格式以匹配硬體架構。此外,資料簡化方法還減少了資料位寬,從而降低了頻寬需求。

從模型到指令的神經網路xPU

目前尚不存在完美適配任何應用場景的神經網路模型。對於CNN來說,早期的神經網路模型首先用幾個卷積層作用於輸入影象以生成低維特徵,然後再將幾個全連線層用作分類器產生識別結果的輸出。當前主流的神經網路模型(例如ResNet和GoogLeNet中的inception模組)使用了多分支和並行層,以實現多尺度取樣和避免梯度消失。對於不同的應用場景,神經網路模型的大小從少於10層到超過100層不等。對於迴圈神經網路來說,還有很多變體,例如LSTM、門控迴圈單元(Gated Recurrent Unit,GRU)、用於語音識別的雙向RNN,以及用於神經機器翻譯的序列到序列(Seq2Seq)學習模型。

AI加速器的軟硬體協同最佳化探討

因此,AI系統必須足夠靈活和通用以執行不同的神經網路模型。由於有確定的指令集和程式語言,Caffe、TensorFlow和其他深度學習框架在CPU和GPU平臺上提供了有效的介面。但是對於定製化AI加速器,需要一個工具和一箇中間的表示形式來銜接這些框架和硬體。這要求在設計定製化AI加速器時應考慮不同的神經網路計算模式,在實現高能效比的同時提供靈活的程式設計介面。這樣,我們可以將不同的神經網路模型對映到AI加速器上。此外,演算法研究人員和硬體開發人員可以協同工作以實現產品的快速迭代。

為了滿足上述要求,需要為AI加速器設計相應的定製化ISA。對於諸如CPU和GPU通用處理器來說,它們的指令粒度很細,每個指令通常對應一個標量或向量操作。細粒度的指令可提供最高的靈活性,但是考慮到神經網路的計算特性,這不是最高效的方法。例如,神經網路的計算通常由多層迴圈組成,可以嘗試將每個迴圈劃分為多個硬體可執行的小塊。對於CNN,每個小塊可以是一組二維卷積。而對於RNN,每個小塊可以是矩陣向量乘法。這樣將每個小塊對應到一條指令,不僅大大降低了指令大小,還保持了硬體的計算效率。指令還被用來描述片上和片外儲存單元之間的資料傳輸。這使得軟體編譯器可以進行靜態排程,以實現計算和訪存之間的平衡。

AI加速器的軟硬體協同最佳化探討

神經網路架構搜尋框架

在AI系統設計流程中,首先根據目標應用場景設計深度學習演算法。其次對神經網路模型進行最佳化以實現硬體加速。這一步最佳化內容通常包括模型壓縮和定點量化,以減少工作負載並提高AI加速器的峰值效能。這兩個步驟都是由自動化工具完成的,但是需要開發人員在考慮準確率損失和提高硬體效能的前提下做出最佳決策。再次,根據使用的演算法最佳化策略來調整硬體架構設計。以上三個步驟是反覆迭代進行的,以確保滿足目標應用場景的指標要求。在完成硬體架構設計之後,可以使用定製化的軟體編譯器將神經網路模型轉換為執行時執行的指令序列。軟體編譯器自動完成排程和運算元最佳化以進一步提高硬體的計算效率。

相關文章