全文翻译(三) TVM An Automated End-to-End Optimizing Compiler
全文翻譯(三) TVM An Automated End-to-End Optimizing Compiler
5. 自動化優化
考慮到一組豐富的調度原語,剩下的問題是為DL模型的每一層,找到最佳的算子實現。在這里,TVM為與每個層關聯的特定輸入shape和布局,創建一個專門的算子。這種專門化提供了顯著的性能優勢(與針對較小shape和布局多樣性的手工代碼相比),但也帶來了自動化挑戰。系統需要選擇調度優化,如修改循環排序或優化內存層次結構,以及調度特定參數,如平鋪大小和循環展開系數。
這樣的組合選擇為每個硬件后端的算子實現,構建了一個巨大的搜索空間。為了應對這一挑戰,構建了一個自動化的進度優化器,有兩個主要組件:一個是提出有前途的新配置的調度管理器,另一個是預測給定配置性能的機器學習成本模型。本節描述了這些組件和TVM的自動優化流程(圖11)。
5.1調度空間規格
構建了一個調度模板規范API,讓開發人員在調度空間中聲明knobs。模板規范允許在指定可能的調度時,根據需要結合開發人員的領域特定知識。還為每個硬件后端,創建了一個通用主模板,該模板根據使用張量表達式語言表示的計算描述,自動提取可能的knobs。在高層次上,希望考慮盡可能多的配置,讓優化器管理選擇負載。因此,優化器必須搜索數十億種可能的配置,查找實驗中使用的真實世界DL工作負載。
5.2 基于ML的成本模型
從大型配置空間中,通過黑盒優化,即自動調整,找到最佳調度的一種方法。此方法用于調整高性能計算庫。然而,自動調整需要許多實驗,確定良好的配置。
Figure 11: Overview of automated optimization framework. A schedule explorer examines the schedule space using an ML-based cost model and chooses experiments to run on a distributed device cluster via RPC. To improve its predictive power, the ML model is updated periodically using collected data recorded in a database.
另一種方法是建立一個預定義的成本模型,指導對特定硬件后端的搜索,不是運行所有的可能性,測量性能。理想情況下,一個完美的成本模型,會考慮影響性能的所有因素:內存訪問模式,數據重用,管道依賴性和線程連接模式等。不幸的是,由于現代硬件越來越復雜,這種方法很麻煩。此外,每個新的硬件目標,都需要一個新的(預定義的)成本模型。
Table 1: Comparison of automation methods. Model bias refers to inaccuracy due to modeling.
相反,采用統計方法,解決成本建模問題。在這種方法中,調度資源管理器提出的配置,可能會提高算子的性能。對于每個調度配置,使用一個ML模型,該模型將降低的循環程序作為輸入,預測在給定硬件后端上的運行時間。該模型使用搜索期間收集的運行時,測量數據進行訓練,不需要用戶輸入詳細的硬件信息。在優化過程中,隨著探索更多配置,會定期更新模型,提高準確性。
對于其它相關的工作負載也是如此。通過這種方式,ML模型的質量隨著更多的實驗提高。表1總結了自動化方法之間的主要差異。基于ML的成本模型,在自動調整和預定義的成本建模間,取得了平衡,可以從相關工作負載的歷史性能數據中獲益。
機器學習模型設計選擇。必須考慮兩個關鍵因素,選擇調度管理器,將使用的ML模型:質量和速度。
Figure 12: Comparison of different automation methods for a conv2d operator in ResNet-18 on TITAN X. The ML-based model starts with no training data and uses
the collected data to improve itself. The Y-axis is the speedup relative to cuDNN. We observe a similar trend for other workloads.
Figure 13: Example workflflow of ML cost models. XGBoost predicts costs based on loop program features. TreeRNN directly summarizes the AST.
schedule explorer經常查詢成本模型,由于模型預測時間和模型重新安裝時間產生開銷。為了發揮作用,這些開銷必須小于在實際硬件上,測量性能所需的時間,根據具體的工作負載/硬件目標,實際硬件上的性能可以達到秒級。這種速度要求將問題與傳統的超參數調優問題區分,在超參數調優問題中,執行測量的成本,相對于模型開銷非常高,可以使用更昂貴的模型。除了選擇模型外,需要選擇一個目標函數訓練模型,如配置的預測運行時間中的誤差。
由于資源管理器,僅根據預測的相對順序(A的運行速度比B快),選擇排名靠前的候選對象,因此不需要直接預測絕對執行時間。相反,使用排名目標,預測運行時成本的相對順序。
在ML Optimizer中實現了幾種類型的模型。采用了一個梯度樹推進模型(基于XGBoost),該模型根據從循環程序中提取的特征進行預測;這些特性包括每個循環級別上,每個內存緩沖區的內存訪問計數和重用率,以及循環注釋的一次熱編碼,如“矢量化”,“展開”和“并行”。評估了一個神經網絡模型,該模型使用TreeRNN,在無需特性工程的情況下,評測循環程序的AST。圖13總結了成本模型的工作流程。發現treeboosting和TreeRNN具有相似的預測質量。然而,前者的預測速度是后者的兩倍,訓練時間也少得多。因此,在實驗中選擇了梯度樹推進作為默認的成本模型。盡管如此,相信這兩種方法都是有價值的,期望今后對這個問題進行更多的研究。
平均而言,樹推進模型的預測時間為0.67毫秒,比實際測量快數千倍。圖12比較了基于ML的優化器和blackbox自動調優方法;前者發現更好的配置比后者快得多。
5.3進度計劃
一旦選擇了一個成本模型,就可以選擇有希望的配置,在這些配置上迭代地運行真正的度量。在每次迭代中,瀏覽器使用ML模型的預測,選擇一批候選對象,在這些候選對象上運行度量。然后將收集的數據,用作更新模型的訓練數據。如果不存在初始訓練數據,資源管理器會隨機挑選候選對象進行測量。
最簡單的探索算法,通過成本模型枚舉,運行每個配置,選擇前k名預測執行者。然而,這種策略在較大的搜索空間中,變得難以處理。
相反,運行了一個并行模擬退火算法。資源管理器從隨機配置開始,在每一步中,都會隨機轉到附近的配置。如果成本模型預測的成本降低,轉換是成功的。如果目標配置成本較高,可能會失敗(拒絕)。隨機游動傾向于收斂于具有較低速度的配置成本模型預測的成本。搜索狀態在成本模型更新期間持續存在;從這些更新之后的最后一個配置繼續。
5.4分布式設備池和RPC
分布式設備池可擴展硬件測試的運行,在多個優化作業之間,實現細粒度資源共享。TVM實現了一個定制的,基于RPC的分布式設備池,使客戶端能夠在特定類型的設備上運行程序。可以使用此接口,在主機編譯器上編譯程序,請求遠程設備,遠程運行函數,在主機上訪問相同腳本中的結果。TVM的RPC支持動態上載,使用運行時約定運行交叉編譯的模塊和函數。因此,相同的基礎結構,可以執行單個工作負載優化和端到端圖Inference。這種方法自動化了跨多個設備的編譯,運行和配置步驟。
Table 2: Confifigurations of all conv2d operators in ResNet-18 and all depthwise conv2d operators in MobileNet used in the single kernel experiments. H/W denotes height and width, IC input channels, OC output channels, K kernel size, and S stride size. All ops use “SAME” padding. All depthwise conv2d operations have channel multipliers of 1.
這種基礎架構對于嵌入式設備尤其重要,因為傳統上,嵌入式設備需要進行繁瑣的手動交叉編譯,代碼部署和測量。
6.評價
TVM核心是用C++實現的(~50k LoC)。提供Python和Java的語言綁定。本文前面的部分評估了TVM的幾個獨立優化和組件的影響,即,圖4中的算子融合,圖10中的延遲隱藏,以及圖12中基于ML的成本模型。
現在重點關注端到端評估,旨在回答以下問題:
?TVM能否在多個平臺上優化DL工作負載?
?TVM與每個后端上現有的DL frame works(依賴高度優化的庫)相比如何?
?TVM能否支持新出現的DL工作負載(例如,深度卷積,低精度算子)?
?TVM能否支持優化新的專用加速器?
為了回答這些問題,在四種平臺上評估了TVM:
(1) 服務器級GPU
(2) 嵌入式GPU
(3) 嵌入式CPU
(4) 在低功耗FPGA SoC上實現的DL加速計。
Figure 14: GPU end-to-end evaluation for TVM, MXNet, Tensorflflow, and Tensorflflow XLA. Tested on the NVIDIA Titan X.
基準測試基于現實世界的DL推理工作負載,包括ResNet,MobileNet,LSTM語言模型,深度Q網絡(DQN)和深度卷積生成對抗網絡(DCGAN)。將方法與現有的DL框架進行比較,包括MxNet和TensorFlow,依賴于高度工程化的,特定于供應商的庫。TVM執行端到端的自動優化和代碼生成,無需外部算子庫。
6.1 服務器級GPU評估
首先比較端到端的深度神經網絡TVM,MXNet(V1.1),Tensorflow(V1.7)和Tensorflow XLA的NVIDIA TITIX。MXNet和Tensorflow都使用cuDNN v7作為卷積算子;實現了版本的深度卷積,因為相對較新,還沒有得到最新庫的支持。還使用cuBLAS v8進行矩陣乘法。另一方面,Tensorflow XLA使用JIT編譯。
Figure 15: Relative speedup of all conv2d operators in ResNet-18 and all depthwise conv2d operators in MobileNet. Tested on a TITAN X. See Table 2 for operator confifigurations. We also include a weight pretransformed Winograd for 3x3 conv2d (TVM PT).
圖14顯示,TVM優于基線,由于聯合圖優化和生成高性能融合算子的自動優化器,其加速比從1.6×到3.8×不等。DQN的3.8倍加速是由于其使用了未經cuDNN優化的非常規算子(4×4 conv2d,步長=2);ResNet工作負載更為傳統。TVM會在這兩種情況下自動找到優化的。
Figure 16: ARM A53 end-to-end evaluation of TVM and TFLite.
為了評估算子級優化的有效性,還對ResNet和MobileNet中的每個張量算子,進行了細分比較,如圖15所示。將TensorComprehension(TC,commit:ef644ba)作為一個額外的基線,是最近引入的自動調優框架。2 TC結果包括在10代×100群體×每個算子2個隨機種子中發現的最佳seeds(即每個算子2000次試驗)。二維卷積是最重要的DL算子之一,cuDNN進行了大量優化。然而,TVM仍然可以為大多數層,生成更好的GPU內核。深度卷積是一種結構簡單的新算子。
在這種情況下,TVM和TC都可以找到比MXNet手工制作的內核更快的內核。TVM的改進主要歸功于,對大調度空間的探索和有效的基于ML的搜索算法。
6.2嵌入式CPU評估
在ARM Cortex A53(四核1.2GHz)上,評估了TVM的性能。使用Tensorflow Lite(TFLite,commit:7558b085)作為基線系統。
Figure 17: Relative speedup of all conv2d operators in ResNet-18 and all depthwise conv2d operators in mobilenet. Tested on ARM A53. See Table 2 for the configurations of these operators.
圖17將TVM算子與ResNet和MobileNet的手工優化算子進行了比較。TVM生成的算子,在兩種神經網絡工作負載方面,都優于手動優化的TFLite版本。該結果還證明了TVM能夠快速優化新興的張量算子,如深度卷積算子。最后,圖16顯示了三種工作負載的端到端比較,TVM優于TFLite基線。
3個超低精度算子,通過為小于8位的定點數據類型,生成高度優化的算子,展示了TVM支持超低精度推理的能力。低精度網絡用矢量化位串行乘法,代替昂貴的乘法,矢量化位串行乘法,由按位和pop計數減少組成。實現高效的低精度推理,需要將量化數據類型打包為更廣泛的標準數據類型,如int8或int32。
TVM系統生成的代碼性能優于Caffe2的手動優化庫。實現了一個特定于ARM的tensorization內核,利用ARM指令構建一個高效,低精度的矩陣向量微內核。然后,使用TVM的自動優化器,搜索調度空間。
Figure 18: Relative speedup of single- and multithreaded low-precision conv2d operators in ResNet. Baseline was a single-threaded, hand-optimized implementation from Caffe2 (commit: 39e07f7). C5, C3 are 1x1 convolutions that have less compute intensity, resulting in less speedup by multi-threading.
圖18將TVM與ResNet上的Caffe2超低精度庫進行了比較,用于2位激活,1位權重推理。由于基線是單線程的,還將與單線程TVM版本進行比較。
單線程TVM優于基線,尤其是C5,C8和C11層;這些是內核大小為1×1,步長為2的卷積層,超低精度基線庫未對此進行優化。此外,還利用額外的TVM功能,生成一個并行庫實現,該實現顯示出比基線更好的性能。除了2位+1位配置,TVM可以生成優化基線庫不支持的其它精度配置,提高靈活性。
參考文獻:
TVM An Automated End-to-End Optimizing Compiler
總結
以上是生活随笔為你收集整理的全文翻译(三) TVM An Automated End-to-End Optimizing Compiler的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全文翻译(二): TVM: An Aut
- 下一篇: 全文翻译(四) TVM An Autom