日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

端到端TVM编译器(下)

發布時間:2023/11/28 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 端到端TVM编译器(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

端到端TVM編譯器(下)
4.3 Tensorization
DL工作負載具有很高的運算強度,通常可以分解為張量運算符,如矩陣乘法或一維卷積。這些自然分解導致了最近的添加張量計算原語。這些新的原語帶來了機遇和挑戰調度;為了
提高性能,編譯框架必須無縫集成。稱之為張量化:類似于SIMD體系結構的矢量化,但是
有顯著差異。指令輸入是多維的,具有固定或可變的長度,每個輸入都有不同的數據布局。更重要的是,不能支持一組固定的原語,因為新的加速器是張量指令變體。
需要一個可擴展的解決方案。通過分離張量內在聲明機制,從調度中獲取目標內部硬件。用同樣的方法,用張量表達式語言來聲明兩者的行為,每一個新的硬件內在特性和與之相關的降低規則。下面的代碼顯示了如何聲明8×8張量硬件。
此外,引入了一個tensorize調度原語,用相應的內部函數替換計算單元。編譯器匹配計算
模式,降低到相應的硬件本身。張量化將調度表與特定的硬件原語,便于擴展TVM支持新的硬件架構。
生成的緊繃調度表代碼與高性能計算實踐保持一致:打破一系列微內核調用復雜運算。利用手工制作的tensorize微內核原語,在某些平臺上是有益的。例如,利用一個位串行矩陣向量乘微內核,實現了超低精度算子據類型的移動CPU的算子。這個微內核將結果累積成越來越大的數據類型,最小化內存占用。呈現TVM固有的張量微內核,產生高達1.5× 加速比非張量化的版本。
4.4 Explicit Memory Latency Hiding
延遲隱藏是指將內存操作與計算重疊,最大限度地提高內存和計算資源利用率的過程。需要不同目標硬件后端的策略。在CPU上,內存延遲隱藏是通過多線程或硬件隱式預取實現的。GPU依賴于許多線程的快速上下文切換。相比之下,像TPU這樣的專用DL加速器,通常更受歡迎,具有解耦訪問執行(DAE)的精簡控制架構,同步卸載細粒度與軟件。
圖9顯示了一個DAE硬件管道,減少了runtime延遲。與單片硬件設計相比,流水線可以隱藏大部分內存訪問開銷,幾乎可以充分利用計算資源。為了獲得更高的利用率,指令流必須添加同步細粒度操作。否則,依賴關系就無法強制執行,導致錯誤的執行。因此,DAE硬件管道,需要在管道階段之間進行細粒度依賴的排隊/出列操作,保證正確執行,如圖9指令流所示。

圖8: TVM虛擬線程降低,將虛擬線程并行程序轉換為單個指令流;這個流包含顯式的低級同步,硬件可以解釋這些同步,以恢復管道并行性,需要隱藏內存訪問延遲。

圖9:在硬件隱藏中執行解耦訪問,通過允許內存和計算重疊。執行正確性是通過低級別的同步來實現的,同步的形式是依賴令牌排隊/出列操作,這編譯器堆棧必須插入到指令流中。

圖10:運行ResNet推斷,基于FPGA的DL加速器的roofline。由于TVM啟用了延遲隱藏,基準測試的性能得到了提高,更接近roofline,顯示出更高的計算和內存帶寬效率。
編程需要顯式低層同步是困難的。在減少編程負擔方面,引入了虛擬線程,指定高級數據并行程序,將是一個支持多線程的硬件后端。TVM通過低級別顯式同步,自動將程序降低到單個指令流,如圖8所示。該算法從高級多線程程序調度開始,插入必要的低級同步操作,
保證在每個線程內正確執行。接下來,將所有虛擬線程的操作交織到單個指令流中。最后,硬件恢復可用的管道并行性,該并行性在低級指令流中的同步。
延遲隱藏的硬件評估。在一個定制的基于FPGA的加速器,設計演示了延遲隱藏的有效性
詳見第6.4小節。在加速器上,運行ResNet的每一層,使用TVM生成兩個調度:一個具有延遲隱藏,另一個不具有延遲隱藏。這個用延遲隱藏調度并行化調度,使用虛擬線程公開管道并行性和隱藏內存訪問延遲。顯示結果在圖10中作為roofline圖;roofline性能圖提供了一個給定不同的基準測試使用計算和內存資源的系統??偟膩碚f,延遲隱藏得到了改善所有ResNet層的性能。峰值計算利用率從沒有延遲隱藏的70%提高到88%延遲隱藏。
5. Automating Optimization
考慮到一組豐富的調度原語,剩下的問題是,如何找到最佳的算子,實現DL模型的每一層。這里,TVM為與每個層相關聯的特定輸入形狀和布局,創建一個專門的算子。這樣的專業化提供了顯著的性能優勢(與手工制作相比),以較小的形狀和形狀多樣性為目標代碼,也帶來了自動化的挑戰。這個系統需要選擇調度優化。
例如,修改循環順序或優化內存層次結構,以及調度特定的參數,如平鋪大小和循環展開因子。這樣的組合選擇,創造了一個每個硬件后端的算子實現的巨大搜索空間。
為了應對這一挑戰,構建了一個自動化的調度優化器,包含兩個主要組件:一個調度資源管理器,用于提出有前向新配置;另一個預測給定配置性能的機器學習cost model。本節介紹
這些組件和TVM的自動優化流量(圖11)。

圖11:自動化優化框架概述。通過RPC在分布式設備群集上運行,使用基于ML的成本模型并選擇實驗,調度表explore檢查調度表空間。為了提高預測能力,ML模型定期更新使用收集記錄在數據庫中的數據。

表1:自動化方法的比較。模型偏差指由于建模而導致的不準確。
5.1 Schedule Space Specification
構建了一個調度表模板規范API,讓開發人員在調度表空間中聲明旋鈕。模板規范允許將開發人員在指定可能的調度表時,根據需要掌握特定領域的知識。還為每個硬件后端創建了一個通用主模板,該模板根據計算自動提取可能的旋鈕,用張量表達式語言描述。在高層次上,需要考慮,讓優化器管理選擇的負載。因此,優化器必須在數十億個可能的配置中搜索真實實驗中使用的世界DL工作負載。
5.2 ML-Based Cost Model
從大的配置空間中,通過黑盒優化,即自動調整,找到最佳調度的一種方法。此方法用于調整高性能計算庫。然而,自動調諧需要許多實驗來確定一個好的配置。
另一種方法是建立一個預定義的cost model,指導搜索特定的硬件后端,而不是運行所有的可能性和性能測量。
理想情況下,完美的cost model會考慮所有影響性能的因素:內存訪問模式、數據重用、管道依賴關系和線程模式等。不幸的是,由于日益復雜,這種現代硬件方法很麻煩。此外,每一個新的硬件目標,需要新的(預定義的)cost model。
相反,采用統計方法來解決cost model建模問題。在這種方法中,調度explore,提出可提高算子操作效率的配置性能。對于每個調度配置,使用一種最大似然模型,以降低的循環程序作為輸入,預測在給定硬件上的runtime后端。該模型使用勘探期間收集的runtime測量數據進行訓練,不需要用戶輸入詳細的硬件信息。在優化過程中,當探索更多配置時,會定期更新模型,從而提高精度,以及其它相關的工作負載。這樣,ML模型的質量隨著實驗的進行而提高預判。
表1總結了自動化方法。從相關工作量,基于ML的cost model在自動調整和預定義的cost建模之間取得了平衡。
機器學習模型設計選擇。
在選擇哪種ML時,進度管理器將使用的機器學習模型,要考慮兩個關鍵因素:質量和速度。
調度管理器經常查詢cost model,由于模型預測時間和模型改裝時間的原因,會產生開銷。這些開銷必須小于在實際硬件上測量性能所需的時間,可以找到取決于特定的工作負載/硬件目標秒數order順序。這個調度要求區分傳統的超參數優化問題,與模型開銷相比,執行測量的cost非常高,而且更昂貴的模型可能被使用。除了模型的選擇,還需要選擇一個目標函數來訓練模型,例如,作為配置的預測runtime中的誤差error。

圖12:Titan X上ResNet-18中的conv2d算子,不同自動化方法的比較?;贛L的模型從沒有訓練數據開始使用,收集數據改進自身。Y軸是相對于cuDNN加速。對于其它工作負載,觀察到類似的趨勢。

圖13: ML cost model工作流示例。XGBoost根據循環程序特性預測成本。
TreeRNN直接歸納AST。
但是,由于explore選擇了最重要的候選對象,基于預測的相對順序(A運行比B更快),不需要預測直接重復的絕對執行。相反,使用等級目標來預測runtime cost的相對順序。在ML優化器中實現了幾種類型的模型。采用了一種基于梯度樹的boosting模型XGBoost),從循環程序中提取特征進行預測。這些特性包括每種方法的內存訪問計數和重用率,每個循環級別的內存緩沖區,以及一個one-hot循環注釋的編碼,如“矢量化”、“展開”和“并行”。評估了一個神經網絡,使用TreeRNN總結循環的模型程序,沒有特征工程的AST。
圖13總結了cost model的工作流程。發現tree boosting and TreeRNN有相似的預測能力。然而,前者執行兩次預測,同樣的速度和花費更少的時間來訓練。因此,選擇了gradient tree boosting梯度樹提升作為默認的cost model的實驗。盡管如此,相信這兩種方法都是有價值的,并期待著今后更多這個問題的研究。
一般們來說,樹推進模型可以在0.67毫秒內進行預測,比運行真正的測量更快。圖12比較了基于ML的優化器和blackbox自動調優方法。發現前者比后者快得多的配置。
5.3 Schedule Exploration
一旦選擇了cost model,就可以選擇迭代運行real的配置測量。每次迭代中,explore都使用ML模型預測,在其上選擇一批候選樣本運行測量。收集的數據作為訓練數據更新模型。如果不存在初始訓練數據,explore將隨機挑選候選對象進行測量。最簡單的搜索算法枚舉和通過cost model運行每個配置,選擇前k個預測執行者。然而,在搜索空間大的情況下,策略變得很難處理。
相反,運行了一個并行模擬退火算法。資源管理器從隨機配置開始,在每一步中,隨機走到附近的配置。如果成本降低,這種轉變是成功的,正如cost model所預測的那樣。如果目標配置的成本較高,很可能失敗(拒絕)。隨機的walk傾向于收斂于具有較低性能cost model預測成本的配置??碧綘顟B持續更新cost model,繼續執行最后一次更新后的配置。
5.4 Distributed Device Pool and RPC
分布式設備池可擴展硬件上試運行,在多個優化作業中,支持細粒度資源共享。TVM實現
自定義的、基于RPC的分布式設備池,使客戶端能夠在特定類型的設備上運行程序。可以用這個接口在主編譯器上編譯程序,請求一個遠程設備,遠程運行函數,訪問相同腳本中的結果。TVM的RPC支持動態上傳,運行交叉編譯的模塊和使用runtime約定函數。因此,相同的基礎架構可以執行單個工作負載優化,端到端圖形推理。自動化了跨多個設備編譯、運行和配置步驟。

