摘要:亞馬遜和華盛頓大學(xué)今天合作發(fā)布了開源的端到端深度學(xué)習(xí)編譯器。項目作者之一陳天奇在微博上這樣介紹這個編譯器我們今天發(fā)布了基于工具鏈的深度學(xué)習(xí)編譯器。陳天奇團隊對的性能進行了基準(zhǔn)測試,并與進行了比較。
亞馬遜和華盛頓大學(xué)今天合作發(fā)布了開源的端到端深度學(xué)習(xí)編譯器NNVM compiler。
先提醒一句,NNVM compiler ≠ NNVM。
NNVM是華盛頓大學(xué)博士陳天奇等人2016年發(fā)布的模塊化深度學(xué)習(xí)系統(tǒng),今年8月中旬,他們又推出了將深度學(xué)習(xí)工作負載部署到硬件的端到端IR堆棧TVM,也就是把深度學(xué)習(xí)模型更簡單地放到各種硬件上。
當(dāng)時,陳天奇把TVM+NNVM描述為“深度學(xué)習(xí)到各種硬件的完整優(yōu)化工具鏈”,而這次推出的NNVM compiler,是一個基于TVM工具鏈的編譯器。
項目作者之一陳天奇在微博上這樣介紹這個編譯器:
我們今天發(fā)布了基于TVM工具鏈的深度學(xué)習(xí)編譯器NNVM compiler。支持將包括mxnet,pytorch,caffe2, coreml等在內(nèi)的深度學(xué)習(xí)模型編譯部署到硬件上并提供多級別聯(lián)合優(yōu)化。速度更快,部署更加輕量級。 支持包括樹莓派,服務(wù)器和各種移動式設(shè)備和cuda, opencl, metal, Javascript以及其它各種后端。 歡迎對于深度學(xué)習(xí), 編譯原理,高性能計算,硬件加速有興趣的同學(xué)一起加入dmlc推動領(lǐng)導(dǎo)開源項目社區(qū)。
NNVM compiler對CoreML的支持,讓開發(fā)者可以在非iOS設(shè)備上部署CoreML模型。
AI開發(fā)界的挑戰(zhàn)
AWS AI首席科學(xué)家李沐(MXNet作者)在亞馬遜博客撰文介紹稱,推出這個編譯器,是為了應(yīng)對深度學(xué)習(xí)框架多樣化為AI開發(fā)界帶來的三個挑戰(zhàn):
一、對于算法的開發(fā)者來說,由于各AI框架的前端交互和后端實現(xiàn)之間都存在很多區(qū)別,換框架很麻煩,而開發(fā)和交付過程中可能會用到的框架不止一個。
比如說有的亞馬遜AWS云服務(wù)用戶,為了獲得EC2上的加速性能,會想要把Caffe模型部署到MXNet上。
為了應(yīng)對這個問題,之前Facebook和微軟也聯(lián)合發(fā)布了模型間轉(zhuǎn)換工具ONNX。
二、框架的開發(fā)者需要維護多個后端,來保證自己的框架能適用于從手機芯片到數(shù)據(jù)中心GPU的各種硬件。
比如說MXNet,要支持英偉達GPU的cuDNN,還要支持英特爾CPU的MKLML。
三、從芯片供應(yīng)商的角度來看,他們每新開發(fā)一款芯片都需要支持多個AI框架,每個框架表示和執(zhí)行工作負載的方式都不一樣,所以,就連卷積這樣一個運算,都需要用不同的方式來定義。
支持多個框架,就代表要完成巨大的工作量。
通過將框架中的深度學(xué)習(xí)模型直接部署到硬件,NNVM compiler自然也就解決了這些問題。
結(jié)構(gòu)
NNVM compiler可以將前端框架中的工作負載直接編譯到硬件后端,能在高層圖中間表示(IR)中表示和優(yōu)化普通的深度學(xué)習(xí)工作負載,也能為不同的硬件后端轉(zhuǎn)換計算圖、最小化內(nèi)存占用、優(yōu)化數(shù)據(jù)分布、融合計算模式。
編譯器的典型工作流如下圖所示:
這個編譯器基于此前發(fā)布的TVM堆棧中的兩個組件:NNVM用于計算圖,TVM用于張量運算。
其中,NNVM的目標(biāo)是將不同框架的工作負載表示為標(biāo)準(zhǔn)化計算圖,然后將這些高級圖轉(zhuǎn)換為執(zhí)行圖。
TVM提供了一種獨立于硬件的特定域語言,以簡化張量索引層次中的運算符實現(xiàn)。另外,TVM還支持多線程、平鋪、緩存等。
對框架和硬件的支持
編譯器中的NNVM模塊,支持下圖所示的深度學(xué)習(xí)框架:
具體來說,MXNet的計算圖能直接轉(zhuǎn)換成NNVM圖,對Keras計算圖的直接支持也正在開發(fā)中。
同時,NNVM compiler還支持其他模型格式,比如說微軟和Facebook前不久推出的ONNX,以及蘋果CoreML。
通過支持ONNX,NNVM compiler支持Caffe2、PyTorch和CNTK框架;通過支持CoreML,這個編譯器支持Caffe和Keras。
而編譯器中的TVM模塊,目前附帶多個編碼生成器,支持多種后端硬件,其中包括為X86和ARM架構(gòu)的CPU生成LLVM IR,為各種GPU輸出CUDA、OpenCL和Metal kernel。
性能
NNVM compiler聯(lián)合使用圖級和張量級優(yōu)化以獲得較佳性能。常規(guī)的深度學(xué)習(xí)框架會將圖優(yōu)化與部署runtime進行打包,而NNVM編譯器將優(yōu)化與實際部署運行時分離。
采用這種方法,編譯的模塊只需要依賴于最小的TVM runtime,當(dāng)部署在Raspberry Pi或移動設(shè)備上時,只占用大約300KB。
陳天奇團隊對NNVM compiler的性能進行了基準(zhǔn)測試,并與MXNet進行了比較。這個測試基于兩種典型的硬件配置:樹莓派上的ARM CPU和AWS上的Nvidia GPU。
Nvidia GPU
GPU的基準(zhǔn)和時間表由Leyuan Wang(AWS/UCDavis)和Yuwei Hu(圖森)提供。他們在Nvidia K80上對NNVM編譯器和MXNet進行了比較,以CUDA8和CuDNN7作為后端。這是一個非常強的基線,因為MXNet開啟了從CuDNN中選擇較佳內(nèi)核的自動調(diào)整功能。另外,他們還使用了MXNet中優(yōu)化深度內(nèi)核來優(yōu)化MobileNet工作負載。
如圖所見,NNVM編譯器生成的代碼在K80上優(yōu)于MXNet。這些改進源于圖和內(nèi)核級別的優(yōu)化。值得注意的是,NNVM編譯器自己升恒所有的優(yōu)化GPU內(nèi)核,而不需要依賴諸如CuDNN這樣的外部庫。
樹莓派3b
樹莓派編譯堆棧由Ziheng Jiang(AWS/FDU)提供。他們使用OpenBLAS和NNPack對NNVM和MXNet進行了比較,嘗試不同的設(shè)置來獲得MXNet的較佳表現(xiàn),例如為3×3卷積在NNPack中開啟Winograd卷積,啟動多線程,并禁用了額外的調(diào)度程序(所有的線程都被NNPack使用)。
結(jié)果如上圖所示,由NNVM編譯器生成的代碼在ResNet18上速度快兩倍。MobileNet上的差距,主要是因為現(xiàn)有CPU DNN庫中缺乏深度卷積。NNVM編譯器受益于直接生成高效的ARM代碼。
開發(fā)團隊
NNVM編譯器的GitHub地址:
https://github.com/dmlc/nnvm
開發(fā)這個項目的依然是TVM堆棧團隊,包括華盛頓大學(xué)艾倫計算機學(xué)院的陳天奇、Thierry Moreau、Haichen Shen、Luis Ceze、Carlos Guestrin和Arvind Krishnamurthy,以及亞馬遜AWS AI團隊的Ziheng Jiang。
另外,在TVM博客最后還鳴謝了一群社區(qū)貢獻者:
在這里特別感謝Yuwen Hu(圖森)、Leyuan Wang(AWS/UCDavis)、Joshua Z. Zhang(AWS)以及Xingjian Shi(HKUST)的早期貢獻。我們也要感謝所有的TVM堆棧貢獻者。
歡迎加入本站公開興趣群商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價值的辦法,實際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉庫,數(shù)據(jù)挖掘工具,報表系統(tǒng)等全方位知識
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/4641.html
摘要:兩者取長補短,所以深度學(xué)習(xí)框架在年,迎來了前后端開發(fā)的黃金時代。陳天奇在今年的中,總結(jié)了計算圖優(yōu)化的三個點依賴性剪枝分為前向傳播剪枝,例已知,,求反向傳播剪枝例,,求,根據(jù)用戶的求解需求,可以剪掉沒有求解的圖分支。 虛擬框架殺入從發(fā)現(xiàn)問題到解決問題半年前的這時候,暑假,我在SIAT MMLAB實習(xí)。看著同事一會兒跑Torch,一會兒跑MXNet,一會兒跑Theano。SIAT的服務(wù)器一般是不...
摘要:是由華盛頓大學(xué)在讀博士陳天奇等人提出的深度學(xué)習(xí)自動代碼生成方法,去年月機器之心曾對其進行過簡要介紹。目前的堆棧支持多種深度學(xué)習(xí)框架以及主流以及專用深度學(xué)習(xí)加速器。 TVM 是由華盛頓大學(xué)在讀博士陳天奇等人提出的深度學(xué)習(xí)自動代碼生成方法,去年 8 月機器之心曾對其進行過簡要介紹。該技術(shù)能自動為大多數(shù)計算硬件生成可部署優(yōu)化代碼,其性能可與當(dāng)前最優(yōu)的供應(yīng)商提供的優(yōu)化計算庫相比,且可以適應(yīng)新型專用加...
摘要:在此,我們將借用和的算子,分析硬件加速的需求。池化層池化層主要用于尺度變換,提取高維特征。此種類型主要用于深度卷積神經(jīng)網(wǎng)絡(luò)中卷積部分與部分的連接。和可以認為是的特例。 NNVM是由陳天奇團隊提出的一套可復(fù)用的計算流圖中間表達層,它提供了一套精簡的API函數(shù),用以構(gòu)建、表達和傳輸計算流圖,從而便于高層級優(yōu)化。另外NNVM也可以作為多個深度學(xué)習(xí)框架的共享編譯器,可以優(yōu)化、編譯和部署在多種不同的硬...
摘要:所有需要跑任務(wù)的通過模版動態(tài)創(chuàng)建,當(dāng)任務(wù)執(zhí)行結(jié)束自動刪除。同時也可以用配置完畢,可以點擊按鈕測試是否能夠連接的到,如果顯示則表示連接成功,配置沒有問題。 介紹 基于Kubernetes和Jenkins來實現(xiàn)CI/CD。 所有需要跑任務(wù)的jenkins slave(pod)通過模版動態(tài)創(chuàng)建,當(dāng)任務(wù)執(zhí)行結(jié)束自動刪除。 showImg(https://segmentfault.com/img...
摘要:系列安裝報錯結(jié)果一樣的錯解決方法成功了過擬合當(dāng)你觀察訓(xùn)練精度高但檢測精度低很可能你遇到過度擬合問題。正如其名,它是的一個實現(xiàn),作者為正在華盛頓大學(xué)研究機器學(xué)習(xí)的大牛陳天奇。為了方便大家使用,陳天奇將封裝成了庫。 xgboost系列 ubuntu14.04 安裝 pip install xgboost 報錯 sudo apt-get update 結(jié)果一樣的錯 解決方法: sudo -...
閱讀 3412·2021-11-25 09:43
閱讀 3257·2021-10-11 10:58
閱讀 2837·2021-09-27 13:59
閱讀 3140·2021-09-24 09:55
閱讀 2228·2019-08-30 15:52
閱讀 1893·2019-08-30 14:03
閱讀 2305·2019-08-30 11:11
閱讀 2077·2019-08-28 18:12