智東西(公眾號(hào):zhidxcom)
編輯 | 孫悅

智東西6月5日消息,近日GTIC 2021嵌入式AI創(chuàng)新峰會(huì)在北京圓滿收官!在這場(chǎng)全天座無虛席、全網(wǎng)直播觀看人數(shù)逾150萬次的高規(guī)格產(chǎn)業(yè)峰會(huì)上,來自產(chǎn)業(yè)鏈上下游的16位大佬共聚一堂,圍繞嵌入式AI的軟硬件生態(tài)創(chuàng)新、家居AIoT、移動(dòng)機(jī)器人和工業(yè)制造產(chǎn)業(yè)4大版塊地圖,帶來了深入淺出的分享。

會(huì)上,商湯科技副總裁、通用智能技術(shù)負(fù)責(zé)人閆俊杰博士發(fā)表了《極致靈活的深度學(xué)習(xí)模型優(yōu)化與部署》的主題演講。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

▲商湯科技副總裁、研究院副院?、通?智能負(fù)責(zé)?閆俊杰

商湯推出Spring.NART模型部署框架,支持代碼級(jí)別、算子級(jí)別及網(wǎng)絡(luò)級(jí)別等不同的接入級(jí)別,以通過統(tǒng)一的接入框架適配多種深度學(xué)習(xí)芯片。據(jù)稱,該框架支持16類不同硬件設(shè)備,能保證算法方案靈活跑在各類設(shè)備上。

同時(shí),商湯通過編譯優(yōu)化技術(shù)及一套量化模型生產(chǎn)工具,使模型在Arm框架和英偉達(dá)GPU上都能實(shí)現(xiàn)低bit量化;同時(shí),除了系統(tǒng)層面的優(yōu)化,商湯今年還提出了媲美在線量化的離線量化算法BRECQ,首次將4bit離線量化的效果做到接近量化訓(xùn)練,以此實(shí)現(xiàn)高效的模型自動(dòng)化部署。

另外,在軟硬件協(xié)同方面,商湯兼顧結(jié)構(gòu)、推理庫和硬件,建立了一個(gè)計(jì)算數(shù)據(jù)庫Spring.GPDB(Graph Performance DataBase),基于這一軟硬件協(xié)同的數(shù)據(jù)庫對(duì)已有模型做診斷并改進(jìn),使模型得到較好的精度和速度提升。

總的來說,針對(duì)硬件多樣化、模型壓縮、模型自動(dòng)化部署三大挑戰(zhàn),商湯試圖讓深度學(xué)習(xí)模型在嵌入式設(shè)備上靈活優(yōu)化和部署。

以下為閆俊杰演講實(shí)錄整理:

大家好,非常高興有機(jī)會(huì)跟大家分享過去幾年我們?cè)谏疃葘W(xué)習(xí)模型的優(yōu)化和部署上做的工作。首先我們給一個(gè)定義:深度學(xué)習(xí)模型生產(chǎn)的流水線。首先從數(shù)據(jù)經(jīng)過訓(xùn)練系統(tǒng),得到一個(gè)設(shè)備無關(guān)的模型,這個(gè)模型只包含一些參數(shù)和網(wǎng)絡(luò)結(jié)構(gòu)。接下來需要通過部署系統(tǒng)和硬件做一些適配,得到設(shè)備綁定的模型。最后加上深度學(xué)習(xí)算法之外的串聯(lián),就可以得到在各種不同設(shè)備如服務(wù)器、邊緣設(shè)備、AIoT設(shè)備上來使用的完整解決方案。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

一、深度學(xué)習(xí)模型的三大挑戰(zhàn):設(shè)備、性能、自動(dòng)化能力

這里的假設(shè)是我們得到了一個(gè)模型,這個(gè)模型可能用在各種各樣的設(shè)備上,包含任意的芯片。我們需要有一套好的方案,讓這個(gè)模型非常靈活地部署在任意的芯片上,同時(shí)還要有較高的部署效率。那這里面有哪些挑戰(zhàn)?經(jīng)過過去幾年的實(shí)踐,我們總結(jié)主要有三點(diǎn)。