表2:ResNet-18和MobileNet中用于單核實驗的所有深度conv2d算子的配置。高/寬表示高度和寬度、IC輸入通道、OC輸出通道、K內核大小和S步長。所有算子使用“相同”填充。所有縱深操作通道乘數為1。
這種基礎架構對于嵌入式設備尤其重要,因為嵌入式設備通常需要繁瑣的手動操作,用于交叉編譯、代碼部署和度量。
6. Evaluation
TVM核心是用C++實現的(~5萬LoC)。提供到Python和Java的語言綁定。本文早期評估了TVM的幾個單獨優化和組件的影響,即,圖4中的算子融合,圖10中的延遲隱藏,以及圖12中基于ML的cost model。現在關注的是一個端到端的評估,旨在回答以下問題:
?TVM能否在多個服務器上優化DL工作負載平臺?
?在每個后端,TVM與現有DL框架(依賴于高度優化的庫)相比如何?
?TVM能否支持新出現的DL工作負載(例如深度卷積、低精度運算)?
?TVM是否能夠支持和優化新的專業應用程序加速器?
回答這些問題,從四個方面評估了TVM平臺類型:
(1)服務器級GPU;
(2)嵌入式GPU;
(3)嵌入式CPU;
(4)在低功耗FPGA SoC上實現的DL加速器。
基準是基于真實世界的DL推理工作負載,包括ResNet、MobileNet、LSTM語言模型、Deep Q網絡(DQN)和深層卷積生成對抗網絡(DCGAN)。

