智東西(公眾號:zhidxcom)
編輯 | 孫悅
智東西6月5日消息,近日GTIC 2021嵌入式AI創新峰會在北京圓滿收官!在這場全天座無虛席、全網直播觀看人數逾150萬次的高規格產業峰會上,來自產業鏈上下游的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服務的能力逐步提供出來,不僅方便研究員驗證結構在實際設備上的速度,還方便硬件廠商來尋找各種性能的缺陷和瓶頸。
目前我們在準備一些開源的流程,希望更多人能夠得到相關技術的收益。我們有一個專門負責這部分工作的內部研究團隊叫工具鏈團隊,平常也會寫一些專欄,歡迎大家關注。

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