在自動駕駛軟件設計中,將Transformer模型部署到集中式SoC芯片上涉及到多個關(guān)鍵步驟。以下是具體的示例和說明:
模型優(yōu)化+剪枝
1、量化(Quantization)
例如,將用于感知系統(tǒng)的Transformer模型從32位浮點數(shù)量化到8位整數(shù),以減少計算資源占用和內(nèi)存需求。這可以在不顯著降低精度的情況下,加快自動駕駛中物體檢測和識別的速度。

首先在模型準備階段,確保Transformer模型已經(jīng)經(jīng)過充分的預訓練,在32位浮點數(shù)精度下能夠達到預期的精度和性能,該模型將作為量化的基礎(chǔ)模型。而在數(shù)據(jù)收集階段,收集足夠的感知數(shù)據(jù),如自動駕駛中的圖像、點云數(shù)據(jù),用于量化過程中模型的校準和微調(diào)。在后續(xù)的量化感知系統(tǒng)的Transformer模型階段,分為靜態(tài)量化(Post-Training Quantization)和動態(tài)量化(Dynamic Quantization)。確保在量化過程中,模型輸入的動態(tài)范圍被充分考慮,特別是在感知系統(tǒng)中,輸入數(shù)據(jù)(如圖像)通常具有較大的動態(tài)范圍。在梯度消失問題上,在模型量化后,有時會遇到梯度消失的問題,特別是在深度Transformer模型中??梢酝ㄟ^微調(diào)和量化感知(Quantization-Aware Training)技術(shù)來減輕這一問題。

在量化感知訓練(Quantization-Aware Training, QAT)階段中,模型在訓練時模擬8位整數(shù)的計算過程。通過在訓練中引入量化噪聲,模型逐漸適應量化后的精度變化。具體操作是在訓練過程中,將32位浮點數(shù)轉(zhuǎn)換為8位整數(shù)進行前向傳播,而反向傳播仍在32位浮點數(shù)下進行。這種做法的優(yōu)勢是量化感知訓練時可以顯著提高量化后的模型精度,特別是在自動駕駛感知任務中,需要精細檢測和分類的情況下。
當然,在量化后模型驗證階段,通過精度評估,使用感知數(shù)據(jù)集評估量化前后的模型精度差異,確保量化后的模型能夠在實際場景中保持足夠的檢測和識別精度。在性能評估階段, 在車載SoC上部署量化后的Transformer模型,測試其推理速度和計算資源消耗,以驗證量化的效果。
2、剪枝(Pruning)
對自動駕駛中的Transformer模型進行剪枝(Pruning)是一種減少模型規(guī)模和計算復雜度的有效方法。尤其在資源受限的環(huán)境中,如車載SoC芯片上使用感知算法進行車道線檢測時,對自動駕駛中的Transformer模型進行剪枝,去除對車道線檢測影響較小的權(quán)重。這樣可以減少模型大小,使其更容易部署在SoC上。