圖14: 在英偉達Titan-X上,TVM的GPU端到端MXNet、Tensorflow和Tensorflow XLA評估測試。
將上述方法與現有的DL框架(包括MxNet[9]和TensorFlow[2])進行比較,后者依賴于高度工程化的、特定于算子的技術庫。TVM執行端到端的自動優化和代碼生成,而不需要外部設備算子庫。
6.1 Server-Class GPU Evaluation
首先比較了Nvidia Titan上的深度神經網絡TVM、MXNet(v1.1)、Tensorflow(v1.7)和Tensorflow XLA。MXNet和Tensorflow都使用cudnnv7作為卷積算子;實現深度卷積,因為它是相對新的和不支持最新的庫。使用矩陣乘法cuBLAS v8。
另一方面,TensorFlowXLA使用JIT編譯。

圖14顯示了TVM的性能優于基線,加速范圍為1.6× 至3.8× ,由于聯合圖優化和自動優化,生成高性能的融合算子。DQN的3.8倍加速,使用了未經cuDNN優化的非常規算子(4×4 conv2d,步幅=2);ResNet工作負載更傳統。兩種情況下,TVM自動查找優化算子。
為了評估算子級優化的有效性,還對ResNet和MobileNet中的每個張量算子,如圖15所示。包括TensorComprehension(TC,commit:ef644ba),每一個算子包含10 generations × 100 population × 2 random seeds,一種最近引入的自動調優框架,作為額外的基線。2 TC結果包括最佳kernel(即,每個操作員2000次試驗)。

