李哲暘, 張如意, 譚文明,2,*, 任燁, 雷鳴, 吳昊
(1. 杭州海康威視數字技術股份有限公司, 杭州 310051; 2. 杭州??低曄到y技術有限公司, 杭州 310051)
高清智能攝像機已成為智慧化城市管理中重要的感知來源,其含有的深度學習推理引擎能夠在端側對輸入圖像進行分析,向中心端系統提供高價值結構化信息。 具有深度學習推理能力的智能攝像機通常采用帶有神經網絡計算硬核(neural network processing unit, NPU)的片上系統(system on chip, SOC)芯片(如HISI3559)。 相對于中心端深度學習器件,邊緣端的硬核加速器通常更加關注低功耗和低成本。 近年來,邊緣端芯片算力有了長足的進步,智能分析輸入的圖像已從2 K分辨率向4 K ~8 K 高分辨率轉變,智能功能需求種類也快速增長,算力和帶寬瓶頸依然較為嚴重。 為此,芯片廠商在電路與編譯器設計時采用了多種優化措施,包括權重與激活量化[1-2]、算子融合[3]、權重裁剪[4-5]、輕量化結構設計[6-8]等。由于每種硬件的特點不同,同一種模型結構在不同硬件上運行的效率也不同。 在邊緣端推理加速算法研發時,需要針對不同芯片采用不同方案。多種方案疊加后,加速效果呈現非線性特點。 在對模型進行加速優化時,精確獲得模型實際運行耗時是優化成功的前提條件。
現有的模型硬件耗時預測算法按發展的歷程,主要可分為代理評估、硬件實測和算法預測3 類。
1) 代理評估。 采用容易獲得的測評指標代替耗時指標。 早期深度學習模型主要應用在物體分類、識別等非實時任務上,在端側部署的主要難點為參數存儲。 Denton[9]、Han[10]等提出的算法以參數量為關注重點,將網絡的存儲壓縮率作為評價指標。 隨著深度學習在識別[11-12]與檢測算法[13-16]的大規模應用,端側模型的運行耗時成為主要優化目標。 介于當時的模型結構中操作類型少,卷積計算占比高[17-18],文獻[19]開始將乘加運算次數(operations per second, OPS)作為主要評價指標,輔以理論內存進出消耗(memory access cost, MAC)輔助評價。 相對于以存儲壓縮率為指標,以乘加運算次數和內存進出消耗作為評價指標,能直接反映模型的理論算力和帶寬需求。 由于不同芯片采用不同優化方式,理論計算結果與實際資源消耗存在差異。 部署時模型需反復試湊設計,對訓練資源消耗大。
2) 硬件實測。 文獻[20]在所提出的模型結構搜索算法MnasNet 中用了硬件實測方法,在優化算法執行中,將所得模型自動編譯部署到實體硬件中進行耗時實測,并將測試結果向優化算法反饋。 硬件實測方法的優點是可以直接測量模型在特定硬件上的耗時,方法簡單有效,但對部署系統設計能力及成本要求都較高。 此外實物系統受到系統調度等波動的影響,需要多次測試才能得到穩定的反饋,進一步增加了運行成本。
3) 算法預測。 通過構建數學模型,預測模型在實際硬件中的運行耗時。 Facebook AI 研究院在文獻[21]中采用了查表法。 查表法通過板上實測手段對搜索空間中每種結構單元的耗時進行測量,構建[結構單元類型,耗時]的數據結構存表。 對于輸入的待測模型,在進行結構拆解后,查詢對應的結構單元耗時并累加后即得到預測耗時。 文獻[22]中進一步對4 000 多種模型結構中的結構單元耗時進行采樣,使用支持向量機(support vector machine, SVM)進行結構單元耗時預測建模,替代文獻[21]中的數據結構表,一定程度上簡化了所需資源。 文獻[23]提出one-hot 編碼方法,使得復雜網絡結構可以簡化為編碼表,作為輸入特征訓練線性回歸模型,直接對整體模型耗時進行回歸。 文獻[21-23]模型耗時預測算法,對于模塊替換類結構搜索算法較為友好,但是受限于碼表和傳統回歸算法的能力,在硬件編譯器采用更加靈活的通道裁剪、混合量化、算子融合等精簡手段時,優化空間復雜度指數級增長,預測誤差較大。
本文提出了一種基于圖卷積神經網絡(graph convolution network,GCN)的卷積神經網絡(convolutional neural network, CNN)模型推理硬件耗時預測新算法。 通過將卷積神經網絡的拓撲結構轉化為圖網絡,網絡模型中各層的超參做為節點輸入特征。 將網絡模型在硬件上的前向推理過程當做黑箱系統,以耗時作為訓練目標,通過學習網絡結構間的關系,預測實際硬件耗時。 構建了基于MobileNetV2[7]的算法驗證空間,在GPU、HISINNIE 硬核2 種硬件上驗證了本文算法性能。 在模型自動裁剪、自動網絡結構搜索等算法中,如需同時在精度和耗時等多方面達到最優,則可采用本文算法在多目標搜索優化過程中取代復雜的耗時實測過程。
Kipf 和Welling[24]在2017 年提出了一種可擴展的圖卷積神經網絡。 圖卷積神經網絡融合了圖神經網絡和卷積神經網絡的特點,將卷積神經網絡從歐式空間擴展到了適合于表達關系網絡的非歐空間,同時具有邊與節點的可擴展性。
帶有隱層的簡單圖卷積網絡如圖1 所示。 該網絡由3 個層組成,分別為輸入層、隱層和輸出層,每層均含有Cx個通道,其中C1為輸入通道,C2為隱層通道,C3為輸出通道。 G 為圖拓撲結構,該圖為一個有4 個節點的無向圖。 圖1 中的虛線部分表示空域圖卷積操作和非線性激活操作,其單層的前向傳播如下:


圖1 帶有隱層的圖卷積網絡示意圖Fig.1 Schematic diagram of graph convolution network with hidden layers
式中:hi為隱層第i個節點特征值向量;wi為權重向量;xi為輸入特征向量;N(i)為節點i的鄰接節點集合;δ()為非線性激活函數。
為了能夠與歐氏空間卷積相對應,可采用矩陣計算:

式中:A為鄰接矩陣;I為單位對角矩陣;X為輸入特征矩陣;W為權重矩陣;norm()為對矩陣的歸一化。
用式(2)替代卷積神經元網絡中的歐氏空間卷積操作,即可對圖網絡進行卷積計算。
如果將卷積神經網絡結構作為輸入特征數據,則預測器需要接受非歐空間數據,并對卷積神經網絡結構中節點間拓撲關系具有較強的敏感度。 因此,本文選用圖卷積網絡對神經網絡耗時進行建模預測。
本節主要闡述基于圖卷積網絡的耗時預測算法核心設計,可分為卷積神經網絡圖編碼、耗時預測算法整體設計與采樣空間優化、圖卷積網絡設計與訓練3 部分。
在利用圖卷積對網絡模型耗時預測之前,需要對卷積神經網絡結構進行圖編碼。 編碼分為2 步:
步驟1圖網絡中的節點用于表示卷積神經網絡結構中的操作,邊用于表示操作間的拓撲關系。 如圖2(a)所示,現有主流卷積神經網絡為有向無環圖,拓撲結構可轉換為圖網絡。 如圖2 所示,根據邊與節點的關系,可生成有向鄰接矩陣A。具體的,由于圖2(a)中共有4 個節點,為了表示節點間的連接關系,可以用一個維度為4 ×4 的鄰接矩陣來表示。 如果第i行第j列的值為0,則表示第i個節點和第j個節點沒有連接;如果為1,則表示存在連接。
步驟2節點特征矩陣用于表示網絡中操作的屬性超參集合,如圖2(b)所示,特征矩陣F中第i行表示每i個節點操作具體的特征屬性,m表示特征屬性共有m維。 其中,節點的屬性包括操作類型、卷積核尺寸、步進數、輸入輸出通道等。特別針對屬性中的操作類型,使用one-hot 編碼。如圖2 (b) 中 的 操 作 種 類, “001” 表 示 卷 積(conv),“010”表示池化(Pool),“100”表示元素累加操作(EltAdd)等,其他特征則直接將值輸入特征矩陣中。 當1 個節點操作不包含某個屬性時,如元素累加操作(EltAdd)沒有核大小和步進屬性,則對應特征值設置為0。 經過上述的編碼就可得到節點特征矩陣F。 在算法實際執行中,特征矩陣需要做歸一化處理,避免不同尺度特征數據影響模型的訓練收斂。