(1)支持多款硬件設(shè)備。商湯科技從2017年開始,首次把深度學(xué)習(xí)的人臉檢測(cè)放到相機(jī)上。當(dāng)時(shí)芯片比較少,邊緣上只有Arm可以用,沒有NPU。隨著近幾年的發(fā)展,在邊緣設(shè)備上可用的芯片越來越多,同時(shí)也出現(xiàn)了另一個(gè)問題:怎么讓同一模型能夠靈活地配適于任意的設(shè)備上?這是我們需要解決的第一個(gè)挑戰(zhàn)。

(2)其次是高效能。這一點(diǎn)在邊緣設(shè)備上尤其明顯,邊緣設(shè)備的功耗很低,計(jì)算能力沒有那么高。怎么能在邊緣設(shè)備上發(fā)揮極致的性能?這就需要進(jìn)一步進(jìn)行量化或者稀疏的工作。

(3)最后是自動(dòng)化。如果只需要部署一個(gè)模型,這沒有什么挑戰(zhàn),實(shí)在不行手工來調(diào)就好了。但是在工業(yè)化的時(shí)代,比如像商湯這樣的公司每天需要產(chǎn)出幾百個(gè)模型,顯然不可能全部靠人來手工部署,我們需要有一套自動(dòng)化的系統(tǒng)。而這套自動(dòng)化系統(tǒng)需要能夠處理各種hard case和corner case,因此面臨很多新的挑戰(zhàn)。

首先給大家介紹我們?cè)趺唇鉀Q多設(shè)備的問題?假如設(shè)備可控,基于代碼生成的方案是最簡(jiǎn)單的,比如TVM,類似這樣的技術(shù)提供了非常靈活的框架。現(xiàn)在大部分能用的芯片一般都會(huì)提供網(wǎng)絡(luò)編譯器,但是網(wǎng)絡(luò)編譯器只提供網(wǎng)絡(luò)級(jí)別的支持,不會(huì)提供到指令級(jí)別的支持。除了Arm或者英偉達(dá)非常成熟的硬件能夠提供指令級(jí),大部分國產(chǎn)化芯片屬于網(wǎng)絡(luò)級(jí)別的編譯器,完全基于代碼生成的方案在實(shí)際中對(duì)大多數(shù)芯片很難走得通。

商湯主要使用的是其他廠商的芯片,過去幾年我們適配了近20種芯片,可以發(fā)現(xiàn)不同芯片所提供的接入級(jí)別非常不一樣。有代碼級(jí)別,比如Arm、X86、cuda;還有算子級(jí)別,比如cuDNN計(jì)算庫;還有提供網(wǎng)絡(luò)級(jí)別的芯片,比如TensorRT、華為的一些芯片等。我們需要一套系統(tǒng)能夠靈活接入代碼級(jí)別、網(wǎng)絡(luò)級(jí)別、算子級(jí)別,只有這樣才能實(shí)現(xiàn)統(tǒng)一的自由框架。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

這套系統(tǒng)在我們內(nèi)部命名為NART,其全稱是Nart?is?Not?A?Runtime。NART主要包含兩部分:一部分是編譯器、一部分是運(yùn)行時(shí)。它主要有如下特點(diǎn):第一點(diǎn):多算子級(jí)別。代碼、算子、網(wǎng)絡(luò)都可以是一個(gè)算子。第二點(diǎn):編譯器和運(yùn)行時(shí)解藕。運(yùn)行時(shí)主要是包含大量已實(shí)現(xiàn)好的算子,現(xiàn)在已經(jīng)有上百種算子。編譯器部分主要是處理一些量化校準(zhǔn)、圖優(yōu)化和格式轉(zhuǎn)換相關(guān)的問題。第三點(diǎn):混合運(yùn)行時(shí)。這一點(diǎn)在工業(yè)級(jí)使用中非常重要,一方面可以將NPU上不支持的算子靈活回退到次級(jí)設(shè)備。比如在華為海思的處理器上,NNIE不能支持的算子可以直接回退到Arm上處理,實(shí)現(xiàn)非常靈活的接入,不需要等著芯片廠商的排期。并且在實(shí)操過程中,我們發(fā)現(xiàn)這樣的處理方式既簡(jiǎn)單又高效,同時(shí)整個(gè)生產(chǎn)周期也非??臁A硪环矫婊旌线\(yùn)行時(shí)便于實(shí)現(xiàn)混合精度,在不同精度的算子間自動(dòng)切換,保證模型的效果。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