圖15:所有conv2d運算符的相對加速比。ResNet-18和MobileNet中的所有depthwise conv2d算子。在Titan-X上測試。算子配置見表2,包括3x3 conv2d(TVM PT)的權重預變形Winograd。
二維卷積,2D convolution,最重要的DL算子,通過cuDNN優化。然而,TVM仍然可以為大多數層的內核kernel生成更好的GPU。深度卷積是一種新引入的結構更簡單的算子。在這種情況下,與MXNet的手工內核相比,TVM和TC都可以找到快速內核。TVM的改進主要得益于,對大調度空間的探索和一種有效的基于ML的搜索算法。
6.2 Embedded CPU Evaluation
評估了TVM在Cortex A53(四核1.2GHz)上的性能。用的是Tensorflow Lite(TFLite,commit:7558b085)作為基線系統。
圖17比較了TVM算子和ResNet和MobileNet的手工優化算子。觀察到TVM生成性能優于手動優化的算子兩種神經網絡工作負載的TFLite版本。結果表明,TVM的能力,快速優化新興的張量算子,如深卷積算子。最后,圖16顯示了三種工作負載的端到端比較,其中TVM優于TFLite基線。
超低精度算子
展示TVM通過生成高度優化的算子,支持超低精度推理的能力。對于小于8位的定點數據類型。低精度網絡取代昂貴的乘法矢量化位串行乘法,由按位和popcount減少。要實現有效的低精度推理,需要進行量化包裝,將數據類型轉換為更廣泛的標準數據類型,如int8或int32。系統生成的代碼比來自Caffe2的手工優化庫(commit:39e07f7)。實現了一個特定于ARM的張量化,利用ARM指令構建高效、低精度的矩陣向量微內核,使用TVM的自動優化器搜索調度空間。

