商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

智東西(公眾號:zhidxcom)

編輯 | 孫悅

智東西6月5日訊息,近日GTIC 2021嵌入式AI創新峰會在北京圓滿收官!在這場全天座無虛席、全網直播觀看人數逾150萬次的高規格AI晶片產業峰會上,來自產業鏈上下游的16位大佬共聚一堂,圍繞嵌入式AI的軟硬體生態創新、家居AIoT、移動機器人和工業製造產業4大版塊地圖,帶來了深入淺出的分享。

會上,商湯科技副總裁、通用智慧技術負責人閆俊傑博士發表了《極致靈活的深度學習模型最佳化與部署》的主題演講。

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

▲商湯科技副總裁、研究院副院⻓、通⽤智慧負責⼈閆俊傑

商湯推出Spring。NART模型部署框架,支援程式碼級別、運算元級別及網路級別等不同的接入級別,以透過統一的接入框架適配多種深度學習晶片。據稱,該框架支援16類不同硬體裝置,能保證演算法方案靈活跑在各類裝置上。

同時,商湯透過編譯最佳化技術及一套量化模型生產工具,使模型在Arm框架和英偉達GPU上都能實現低bit量化;同時,除了系統層面的最佳化,商湯今年還提出了媲美線上量化的離線量化演算法BRECQ,首次將4bit離線量化的效果做到接近量化訓練,以此實現高效的模型自動化部署。

另外,在軟硬體協同方面,商湯兼顧結構、推理庫和硬體,建立了一個計算資料庫Spring。GPDB(Graph Performance DataBase),基於這一軟硬體協同的資料庫對已有模型做診斷並改進,使模型得到較好的精度和速度提升。

總的來說,針對硬體多樣化、模型壓縮、模型自動化部署三大挑戰,商湯試圖讓深度學習模型在嵌入式裝置上靈活最佳化和部署。

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

大家好,非常高興有機會跟大家分享過去幾年我們在深度學習模型的最佳化和部署上做的工作。首先我們給一個定義:深度學習模型生產的流水線。首先從資料經過訓練系統,得到一個裝置無關的模型,這個模型只包含一些引數和網路結構。接下來需要透過部署系統和硬體做一些適配,得到裝置繫結的模型。最後加上深度學習演算法之外的串聯,就可以得到在各種不同裝置如伺服器、邊緣裝置、AIoT裝置上來使用的完整解決方案。

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

一、深度學習模型的三大挑戰:裝置、效能、自動化能力

這裡的假設是我們得到了一個模型,這個模型可能用在各種各樣的裝置上,包含任意的晶片。我們需要有一套好的方案,讓這個模型非常靈活地部署在任意的晶片上,同時還要有較高的部署效率。那這裡面有哪些挑戰?經過過去幾年的實踐,我們總結主要有三點。

(1)支援多款硬體裝置。商湯科技從2017年開始,首次把深度學習的人臉檢測放到相機上。當時晶片比較少,邊緣上只有Arm可以用,沒有NPU。隨著近幾年的發展,在邊緣裝置上可用的晶片越來越多,同時也出現了另一個問題:怎麼讓同一模型能夠靈活地配適於任意的裝置上?這是我們需要解決的第一個挑戰。

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

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

首先給大家介紹我們怎麼解決多裝置的問題?假如裝置可控,基於程式碼生成的方案是最簡單的,比如TVM,類似這樣的技術提供了非常靈活的框架。現在大部分能用的晶片一般都會提供網路編譯器,但是網路編譯器只提供網路級別的支援,不會提供到指令級別的支援。除了Arm或者英偉達非常成熟的硬體能夠提供指令級,大部分國產化晶片屬於網路級別的編譯器,完全基於程式碼生成的方案在實際中對大多數晶片很難走得通。

商湯主要使用的是其他廠商的晶片,過去幾年我們適配了近20種晶片,可以發現不同晶片所提供的接入級別非常不一樣。有程式碼級別,比如Arm、X86、cuda;還有運算元級別,比如cuDNN計算庫;還有提供網路級別的晶片,比如TensorRT、華為的一些晶片等。我們需要一套系統能夠靈活接入程式碼級別、網路級別、運算元級別,只有這樣才能實現統一的自由框架。

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