現(xiàn)在我們已經(jīng)支持了超過16類不同的硬件設(shè)備,大家看到的市場(chǎng)上主流的硬件都使用這一套框架來支持。這保證了商湯的算法方案可以靈活的跑在任意一個(gè)市場(chǎng)上已有的設(shè)備上。

二、實(shí)現(xiàn)低bit量化,提高自動(dòng)化部署效率

模型量化,是一種比較高效的處理方法,與之對(duì)應(yīng)的還有其他的如網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化等方案。量化屬于最常用的技術(shù),這里重點(diǎn)分享一下我們?cè)诹炕献龅墓ぷ?,主要是為了達(dá)到極致的效率。

現(xiàn)在INT8的量化很常用,在絕大多數(shù)芯片上都支持,效率確實(shí)有所提升。但問題是隨著算法的進(jìn)展,它可以做到比8bit更低的4bit,但是卻很少能支持8bit以下的計(jì)算方案。

為了解決這個(gè)問題,我們做了很多研究,在現(xiàn)代體系結(jié)構(gòu)下首次實(shí)現(xiàn)極低比特量化,并且能夠帶來很好的效率提升。

簡(jiǎn)單來說我們實(shí)現(xiàn)了2個(gè)平臺(tái)的極低比特模型部署,一個(gè)在Arm上,一個(gè)在GPU上。在Arm上使用5-8bit或1-4bit卷積都是可以的。通過對(duì)比ResNet18中各層的性能,可以發(fā)現(xiàn)大部分層的提升都是非常明顯的。在英偉達(dá)的GPU上,也針對(duì)tensorecore實(shí)現(xiàn)了超低比特的優(yōu)化。從右下角的圖表可以看出,在batch=1的情況下對(duì)于大型網(wǎng)絡(luò)提速非常明顯。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

在量化這塊我們還觀察到一個(gè)狀態(tài),現(xiàn)在很多廠商會(huì)提供一些標(biāo)準(zhǔn)的庫比如英偉達(dá)的TensorRT。但問題是對(duì)于很多新的模型,他們提速不明顯,更新會(huì)比較慢。舉個(gè)例子,最近在計(jì)算機(jī)視覺領(lǐng)域非常火的ViT(Visual Transformer)。我們發(fā)現(xiàn),對(duì)于ViT現(xiàn)有的方案比如TensorRT/TVM,使用8bit不會(huì)有效率的提升。而我們通過編譯優(yōu)化,在ViT上實(shí)現(xiàn)了相比TVM快4.6倍,相比TRT快1.5倍的速度提升。關(guān)于這一塊我們做了一些社區(qū)貢獻(xiàn),相關(guān)的提交已經(jīng)被社區(qū)合并。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

將量化做到工業(yè)化,不光需要使速度達(dá)到極致,而且需要有一套生產(chǎn)工具。

因?yàn)槊刻焯幚淼膯栴}實(shí)在太多了,為了滿足工業(yè)級(jí)的量化需求,我們實(shí)現(xiàn)了一套統(tǒng)一的生產(chǎn)工具,它的輸入是不同類型的模型,包括學(xué)術(shù)界大家都知道的網(wǎng)絡(luò)如ResNet,還有大量商湯自研的網(wǎng)絡(luò)結(jié)構(gòu)。

基于此,我們有兩種量化選擇,一種是在線量化,需要一些訓(xùn)練進(jìn)行Finetune,這種情況要求接口盡可能的簡(jiǎn)單;第二種是離線量化,不能重新訓(xùn)練,但是可以基于已有數(shù)據(jù)做出調(diào)整,針對(duì)這種情況需要低成本,性能盡可能好。針對(duì)這兩種選擇,我們提供了統(tǒng)一量化的接口,并把它適配到不同的芯片上,因?yàn)椴煌酒牧炕桨甘遣灰粯拥模虼诵枰m應(yīng)各種后端,這是量化部分的整體設(shè)計(jì)。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

除了系統(tǒng)層面優(yōu)化之外,我們今年在ICLR上提出了BRECQ算法,這個(gè)算法是我們目前已知的第一個(gè)能夠?qū)崿F(xiàn)媲美在線量化精度效果的離線量化算法;算法的原理也比較簡(jiǎn)單,之前大家優(yōu)化一層,我們擴(kuò)展到了一個(gè)塊。