假設在自動駕駛系統(tǒng)中,使用了一個Transformer模型來進行車道線檢測和障礙物識別。模型中包含8個注意力頭。經(jīng)過分析發(fā)現(xiàn),某些注意力頭對特定場景的貢獻較?。ɡ?,一些頭對遠距離的車道線關(guān)注較少,而此時車速較低)??梢赃x擇將這些注意力頭進行剪枝,從而減少計算復雜度,同時通過微調(diào)保持整體模型的檢測能力。剪枝后重新訓練模型,以確保在各類駕駛場景中的準確性。這種方法有助于在維持高性能的前提下,降低模型在自動駕駛場景中的計算開銷,適應車載SoC的限制。
1)剪枝原理分析
首先,是基于自動駕駛場景確定剪枝目標。這一目標包括剪枝率(Pruning Rate)和剪枝策略。剪枝率決定模型中要移除的參數(shù)比例,對于自動駕駛場景,通常需要在精度和效率之間取得平衡,因此剪枝率需要根據(jù)具體應用場景進行調(diào)整。而在剪枝策略方面,選擇剪枝的對象,如剪掉部分神經(jīng)元、注意力頭、層或特定權(quán)重連接,可以去除對最終推理結(jié)果影響較小的部分。
在剪枝對象選擇上,主要采用層級剪枝(Layer-wise Pruning)。針對Transformer模型的不同層次進行剪枝。例如,移除在特定自動駕駛場景(如簡單的車道保持任務)中不常用的注意力頭(Attention Head)或多余的全連接層(Feedforward Network)。根據(jù)權(quán)重進行剪枝(Weight Pruning),移除權(quán)重值接近于零的連接。通過分析Transformer模型的權(quán)重分布,選擇那些對輸出影響較小的權(quán)重進行剪枝。比如基于注意力頭剪枝(Head Pruning)過程中,需要充分考慮Transformer中的多頭注意力機制允許模型關(guān)注不同的特征。通過評估每個頭的貢獻,可以移除那些在自動駕駛場景中作用較小的頭。
2)剪枝策略
基于以上剪枝方法論,剪枝方法可以分為全局剪枝(Global Pruning)、層級剪枝(Layer-wise Pruning)和結(jié)構(gòu)化剪枝(Structured Pruning)。
全局剪枝在整個模型范圍內(nèi)根據(jù)權(quán)重的絕對值大小進行剪枝。比如,移除所有低于某一閾值的權(quán)重,無論其所在的層或模塊。層級剪枝是針對特定層或模塊進行剪枝。這種方法可以更好地控制每一層的剪枝率,確保不會過度削弱某些關(guān)鍵層的能力。通過移除整個神經(jīng)元或通道,而不是單個權(quán)重,這種方法更適合硬件加速器。比如,在自動駕駛的Transformer模型中,移除對交通標志檢測貢獻較小的某一層的整組神經(jīng)元(如動態(tài)車輛檢測,因為其與交通標志的檢測存在明顯的差別區(qū)分)。
3)剪枝后微調(diào)(Fine-Tuning)
剪枝后,模型可能會出現(xiàn)性能下降。通過重新訓練,模型可以重新學習并適應被剪枝后的結(jié)構(gòu),這個過程有助于恢復剪枝前的精度水平。這一過程可以采用逐步剪枝和微調(diào)相結(jié)合的策略,每次剪去一小部分權(quán)重后立即進行微調(diào),而不是一次性剪去大量權(quán)重。
在典型的自動駕駛?cè)蝿罩校ㄈ缯系K物檢測、車道線識別)評估剪枝后模型的性能。確保剪枝后的模型在關(guān)鍵任務中的精度和響應時間滿足要求。在資源評估過程中,比較剪枝前后模型的計算資源占用,包括推理時間、內(nèi)存占用和功耗,以確定剪枝的有效性。
4)部署與監(jiān)控
將剪枝后的Transformer模型部署到車載SoC上,再在實際駕駛場景中進行部署測試,可以確保模型的實時性和穩(wěn)定性。實時監(jiān)控剪枝后模型的運行表現(xiàn),根據(jù)實際需求動態(tài)調(diào)整模型結(jié)構(gòu)或進一步進行剪枝和優(yōu)化。在自動駕駛中,可以使用一個訓練好的大規(guī)模Transformer模型(如BERT)來訓練一個更小的模型(如TinyBERT),用于車內(nèi)低功耗的SoC芯片上,以實現(xiàn)車內(nèi)實時場景理解,該過程一般稱之為知識蒸餾(Knowledge Distillation)。
硬件加速與內(nèi)存管理
1、硬件加速
使用專用加速器(Accelerators),在自動駕駛的集中式SoC上,通常會有NPU(神經(jīng)網(wǎng)絡處理單元)來加速Transformer模型的推理。例如,在處理前方車輛的動態(tài)分析時,使用NPU可以大幅提升Transformer模型的處理速度。
針對神經(jīng)網(wǎng)絡優(yōu)化的架構(gòu),由于采用了專門的硬件設計,比如NPU專為深度學習模型設計,包含大量并行處理單元,能夠高效處理神經(jīng)網(wǎng)絡中的矩陣乘法、卷積等運算。Transformer模型中,大量的矩陣運算(如多頭注意力機制中的點積操作)是計算的主要瓶頸。NPU能夠通過并行處理這些操作,大幅加快計算速度。同時,NPU通常集成有高帶寬的片上存儲器,用于快速存取模型參數(shù)和中間結(jié)果,產(chǎn)生低延遲和高帶寬存儲的效能。相比于傳統(tǒng)的CPU或GPU,NPU的存儲器延遲更低,能夠減少數(shù)據(jù)傳輸瓶頸,提高Transformer模型的處理效率。
在并行計算能力方面,基于Transformer的AI大模型中的多頭注意力機制需要并行計算多個注意力頭的權(quán)重和輸出。Transformer模型可以在SoC上的多核架構(gòu)中并行運行,如將多頭注意力機制中的各個頭分配到不同的核上,以加快處理車道檢測和障礙物識別的速度。在NPU上,將這些計算任務分配到多個處理單元并行執(zhí)行,可以顯著加快整體計算速度。由于NPU可以同時處理Transformer模型的不同層級,通過流水線或分層處理的方式可以有效的減少推理延遲。在處理前方車輛的動態(tài)分析時,NPU可以在同時處理多個輸入幀的情況下保持高吞吐量。
在加速矩陣運算方面,Transformer模型中,關(guān)鍵的計算如注意力機制和前饋神經(jīng)網(wǎng)絡(Feedforward Neural Network)都依賴于大規(guī)模的矩陣乘法運算。NPU在矩陣運算上具有極高的效率,能夠大幅度縮短這些計算的執(zhí)行時間。許多NPUs配備了專用的深度學習指令集,這些指令集可以在硬件層面優(yōu)化矩陣運算,使得計算資源得以最大化利用。
在減少數(shù)據(jù)移動的開銷上,Transformer模型在計算過程中需要頻繁地進行內(nèi)存訪問。如果在傳統(tǒng)的計算架構(gòu)中,數(shù)據(jù)的頻繁移動會引發(fā)較大的延遲,而NPU通過在片上存儲器中存儲更多的數(shù)據(jù)并優(yōu)化訪問模式,可以減少內(nèi)存帶寬的瓶頸,從而提高處理速度。同時,NPU可以將計算和存儲進行有效結(jié)合。通過將計算單元和存儲單元緊密集成的方式,減少數(shù)據(jù)在計算單元和存儲單元之間傳輸?shù)难舆t。這對于處理前方車輛的實時動態(tài)分析至關(guān)重要,因為系統(tǒng)可以在短時間內(nèi)完成大量數(shù)據(jù)的處理和決策。
最后,NPU可以實現(xiàn)芯片異構(gòu)計算和任務分離,將復雜運算卸載給NPU。在自動駕駛系統(tǒng)中,NPU可以專門用于處理復雜的深度學習任務,如Transformer模型的推理,而將其他任務(如系統(tǒng)控制、傳感器數(shù)據(jù)預處理)分配給CPU或DSP。同時,動態(tài)分析前方車輛需要系統(tǒng)在極短的時間內(nèi)做出決策,高效處理實時性要求高的任務。據(jù)統(tǒng)計,NPU可以在毫秒級別完成對多幀圖像或點云數(shù)據(jù)的推理,確保系統(tǒng)能夠及時響應外部環(huán)境的變化。這種任務分離和異構(gòu)計算能夠更好地利用系統(tǒng)資源,提高整體性能。
2、內(nèi)存中Transformer架構(gòu)優(yōu)化
自動駕駛中,Transformer模型處理的圖像數(shù)據(jù)量大,需要優(yōu)化內(nèi)存管理。例如,使用內(nèi)存池技術(shù)復用內(nèi)存空間,從而減少因多次加載數(shù)據(jù)導致的帶寬占用。
如下圖表示內(nèi)存中的Transformer 網(wǎng)絡架構(gòu),iMTransformer (In-Memory Transformer)以 Bank、Tile 和 Mat 的分層模式進行組織。這種分層模式遵循現(xiàn)有的內(nèi)存分層結(jié)構(gòu)和 Transformer 網(wǎng)絡的分層模式。iMTransformer (A) 由編碼器 (B) 和解碼器 (C) 組組成。編碼器組由編碼器 MHA 瓦片 (D) 和 FF 瓦片以及歸一化單元組成。解碼器組由兩個解碼器 MHA 瓦片 (E)、一個 FF 瓦片和一個歸一化單元組成。編碼器 (D) 和解碼器 (E) MHA 瓦片由 AH Mats (F) 和聚合器單元組成。

