AI編譯器技術淺析
隨著深度學習應用和專用加速器的興起,為了快速部署DNN網路,產生了兩條主要的技術路線:手寫算子和AI編譯器(深度學習編譯器)生成代碼,
手寫算子需要具備領域特定專業知識的工程師打磨除錯出高性能的代碼實作,然后再經過傳統編譯器生成可執行代碼,經驗豐富的工程師可以寫出性能極佳的算子,但是手寫算子的缺點也非常明顯:其一,需要堆人力,并且很難覆寫深度學習領域的所有算子,其二,手寫算子一般都是單算子實作或者和前后element-wise算子做簡單融合,很難做很深的算子融合,在追求極致的推理場景,還是無法完全發揮硬體性能極限,

AI編譯器致力于自動生成高效代碼,我理解的AI編譯器技術堆疊是這樣的:
首先,它的輸入可能是深度學習框架的模型,AI編譯器做前端的決議,生成AI的編譯器High-Level的Gpaph IR(圖IR),在Graph IR上做圖級別的優化,這里既能借鑒傳統編譯器的優化演算法進行優化(比如常量折疊、死代碼洗掉等等),也需要增加領域特定的優化(比如融合、layout、量化等等),領域特定的優化很大程度上依賴于領域特定架構(DSA)的資訊,
然后,再轉化為low-level的張量級別的IR(Tensor IR),在這一層,主要利用DSA特點進行優化,比如回圈優化、片上存盤的tiling、算子的fusion、并行、張量化等等,
TVM的autoTVM引入模板匹配搜索的方法,借助HalideIR計算和調度分離的思想,并提供一些primitives(比如split、inline、tile等)來構建一個搜索空間,再這個搜索空間中得到最優解,這種方法本質上是利用DSA的存盤、并行等特點來得到schedule組合,由于是模板匹配的方式,針對特定的算子和加速器,需要專家來實作模板,為了解決autoTVM的問題,引入了auto-schedule(a.k.a Ansor)機制,可以參考ANSOR:一種Auto-Scheduler方法
華為AKG引入了多面體技術,將HalideIR轉換為Polyhedral IR,對loop fusion和loop tiling進行建模,充分發揮并行性和區域性,可以參考AKG-NPU上算子自動生成技術探索
最后,借助傳統編譯器生成可執行代碼,
不管是auto-schedule還是Polyhedral技術,當前還不夠理想,無法充分發揮DSA特點來生成高效代碼,并且還沒有很好支持dynamic shape,AI編譯器如何充分利用DSA這個領域特點做文章(算子自動生成技術),是當前AI編譯器面臨的技術難點,
當前,DNN的部署很大程度上還依賴手寫算子庫,AI編譯器在如何自動化發揮DSA特點進行自定生成高效代碼方面還有很長的路要走,當前一個折中的做法,是將手寫算子和AI編譯結合起來,發揮二者的優勢,以求能夠快速部署,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/414015.html
標籤:其他