這套系統在我們內部命名為NART,其全稱是Nart is Not A Runtime。NART主要包含兩部分:一部分是編譯器、一部分是執行時。它主要有如下特點:第一點:多運算元級別。程式碼、運算元、網路都可以是一個運算元。第二點:編譯器和執行時解藕。執行時主要是包含大量已實現好的運算元,現在已經有上百種運算元。編譯器部分主要是處理一些量化校準、圖最佳化和格式轉換相關的問題。第三點:混合執行時。這一點在工業級使用中非常重要,一方面可以將NPU上不支援的運算元靈活回退到次級裝置。比如在華為海思的處理器上,NNIE不能支援的運算元可以直接回退到Arm上處理,實現非常靈活的接入,不需要等著晶片廠商的排期。並且在實操過程中,我們發現這樣的處理方式既簡單又高效,同時整個生產週期也非常快。另一方面混合執行時便於實現混合精度,在不同精度的運算元間自動切換,保證模型的效果。

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

現在我們已經支援了超過16類不同的硬體裝置,大家看到的市場上主流的硬體都使用這一套框架來支援。這保證了商湯的演算法方案可以靈活的跑在任意一個市場上已有的裝置上。

二、實現低

bit量化,提高自動化部署效率

模型量化,是一種比較高效的處理方法,與之對應的還有其他的如網路結構最佳化等方案。量化屬於最常用的技術,這裡重點分享一下我們在量化上做的工作,主要是為了達到極致的效率。

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

為了解決這個問題,我們做了很多研究,在現代體系結構下首次實現極低位元量化,並且能夠帶來很好的效率提升。

簡單來說我們實現了2個平臺的極低位元模型部署,一個在Arm上,一個在GPU上。在Arm上使用5-8bit或1-4bit卷積都是可以的。透過對比ResNet18中各層的效能,可以發現大部分層的提升都是非常明顯的。在英偉達的GPU上,也針對tensorecore實現了超低位元的最佳化。從右下角的圖表可以看出,在batch=1的情況下對於大型網路提速非常明顯。

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

在量化這塊我們還觀察到一個狀態,現在很多廠商會提供一些標準的庫比如英偉達的TensorRT。但問題是對於很多新的模型,他們提速不明顯,更新會比較慢。舉個例子,最近在計算機視覺領域非常火的ViT(Visual Transformer)。我們發現,對於ViT現有的方案比如TensorRT/TVM,使用8bit不會有效率的提升。而我們透過編譯最佳化,在ViT上實現了相比TVM快4。6倍,相比TRT快1。5倍的速度提升。關於這一塊我們做了一些社群貢獻,相關的提交已經被社群合併。

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

將量化做到工業化,不光需要使速度達到極致,而且需要有一套生產工具。

因為每天處理的問題實在太多了,為了滿足工業級的量化需求,我們實現了一套統一的生產工具,它的輸入是不同型別的模型,包括學術界大家都知道的網路如ResNet,還有大量商湯自研的網路結構。

基於此,我們有兩種量化選擇,一種是線上量化,需要一些訓練進行Finetune,這種情況要求介面儘可能的簡單;第二種是離線量化,不能重新訓練,但是可以基於已有資料做出調整,針對這種情況需要低成本,效能儘可能好。針對這兩種選擇,我們提供了統一量化的介面,並把它適配到不同的晶片上,因為不同晶片的量化方案是不一樣的,因此需要適應各種後端,這是量化部分的整體設計。

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

除了系統層面最佳化之外,我們今年在ICLR上提出了BRECQ演算法,這個演算法是我們目前已知的第一個能夠實現媲美線上量化精度效果的離線量化演算法;演算法的原理也比較簡單,之前大家最佳化一層,我們擴充套件到了一個塊。

透過很多實驗和理論,我們證明了塊是一個更好的粒度。同時除了確定量化引數,也可以對權重進行微調,因此透過塊的設定和更好的權重調整,實現更優效果。這個演算法在內部走通之後經過了大量驗證,證明了離線量化可以很好的保證精度。這是我們認為比較有用的一個演算法,因此給大家進行一個簡單的介紹。

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

此外,各家廠商的硬體採用了非常不同的量化方案。包括gpu的、dsp的、arm的以及一些國產化晶片。這對演算法提出了很大挑戰,但是透過我們在演算法上的、系統上的、架構設計上的工作,可以很好的以一套框架打通多種硬體的量化模型生產。

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