iMTransformer 遵循分層內(nèi)存結(jié)構(gòu)
這里舉例說明一下要如何利用內(nèi)存池技術(shù)進行優(yōu)化設計。在自動駕駛SoC中,將常用的神經(jīng)網(wǎng)絡參數(shù)緩存在片上內(nèi)存中,加快模型推理過程,假設在自動駕駛系統(tǒng)中,使用Transformer模型對前方車輛進行動態(tài)分析。每次處理一幀圖像或點云數(shù)據(jù)時,模型需要加載新的數(shù)據(jù),并存儲計算過程中的中間結(jié)果。每幀數(shù)據(jù)處理完成后,這些存儲空間可以立即被釋放和復用。
整個操作過程中,需要在模型的每個處理步驟中,首先嘗試從內(nèi)存池中分配內(nèi)存。如果內(nèi)存池中有合適的空閑塊,則直接使用,否則申請新的內(nèi)存塊。當這一步計算完成并且中間結(jié)果不再需要時,將內(nèi)存塊返回到內(nèi)存池中,以供下一步使用。通過使用內(nèi)存池技術(shù),可以顯著減少因頻繁的數(shù)據(jù)加載和內(nèi)存分配導致的內(nèi)存帶寬占用。在實際系統(tǒng)中,可以通過監(jiān)控內(nèi)存使用情況和帶寬利用率,評估內(nèi)存池技術(shù)的效果。由于減少了內(nèi)存分配和釋放的開銷,系統(tǒng)整體的響應速度將得到提高,特別是在處理連續(xù)數(shù)據(jù)流時(如視頻幀或點云序列),內(nèi)存池的優(yōu)勢更加明顯。
軟件框架/庫支持與能耗優(yōu)化
基于transformer這類并行運算的大模型深度學習框架中,可以使用如TensorFlow Lite的嵌入式版本來加載和運行Transformer模型,專門針對自動駕駛SoC的優(yōu)化,減少延遲和功耗。例如,使用TensorFlow Lite來運行一個針對交通標志識別的Transformer模型。在圖編譯器(Graph Compiler)時,使用TVM等工具將模型編譯成優(yōu)化的二進制代碼,以便在SoC上高效執(zhí)行。比如,將Transformer模型用于實時行人檢測的推理。
假設你正在自動駕駛感知系統(tǒng)中使用 Transformer 模型進行車輛識別和動態(tài)分析。首先需要將已經(jīng)訓練好的 Transformer 模型(用于識別前方車輛)轉(zhuǎn)換為 TensorFlow Lite 格式,并進行量化,將模型權(quán)重從 32 位浮點數(shù)量化為 8 位整數(shù)。如下圖表示全整數(shù)量化(Full Integer Quantization)的代碼示意圖。

