摘要:是由華盛頓大學(xué)在讀博士陳天奇等人提出的深度學(xué)習(xí)自動(dòng)代碼生成方法,去年月機(jī)器之心曾對(duì)其進(jìn)行過簡(jiǎn)要介紹。目前的堆棧支持多種深度學(xué)習(xí)框架以及主流以及專用深度學(xué)習(xí)加速器。
TVM 是由華盛頓大學(xué)在讀博士陳天奇等人提出的深度學(xué)習(xí)自動(dòng)代碼生成方法,去年 8 月機(jī)器之心曾對(duì)其進(jìn)行過簡(jiǎn)要介紹。該技術(shù)能自動(dòng)為大多數(shù)計(jì)算硬件生成可部署優(yōu)化代碼,其性能可與當(dāng)前最優(yōu)的供應(yīng)商提供的優(yōu)化計(jì)算庫(kù)相比,且可以適應(yīng)新型專用加速器后端。近日,這項(xiàng)研究的論文《TVM: End-to-End Optimization Stack for Deep Learning》終于完成,內(nèi)容包含新方法的介紹與討論,以及 TVM 在英偉達(dá)、AMD 的 GPU、樹莓派及一些 FPGA 上的性能評(píng)估。
項(xiàng)目鏈接:https://github.com/dmlc/tvm
深度學(xué)習(xí)模型可以識(shí)別圖像、處理自然語言,以及在部分具有挑戰(zhàn)性的策略游戲中擊敗人類。在其技術(shù)發(fā)展的過程中,現(xiàn)代硬件穩(wěn)步推進(jìn)的計(jì)算能力扮演了不可或缺的作用。很多目前更為流行的深度學(xué)習(xí)框架,如 TensorFlow、MXNet、Caffe 和 PyTorch,支持在有限類型的服務(wù)器級(jí) GPU 設(shè)備上獲得加速,這種支持依賴于高度特化、供應(yīng)商特定的 GPU 庫(kù)。然而,專用深度學(xué)習(xí)加速器的種類越來越多,這意味著現(xiàn)代編譯器與框架越來越難以覆蓋所有的硬件。
顯而易見,以現(xiàn)有的點(diǎn)到點(diǎn)方式實(shí)現(xiàn)不同深度學(xué)習(xí)框架對(duì)所有種類的硬件進(jìn)行后端支持是不現(xiàn)實(shí)的。我們的最終目標(biāo)是讓深度學(xué)習(xí)負(fù)載可以輕松部署到所有硬件種類中,其中不僅包括 GPU、FPGA 和 ASIC(如谷歌 TPU),也包括嵌入式設(shè)備,這些硬件的內(nèi)存組織與計(jì)算能力存在著顯著的差異(如圖 1 所示)??紤]到這種需求的復(fù)雜性,開發(fā)一種能夠?qū)⑸疃葘W(xué)習(xí)高級(jí)程序降低為適應(yīng)任何硬件后端的低級(jí)優(yōu)化代碼的優(yōu)化框架是較好的方法。
目前的深度學(xué)習(xí)框架依賴于計(jì)算圖的中間表示來實(shí)現(xiàn)優(yōu)化,如自動(dòng)微分和動(dòng)態(tài)內(nèi)存管理 [3,7,4]。然而,圖級(jí)別的優(yōu)化通常過于高級(jí),無法有效處理硬件后端算子級(jí)別的轉(zhuǎn)換。另一方面,目前深度學(xué)習(xí)框架的算子級(jí)別庫(kù)通常過于僵化,難以輕松移植到不同硬件設(shè)備上。為了解決這些問題,我們需要一個(gè)可實(shí)現(xiàn)從計(jì)算圖到算子級(jí)別的優(yōu)化,為各種硬件后端帶來強(qiáng)大性能的編譯器框架。
圖 1:CPU、GPU 與類 TPU 加速器需要不同的片上存儲(chǔ)架構(gòu)和計(jì)算基元。在生成優(yōu)化代碼時(shí)我們必須考慮這一問題。
圖 2:TVM 堆棧圖。目前的堆棧支持多種深度學(xué)習(xí)框架以及主流 CPU、GPU 以及專用深度學(xué)習(xí)加速器。
優(yōu)化的四大基本挑戰(zhàn)
深度學(xué)習(xí)的優(yōu)化編譯器需要同時(shí)展示高級(jí)別與低級(jí)別的優(yōu)化,在論文中,研究人員總結(jié)了在計(jì)算圖級(jí)別與張量算子級(jí)別上的四大基本挑戰(zhàn):
高級(jí)數(shù)據(jù)流復(fù)寫:不同的硬件設(shè)備可能具有截然不同的內(nèi)存層次結(jié)構(gòu),因此,融合算子與優(yōu)化數(shù)據(jù)布局的策略對(duì)于優(yōu)化內(nèi)存訪問至關(guān)重要。
跨線程內(nèi)存復(fù)用:現(xiàn)代 GPU 與專用加速器的內(nèi)存可被多個(gè)計(jì)算核心共享,傳統(tǒng)的無共享嵌套并行模式已不再是最優(yōu)方法。為優(yōu)化內(nèi)核,在共享內(nèi)存負(fù)載上的線程合作很有必要。
張量計(jì)算內(nèi)部函數(shù):的硬件帶來了超越向量運(yùn)算的新指令集,如 TPU 中的 GEMM 算子和英偉達(dá) Volta 架構(gòu)中的 Tensor Core。因此在調(diào)度過程中,我們必須將計(jì)算分解為張量算術(shù)內(nèi)部函數(shù),而非標(biāo)量或向量代碼。
延遲隱藏(Latency Hiding):盡管在現(xiàn)代 CPU 與 GPU 上,同時(shí)擁有多線程和自動(dòng)緩存管理的傳統(tǒng)架構(gòu)隱藏了延遲問題,但專用的加速器設(shè)計(jì)通常使用精簡(jiǎn)控制與分流,這為編譯器堆棧的調(diào)度帶來了復(fù)雜性。所以,調(diào)度仍需仔細(xì),以隱藏內(nèi)存訪問延遲。
TVM:一個(gè)端到端優(yōu)化堆棧(見圖 2),該端到端優(yōu)化編譯器堆??山档秃驼{(diào)整深度學(xué)習(xí)工作負(fù)載,以適應(yīng)多種硬件后端。TVM 的設(shè)計(jì)目的是分離算法描述、調(diào)度和硬件接口。該原則受到 Halide [22] 的計(jì)算/調(diào)度分離思想的啟發(fā),而且通過將調(diào)度與目標(biāo)硬件內(nèi)部函數(shù)分開而進(jìn)行了擴(kuò)展。這一額外分離使支持新型專用加速器及其對(duì)應(yīng)新型內(nèi)部函數(shù)成為可能。TVM 具備兩個(gè)優(yōu)化層:計(jì)算圖優(yōu)化層,用于解決第一個(gè)調(diào)度挑戰(zhàn);具備新型調(diào)度基元的張量?jī)?yōu)化層,以解決剩余的三個(gè)挑戰(zhàn)。通過結(jié)合這兩種優(yōu)化層,TVM 從大部分深度學(xué)習(xí)框架中獲取模型描述,執(zhí)行高級(jí)和低級(jí)優(yōu)化,生成特定硬件的后端優(yōu)化代碼,如樹莓派、GPU 和基于 FPGA 的專用加速器。該論文做出了以下貢獻(xiàn):
我們構(gòu)建了一個(gè)端到端的編譯優(yōu)化堆棧,允許將高級(jí)框架(如 Caffe、MXNet、PyTorch、Caffe2、CNTK)專用的深度學(xué)習(xí)工作負(fù)載部署到多種硬件后端上(包括 CPU、GPU 和基于 FPGA 的加速器)。
我們發(fā)現(xiàn)了提供深度學(xué)習(xí)工作負(fù)載在不同硬件后端中的性能可移植性的主要優(yōu)化挑戰(zhàn),并引入新型調(diào)度基元(schedule primitive)以利用跨線程內(nèi)存重用、新型硬件內(nèi)部函數(shù)和延遲隱藏。
我們?cè)诨?FPGA 的通用加速器上對(duì) TVM 進(jìn)行評(píng)估,以提供關(guān)于如何最優(yōu)適應(yīng)專用加速器的具體案例。
我們的編譯器可生成可部署代碼,其性能可與當(dāng)前最優(yōu)的特定供應(yīng)商庫(kù)相比,且可適應(yīng)新型專用加速器后端。
圖 3:兩層卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算圖示例。圖中每個(gè)節(jié)點(diǎn)表示一次運(yùn)算,它消耗一或多個(gè)張量,并生成一或多個(gè)張量。張量運(yùn)算可以通過屬性進(jìn)行參數(shù)化,以配置其行為(如 padding 或 stride)。
論文:TVM: End-to-End Optimization Stack for Deep Learning
論文鏈接:https://arxiv.org/abs/1802.04799
摘要:可擴(kuò)展框架,如 TensorFlow、MXNet、Caffe 和 PyTorch 是目前深度學(xué)習(xí)領(lǐng)域中最流行和易用的框架。但是,這些框架只對(duì)窄范圍的服務(wù)器級(jí) GPU 進(jìn)行優(yōu)化,要把工作負(fù)載部署到其他平臺(tái),如手機(jī)、嵌入式設(shè)備和專用加速器(如 FPGA、ASIC),則需要大量手動(dòng)工作。我們提出了 TVM,一個(gè)端到端的優(yōu)化堆棧,具備圖形級(jí)和算子級(jí)的優(yōu)化,以為多種硬件后端提供深度學(xué)習(xí)工作負(fù)載的性能可移植性。我們討論了 TVM 所解決的深度學(xué)習(xí)優(yōu)化挑戰(zhàn):高級(jí)算子融合(operator fusion)、多線程低級(jí)內(nèi)存重用、任意硬件基元的映射,以及內(nèi)存延遲隱藏。實(shí)驗(yàn)結(jié)果證明 TVM 在多個(gè)硬件后端中的性能可與適應(yīng)低功耗 CPU 和服務(wù)器級(jí) GPU 的當(dāng)前最優(yōu)庫(kù)相比。我們還通過針對(duì)基于 FPGA 的通用深度學(xué)習(xí)加速器的實(shí)驗(yàn),展示了 TVM 對(duì)新型硬件加速器的適應(yīng)能力。該編譯器基礎(chǔ)架構(gòu)已開源。
歡迎加入本站公開興趣群商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價(jià)值的辦法,實(shí)際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉(cāng)庫(kù),數(shù)據(jù)挖掘工具,報(bào)表系統(tǒng)等全方位知識(shí)
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/4732.html
摘要:亞馬遜和華盛頓大學(xué)今天合作發(fā)布了開源的端到端深度學(xué)習(xí)編譯器。項(xiàng)目作者之一陳天奇在微博上這樣介紹這個(gè)編譯器我們今天發(fā)布了基于工具鏈的深度學(xué)習(xí)編譯器。陳天奇團(tuán)隊(duì)對(duì)的性能進(jìn)行了基準(zhǔn)測(cè)試,并與進(jìn)行了比較。 亞馬遜和華盛頓大學(xué)今天合作發(fā)布了開源的端到端深度學(xué)習(xí)編譯器NNVM compiler。先提醒一句,NNVM compiler ≠ NNVM。NNVM是華盛頓大學(xué)博士陳天奇等人2016年發(fā)布的模塊化...
摘要:系列安裝報(bào)錯(cuò)結(jié)果一樣的錯(cuò)解決方法成功了過擬合當(dāng)你觀察訓(xùn)練精度高但檢測(cè)精度低很可能你遇到過度擬合問題。正如其名,它是的一個(gè)實(shí)現(xiàn),作者為正在華盛頓大學(xué)研究機(jī)器學(xué)習(xí)的大牛陳天奇。為了方便大家使用,陳天奇將封裝成了庫(kù)。 xgboost系列 ubuntu14.04 安裝 pip install xgboost 報(bào)錯(cuò) sudo apt-get update 結(jié)果一樣的錯(cuò) 解決方法: sudo -...
摘要:兩者取長(zhǎng)補(bǔ)短,所以深度學(xué)習(xí)框架在年,迎來了前后端開發(fā)的黃金時(shí)代。陳天奇在今年的中,總結(jié)了計(jì)算圖優(yōu)化的三個(gè)點(diǎn)依賴性剪枝分為前向傳播剪枝,例已知,,求反向傳播剪枝例,,求,根據(jù)用戶的求解需求,可以剪掉沒有求解的圖分支。 虛擬框架殺入從發(fā)現(xiàn)問題到解決問題半年前的這時(shí)候,暑假,我在SIAT MMLAB實(shí)習(xí)??粗乱粫?huì)兒跑Torch,一會(huì)兒跑MXNet,一會(huì)兒跑Theano。SIAT的服務(wù)器一般是不...
閱讀 1616·2021-11-22 09:34
閱讀 1698·2019-08-29 16:36
閱讀 2681·2019-08-29 15:43
閱讀 3125·2019-08-29 13:57
閱讀 1307·2019-08-28 18:05
閱讀 1890·2019-08-26 18:26
閱讀 3257·2019-08-26 10:39
閱讀 3469·2019-08-23 18:40