圖2 網絡結構和網絡結構的矩陣Fig.2 Representation of a network and its matrix
基于算法預測的耗時評測算法需要采集數據訓練算法模型。 卷積神經網絡的模型空間復雜度隨著節點數與節點超參的增加成指數級增加,有限的訓練樣本無法表征空間的整體分布。 為了降低模型空間的復雜度,結合先驗假設模型在實際硬件運行時,單個算子執行對耗時的影響僅與其鄰近的節點距離為p以內的前置操作相關(p為常數),則整體網絡的耗時可恒等變換成帶有重疊拓撲結構的子網絡差分累加:

式中:L()為網絡在板上實測耗時;為整體網絡N中第i個節點到第j個節點之間拓撲結構的子網絡,i=j,表示單節點,i>j,表示空結構,空結構的耗時為0;n為整體網絡包含的節點數, 即將整體網絡耗時拆分為1 個子網絡耗時L()與(n-p)個子網絡對耗時差。 第i對子網絡耗時差得到的是節點i的耗時補償(L() -L())。
用圖卷積去預測拆分得到的子網絡集合,代入式(3)可以得到耗時預測模型:

由于式(4)對應的所有子網絡拓撲結構的最大節點距離均為p,故對預測模型G()進行訓練的數據只需采集模型空間中最大節點距離為p的子結構集合即可。
通常無論是模型結構搜索還是模型裁剪,都面臨結構空間復雜的問題。 假設模型空間為n節點單鏈結構,每個節點有m種可選特征屬性(如操作類型、卷積核尺寸、通道數等),則整體模型空間的采樣規模為mn。 而采用式(4)進行拆解后,子網絡模型空間的采樣規模則變為mp。 現有經典網絡模型空間中n一般規模大于100,而硬件優化算法中對應的p一般小于10。 因此進行拆解可以大幅降低訓練所需樣本采樣規模,模型空間復雜度的降低也使得圖卷積網絡的訓練變得相對簡單。 此外,利用拆解獲得的子網絡計算耗時補償累加得到最終耗時預測的方式,能在訓練過程中學習到編譯器的算子融合技術對推理耗時的影響。
2.3.1 圖卷積網絡設計
本文采用GraphConv[25]中闡述的改進型圖卷積神經網絡,其單層前向的傳播如下:

式中:xi為當前節點特征值;N(i)為鄰接節點集合;θ為權重;δ()為非線性激活函數。
前向傳播式(5)和圖卷積神經網絡的前向式(1)相比,所有鄰邊共享同一個權重θ2,模型參數量大幅減少,降低了過擬合的風險。 除此之外,為了緩解圖卷積由于深度加深導致最后一層輸出節點特征相似的固有問題,本文通過級聯的方式融合淺層和深層的節點特征。
具體圖卷積網路的結構如圖3 所示,網絡可分為3 個部分:輸入、特征提取、累加輸出。 輸入部分將輸入的卷積模型網絡編碼成鄰接矩陣和特征矩陣。 特征提取部分由3 層GraphConv 結構級聯而成,將淺層特征與深層特征進行拼接。 3 層圖卷積層的節點輸出維度分別是(100,100,1)。當輸入節點的特征維度為m,則3 層圖卷積輸入的節點特征維度分別是(m,100 +m,200 +m)。最后一部分累加圖卷積最后一層所有節點的1 維特征作為輸出。

圖3 圖卷積網絡結構示意圖Fig.3 Structure of graph convolution network
2.3.2 圖卷積的訓練
圖卷積的訓練包括訓練集采樣與訓練方案設計。
根據2.2 節所述,G()僅對拆解后的子模型空間中的結構進行耗時預測,故訓練集為模型空間中最大節點距離p的子結構集合。 為了能在訓練中獲得式(3)中準確的單節點耗時補償(L() -L()),本文設計了一種差分訓練方案。 當采樣獲得了1 個子結構,則對應配置1 個附屬子結構。 在訓練中,不僅要訓練G()對整體子結構的耗時預測能力,還要訓練G()對單節點耗時補償的預測能力。 故本文算法在訓練時采用2 項損失函數:


式中:G()和G()為圖網絡預測的子結構總體耗時;G′(,)為圖網絡預測的單節點補償時間;α為[0,1]之間的實數,用來調整2 種損失函數之間的平衡;為二范數。
完整的訓練方案如圖4 所示。
對于每一組樣本對,分別做如圖4 所示的訓練,訓練G()對輸入的圖結構預測其整體耗時和最后一個節點的耗時補償。 損失函數如式(6) ~式(8)所示。

圖4 圖卷積訓練示意圖Fig.4 Schematic diagram of graph convolution network training
為了快速獲得符合要求的訓練集,本文使用的采樣策略如下:在模型空間中隨機采集大量完整網絡;遍歷完整網絡中符合要求的子結構和附屬子結構,測試2 個網絡的實際硬件耗時,構成樣本對;當遍歷到某一節點時,以該節點為初始節點,向上包含所有路徑長度小于p值的節點構成1 個子結構。
2.3.3 耗時預測推理過程
如圖5 所示,本文算法對單個輸入卷積模型進行耗時預測的完整推理過程。 主要可分為3 個步驟:
步驟1遍歷每個節點進行網絡劃分,如圖5中劃分網絡后得到網絡1,網絡2,…,網絡N;網絡劃分的規則如下,對于當前節點i,向上包含所有路徑長度小于等于式(3)中p+ 1 值的節點。圖5 是p=1 的情況,可以看到,節點i-1 和節點i得到的子網絡就是在整體網絡中以當前節點為初始節點向上截取了路徑長度小于等于2 的所有節點構成的網絡。
步驟2對劃分得到的子網絡進行編碼,得到鄰接矩陣A和特征矩陣F,進行相應圖卷積計算,得到子結構總體耗時和單節點補償時間的預測;除第一次的子網絡會將子結構總體耗時預測輸出到累加器之外,其他的子網絡均只將當前節點的補償時間預測輸出到累加器。 如圖5 所示,假設當前節點為i-1 節點,輸出到累加器的是當前節點補償時間ti-1即為z4特征。 當前節點變為i節點時,輸出到累加器的是第i節點補償時間ti即為z5特征。

圖5 耗時預測前向示意圖Fig.5 Procedures of latency prediction
步驟3累加以上預測值得到網絡的整體耗時。 需要說明的是,不同于之前的單節點耗時相加的算法,本文所提算法輸入的是1 個網絡,輸出的是節點耗時再進行累加,并包含了補償信息,故可認為是一種整體法,能得到更加精確的整體耗時預測。
本文實驗選取海思端側硬件平臺和英偉達GPU 平臺進行驗證。 HISI3559 平臺是海思一款邊緣端數字信號處理芯片,帶有深度學習硬核。該硬核在編譯使用時對網絡推理有一定的自動優化。 本文實驗中HISI3559 的編譯器版本為2.3.5。GPU 平臺具體型號為TeslaV100-SXM2-32GB。 針對神經網絡推理,英偉達公司開發了一套加速工具TensorRT,本文實驗中的GPU 部署使用詞工具對網絡推理進行優化加速。
由于測量耗時存在一定理論波動,本文實驗每個真值采用10 次測試取平均值得到。
為了驗證耗時預測算法在不同輸入空間的有效性,實驗分別在離散空間(mobilenet block,MB)和連續空間(mobilenet block-continuous, MBC)進行實驗。 離散空間和連續空間的區別在于空間中是否含有如通道數比例這種連續的變化屬性。 MB 提出于文獻[19],借鑒了MobileNetV2 的結構,空間由16 個可進行類型選擇的層組成,且其被分成4 個階段,單個階段內,每層的輸入輸出分辨率相同,階段間由下采樣層連接,將分辨率降為原來的一半。 具體結構如圖6 所示。 圖6 中輸入的圖像高為H,寬為W,輸入通道數為Cin。 經過1 ×1的卷積,將通道數變為原來的e倍,e的取值范圍為{3,6}。 可分離卷積的卷積核尺寸大小可選范圍為{3,5,7}。 最后經過1 ×1 卷積將輸出通道數變為Cout。 非下采樣層還會帶有短接操作。 每層之間可以獨立選擇短接操作來控制網絡深度。 MB-C 則是在MB 基礎上加入連續通道數的變化。 通道的可變化比例為[0.35,1],每組通道數的選擇范圍是{1,8,16,32}。

