NNVM Compiler,AI框架的开放式编译器
NNVM Compiler,AI框架的開放式編譯器
深度學習已變得無處不在且不可或缺。在多種平臺(例如手機,GPU,IoT設備和專用加速器)上部署深度學習工作負載的需求不斷增長。宣布了TVM堆棧,以彌合深度學習框架與面向性能或效率的硬件后端之間的鴻溝。TVM堆棧使為深度學習框架輕松構(gòu)建端到端編譯變得容易。擁有適用于所有框架的統(tǒng)一解決方案甚至會更好。
威斯康星大學艾倫分校和AWS AI團隊以及其他貢獻者,宣布NNVM編譯器的發(fā)布,NNVM編譯器是一種開放式深度學習編譯器,用于將前端框架工作負載直接編譯到硬件后端。使用TVM堆棧中的兩級中間表示(IR)來構(gòu)建它。歡迎讀者參考原始的TVM公告,以獲取有關(guān)TVM堆棧的更多技術(shù)細節(jié)。借助TVM堆棧,NNVM編譯器可以:
? 在高級圖IR中表示并優(yōu)化常見的深度學習工作負載
? 轉(zhuǎn)換計算圖以最大程度地減少內(nèi)存利用率,優(yōu)化數(shù)據(jù)布局并融合不同硬件后端的計算模式。
? 提出從前端深度學習框架到裸機硬件的端到端編譯管道。
NNVM編譯器可以直接從深度學習框架(例如Apache MXNet)中獲取模型。支持模型交換格式,例如ONNX和CoreML。ONNX支持使NNVM能夠從PyTorch,Caffe2和CNTK編譯深度學習模型。CoreML前端支持將CoreML模型部署到非iOS設備。
優(yōu)化與部署分離
NNVM編譯器應用圖級和張量級優(yōu)化,共同優(yōu)化以獲得最佳性能。采用與現(xiàn)有深度學習框架不同的方法,后者將圖形優(yōu)化與部署運行時打包在一起。NNVM編譯器采用了編譯器的傳統(tǒng)知識,將優(yōu)化與實際部署運行時分開。這種方法提供了實質(zhì)性的優(yōu)化,但仍保持運行時的輕量級。編譯后的模塊僅取決于最小的TVM運行時,部署在Raspberry Pi或移動設備上時僅需300KB左右。
Performance
NNVM編譯器仍在積極開發(fā)中,可以期待會有更多的改進,已經(jīng)開始看到可喜的結(jié)果。對性能進行了基準測試,在兩種典型的硬件配置上,與Apache MXNet進行了比較:Raspberry PI上的ARM CPU和AWS上的Nvidia GPU。盡管這兩款芯片在架構(gòu)上存在根本差異,可以使用相同的基礎架構(gòu),只需要更改每種硬件的調(diào)度即可。
Nvidia GPU
GPU基準和調(diào)度,將NNVM編譯器與Apache MXNet與CUDA8和cuDNN7作為Nvidia K80的后端進行了比較。這是一個非常強的基準,因為Apache MXNet會打開自動調(diào)整功能以從CuDNN中選擇最佳內(nèi)核。還使用了MXNet中優(yōu)化的深度智能內(nèi)核來優(yōu)化MobileNet工作負載。
可以看出,NNVM編譯器生成的代碼勝過K80上的Apache MXNet。這些改進歸因于聯(lián)合圖級別和內(nèi)核級別的優(yōu)化。值得注意的是,NNVM編譯器無需依賴CuDNN等外部庫,即可自行生成所有優(yōu)化的GPU內(nèi)核。
Raspberry Pi 3b
Rasberry Pi編譯堆棧,將NNVM編譯器與帶有OpenBLAS和NNPack的Apache MXNet進行了比較。探索了使MXNet發(fā)揮最佳性能的設置:為3x3卷積打開了NNPACK中的Winograd卷積,啟用了多線程,并禁用了其他調(diào)度程序線程(因此,所有線程都被NNPack使用)。
可以看出,在ResNet18上,NNVM編譯器生成的代碼快兩倍。MobileNet上的差距,現(xiàn)有CPU DNN庫中缺乏深度卷積。NNVM編譯器利用直接生成有效的ARM代碼的優(yōu)勢。
總結(jié)
以上是生活随笔為你收集整理的NNVM Compiler,AI框架的开放式编译器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tengine AIFramework框
- 下一篇: 深度学习编译与优化Deep Learni