當(dāng)前快速發(fā)展的智能汽車在布局高端車型上,通常會(huì)以高算力作為一個(gè)競(jìng)爭(zhēng)要點(diǎn),如果考慮到集AI算力、邏輯算力于一體的超異構(gòu)芯片而言,英偉達(dá)絕對(duì)算得上是各家車企都十分青睞一家芯片公司。相比于前面文章介紹的TI系列TDA4X芯片不同之處在于,英偉達(dá)通常傾向于高算力、高級(jí)程度、高功能安全的角度來(lái)滿足客戶定制化需求。而且市場(chǎng)上做的比較出色的這類芯片,除了ME就屬英偉達(dá)了,因?yàn)橛ミ_(dá)Orin賣(mài)點(diǎn)就是算力。
即便是在各家車企對(duì)算力認(rèn)知越來(lái)越清晰的前提下(即他們更關(guān)注算力利用率、性價(jià)比的前提下,對(duì)于芯片算力的看法將更加看重非稀疏化的情況下收斂后的真實(shí)算力),這款系列芯片目前是在各家車企中被瘋搶的。國(guó)內(nèi)對(duì)英偉達(dá)的玩家就包括蔚來(lái)ET7、小鵬G9 SUV、小馬智行Robotaxi這類造車新勢(shì)力。另外,比亞迪也開(kāi)始利用各種資源在其自研平臺(tái)上采用英偉達(dá)芯片了。
英偉達(dá)在其芯片布局上,智能汽車芯片目前還不是其主力營(yíng)收板塊。但是這個(gè)板塊的布局正在加強(qiáng),主要體現(xiàn)在通過(guò)提供完整的硬件和軟件棧實(shí)現(xiàn)各類高收入pipeline。逐漸構(gòu)建了強(qiáng)大的生態(tài)系統(tǒng),并且在以往的以智能座艙域?yàn)橹鞯男畔蕵?lè)端開(kāi)始逐漸轉(zhuǎn)向智能駕駛端。并且,在自動(dòng)駕駛、軟件定義汽車以及新軟件及服務(wù)上開(kāi)始發(fā)力。
本文將從各個(gè)方面對(duì)英偉達(dá)芯片進(jìn)行全面解析,主要是針對(duì)其智駕芯片發(fā)展史,對(duì)主流Xavier及Orin系列芯片進(jìn)行詳細(xì)介紹。意在幫助讀者從不同的方面更加了解這款芯片,并且知道如何應(yīng)用這款芯片用于自動(dòng)駕駛系統(tǒng)系統(tǒng)開(kāi)發(fā)及設(shè)計(jì)。
英偉達(dá)在推出線年開(kāi)發(fā)完成了第一個(gè)完整的GPU架構(gòu)Fermi。該計(jì)算核心由16個(gè)流線處理器SM組成,每個(gè)SM中有兩個(gè)線個(gè)存儲(chǔ)加載單元(LD/ST)、4個(gè)特殊函數(shù)單元SFU組成。而在2012年升級(jí)發(fā)布的Kepler和Maxwell架構(gòu),增加了CUDA CORE用于提供專門(mén)對(duì)浮點(diǎn)數(shù)單元FPU和邏輯運(yùn)算單元ALU的計(jì)算能力。
英偉達(dá)設(shè)計(jì)開(kāi)發(fā)的第一款芯片是從2016年推出的,主要是面向AI和自動(dòng)駕駛系統(tǒng)的產(chǎn)品。而對(duì)于單純地圖形處理器而言可以追溯到2006年的CUDA(Compute Unified Device Architecture)架構(gòu)。這一架構(gòu)也是后續(xù)自動(dòng)駕駛系統(tǒng)架構(gòu)芯片開(kāi)發(fā)的軟件架構(gòu)基礎(chǔ)。
對(duì)于自動(dòng)駕駛而言,比較關(guān)心的幾個(gè)關(guān)鍵節(jié)點(diǎn)是基于其對(duì)處理能力的架構(gòu)和軟件模塊的依賴來(lái)講解的。
2017年發(fā)布了完全以深度學(xué)習(xí)為核心的Volta架構(gòu),該架構(gòu)主體是引入了英偉達(dá)芯片的核心軟件模塊架構(gòu)Tensor Core模塊,可用于執(zhí)行融合乘法加減法(即既包括浮點(diǎn)數(shù)FP32/FP64,又增加了INT32的整型計(jì)算核),其算力是Pascal架構(gòu)的5倍。
2018年,英偉達(dá)又相繼發(fā)布的Turning架構(gòu)升級(jí)了Tensor Core,主要增加了對(duì)整數(shù)型數(shù)據(jù)的計(jì)算能力。
在2020年,英偉達(dá)發(fā)布最新的Ampere 架構(gòu),其特性是支持更高級(jí)別的數(shù)據(jù)格式TF32\BF16兩種數(shù)據(jù)格式及稀疏矩陣的運(yùn)算能力。
GPU的首次完整搭載是在2010年的Fermi架構(gòu)中,其在運(yùn)算上最大的優(yōu)勢(shì)是將計(jì)算核上更多的晶體管資源用于數(shù)值計(jì)算,而不是像CPU一樣需要花費(fèi)大量的資源進(jìn)行數(shù)據(jù)存取和流量控制。也就是說(shuō)每個(gè)陣列的一行通常會(huì)有多個(gè)計(jì)算核來(lái)承擔(dān)計(jì)算控制和緩存。并且同一時(shí)刻可以執(zhí)行多個(gè)核(并行幾千個(gè)線程)的計(jì)算能力,此時(shí),對(duì)內(nèi)存訪問(wèn)的延時(shí)可以忽略不計(jì)。
更多的晶體管介入進(jìn)來(lái)意味著GPU在運(yùn)算過(guò)程中需要消耗更多的電量資源和帶寬資源,也就是說(shuō)GPU的發(fā)熱功率更大?;谶@一特性當(dāng)想要將GPU運(yùn)用于自動(dòng)駕駛系統(tǒng)感知場(chǎng)景的邊緣/極端場(chǎng)景的大量訓(xùn)練計(jì)算模型時(shí),就需要針對(duì)性的基于GPU的發(fā)熱功率進(jìn)行高效的降溫處理。
英偉達(dá)系列芯片中的GPU加速庫(kù)包含了四大主要的并行架構(gòu):深度學(xué)習(xí)模塊、信號(hào)&圖像處理、線性代數(shù)計(jì)算、并行算法庫(kù)。不同的計(jì)算庫(kù)可以針對(duì)不同的計(jì)算場(chǎng)景發(fā)揮不同的效用。
GPU中的深度學(xué)習(xí)引擎是圖中被稱之為T(mén)ensorRT的完整工具,可以實(shí)現(xiàn)各類深度學(xué)習(xí)相關(guān)模型的優(yōu)化與編譯。該工具鏈引入了張量核Tensor Core模塊,用于執(zhí)行融合乘法加法(即Volta架構(gòu)中實(shí)現(xiàn)FP16半精度浮點(diǎn)矩陣以及INT8整數(shù)的累加矩陣乘法和累加單元)。這樣可以很好的加速密集線性代數(shù)計(jì)算、信號(hào)處理和深度學(xué)習(xí)推理,也可以很好的避免量化過(guò)程中精度和計(jì)算范圍的溢出,很好的解決數(shù)據(jù)量化過(guò)程中產(chǎn)生的數(shù)據(jù)溢出和精度不足問(wèn)題。
TensorRT可支持芯片通過(guò)英偉達(dá)Drive AGX平臺(tái)部署深度學(xué)習(xí)接口,使用編譯器和運(yùn)行時(shí)最大化延遲關(guān)鍵應(yīng)用程序的吞吐量,使用 int8 部署響應(yīng)式和內(nèi)存高效的應(yīng)用程序,優(yōu)化卷積神經(jīng)網(wǎng)絡(luò) (CNN) 層和操作并降低張量核心的精度,通過(guò)ONNX支持和原生 TensorRT 集成加速每個(gè)框架,使用容器化推理服務(wù)在一個(gè)節(jié)點(diǎn)上運(yùn)行多個(gè)模型。
如上圖表示了如何將模型導(dǎo)入到TensorRT中后進(jìn)行相應(yīng)的處理過(guò)程,TensorRT的處理過(guò)程包括對(duì)前端訓(xùn)練的神經(jīng)網(wǎng)絡(luò)進(jìn)行模型量化、內(nèi)核節(jié)點(diǎn)融合、數(shù)據(jù)層優(yōu)化選擇等一系列優(yōu)化措施來(lái)提升對(duì)GPU內(nèi)存和帶寬的使用效率,最終形成了不同的深度學(xué)習(xí)運(yùn)行時(shí)引擎Runtime Engine。
在深度學(xué)習(xí)的訓(xùn)練和推理中十分常見(jiàn)的是對(duì)運(yùn)算輸入矩陣設(shè)置半精度,而乘積結(jié)果卻要求全精度輸出,因?yàn)樵赥ensor Core的特性是增加了浮點(diǎn)計(jì)算的計(jì)算模式且參照了標(biāo)準(zhǔn)算術(shù)邏輯單元ALU的運(yùn)算模式,可以更加適配矩陣運(yùn)算。因此,可以說(shuō)Tensor Core很好的混合使用單精度和半精度數(shù)據(jù)格式,這樣就可以解決不同精度的數(shù)據(jù)對(duì)其運(yùn)算,提升計(jì)算速度,從而很好的壓縮整個(gè)計(jì)算模型的大小。這也是英偉達(dá)GPU模型的最核心優(yōu)勢(shì)體現(xiàn)。
GPU中另一個(gè)比較核心的軟件棧是指的位于線性代數(shù)計(jì)算模塊中的CUDA平臺(tái)。CUDA核全稱Compute Unified Device Architecture,是指通用計(jì)算并行架構(gòu)。通過(guò)構(gòu)建可用的硬件平臺(tái),可以在多線程設(shè)計(jì)的GPU上運(yùn)行通用并行計(jì)算,專門(mén)用于解決GPU編程的復(fù)雜性問(wèn)題。此外,作為軟件棧的集合,CUDA還可以有效的進(jìn)行設(shè)備驅(qū)動(dòng)和SDK。通常深度學(xué)習(xí)的標(biāo)準(zhǔn)配置是將CUDA所開(kāi)辟的靈活的開(kāi)發(fā)接口(如OpenCL、OpenGL等API)運(yùn)算輔助GPU基礎(chǔ)軟件棧,從而實(shí)現(xiàn)針對(duì)不同數(shù)據(jù)的運(yùn)算過(guò)程。如下圖表示了CUDA核在密集并行計(jì)算的計(jì)算模型。通過(guò)下載CUDA核編程算法,可以從軟件部署、域特征庫(kù)、決策執(zhí)行行為、開(kāi)發(fā)社區(qū)、標(biāo)準(zhǔn)匯編等幾個(gè)方向?yàn)镃UDA的各個(gè)開(kāi)發(fā)者提供幫助。
對(duì)于傳統(tǒng)的CNN深度學(xué)習(xí)來(lái)說(shuō),如果不能做到較好的加速器設(shè)置,那么在實(shí)時(shí)性要求高的自動(dòng)駕駛行業(yè)內(nèi),將不能很好的用在實(shí)時(shí)檢測(cè)中。因此,英偉達(dá)基于這樣的需求,專門(mén)在Xavier上開(kāi)發(fā)了一款深度學(xué)習(xí)加速器DLA(Deep Learning Accelerator),用于涵蓋整個(gè)CNN神經(jīng)網(wǎng)絡(luò)的計(jì)算過(guò)程。該加速器的核心是可以配置多個(gè)MAC陣列來(lái)支持211個(gè)Int8、210個(gè)Int16和FP16數(shù)據(jù)的調(diào)度和運(yùn)算。
圖中主要包含幾大部分:數(shù)據(jù)輸入部分、數(shù)據(jù)預(yù)處理部分、數(shù)據(jù)計(jì)算部分、數(shù)據(jù)后處理部分。其中數(shù)據(jù)輸入部分是整個(gè)模塊需要從芯片的Memory中取出,并進(jìn)行壓縮后形成數(shù)據(jù)權(quán)重信息Weight和激活信息Activation存儲(chǔ)到統(tǒng)一的緩存Buffer中。然后Tensor Execution Micro-Controller來(lái)稀疏化權(quán)重并解壓縮、Winograd變換后進(jìn)行卷積運(yùn)算優(yōu)化。其中,Winograd卷積法可以針對(duì)尺寸較小的卷積核,節(jié)省一半的乘法器數(shù)量與功耗。數(shù)據(jù)計(jì)算部分實(shí)際是進(jìn)行MAC運(yùn)算,即對(duì)3x3 的Kernel卷積核進(jìn)行變換,通過(guò)不同的方式(如脈動(dòng)方式、廣播方式、多播方式、NOC等)控制數(shù)據(jù)流動(dòng)。后處理部分則是進(jìn)行常規(guī)的全鏈接、函數(shù)激活、池化、卷積等操作,然后將結(jié)果寫(xiě)回內(nèi)存DMA區(qū)域。
英偉達(dá)針對(duì)DLA技術(shù)分別在Xvaier和Orin升級(jí)了不同的產(chǎn)品特性。意在新一代DLA增加本地緩沖技術(shù),提高效率減少DRAM帶寬。此外,提升結(jié)構(gòu)化稀疏過(guò)程中的深度卷積處理器和硬件調(diào)度器的性能。因此,升級(jí)版DLA在INT8下的稀疏算力可以最高達(dá)105 TOPS。
cuDNN是英偉達(dá)系列芯片的深度神經(jīng)網(wǎng)絡(luò)庫(kù),這一庫(kù)函數(shù)是是英偉達(dá)專門(mén)用于GPU加速設(shè)計(jì)的。從底層邏輯上優(yōu)化了傳統(tǒng)神經(jīng)網(wǎng)絡(luò)中的全鏈接、池化、卷積等操作。并且開(kāi)發(fā)過(guò)程需要確保與主流深度學(xué)習(xí)框架相適配。
其CPU內(nèi)部架構(gòu)采用了12個(gè)ARM公司Cortex-A78內(nèi)核,每8個(gè)CPU核(每4個(gè)CPU內(nèi)核組成一個(gè)CPU簇)并均分到4個(gè)集群,具備獨(dú)立的時(shí)鐘管理面,且共享2MB的二級(jí)緩存,最大支持2.2GHz的CPU頻率。具備超標(biāo)量,可變長(zhǎng)度,無(wú)序流水線特性;具有分支目標(biāo)緩沖區(qū)的動(dòng)態(tài)分支預(yù)測(cè)和使用先前分支歷史的分支方向預(yù)測(cè)器、返回堆棧、靜態(tài)預(yù)測(cè)器和間接預(yù)測(cè)器。
英偉達(dá)系列芯片的視頻編解碼是通過(guò)兩大技術(shù)模塊來(lái)實(shí)現(xiàn)的。即視頻加速器PVA和視頻成像合成器VIC,這兩大模塊可以正常實(shí)現(xiàn)視頻圖像的基礎(chǔ)ISP處理。且對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)也可以通過(guò)其單獨(dú)定義的視覺(jué)編程接口進(jìn)行統(tǒng)一開(kāi)發(fā)。
其中Drive OS是其對(duì)應(yīng)的操作系統(tǒng),由實(shí)時(shí)運(yùn)行操作系統(tǒng)RTOS、CUDA、TensorRT等模塊組成,可提供啟動(dòng)、服務(wù)、防火墻和軟件升級(jí)等應(yīng)用服務(wù)和實(shí)時(shí)運(yùn)行環(huán)境。在Drive OS上是一個(gè)中間件框架DriveWorks,他是一個(gè)由軟件庫(kù)、應(yīng)用程序、工具鏈包組成的具備高內(nèi)聚、低耦合,可用于進(jìn)行模塊化開(kāi)發(fā)的軟件架構(gòu)。
最后,為了從頂層進(jìn)行自動(dòng)駕駛應(yīng)用軟件開(kāi)發(fā),應(yīng)為還配置了Drive IX和Drive AV分別從感知和規(guī)控兩個(gè)方面提供給主機(jī)廠或Tier1進(jìn)行設(shè)計(jì)開(kāi)發(fā)。對(duì)于感知模型來(lái)說(shuō),需要在自動(dòng)駕駛汽車高性能車端AI平臺(tái)上部署有效的深度學(xué)習(xí)網(wǎng)絡(luò)模型和算法,因此英偉達(dá)也在其芯片系統(tǒng)架構(gòu)上采用了Drive Sim云計(jì)算平臺(tái),可以為自動(dòng)駕駛系統(tǒng)設(shè)計(jì)開(kāi)發(fā)提供各類不同場(chǎng)景的仿真場(chǎng)景條件,并通過(guò)硬件在環(huán)的方式進(jìn)行測(cè)試和AI算法校驗(yàn)。這樣運(yùn)行在Drive AGX上的AI模型就可以進(jìn)行實(shí)時(shí)的自動(dòng)駕駛功能道路仿真測(cè)試和有效性測(cè)驗(yàn)了,最終這類基礎(chǔ)服務(wù)可以很好的打通數(shù)據(jù)采集、標(biāo)注、訓(xùn)練、仿真這一系列在數(shù)據(jù)閉環(huán)中比較經(jīng)典的算法流水線了。
現(xiàn)在被各家主機(jī)廠廣泛采用的兩類英偉達(dá)芯片分別是Xavier和Orin系列兩款。其中,Xavier的性能適合搭載在L2+級(jí)以下的自動(dòng)駕駛系統(tǒng)車型中,Orin系列的性能適合搭載在L3級(jí)以上的自動(dòng)駕駛系統(tǒng)車型中,Xavier在國(guó)內(nèi)的首搭項(xiàng)目是小鵬P7的高階智駕功能上。
Xavier是一款采用12nm工藝,總體INT8峰值算力為30TOPS和750Gbps I/O數(shù)據(jù)交換帶寬的一款專為自動(dòng)駕駛設(shè)計(jì)的芯片。英偉達(dá)首次在Xavier上采用了CPU+GPU+ASIC芯片混合技術(shù)路線。GPU包含Volta架構(gòu)的512顆CUDA Core,占比最重;CPU為NVIDIA自研8核ARM64架構(gòu)(代號(hào)Carmel),占比次之。其中,搭載的兩個(gè)專用ASIC,即深度學(xué)習(xí)加速模塊DLA模塊用于推理計(jì)算和向量處理單元PVA用于傳統(tǒng)視覺(jué)算法加速。
基于以上優(yōu)勢(shì)分析,Xavier可以用于處理智能汽車的視覺(jué)里程測(cè)量、傳感器融合、定位和映射、障礙物檢測(cè)、路徑規(guī)劃等眾多場(chǎng)景。
英偉達(dá)在2019推出的Orin系列芯片由最高算力(Orin-x)達(dá)到254TOPS。目前在自動(dòng)駕駛的高端領(lǐng)域,很多主機(jī)廠在布局自動(dòng)駕駛系統(tǒng)域控架構(gòu)的時(shí)候通常會(huì)考慮利用英偉達(dá)的Orin系列芯片進(jìn)行算力布局。其中,Orin的硬件和軟件架構(gòu),包括新一代Ampere架構(gòu)的GPU、ARM Hercules CPU、第二代深度學(xué)習(xí)加速器DLA,第二代視覺(jué)加速器PVA、視頻編解碼器、寬動(dòng)態(tài)范圍的ISP以及基于Orin的軟件棧,都是提升英偉達(dá)端到端解決方案的關(guān)鍵架構(gòu)設(shè)計(jì)要素。
另外,Orin系列還從功能安全的角度出發(fā)引入了車規(guī)級(jí)的功能安全島設(shè)計(jì),這里我們會(huì)針對(duì)性的進(jìn)行架構(gòu)拆解分析。
由于英偉達(dá)系列芯片的宗旨就是在錯(cuò)綜復(fù)雜的自動(dòng)駕駛領(lǐng)域,不斷優(yōu)化神經(jīng)網(wǎng)絡(luò)方面的計(jì)算復(fù)雜度,提升CPU的邏輯計(jì)算力,能夠釋放更多的GPU資源來(lái)進(jìn)行AI計(jì)算。對(duì)于GPU而言,其上的高精度向量由CUDA Core中的32/64位浮點(diǎn)數(shù)進(jìn)行運(yùn)算,而低精度浮點(diǎn)運(yùn)算整型數(shù)據(jù)或16位以下浮點(diǎn)數(shù),則通過(guò)Tensor Core 進(jìn)行運(yùn)算。以便確保其動(dòng)態(tài)任務(wù)能夠適配上更多的自動(dòng)駕駛算力、算法、軟件協(xié)議棧等模型。目前,應(yīng)為系列系列芯片在國(guó)內(nèi)的各家供應(yīng)商之間已經(jīng)處于瘋搶的狀態(tài)。
整個(gè)英偉達(dá)系列芯片對(duì)應(yīng)用端開(kāi)放了各類不同的軟件開(kāi)發(fā)包,可以支持從底層軟件到上層軟件的整個(gè)全棧功能開(kāi)發(fā)。
如下圖所示,表示了英偉達(dá)面向智能汽車的軟件架構(gòu)設(shè)計(jì)模塊。從底至上分別表示硬件模塊HW,硬件抽象層Low Level API,跨平臺(tái)多媒體框架Gstreamer以及應(yīng)用軟件Application。
其中在如下軟件架構(gòu)中,機(jī)器視覺(jué)、神經(jīng)網(wǎng)絡(luò)等幾乎是貫穿設(shè)備的整個(gè)處理過(guò)程。隨著人工智能在智能汽車上的廣泛應(yīng)用和發(fā)展,神經(jīng)網(wǎng)絡(luò)模型的規(guī)模越來(lái)越大,不管是訓(xùn)練還是部署,對(duì)于智能汽車域控制器的算力,帶寬和存儲(chǔ)的要求越來(lái)越高。同時(shí),AI算法內(nèi)在的稀疏性和模型壓縮等優(yōu)化技術(shù)帶來(lái)的稀疏特征給降低計(jì)算需求帶來(lái)難得的機(jī)會(huì),是業(yè)界思考和研究的熱點(diǎn)。同時(shí),這類算法所承載的設(shè)備受限于功耗、能耗、存儲(chǔ)等,因此并不能在這類設(shè)備上部署復(fù)雜的模型。因此,模型壓縮則是一個(gè)解決途徑,能夠大幅降低深度學(xué)習(xí)模型的尺寸。
對(duì)于像英偉達(dá)系列芯片這樣以GPU為核心的AI計(jì)算系統(tǒng),如何利用這一機(jī)會(huì),涉及到軟硬件架構(gòu)設(shè)計(jì)和實(shí)現(xiàn)的方方面面。如何在不影響基本的通用編程模型的前提下,平衡成本和收益,讓計(jì)算資源發(fā)揮最大效能,是一個(gè)非常復(fù)雜而有挑戰(zhàn)的問(wèn)題。英偉達(dá)在這方面一直在不斷改進(jìn)和突破,特別是在其對(duì)真實(shí)算力的利用率上利用先進(jìn)的矩陣稀疏化方法實(shí)現(xiàn)了高效的處理方法。
對(duì)于智駕系統(tǒng)來(lái)說(shuō),英偉達(dá)芯片可以根據(jù)具體的視覺(jué)傳感器類型進(jìn)行不同的處理策略。如下圖表示一種典型的行泊車分時(shí)復(fù)用的視覺(jué)信息處理圖。其中的連接方式表示的是智能行車功能的處理邏輯。
英偉達(dá)的深度學(xué)習(xí)加速器(無(wú)論是GPU還是DLA)都是允許對(duì)實(shí)時(shí)庫(kù)進(jìn)行最優(yōu)化編程的,這樣可以大大提升計(jì)算效率。其中,GPU的編程模式最為靈活。
如下圖所示,智能行車功能需要應(yīng)用到完整的行車攝像頭(包含前視、側(cè)視攝像頭感知信息)。
我們將具體的數(shù)據(jù)整體融合到“mega kernels”中,以將數(shù)據(jù)保存在本地計(jì)算核中(由于數(shù)據(jù)存取在延遲和功率方面是很好資源的,因此明智地使用內(nèi)存資源非常重要)。
首先,輸入的原始圖像會(huì)經(jīng)過(guò)ISP圖像處理模塊進(jìn)行典型的圖像處理,如白平衡、圖像去噪、畸變矯正、顏色校正、RGB轉(zhuǎn)YUV等初級(jí)圖像處理。隨后,考慮到行車視覺(jué)會(huì)建立相關(guān)的深度神經(jīng)網(wǎng)絡(luò)模型進(jìn)行相應(yīng)的深度學(xué)習(xí),通過(guò)DLA、PVA、GPU三大模塊共同實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)模型加速??紤]到具體場(chǎng)景的分時(shí)復(fù)用,泊車攝像頭在這類場(chǎng)景下通常只需要輸出視頻做記錄即可,因此第二條鏈路則是只考慮進(jìn)行原始視頻的基礎(chǔ)處理,渲染及數(shù)據(jù)融合等。最后,泊車攝像頭所生成的視覺(jué)會(huì)輸入到行車終端用于在行車場(chǎng)景重構(gòu)中進(jìn)行渲染顯示。毫米波雷達(dá)鏈路由于只輸入目標(biāo)級(jí)數(shù)據(jù),因此,只考慮通過(guò)CPU的部分邏輯算力處理和GPU的并行運(yùn)算。
簡(jiǎn)單來(lái)說(shuō),稀疏化是一種聰明的數(shù)據(jù)處理和模型壓縮方式。它從人類大腦得到靈感,讓神經(jīng)網(wǎng)絡(luò)在計(jì)算時(shí)僅啟用所需神經(jīng)元。稀疏化計(jì)算的技術(shù)原理是指在原有AI計(jì)算的大量矩陣運(yùn)算中,將含有零元素或無(wú)效元素剔除,以加快計(jì)算速度。它在需要海量數(shù)據(jù)處理的AI加速計(jì)算中優(yōu)勢(shì)尤為突出,能讓算力超越極限,讓芯片得以完成復(fù)雜的AI任務(wù),顯著降低能耗和成本。
比如經(jīng)典的多模態(tài)稀疏化模型,不僅大幅減少計(jì)算量、顯著提升性能,而且在零樣本訓(xùn)練的情況下具有更高的精度。
針對(duì)模型加速而言,模型稀疏是一個(gè)良好的特性。那么什么是稀疏模型呢?模型權(quán)值中,零值比較多,一般可以通過(guò)稀疏度(零值元素的占比)來(lái)衡量。稀疏的方式分為結(jié)構(gòu)化稀疏和非機(jī)構(gòu)化稀疏。結(jié)構(gòu)化稀疏好處是更好的利用硬件性能來(lái)實(shí)現(xiàn)加速,壞處是模型精度難以保證。非結(jié)構(gòu)化稀疏好處是模型精度一般可以保證,但卻不能保證很好的硬件性能。
稀疏的模型與數(shù)據(jù)展現(xiàn)出來(lái)了不規(guī)則的非結(jié)構(gòu)化特征,這與傳統(tǒng)面向稠密數(shù)據(jù)與模型設(shè)計(jì)的硬件電路的結(jié)構(gòu)化特征不一致。算法非結(jié)構(gòu)化與硬件結(jié)構(gòu)化特征不一致,導(dǎo)致典型稀疏算法在傳統(tǒng)硬件(如CPU)上處理性能與應(yīng)用需求相差3個(gè)數(shù)量級(jí)。
整體上看,數(shù)據(jù)內(nèi)存占用越少,可表示的動(dòng)態(tài)范圍越低,精度也越低,浮點(diǎn)數(shù)可表示的范圍比整數(shù)要多得多。大多數(shù)深度學(xué)習(xí)模型在訓(xùn)練Training時(shí),梯度更新往往比較微小,一般模型參數(shù)都采用較高精度的FP32數(shù)據(jù)格式進(jìn)行訓(xùn)練。但推理Inference時(shí),模型可能需要更長(zhǎng)時(shí)間來(lái)預(yù)測(cè)結(jié)果,在端側(cè)會(huì)影響用戶體驗(yàn)。因此,需要提升計(jì)算速度,常采用更低精度的FP16或INT8。
量化是針對(duì)訓(xùn)練好的模型的權(quán)重或計(jì)算op,將高精度、“大塊頭”的數(shù)據(jù)轉(zhuǎn)換為低精度去表示和計(jì)算,一般會(huì)關(guān)注FP16/INT8這些低精度的數(shù)據(jù)類型的量化(FP32->
INT8)。
如下圖顯示了簡(jiǎn)單的基于矩陣稀疏化技術(shù)壓縮感知的視覺(jué)信號(hào)采樣、傳輸和恢復(fù)過(guò)程。
,s:n維稀疏變換信號(hào),:稀疏變換矩陣;s中只有k個(gè)非零元素,成為k稀疏度。
,表示稀疏反變換過(guò)程,則可以通過(guò)前序幀所算出來(lái)的稀疏變換矩陣反向求出稀疏重構(gòu)信息。
,基于壓縮感知的思路是:在測(cè)量矩陣Φ和稀疏變換矩陣已知的情況下,由信號(hào)的 M 個(gè)測(cè)量y來(lái)重構(gòu)原始N維信號(hào)x。這里的關(guān)鍵是:如果信號(hào)s足夠稀疏,那么對(duì)于 y 的 M 個(gè)測(cè)量就可以重構(gòu) N 維原始信號(hào)。這個(gè)問(wèn)題可以由以下的優(yōu)化問(wèn)題來(lái)描述:
如上加速效果與計(jì)算量和GEMM的維度有關(guān),如下圖表示英偉達(dá) A100Tensor Core上的稀疏與稠密Int8下的GEMM計(jì)算對(duì)比圖,通常GEMM規(guī)模越大,加速效果越接近2x。
然而,模型壓縮可能引起不規(guī)則的計(jì)算模式,對(duì)于以往針對(duì)稠密神經(jīng)網(wǎng)絡(luò)加速器,并不能受益于模型壓縮。因此,需要提出一些有效的稀疏卷積的表達(dá)方式,精簡(jiǎn)卷積規(guī)則(Concise Convolution Rule,CCR)便是一種比較好的方法,它將卷積分解成較好的稠密子卷積,以確保稠密子卷積能夠很容易的利用現(xiàn)有的加速器進(jìn)行處理。同時(shí),加速器的吞吐量能夠受益于加速器提供的加速性能和稀疏化降低的計(jì)算量。如下圖表示了精簡(jiǎn)卷積加速能力的示意圖。
其運(yùn)算過(guò)程是通過(guò)將稀疏卷積核和輸入特征圖分解成多個(gè)相對(duì)稠密的子卷積核和子輸入特征圖,這些子卷積核或特征圖可能根據(jù)不同的情況適配如上三類不同的神經(jīng)網(wǎng)絡(luò)特性圖,并進(jìn)行合適的適配和卷積運(yùn)算。該部分計(jì)算的結(jié)果需要累加到輸出特征圖中。這種方式可以降低計(jì)算量的同時(shí),維持了計(jì)算的卷積特性,能夠很好地映射到現(xiàn)有的稠密卷積神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)加速器中。
對(duì)于英偉達(dá)系列芯片來(lái)說(shuō),為了提升計(jì)算效能,稀疏化便是應(yīng)用到極致的一種算法。對(duì)于其上的稀疏矩陣來(lái)說(shuō),Orin中的CUDA Core和Tensor Core分別包含有2048個(gè)和64個(gè)。與上一代Volta架構(gòu)的GPU相比,Tensor Core引入了對(duì)稀疏性的支持,可以提供INT8的稀疏算力高達(dá)170 TOPS,Cuda Core可以提供32位浮點(diǎn)算力為5.3TFLOPs。
以上提到的神經(jīng)網(wǎng)絡(luò)技術(shù),對(duì)于整個(gè)芯片算力的提升都涉及到被稱之為稀疏性Sparsity的技術(shù)算法。其稀疏化技術(shù)針對(duì)神經(jīng)網(wǎng)絡(luò)核心主要有兩個(gè)部分:
對(duì)構(gòu)造的權(quán)重網(wǎng)絡(luò)進(jìn)行密集訓(xùn)練,隨后再將網(wǎng)絡(luò)權(quán)重進(jìn)行修剪(通常為2:4的稀疏矩陣)。
如下圖所示,其采用的2:4稀疏度(即2:4的壓縮格式只需要2bit的metadata),每一組的4個(gè)值都至少包含兩個(gè)非零值。需要對(duì)非零權(quán)重進(jìn)行微調(diào)完成后,就可以有效的壓縮權(quán)重網(wǎng)絡(luò),使得數(shù)據(jù)占用空間和帶寬均減少為原來(lái)的一半。新矩陣存儲(chǔ)非零值,加一個(gè)2bit的索引數(shù)組可以進(jìn)行位置編碼metadata。同時(shí),通過(guò)非零值精準(zhǔn)快速提取,位置可根據(jù)編碼metadata獲取,可以加快對(duì)內(nèi)存訪問(wèn)速度。如果是16 bit數(shù)據(jù),相比于原始存儲(chǔ)方式,壓縮后的矩陣可以節(jié)省約44%的空間。
針對(duì)單個(gè)數(shù)據(jù)的稀疏化加速過(guò)程參照上圖的壓縮方式,比如4個(gè)16位數(shù)據(jù):原有格式4x16=64bit,壓縮后格式2*16+2*2=36bit。
稀疏化的Tensor Core中可根據(jù)權(quán)重索引過(guò)濾掉權(quán)重網(wǎng)絡(luò)中多余的0,在做內(nèi)積時(shí),只需要讓權(quán)值不為0的部分和輸入的Tensor進(jìn)行乘積即可。通過(guò)跳零計(jì)算模式可以使數(shù)學(xué)計(jì)算的吞吐量翻倍,從而可以大大減少矩陣乘法所需計(jì)算量。
如上圖表示了英偉達(dá)芯片Tensor Core上進(jìn)行對(duì)應(yīng)的矩陣卷積乘法的計(jì)算方法。左圖表示稠密矩陣乘法的計(jì)算結(jié)果,右圖表示稀疏矩陣乘法GEMM的計(jì)算結(jié)果。將 MxNxK 通用矩陣乘法 映射到 Tensor Core。原始密集矩陣 A,大小為 MxK(左側(cè))在使用 2:4 稀疏化修剪后變?yōu)?Mxk/2(右側(cè)),A中的稀疏值可以跳過(guò)不必要的零乘法。在稠密和稀疏通用矩陣乘法中,B和C分別是稠密的KxN和MxN矩陣。
矩陣乘法計(jì)算過(guò)程是C=A*B。即左側(cè)A矩陣采用dense矩陣存儲(chǔ),針對(duì)結(jié)果C矩陣的每個(gè)位置,有2K次讀取操作,分別是從矩陣A中讀取1*K的數(shù)組和從矩陣B中讀取K*1數(shù)組,總計(jì)是2MNK次讀取操作。
右側(cè)B矩陣采用Sparse矩陣存儲(chǔ),針對(duì)結(jié)果C矩陣的每一個(gè)位置,對(duì)應(yīng)K次讀取操作,分別是從壓縮后的稀疏矩陣中取1*K/2的數(shù)組,利用2bit索引向量從矩陣B中取1*K/2的數(shù)組,總計(jì)MNK次讀取。
這里需要說(shuō)明的是,雖然稀疏技術(shù)能夠有效降低神經(jīng)網(wǎng)絡(luò)算法的計(jì)算和存儲(chǔ)開(kāi)銷,提升計(jì)算系統(tǒng)的能量效率,但稀疏技術(shù)與存內(nèi)計(jì)算的結(jié)合仍然存在諸多挑戰(zhàn)。
人工智能在智能汽車上的快速應(yīng)用面臨計(jì)算平臺(tái)上算力激增與能耗受限的挑戰(zhàn)。隨著人工智能在更廣泛場(chǎng)景的應(yīng)用與落地,算法所處理的模型與數(shù)據(jù)體現(xiàn)出稀疏特性。如何高效處理稀疏數(shù)據(jù)成為人工智能進(jìn)一步發(fā)展的關(guān)鍵因素。而英偉達(dá)這一些列芯片也正是抓準(zhǔn)這一契機(jī),通過(guò)在算法稀疏化上實(shí)現(xiàn)突破,而且結(jié)合軟、硬件協(xié)同優(yōu)化的方式,將稀疏化從算法層面提升到計(jì)算層面。稀疏化計(jì)算產(chǎn)品以其高算力、低功耗、高精度的優(yōu)勢(shì)。不斷優(yōu)化其算法邏輯來(lái)實(shí)現(xiàn)更高層級(jí)的算力能力提升。