圖6 MB 空間層選項示意圖Fig.6 Candidate operations of layers in MB space
對于耗時模型訓練所需要的數據集,先在2 個空間上各自隨機采樣100 個獨立模型,之后根據2.3.2 節中所述算法采樣雙網絡訓練集。 測試集為2 個空間中各隨機采樣1 000 個模型構成。
圖卷積網絡訓練參數如下,設置式(4)中p參數為2,訓練時使用Adam 優化器。 權重初始學習率為0.01,單批次數據量為128。 總共訓練迭代1 000 輪。 每100 輪學習率下降為之前的30%。 為了多維度證明算法的有效性,實驗設置了多個評價指標,包括平均相對誤差(MRE)、最大相對誤差(MAX)、5%誤差樣本占比、10%誤差樣本占比。 各個指標具體介紹如下:
MRE 指標為測試集樣本預測相對誤差的平均值,其計算式為

式中:yi為模型的真實耗時;為算法預測耗時;q為測試集樣本數。
MAX 指標為測試集中預測的最大相對誤差,其計算式為

5%誤差樣本占比為測試集中預測相對誤差在5%以內的樣本數占總樣本數的比例;10% 誤差樣本占比為模型預測相對誤差在10% 以內的樣本占總測量樣本的比例。
本節實驗針對MB 空間,將本文算法和傳統算法進行對比。 對比算法包括單層預測累加、查表累加和基于one-hot 編碼的系列算法。 其中,基于one-hot 編碼的系列算法具體包括SVM回歸(線性核、高斯核)、貝葉斯回歸、拉索回歸和隨機森林回歸。 各算法的性能測試結果如表1所示。
本文算法(圖卷積網絡)在HISI3559 上的平均相對平均誤差為0. 5%,最大相對誤差為2.4%。 2 種指標均超越了其他算法。 在GPU 平臺上,本文算法的最大相對誤差為10.0%,優于其他算法,而平均相對誤差除比拉索回歸(2.8%)略低0.3%外同樣優于其他算法。 表1 證明了基于圖卷積網絡的耗時預測算法在不同硬件平臺上可以有效建模。 從本文算法和單層預測累加算法對比中可以看出,本文算法性能的提升來自于圖卷積的建模能力和耗時補償機制的提出。

表1 離散空間耗時算法對比Table 1 Performance comparison of algorithms in discrete search space
從表1 中進一步發現,相比GPU 平臺,本文算法在HISI3559 平臺的精度提升更加明顯,其原因可能是HISI3559 的層間融合策略多于GPU。由于本文算法中耗時補償的建模機制可以有效估計層間融合對耗時的影響,最終導致HISI3559 平臺上的預測精度提升比GPU 平臺更為顯著。
本節實驗針對MB-C 連續空間,將本文算法和傳統算法進行對比。 對比算法是單層預測累加算法。 需要說明的是,由于連續變量無法使用one-hot 編碼, 基于one-hot 編碼的相關算法無法應用于連續空間。 另外,由于連續空間提取查表的空間過大,查表累加算法也不適用。 因此,本節實驗與單層預測累加算法進行對比。 2 種算法在不同平臺上的性能如表2 所示。
從表2 可得,本文算法在HISI3559 平臺上5%誤差樣本占比和10% 誤差樣本占比分別為63.8%和99.7%,性能遠超單層預測累加算法的0%(所有測試樣本誤差均大于10%);對于MRE和MAX 指標,本文算法相比單層預測累加算法的誤差也降低了至少1 個數量級。 在GPU 平臺上,本文算法的性能相對單層預測耗時累加算法也有顯著提高。 本節實驗現象表明,在HISI3559和GPU 平臺上,本文算法由于圖編碼的有效性和圖卷積高效的建模能力,使其仍可以針對連續空間進行有效建模,并且性能遠超單層預測累加的算法。