通過很多實(shí)驗(yàn)和理論,我們證明了塊是一個(gè)更好的粒度。同時(shí)除了確定量化參數(shù),也可以對(duì)權(quán)重進(jìn)行微調(diào),因此通過塊的設(shè)置和更好的權(quán)重調(diào)整,實(shí)現(xiàn)更優(yōu)效果。這個(gè)算法在內(nèi)部走通之后經(jīng)過了大量驗(yàn)證,證明了離線量化可以很好的保證精度。這是我們認(rèn)為比較有用的一個(gè)算法,因此給大家進(jìn)行一個(gè)簡(jiǎn)單的介紹。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

此外,各家廠商的硬件采用了非常不同的量化方案。包括gpu的、dsp的、arm的以及一些國產(chǎn)化芯片。這對(duì)算法提出了很大挑戰(zhàn),但是通過我們?cè)谒惴ㄉ系摹⑾到y(tǒng)上的、架構(gòu)設(shè)計(jì)上的工作,可以很好的以一套框架打通多種硬件的量化模型生產(chǎn)。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

三、兼顧結(jié)構(gòu)、推理庫和硬件,完善軟硬件協(xié)同

最后再給大家介紹一下我們過去幾年實(shí)踐總結(jié)出來的經(jīng)驗(yàn):做軟硬件的協(xié)同。

但是這個(gè)軟硬件協(xié)同不是設(shè)計(jì)芯片時(shí)需要考慮算法,我們認(rèn)為的軟硬件協(xié)同主要從以下三個(gè)方面考慮:我們內(nèi)部支撐各種各樣的芯片,大量的推理庫,還有非常多網(wǎng)絡(luò)結(jié)構(gòu)。我們結(jié)合結(jié)構(gòu)、推理庫還有硬件,這三方面建立一個(gè)龐大的數(shù)據(jù)庫,分析三者之間的關(guān)系。

基于這樣的數(shù)據(jù)庫,我們能夠方便、快速地找到在一個(gè)特定的硬件上最優(yōu)的網(wǎng)絡(luò)結(jié)構(gòu)是什么樣的;或者說在一個(gè)特定的硬件上,針對(duì)一個(gè)推理庫,最優(yōu)的結(jié)構(gòu)應(yīng)該怎么設(shè)計(jì)?這些都對(duì)我們的實(shí)際模型生產(chǎn),帶來非常多的幫助。

這個(gè)事情具體怎么來做?

首先對(duì)不同的硬件定義了三個(gè)層級(jí):L1、L2、L3。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

L1指的是黑盒硬件,我們需要網(wǎng)絡(luò)結(jié)構(gòu)能夠來overfit硬件特性,針對(duì)黑盒硬件找到最好的網(wǎng)絡(luò)硬件。

L2指的是開放式指令集,芯片的指令集是開放的,因此可以用網(wǎng)絡(luò)結(jié)構(gòu)+軟件實(shí)現(xiàn)來overfit具體硬件。

L3指的是整個(gè)硬件的架構(gòu)完全開放,針對(duì)這樣一種設(shè)置可以做全鏈路耦合的方式,從結(jié)構(gòu)、推理、硬件一起推動(dòng)。商湯作為一家算法為核心的公司,我們同時(shí)支持三種層級(jí)的軟硬件協(xié)同優(yōu)化。

經(jīng)過商湯歷史上訓(xùn)練的超過20萬個(gè)模型,累計(jì)有10萬個(gè)不同的網(wǎng)絡(luò)結(jié)構(gòu),同時(shí)也支持11種不同的硬件。我們基于這些信息建了一個(gè)數(shù)據(jù)庫。有了這個(gè)數(shù)據(jù)庫之后,針對(duì)一個(gè)新的網(wǎng)絡(luò)結(jié)構(gòu)可以快速地通過實(shí)測(cè)查詢或者算法預(yù)測(cè)的方式,得到非常高效的計(jì)算數(shù)據(jù)庫。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

基于這樣的數(shù)據(jù)庫,我們可以針對(duì)已經(jīng)訓(xùn)練好的模型幫它做各種診斷,使它推導(dǎo)出來的模型綜合考慮到精度、速度、硬件偏好和選擇程度等因素后得到最優(yōu)的組合。這樣一個(gè)組合在實(shí)際生產(chǎn)中,它的精度將會(huì)有很大提升。