圖16: 在ARM A53上對TVM和TFLite評估。

圖17:所有conv2d運算符的相對加速比。ResNet-18和mobilenet中的所有depthwise conv2d算子。在ARM A53上測試。這些算子的配置見表2。

圖18:ResNet中單線程和多線程低精度conv2d運算符的相對加速比?;€是來自Caffe2的單線程、手工優化的實現(commit:39e07f7)。C5、C3為1x1卷積,計算強度較小,多線程導致加速較慢。
圖18將TVM與ResNet上的Caffe2超低精度庫進行了2位激活、1位權重推理比較。因為基線是單線程的,與單線程TVM版本進行了比較。單線程TVM優于基線,特別是對于C5、C8和C11層;這些是卷積內核大小為1的層×1和2的步長,超低精度基線庫未對此進行優化。此外,利用額外的TVM功能來生成一個并行庫實現,顯示出比基線有所改善。除了2-bit+1-bit配置,TVM可以生成和優化不支持的其它精度配置的基線庫,提高了靈活性。
6.3 Embedded GPU Evaluation
對于移動GPU實驗,運行了端到端的Firefly-RK3399板上ARM-T860MP4 GPU的管道配備?;€是一個算子提供的ARM計算庫(v18.03)。

圖19: MaliT860MP4上的端到端實驗結果。有兩種數據類型float32和float16評價的。
如圖19所示,在性能上優于基線。三種適用于float16和float32的型號(基線還不支持DCGAN和LSTM)。加速比為1.2× 至1.6×.
6.4 FPGA Accelerator Evaluation
Vanilla深度學習加速器
TVM如何處理特定于加速器的代碼生成,在FPGA上,進行原型化的通用推理加速器設計。在這個評估中,使用了Vanilla學習加速器(VDLA)–從以前的加速器中,提取特征
成為一個極簡主義的硬件架構-演示可以瞄準專門的加速器,TVM生成高效調度表的能力。圖20顯示了VDLA體系結構的高級硬件組織。VDLA被編程為一個張量處理器。高效地執行高計算強度的算子(例如,矩陣乘法、高維卷積)??梢詧绦屑虞d/存儲操作,將三維張量從DRAM阻塞到SRAM的相鄰區域。還為網絡參數、層輸入(窄數據類型)和層輸出(寬數據類型)提供專門的onchip存儲器。最后,VDLA提供了顯式的同步控制,在連續的加載、計算和存儲中最大化內存和計算算子之間的重疊。
方法論
在一個平臺上實現了VDLA設計,低功耗PYNQ板,采用ARM Cortex A9雙核CPU,時鐘頻率667MHz和Artix-7,基于FPGA結構。在這些有限的FPGA資源上,實施了16×16矩陣矢量單元,200MHz,執行8位值的乘積,并在每個周期累加到32位寄存器中。VDLA設計的理論峰值吞吐量約為102.4加侖/秒。激活存儲分配了32kB的資源,微碼緩沖區,以及128kB的寄存器文件,參數存儲分配了32kB的資源。這些片內緩沖區決不足以提供一層ResNet??梢詫τ行У膬却嬷赜眠M行案例研究和潛伏期隱藏。

