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

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

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

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

▲商湯科技副總裁、研究院副院?、通?智能負責?閆俊杰

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

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

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

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

以下為閆俊杰演講實錄整理:

大家好,非常高興有機會跟大家分享過去幾年我們在深度學(xué)習(xí)模型的優(yōu)化和部署上做的工作。首先我們給一個定義:深度學(xué)習(xí)模型生產(chǎn)的流水線。首先從數(shù)據(jù)經(jīng)過訓(xùn)練系統(tǒng),得到一個設(shè)備無關(guān)的模型,這個模型只包含一些參數(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è)備、性能、自動化能力

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

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

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

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

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

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

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

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

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

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

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

模型量化,是一種比較高效的處理方法,與之對應(yīng)的還有其他的如網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化等方案。量化屬于最常用的技術(shù),這里重點分享一下我們在量化上做的工作,主要是為了達到極致的效率。

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

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

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

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

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

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

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

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

基于此,我們有兩種量化選擇,一種是在線量化,需要一些訓(xùn)練進行Finetune,這種情況要求接口盡可能的簡單;第二種是離線量化,不能重新訓(xùn)練,但是可以基于已有數(shù)據(jù)做出調(diào)整,針對這種情況需要低成本,性能盡可能好。針對這兩種選擇,我們提供了統(tǒng)一量化的接口,并把它適配到不同的芯片上,因為不同芯片的量化方案是不一樣的,因此需要適應(yīng)各種后端,這是量化部分的整體設(shè)計。

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

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

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

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

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

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

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

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

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

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

這個事情具體怎么來做?

首先對不同的硬件定義了三個層級:L1、L2、L3。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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