比如ModelA和Model Pro,ModelA是靠研究員手工設(shè)計(jì)的結(jié)構(gòu),它的Flops、參數(shù)量、訪存量如圖,通過軟硬件協(xié)同的數(shù)據(jù)庫優(yōu)化,可以推導(dǎo)出ModelA Pro,它的Flops、參數(shù)量、訪存量都比ModelA大,但速度比ModelA要小。之前網(wǎng)絡(luò)設(shè)計(jì)是依賴于人的經(jīng)驗(yàn),現(xiàn)在變成依賴于數(shù)據(jù)庫和算法,通過數(shù)據(jù)庫和算法幫助研究員設(shè)計(jì)出更好的網(wǎng)絡(luò)結(jié)構(gòu)。當(dāng)我們訓(xùn)練出的模型到了十萬量級(jí)以后,它能帶來非常好的提升。

公司內(nèi)部每天有600多個(gè)業(yè)務(wù)員部署模型,最開始有些人工靠人力來支持訓(xùn)練部署模型。

后面由于我們的模型越來越多,人力支撐不上,最終衍生出一套端到端的SaaS解決方案。它的核心是做端到端的模型部署,把格式的轉(zhuǎn)換、量化以及網(wǎng)絡(luò)級(jí)的優(yōu)化混到一起,實(shí)現(xiàn)一次模型上傳、多平臺(tái)部署測(cè)試、一次性搞定。

這套系統(tǒng)在內(nèi)部叫Adela系統(tǒng),現(xiàn)在每天支持600多名公司內(nèi)部用戶,支持商湯目前超過90%的內(nèi)部模型發(fā)布。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

這套服務(wù)架構(gòu)分成四層,第一層設(shè)備層,這一層不太可控,主要以支持外部任意設(shè)備為主。

第二層引擎層,我們會(huì)接入低比特的算子,網(wǎng)絡(luò)運(yùn)行時(shí),支持混合運(yùn)行,然后會(huì)做很多圖切分、格式轉(zhuǎn)換、靜態(tài)調(diào)度。

通過引擎層上面做一些封裝,封裝成模型編譯部署接口、測(cè)速接口,在上面提供很多算法:包括在線量化、離線量化,還包括速度的預(yù)測(cè)、網(wǎng)絡(luò)結(jié)構(gòu)的搜索、圖變換的優(yōu)化等等。

再往上到了服務(wù)層,從原始模型文件到端模型到量化模型再到速度和精度更優(yōu)的模型,提供非常統(tǒng)一的框架。提供統(tǒng)一框架之后,通過一個(gè)命令行或者網(wǎng)頁上簡(jiǎn)單的交互,就可以實(shí)現(xiàn)全自動(dòng)的業(yè)務(wù)模型部署。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

為了進(jìn)一步促進(jìn)學(xué)術(shù)研究跟工業(yè)界的結(jié)合,我們目前也在計(jì)劃把兩個(gè)核心的服務(wù)對(duì)外開放,一個(gè)是模型的自動(dòng)量化,另一個(gè)是模型在特定硬件上的優(yōu)化建議。

量化上包含了目前我們認(rèn)為較好的學(xué)術(shù)界算法,以及自己研發(fā)的使工業(yè)界模型量化更加落地的算法,跟現(xiàn)在市面上主流推理引擎做了對(duì)接,適配大部分深度學(xué)習(xí)的硬件和后端,這樣可以非常方便研究員驗(yàn)證這個(gè)算法是不是真的可以實(shí)際部署,也方便我們的硬件廠商來進(jìn)行最新算法的跟進(jìn)工作。

同時(shí)把計(jì)算數(shù)據(jù)庫GPDB服務(wù)的能力逐步提供出來,不僅方便研究員驗(yàn)證結(jié)構(gòu)在實(shí)際設(shè)備上的速度,還方便硬件廠商來尋找各種性能的缺陷和瓶頸。

目前我們?cè)跍?zhǔn)備一些開源的流程,希望更多人能夠得到相關(guān)技術(shù)的收益。我們有一個(gè)專門負(fù)責(zé)這部分工作的內(nèi)部研究團(tuán)隊(duì)叫工具鏈團(tuán)隊(duì),平常也會(huì)寫一些專欄,歡迎大家關(guān)注。

商湯科技閆俊杰:用軟硬件協(xié)同妙招,讓深度學(xué)習(xí)模型部署更靈活高效

以上是閆俊杰演講內(nèi)容的完整整理。