當年作為核心SE在MindSpore團隊從0到1構(gòu)建了MindSpore Lite推理引擎瘫筐,到去年知道的信息是現(xiàn)在在華為和榮耀手機上的AI能力都是基于Lite推理引擎蜜暑,調(diào)用次數(shù)10億/天。
所以就基于之前的工作策肝,總結(jié)了《AI推理引擎:核心原理》這個系列的內(nèi)容:從推理系統(tǒng)整體架構(gòu)開始肛捍,然后到模型小型化隐绵、模型壓縮,在真正推理之前需要進行模型轉(zhuǎn)換和圖優(yōu)化拙毫,最后到kernel和runtime優(yōu)化氢橙。還是很有意思的,也花了很多時間恬偷,希望能夠幫助到大家啦:肥帧!袍患!
在講推理引擎/推理系統(tǒng)坦康,又或者是推理部署之前呢,我們回顧下訓練和推理的區(qū)別 _
訓練過程通過設定數(shù)據(jù)處理方式诡延,并設計合適的網(wǎng)絡模型結(jié)構(gòu)以及損失函數(shù)和優(yōu)化算法滞欠,在此基礎上將數(shù)據(jù)集以小批量(mini-batch)反復進行前向計算并計算損失,然后反向計算梯度利用特定的優(yōu)化函數(shù)來更新模型肆良,來使得損失函數(shù)達到最優(yōu)的結(jié)果筛璧。訓練過程最重要的就是梯度的計算和反向傳播。
而推理就是在訓練好的模型結(jié)構(gòu)和參數(shù)基礎上惹恃,做一次前向傳播得到模型輸出的過程夭谤。相對于訓練而言,推理不涉及梯度和損失優(yōu)化巫糙。推理的最終目標是將訓練好的模型部署生產(chǎn)環(huán)境中朗儒。真正讓 AI 能夠運用起來。推理引擎可以將深度學習模型部署到云(Cloud)端或者邊緣(Edge)端参淹,并服務用戶的請求醉锄。模型訓練過程好比是傳統(tǒng)軟件工程中的代碼開發(fā)的過程,而開發(fā)完的代碼勢必要打包浙值,部署給用戶使用恳不,那么推理系統(tǒng)就負責應對模型部署的生命周期中遇到的挑戰(zhàn)和問題靶病。
當推理系統(tǒng)將完成訓練的模型進行部署墅诡,并在服務時還需要考慮設計和提供負載均衡,請求調(diào)度迎膜,加速優(yōu)化负蚊,多副本和生命周期管理等支持神妹。相比深度學習框架等為訓練而設計的系統(tǒng),推理系統(tǒng)不僅關注低延遲家妆,高吞吐鸵荠,可靠性等設計目標,同時受到資源伤极,服務等級協(xié)議(Service-Level Agreement)蛹找,功耗等約束姨伤。本章將圍繞深度學習推理系統(tǒng)的設計,實現(xiàn)與優(yōu)化內(nèi)容展開庸疾,同時還會在最后介紹部署和 MLOps 等內(nèi)容乍楚。
移動端的推理引擎應該挺多的了,google在2017年推出了TF-Lite届慈,騰訊在2017年推出了ncnn徒溪,Apple在2017也推出了CoreML,阿里在2018年推出了MNN金顿,華為2019年推出了MindSpsore-Lite臊泌。距今已經(jīng)過去了快5年的時間,技術上也接近收斂揍拆。下面讓我們一起打開推理引擎的技術吧渠概!
系列內(nèi)容
《推理系統(tǒng)》推理系統(tǒng)是本分享的重點概述,推理就是在訓練好的模型結(jié)構(gòu)和參數(shù)基礎上嫂拴,執(zhí)行前向傳播得到模型輸出的過程播揪。相對于訓練而言,推理不涉及梯度和損失優(yōu)化筒狠。推理的最終目標是將訓練好的模型部署生產(chǎn)環(huán)境中猪狈,真正讓 AI 能夠運用起來。推理引擎可以將深度學習模型部署到云(Cloud)端或者邊緣(Edge)端窟蓝,并服務用戶的請求罪裹。模型訓練過程好比是傳統(tǒng)軟件工程中的代碼開發(fā)的過程,而開發(fā)完的代碼勢必要打包运挫,部署給用戶使用,那么推理系統(tǒng)就負責應對模型部署的生命周期中遇到的挑戰(zhàn)和問題套耕。
《輕量網(wǎng)絡》在端側(cè)推理引擎中谁帕,主要是執(zhí)行輕量的模型結(jié)構(gòu)。主要思想是針對神經(jīng)網(wǎng)絡模型設計更高效的網(wǎng)絡計算方式冯袍,從而使神經(jīng)網(wǎng)絡模型的參數(shù)量減少的同時匈挖,不損失網(wǎng)絡精度,并進一步提高模型的執(zhí)行效率康愤。本節(jié)主要集中介紹模型小型化中需要注意的參數(shù)和指標儡循,接著深入了解CNN經(jīng)典的輕量化模型和Transformer結(jié)構(gòu)的輕量化模型。
《模型壓縮》模型壓縮跟輕量化網(wǎng)絡模型不同征冷,壓縮主要是對輕量化或者非輕量化模型執(zhí)行剪枝择膝、蒸餾、量化等壓縮算法和手段检激,使得模型更加小肴捉、更加輕便腹侣、更加利于執(zhí)行。
《模型轉(zhuǎn)換&優(yōu)化》在這一節(jié)當中分為模型轉(zhuǎn)換和模型優(yōu)化齿穗,在整體架構(gòu)圖中屬于離線模型轉(zhuǎn)換模塊傲隶。一方面,推理引擎需要把不同 AI 框架訓練得到的模型進行轉(zhuǎn)換窃页;另外一方面需要對轉(zhuǎn)換后的模型進行圖優(yōu)化等技術跺株。
《Kernel優(yōu)化》在上層應用或者 AI 網(wǎng)絡模型中,看到的是算子脖卖;但是在推理引擎實際執(zhí)行的是具體的 Kernel乒省,而推理引擎中 CNN 占據(jù)了主要是得執(zhí)行時間,因此其 Kernel 優(yōu)化尤為重要胚嘲。
希望這個系列能夠給大家作儿、朋友們帶來一些些幫助,也希望自己能夠繼續(xù)堅持完成所有內(nèi)容哈馋劈!
希望這個系列能夠給大家攻锰、朋友們帶來一些些幫助,也希望自己能夠繼續(xù)堅持完成所有內(nèi)容哈妓雾!
然這里不是打廣告娶吞,而是希望跟所有關注開源項目的好朋友一起探討研究,共同促進學習討論械姻,也歡迎各位專家和朋友多拍拍磚妒蛇,多提點意見。相關的材料都開源在這里:
1. 推理系統(tǒng)
推理內(nèi)容介紹(video)
什么是推理系統(tǒng)(video)
推理流程全景(video)
推理系統(tǒng)架構(gòu)(video)
(上) 推理引擎架構(gòu)(video)
(下) 推理引擎架構(gòu)(video)
2. 模型小型化
3. 模型壓縮
壓縮四件套介紹(video)
低比特量化原理(video)
感知量化訓練 QAT(video)
訓練后量化PTQ與部署(video)
模型剪枝(video)
(上) 知識蒸餾原理(video)
(下) 知識蒸餾算法(video)
4. 模型轉(zhuǎn)換
5. 圖優(yōu)化模塊
計算圖優(yōu)化策略(video)
常量折疊&冗余節(jié)點消除(video)
算子融合/替換/前移(video)
數(shù)據(jù)布局轉(zhuǎn)換&內(nèi)存優(yōu)化(video)
6. Kernel優(yōu)化
Kernel優(yōu)化架構(gòu)(video)
卷積操作基礎原理(video)
Im2Col算法(video)
Winograd算法(video)
QNNPack算法(video)
推理內(nèi)存布局(video)
完結(jié)楷拳,撒花绣夺!