Figure 20: VDLA 硬件設計架構。
用C runtime為VDLA構建一個驅動程序庫構造指令,推送到執行的目標加速器。代碼生成算法將加速器程序轉換為一系列調用,并將這些調用轉換為運行時API。添加專門的加速器后端~Python中的2k LoC。
End-to-End ResNet Evaluation.
在PYNQ平臺上,用TVM生成ResNet推理內核,盡可能多的層卸載到VDLA。為CPU生成兩個調度,僅限CPU+FPGA實現。由于卷積深度較淺,第一個ResNet卷積層無法在FPGA上有效卸載,而是在CPU上計算。然而,ResNet中的所有其它卷積層,可以進行有效的卸載。殘余層和激活等算子也在CPU上執行,因為VDLA不支持這些操作。

圖21將ResNet推理時間分解為僅CPU執行和CPU+FPGA執行。最多計算花費在卷積層上,可以卸載到VDLA。對于那些卷積層,實現的加速比是40×. 不幸的是,根據Amdahl定律,對FPGA的整體性能進行了分析。加速系統的瓶頸,必須在CPU上執行的工作負載。設想擴展VDLA設計,支持這些其它算子,有助于進一步降低成本。
基于FPGA的實驗驗證了TVM的性能,適應新的體系結構和硬件本質。
7. Related Work
深度學習框架提供了便利,很容易在不同的硬件后端,用于用戶表示DL工作負載和部署的接口?,F有的框架,目前依賴于特定于算子的Tensor算子庫,來執行工作負載。可以為大量的硬件設備利用TVM的堆棧。高級計算圖dsl是一個典型的表示和執行高級優化的方法。Tensorflow的XLA和最近引入的DLVM屬于這一類。這些工作中計算圖的表示是相似的,本文還使用了高級計算圖DSL論文。圖級表示則是一個很好的選擇,對于高級優化,級別太高,無法在不同的硬件后端下優化張量算子。之前的工作取決于具體的降低直接生成低級LLVM或訴諸于算子庫。這些方法需要對每個硬件后端進行大量的工程工作和算子變量組合。
Halide引入了將計算和調度分離的思想。采用Halid的方法,再利用編譯器中現有的有用的調度原語。張量算子調度也與其它算子有關。研究GPU的DSL和多面體回路變換。TACO介紹一種生成稀疏張量算子的通用中央處理器方法。Weld是用于數據處理任務的DSL。特別關注于為GPU和專用加速器解決DL工作負載的新調度挑戰。通過優化這些工程中的管線,新原語有可能被采納。
高性能庫,如ATLAS和FFTW使用自動調諧以獲得最佳性能。張量理解應用黑盒自動調諧和多面體優化CUDA內核。OpenTuner和現有超參數調整算法應用領域無關搜索。預定義的cost model用于在中自動調度圖像處理管道Halid。TVM的ML模型使用有效的考慮程序結構的域感知cost model。

圖21:在ResNet中卸載了卷積,基于FPGA的加速器的工作負載。灰色輸出條對應于不能加速的層,必須在CPU上運行。這個FPGA在Cortex A9 上的卸載卷積層上提供了40倍的加速。
模型的分布式調度優化器,可擴展到更大的搜索空間,在大范圍的支持后端,可以找到最先進的內核。更重要的是,提供了一個端到端堆棧,可以直接從DL框架中獲取描述,并與圖級堆棧一起進行聯合優化。盡管深入學習加速器越來越流行,有效地針對這些設備,仍然不清楚如何構建編譯堆棧。提供了一種總結類TPU性質的通用方法,評估中使用的VDLA設計,加速器和使具體的案例研究如何為加速器編譯代碼??梢詽撛诘暮锰幨蔷幾g深度學習FPGA。本文提供了一個通過張量化和編譯器驅動的延遲隱藏,有效地瞄準加速器的通用解決方案。
8. Conclusion
跨越一系列不同的硬件后端,提出了一個端到端編譯堆棧來解決深度學習的基本優化挑戰。。系統包括自動端到端優化,歷史上,這是一項勞動密集型和高度專業化的任務。
希望這項工作將鼓勵更多的研究,端到端編譯方法為DL系統軟硬件協同設計,提供了新的技術。

總結

以上是生活随笔為你收集整理的端到端TVM编译器(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。