文章轉(zhuǎn)載于: Tengine開發(fā)者社區(qū)
作者:小O妹
算子自動(dòng)優(yōu)化的發(fā)展趨勢(shì)
隨著AI技術(shù)的快速發(fā)展,深度學(xué)習(xí)在各個(gè)領(lǐng)域得到了廣泛應(yīng)用。深度學(xué)習(xí)模型能否成功在終端落地應(yīng)用,滿足產(chǎn)品需求,一個(gè)關(guān)鍵的指標(biāo)就是神經(jīng)網(wǎng)絡(luò)模型的推理性能。于是,一大波算法工程師為了算法的部署轉(zhuǎn)崗算子優(yōu)化工程師。然而,優(yōu)化代碼并不是一件簡單的事,它要求工程師既要精通計(jì)算機(jī)體系架構(gòu),又要熟悉算法的計(jì)算流程,于是,稍微有經(jīng)驗(yàn)的深度學(xué)習(xí)推理優(yōu)化工程師都成了各家公司爭搶的“香餑餑”。人才少,需求多,算子優(yōu)化自動(dòng)化是未來的大趨勢(shì)。
AutoKernel是什么?
最近,一個(gè)致力于降低優(yōu)化門檻,提升優(yōu)化開發(fā)效率的算子自動(dòng)優(yōu)化工具AutoKernel開源了。
AutoKernel是一個(gè)高性能算子自動(dòng)優(yōu)化工具,可以自動(dòng)優(yōu)化調(diào)度策略、生成底層優(yōu)化代碼,大幅減少各硬件芯片算子開發(fā)成本,提升算子優(yōu)化效率,讓工程師更快實(shí)現(xiàn)深度學(xué)習(xí)算法在各硬件芯片上的高性能部署。
AutoKernel的定位
為了方便大家進(jìn)一步理解AutoKernel,我們需要先了解一下深度學(xué)習(xí)推理計(jì)算平臺(tái)的層級(jí)。
深度學(xué)習(xí)的推理計(jì)算平臺(tái)可以分為以下幾個(gè)層級(jí):
1、最上層對(duì)接各個(gè)深度學(xué)習(xí)訓(xùn)練框架訓(xùn)練出來的算法模型(Tensorflow, Caffe, Pytorch, Mxnet等);
2、 Hign-level IR是計(jì)算圖(Computation Graph)層級(jí)。神經(jīng)網(wǎng)絡(luò)可以理解為計(jì)算圖(graph),一個(gè)計(jì)算圖由多個(gè)算子(opterator)節(jié)點(diǎn)組成,這些節(jié)點(diǎn)可以是卷積算子(Convolution), 池化算子(Pooling), 全連接算子(Fc)等。這個(gè)層級(jí)可以進(jìn)行一些圖層級(jí)的優(yōu)化,算子融合,子圖切分的操作等;
3、接下來就是算子(Operator/Kernel)層級(jí)。這個(gè)層級(jí)需要支持每個(gè)硬件后端的每個(gè)算子實(shí)現(xiàn)。目前的高性能算子計(jì)算庫主要是由資深HPC工程師(高性能計(jì)算優(yōu)化工程師)進(jìn)行手工開發(fā)。AutoKernel就是算子層級(jí)的一個(gè)自動(dòng)優(yōu)化工具,自動(dòng)生成適應(yīng)不同后端的算子優(yōu)化代碼;
4、最后是各硬件后端:GPU, ARM CPU, X86 CPU, NPU等。
AutoKernel目前屬于算子層級(jí)的自動(dòng)優(yōu)化工具。
AutoKernel如何實(shí)現(xiàn)部署優(yōu)化?
部署優(yōu)化之前,我們先了解一下AutoKernel的三大特性:
·低門檻: 無需底層優(yōu)化匯編的知識(shí)門檻
·簡單易用: 提供docker環(huán)境,無需安裝環(huán)境,plugin一鍵集成到推理框架
·高效率: 無需手寫優(yōu)化匯編,一鍵生成優(yōu)化代碼,一鍵部署
作為算子層級(jí)的一個(gè)自動(dòng)優(yōu)化工具,AutoKernel支持將自動(dòng)優(yōu)化的算子代碼集成進(jìn)部署推理框架,主要流程分為兩步:
1. 生成:編寫算法描述和調(diào)度策略,生成相應(yīng)后端的優(yōu)化算子代碼;
2. 部署:將生成的優(yōu)化算子代碼通過插件plugin的形式集成進(jìn)推理框架Tengine。
AutoKernel的算子生成模塊(Op Generator)使用了業(yè)界廣泛使用的自動(dòng)代碼生成項(xiàng)目Halide。Halide是一個(gè)DSL(domain specific language) 編程語言,它將算法和硬件后端分離。本模塊輸入Halide語言的算法描述和優(yōu)化調(diào)度策略,指定硬件后端,就可以自動(dòng)生成優(yōu)化代碼。為了減少開發(fā)者配置環(huán)境的遇到問題,AutoKernel提供了docker鏡像,docker里面已經(jīng)安裝好Halide, 并且配置好Halide的Python的API,方便開發(fā)者使用。
AutoKernel的部署模塊Autokernel Plugin是一個(gè)相對(duì)獨(dú)立的插件,只依賴于Tengine的算子頭文件,不依賴于Tengine庫。它實(shí)現(xiàn)了將AutoKernel Generator生成優(yōu)化的算子代碼,以Plugin的形式集成進(jìn)Tengine推理框架中,實(shí)現(xiàn)自動(dòng)優(yōu)化算子的一鍵部署。整個(gè)過程不需要重新編譯Tengine庫,只需要獨(dú)立編譯Plugin的動(dòng)態(tài)庫,在運(yùn)行時(shí)加載Autokernel Plugin的庫,就能調(diào)用自動(dòng)生成的算子實(shí)現(xiàn)。下面的圖展示了使用AutoKernel前后的變化,只需要在運(yùn)行時(shí)添加一行代碼,加載autokernel plugin的動(dòng)態(tài)庫:
AutoKernel還有一個(gè)模塊叫AutoSearch,該模塊通過強(qiáng)化學(xué)習(xí)/機(jī)器學(xué)習(xí)/遺傳算法搜索出相應(yīng)后端的最優(yōu)算子的調(diào)度策略參數(shù)。該模塊目前仍在開發(fā)中。
AutoKernel使用教程
下圖是展示了在Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz的電腦上的優(yōu)化效果,無需手工擼代碼,無需編寫繁雜冗長的底層匯編代碼,只需十幾行簡潔的調(diào)度代碼, 就能性能優(yōu)化200+倍~
推薦閱讀
- YOLO之外的另一選擇,手機(jī)端97FPS的Anchor-Free目標(biāo)檢測(cè)模型NanoDet現(xiàn)已開源~
- AI編譯優(yōu)化--業(yè)務(wù)實(shí)踐
更多Tengine相關(guān)內(nèi)容請(qǐng)關(guān)注Tengine-邊緣AI推理框架專欄。
審核編輯:符乾江
-
人工智能
+關(guān)注
關(guān)注
1806文章
49014瀏覽量
249416 -
AIoT
+關(guān)注
關(guān)注
8文章
1506瀏覽量
32441
發(fā)布評(píng)論請(qǐng)先 登錄
VirtualLab:光柵的優(yōu)化與分析
OptiSystem應(yīng)用:增益平坦濾波器優(yōu)化
英諾達(dá)推出RTL功耗優(yōu)化工具
VirtualLab Fusion應(yīng)用:使用optiSLang進(jìn)行光柵優(yōu)化
VirtualLab Fusion應(yīng)用:非近軸衍射分束器的設(shè)計(jì)與優(yōu)化
構(gòu)建開源OpenVINO?工具套件后,模型優(yōu)化器位于何處呢?
VirtualLab Fusion應(yīng)用:參數(shù)優(yōu)化文檔介紹
FRED應(yīng)用:LED發(fā)光顏色優(yōu)化
FRED應(yīng)用:LED發(fā)光顏色優(yōu)化
華大九天推出PowerMOS版圖自動(dòng)化工具
英飛凌與采埃孚合作優(yōu)化自動(dòng)駕駛軟件
AFE7070在VHF頻段優(yōu)化工作

評(píng)論