文章轉(zhuǎn)載于: Tengine開(kāi)發(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)化代碼并不是一件簡(jiǎn)單的事,它要求工程師既要精通計(jì)算機(jī)體系架構(gòu),又要熟悉算法的計(jì)算流程,于是,稍微有經(jīng)驗(yàn)的深度學(xué)習(xí)推理優(yōu)化工程師都成了各家公司爭(zhēng)搶的“香餑餑”。人才少,需求多,算子優(yōu)化自動(dòng)化是未來(lái)的大趨勢(shì)。
AutoKernel是什么?
最近,一個(gè)致力于降低優(yōu)化門(mén)檻,提升優(yōu)化開(kāi)發(fā)效率的算子自動(dòng)優(yōu)化工具AutoKernel開(kāi)源了。
AutoKernel是一個(gè)高性能算子自動(dòng)優(yōu)化工具,可以自動(dòng)優(yōu)化調(diào)度策略、生成底層優(yōu)化代碼,大幅減少各硬件芯片算子開(kāi)發(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)練出來(lái)的算法模型(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、接下來(lái)就是算子(Operator/Kernel)層級(jí)。這個(gè)層級(jí)需要支持每個(gè)硬件后端的每個(gè)算子實(shí)現(xiàn)。目前的高性能算子計(jì)算庫(kù)主要是由資深HPC工程師(高性能計(jì)算優(yōu)化工程師)進(jìn)行手工開(kāi)發(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的三大特性:
·低門(mén)檻: 無(wú)需底層優(yōu)化匯編的知識(shí)門(mén)檻
·簡(jiǎn)單易用: 提供docker環(huán)境,無(wú)需安裝環(huán)境,plugin一鍵集成到推理框架
·高效率: 無(wú)需手寫(xiě)優(yōu)化匯編,一鍵生成優(yōu)化代碼,一鍵部署
作為算子層級(jí)的一個(gè)自動(dòng)優(yōu)化工具,AutoKernel支持將自動(dòng)優(yōu)化的算子代碼集成進(jìn)部署推理框架,主要流程分為兩步:
1. 生成:編寫(xiě)算法描述和調(diào)度策略,生成相應(yīng)后端的優(yōu)化算子代碼;
2. 部署:將生成的優(yōu)化算子代碼通過(guò)插件plugin的形式集成進(jìn)推理框架Tengine。
AutoKernel的算子生成模塊(Op Generator)使用了業(yè)界廣泛使用的自動(dòng)代碼生成項(xiàng)目Halide。Halide是一個(gè)DSL(domain specific language) 編程語(yǔ)言,它將算法和硬件后端分離。本模塊輸入Halide語(yǔ)言的算法描述和優(yōu)化調(diào)度策略,指定硬件后端,就可以自動(dòng)生成優(yōu)化代碼。為了減少開(kāi)發(fā)者配置環(huán)境的遇到問(wèn)題,AutoKernel提供了docker鏡像,docker里面已經(jīng)安裝好Halide, 并且配置好Halide的Python的API,方便開(kāi)發(fā)者使用。
AutoKernel的部署模塊Autokernel Plugin是一個(gè)相對(duì)獨(dú)立的插件,只依賴于Tengine的算子頭文件,不依賴于Tengine庫(kù)。它實(shí)現(xiàn)了將AutoKernel Generator生成優(yōu)化的算子代碼,以Plugin的形式集成進(jìn)Tengine推理框架中,實(shí)現(xiàn)自動(dòng)優(yōu)化算子的一鍵部署。整個(gè)過(guò)程不需要重新編譯Tengine庫(kù),只需要獨(dú)立編譯Plugin的動(dòng)態(tài)庫(kù),在運(yùn)行時(shí)加載Autokernel Plugin的庫(kù),就能調(diào)用自動(dòng)生成的算子實(shí)現(xiàn)。下面的圖展示了使用AutoKernel前后的變化,只需要在運(yùn)行時(shí)添加一行代碼,加載autokernel plugin的動(dòng)態(tài)庫(kù):
AutoKernel還有一個(gè)模塊叫AutoSearch,該模塊通過(guò)強(qiáng)化學(xué)習(xí)/機(jī)器學(xué)習(xí)/遺傳算法搜索出相應(yīng)后端的最優(yōu)算子的調(diào)度策略參數(shù)。該模塊目前仍在開(kāi)發(fā)中。
AutoKernel使用教程
下圖是展示了在Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz的電腦上的優(yōu)化效果,無(wú)需手工擼代碼,無(wú)需編寫(xiě)繁雜冗長(zhǎng)的底層匯編代碼,只需十幾行簡(jiǎn)潔的調(diào)度代碼, 就能性能優(yōu)化200+倍~
推薦閱讀
- YOLO之外的另一選擇,手機(jī)端97FPS的Anchor-Free目標(biāo)檢測(cè)模型NanoDet現(xiàn)已開(kāi)源~
- AI編譯優(yōu)化--業(yè)務(wù)實(shí)踐
更多Tengine相關(guān)內(nèi)容請(qǐng)關(guān)注Tengine-邊緣AI推理框架專欄。
審核編輯:符乾江
-
人工智能
+關(guān)注
關(guān)注
1796文章
47818瀏覽量
240610 -
AIoT
+關(guān)注
關(guān)注
8文章
1424瀏覽量
30988
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
FRED應(yīng)用:LED發(fā)光顏色優(yōu)化
FRED應(yīng)用:LED發(fā)光顏色優(yōu)化
華大九天推出PowerMOS版圖自動(dòng)化工具
使用Arthas火焰圖工具的Java應(yīng)用性能分析和優(yōu)化經(jīng)驗(yàn)
![使用Arthas火焰圖<b class='flag-5'>工具</b>的Java應(yīng)用性能分析和<b class='flag-5'>優(yōu)化</b>經(jīng)驗(yàn)](https://file1.elecfans.com/web1/M00/F3/C7/wKgaoWce6TyAPkMmAABCxA9qhTQ955.png)
英飛凌與采埃孚合作優(yōu)化自動(dòng)駕駛軟件
AFE7070在VHF頻段優(yōu)化工作
![AFE7070在VHF頻段<b class='flag-5'>優(yōu)化工</b>作](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于 DSP5509 進(jìn)行數(shù)字圖像處理中 Sobel 算子邊緣檢測(cè)的硬件連接電路圖
優(yōu)化 FPGA HLS 設(shè)計(jì)
傾斜光柵的魯棒性優(yōu)化
神經(jīng)網(wǎng)絡(luò)優(yōu)化算法有哪些
寶塔面板Docker一鍵安裝:部署GPTAcademic,開(kāi)發(fā)私有GPT學(xué)術(shù)優(yōu)化工具
![寶塔面板Docker一鍵安裝:部署GPTAcademic,開(kāi)發(fā)私有GPT學(xué)術(shù)<b class='flag-5'>優(yōu)化工具</b>](https://file1.elecfans.com//web2/M00/F7/00/wKgZomaDetqAKW_2AAMDjihaz70243.png)
OpenHarmony之開(kāi)機(jī)優(yōu)化
ClickHouse內(nèi)幕(3)基于索引的查詢優(yōu)化
![ClickHouse內(nèi)幕(3)基于索引的查詢<b class='flag-5'>優(yōu)化</b>](https://file1.elecfans.com//web2/M00/ED/87/wKgaomZnupqAPI15AAB2MeV7qvk592.png)
深度學(xué)習(xí)編譯工具鏈中的核心——圖優(yōu)化
![深度學(xué)習(xí)編譯<b class='flag-5'>工具</b>鏈中的核心——圖<b class='flag-5'>優(yōu)化</b>](https://file1.elecfans.com/web2/M00/E6/DB/wKgaomZFpayACW6VAAXaLP8hLwM545.png)
評(píng)論