將模型部署到自動駕駛 SoC 上時,可以使用 SoC 的 NPU 或 DSP 進行硬件加速,確保模型推理時在毫秒級別內(nèi)完成。通過剪枝和批處理優(yōu)化,進一步減少模型在推理過程中所需的內(nèi)存和計算資源,從而降低 SoC 的功耗。
在能耗優(yōu)化方面,動態(tài)調(diào)節(jié)電壓和頻率(DVFS)。根據(jù)自動駕駛場景的復雜性調(diào)整SoC的電壓和頻率。例如,在高速公路上進行自動駕駛時,由于環(huán)境較簡單,可以降低SoC運行處理頻率來節(jié)省能耗。而在復雜城市路況時,提高頻率可以保證模型的實時性。在低功耗設計中,在設計自動駕駛Transformer模型時,采用更少的計算資源和高效的算法,如使用輕量級Transformer結(jié)構(gòu)進行車輛跟蹤。
測試驗證與部署維護
最后,使用自動駕駛仿真平臺(如CARLA)來模擬Transformer模型在各種駕駛場景中的表現(xiàn),驗證其在SoC上的性能是否符合實時要求。根據(jù)仿真結(jié)果,調(diào)整Transformer模型的結(jié)構(gòu),優(yōu)化SoC的運行參數(shù),如在檢測夜間行人時,提升模型的注意力機制,以提高識別精度。在車輛的OTA更新中,推送新的優(yōu)化后的Transformer模型,使其在SoC上運行時能更好地應對最新的路況和場景。
在遠程監(jiān)控與調(diào)優(yōu)過程中,通過車載系統(tǒng)實時監(jiān)控部署在SoC上的Transformer模型的性能,如檢測模型在不同天氣條件下的表現(xiàn),并根據(jù)需要遠程進行調(diào)優(yōu)或更新。
以實例講解如何做好最后化軟件部署
以下將以實例完整的說明如何將Transformer模型轉(zhuǎn)換、優(yōu)化并部署到自動駕駛SoC上,從而在資源受限的環(huán)境中實現(xiàn)高效、實時的感知和決策。
步驟一:準備和訓練原始Transformer模型
選擇合適的模型架構(gòu),確定自動駕駛中要解決的具體任務。例如物體檢測是識別和定位道路上的車輛、行人、交通標志等。車道檢測是識別道路車道線。場景理解是分析整體駕駛環(huán)境。根據(jù)任務選擇適合的Transformer模型架構(gòu),例如Vision Transformer(ViT) 適用于圖像分類和物體檢測。DETR(Detection Transformer)專為物體檢測設計。Swin Transformer適用于高效圖像識別。
在數(shù)據(jù)集準備和模型訓練階段,收集大量高質(zhì)量的自動駕駛相關(guān)數(shù)據(jù),并進行準確的標注。在模型訓練階段,使用TensorFlow框架在高性能計算環(huán)境中訓練模型,確保模型達到預期的準確度和性能。
步驟二:將模型轉(zhuǎn)換為TensorFlow Lite格式
通過安裝必要的工具和庫,便可以編寫轉(zhuǎn)換腳本進行基本模型轉(zhuǎn)換,應用模型進行必要的量化(比如動態(tài)范圍量化、整數(shù)量化、全整數(shù)量化),并在訓練過程中應用剪枝實現(xiàn)稀疏化。
如下圖表示了一種使用現(xiàn)代 Ampere GPU 和不同的 FPGA 來加速基于 N:M 稀疏 Transformer 的模型。通過生成一系列 N:M 稀疏 Transformer 以及專用加速器,可以實現(xiàn)高效的模型部署。