三、兼顧結構、推理庫和硬體,完善軟硬體協同

最後再給大家介紹一下我們過去幾年實踐總結出來的經驗:做軟硬體的協同。

但是這個軟硬體協同不是設計晶片時需要考慮演算法,我們認為的軟硬體協同主要從以下三個方面考慮:我們內部支撐各種各樣的晶片,大量的推理庫,還有非常多網路結構。我們結合結構、推理庫還有硬體,這三方面建立一個龐大的資料庫,分析三者之間的關係。

基於這樣的資料庫,我們能夠方便、快速地找到在一個特定的硬體上最優的網路結構是什麼樣的;或者說在一個特定的硬體上,針對一個推理庫,最優的結構應該怎麼設計?這些都對我們的實際模型生產,帶來非常多的幫助。

這個事情具體怎麼來做?

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

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

L1指的是黑盒硬體,我們需要網路結構能夠來overfit硬體特性,針對黑盒硬體找到最好的網路硬體。

L2指的是開放式指令集,晶片的指令集是開放的,因此可以用網路結構+軟體實現來overfit具體硬體。

L3指的是整個硬體的架構完全開放,針對這樣一種設定可以做全鏈路耦合的方式,從結構、推理、硬體一起推動。商湯作為一家演算法為核心的公司,我們同時支援三種層級的軟硬體協同最佳化。

經過商湯歷史上訓練的超過20萬個模型,累計有10萬個不同的網路結構,同時也支援11種不同的硬體。我們基於這些資訊建了一個數據庫。有了這個資料庫之後,針對一個新的網路結構可以快速地透過實測查詢或者演算法預測的方式,得到非常高效的計算資料庫。

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

基於這樣的資料庫,我們可以針對已經訓練好的模型幫它做各種診斷,使它推匯出來的模型綜合考慮到精度、速度、硬體偏好和選擇程度等因素後得到最優的組合。這樣一個組合在實際生產中,它的精度將會有很大提升。

比如ModelA和Model Pro,ModelA是靠研究員手工設計的結構,它的Flops、引數量、訪存量如圖,透過軟硬體協同的資料庫最佳化,可以推匯出ModelA Pro,它的Flops、引數量、訪存量都比ModelA大,但速度比ModelA要小。之前網路設計是依賴於人的經驗,現在變成依賴於資料庫和演算法,透過資料庫和演算法幫助研究員設計出更好的網路結構。當我們訓練出的模型到了十萬量級以後,它能帶來非常好的提升。

公司內部每天有600多個業務員部署模型,最開始有些人工靠人力來支援訓練部署模型。

後面由於我們的模型越來越多,人力支撐不上,最終衍生出一套端到端的SaaS解決方案。它的核心是做端到端的模型部署,把格式的轉換、量化以及網路級的最佳化混到一起,實現一次模型上傳、多平臺部署測試、一次性搞定。

這套系統在內部叫Adela系統,現在每天支援600多名公司內部使用者,支援商湯目前超過90%的內部模型釋出。

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

這套服務架構分成四層,第一層裝置層,這一層不太可控,主要以支援外部任意裝置為主。

第二層引擎層,我們會接入低位元的運算元,網路執行時,支援混合執行,然後會做很多圖切分、格式轉換、靜態排程。

透過引擎層上面做一些封裝,封裝成模型編譯部署介面、測速介面,在上面提供很多演算法:包括線上量化、離線量化,還包括速度的預測、網路結構的搜尋、圖變換的最佳化等等。

再往上到了服務層,從原始模型檔案到端模型到量化模型再到速度和精度更優的模型,提供非常統一的框架。提供統一框架之後,透過一個命令列或者網頁上簡單的互動,就可以實現全自動的業務模型部署。

商湯科技閆俊傑:用軟硬體協同妙招,讓深度學習模型部署更靈活高效

為了進一步促進學術研究跟工業界的結合,我們目前也在計劃把兩個核心的服務對外開放,一個是模型的自動量化,另一個是模型在特定硬體上的最佳化建議。

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

同時把計算資料庫GPDB服務的能力逐步提供出來,不僅方便研究員驗證結構在實際裝置上的速度,還方便硬體廠商來尋找各種效能的缺陷和瓶頸。

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

以上是閆俊傑演講內容的完整整理。

集虎卡,開鴻運!最高拆522元驚喜福袋!