表2 連續空間耗時算法對比Table 2 Performance comparison of algorithms in continuous search space
本文算法基于式(3)中的假設:單個算子執行對耗時的影響僅與其鄰近的節點距離p以內的前置操作相關(p為常數)。 本節以實驗來討論此假設的有效性。
選擇目前主流網絡MobileNetV2、IncptionV2、ResNet50。 將不同的p值代入式(3)獲得的預測耗時與真實耗時進行比較。 實驗結果如圖7所示。

圖7 不同p 值得到的耗時與真值對比Fig.7 Comparison of latency with different p values and real latency
圖7 共包含3 組直方圖,分別表示3 個不同的網絡。 每組直方圖都存在5 個紋理不同的柱形數據,柱狀圖高度表示相應設置獲得的耗時。p=0 指單層測量直接累加所得值。 從圖7 中可得,p=0的耗時累加值和真實耗時差異巨大,說明HISI3559芯片運行時存在層間融合優化,使得整體耗時與單層耗時單純累加差異甚遠。 但當p=1時,其耗時累加值和真實耗時的差異就大幅降低。 當p≥1 時,這種差異仍然有所降低,但邊際效益已不高。 這說明HISI3559 平臺絕大多數的單個算子執行對耗時的影響僅與其鄰近的節點距離為1 以內的前置操作相關。 基于本節實驗現象,說明當p≥1 時,式(3)中的假設在HISI3559 平臺上是成立的,考慮到輸入空間規模和耗時預測精度的權衡,在本文實驗中,p設置為2。
將本文算法應用到多目標(精度與耗時)網絡結構搜索中。 實驗使用MB-C 連續空間,搜索任務針對ImageNet100K 數據集的分類任務,將搜索目標耗時設置為4 ms。 具體網絡結構搜索算法為:第1 步,借鑒文獻[26]訓練超級網絡來快速評估每條支路的精度;第2 步,根據文獻[27]提出的遺傳算法搜索耗時接近4 ms,且性能盡量高的模型。 對比實驗設置為:在其他實驗條件保持相同的情況下,一個使用單層預測累加的耗時預測算法,另一個使用基于圖卷積網絡的耗時預測算法,對比搜索出來的網絡性能。 具體的實驗結果如表3 所示(硬件平臺為HISI3559)。
從表3 可得,在保證其他搜索設置相同的情況下,使用單層預測累加算法搜索到的網絡耗時為4 256 μs。 使用本文提出的耗時預測算法搜索到的網路耗時為4 055 μs。 本文算法更接近預設的目標耗時(4 000 μs),精度也沒有損失。

表3 耗時預測算法對結構搜索的作用Table 3 Effect of latency predictor on neural architecture search
傳統的耗時估計算法無法很好地同時解決硬核加速器層間融合優化的建模問題和輸入空間過大導致的采樣成本高的問題,為此本文提出了一種基于圖卷積的耗時預測算法。 主要改進如下:
1) 將網絡模型編碼成有向無環圖,提出了基于圖論的網絡結構編碼算法。
2) 將整體耗時模型恒等拆分成子網絡對,并提出了有效的近似假設,減少了輸入空間規模,降低欠擬合風險。
3) 設計了完整的圖卷積網絡結構,使用了淺層和深層特征融合的技術提高網絡的建模能力。
4) 設計新的損失函數,有效訓練圖卷積回歸模型。
5) 在不同網絡空間和硬件平臺上證明了本文算法的有效性,針對HISI3559 平臺,本文算法在MRE、MAX、5% 誤差樣本占比、10% 誤差樣本占比4 項指標均超過現有耗時估計算法,特別在MB-C 連續空間上,針對HISI3559 平臺,本文算法將MRE 從302%降低到5.3%。
6) 將本文算法與模型結構搜索算法結合,在特定硬件上搜索到既高效又高精度的模型。
本文算法能夠與結構搜索、通道裁剪、量化等多種優化手段結合,對邊緣側部署模型優化有重要意義。