步驟三:針對自動駕駛SoC進行特定優(yōu)化
過程中需要確定SoC的硬件特性和支持的量化格式,主要是通過了解SoC支持的指令集和加速器。確認SoC是否支持INT8運算,以及是否有專門的硬件支持。
DSP(數(shù)字信號處理器):適合處理信號和圖像數(shù)據(jù)。
NPU(神經(jīng)網(wǎng)絡處理單元):專為深度學習推理加速設計。
GPU(圖形處理單元):適合并行處理大量數(shù)據(jù)。
TensorFlow Lite提供了多種Delegate用于不同硬件加速,包括GPU Delegate、Edge TPU Delegate、自定義硬件Delegate(針對特定SoC廠商提供的Delegate,例如NVIDIA、Qualcomm等,使用對應的SDK和庫)。配置多線程和緩存優(yōu)化,確保模型和必要的數(shù)據(jù)加載到高速緩存中,減少內(nèi)存訪問延遲。使用SoC提供的內(nèi)存管理API,將模型參數(shù)預加載到片上存儲器。
步驟四:部署和集成到自動駕駛系統(tǒng)
在集成到感知模塊階段,通過數(shù)據(jù)預處理,在攝像頭或傳感器獲取的數(shù)據(jù)上進行必要的預處理,如歸一化、尺寸調(diào)整等,確保與模型輸入格式匹配。在模型推理完成后,將模型輸出結(jié)果轉(zhuǎn)換為實際的檢測、分類或定位信息。
在實時性能測試與優(yōu)化階段,需要充分測試模型在SoC上的推理時間、內(nèi)存占用和功耗。使用SoC提供的性能監(jiān)控工具,實時監(jiān)測系統(tǒng)狀態(tài)。識別影響性能的關(guān)鍵因素,如數(shù)據(jù)I/O、計算密集部分進行瓶頸分析。根據(jù)測試結(jié)果,調(diào)整模型結(jié)構(gòu)、量化策略、線程數(shù)等參數(shù)。甚至可能需要回到模型訓練和轉(zhuǎn)換階段,重新調(diào)整和優(yōu)化。
在模型加載和推理過程中,可以添加異常捕獲機制,確保系統(tǒng)在異常情況下能夠安全降級或恢復。在各種駕駛場景和環(huán)境下長時間運行,測試系統(tǒng)的穩(wěn)定性和可靠性。最后,通過支持OTA更新,能夠遠程更新模型和軟件,以適應新場景和改進性能。