欧美色图 亚洲|野外口爆视频国产|久久精品视频观看|97精品人人抽插

如何用算法給自動(dòng)駕駛運(yùn)算平臺(tái)加速?

2018-01-03 09:43:32 來源:中興開發(fā)者社區(qū) 熱度:
自動(dòng)駕駛和機(jī)器人對(duì)數(shù)據(jù)的處理都要求很強(qiáng)的實(shí)時(shí)性,因此需要強(qiáng)大的計(jì)算能力。而有很多與計(jì)算機(jī)視覺、深度學(xué)習(xí)相關(guān)的功能,數(shù)據(jù)量極大,如果采用純CPU的系統(tǒng)架構(gòu),運(yùn)行時(shí)間會(huì)很長(zhǎng),達(dá)不到期望的處理速度和實(shí)時(shí)性要求。本文將結(jié)合我們?cè)跈C(jī)器人算法加速上的實(shí)踐經(jīng)驗(yàn)和對(duì)自動(dòng)駕駛運(yùn)算平臺(tái)的了解進(jìn)行分享。
 
作者:王文輝【天津最早從事AI算法及創(chuàng)新工作的骨干之一、目前為AI 算法FPGA加速工程師】
 
一、機(jī)器人算法加速實(shí)踐
 
機(jī)器人的核心控制單板屬于嵌入式設(shè)備,要求功耗低、面積小,用傳統(tǒng)的CPU+GPU的方案無法滿足要求。因此我們采用了FPGA SOC+HLS的方案,對(duì)計(jì)算機(jī)視覺和深度學(xué)習(xí)相關(guān)的算法進(jìn)行加速。不僅利用了FPGA的高并發(fā)性能,也利用了HLS的高效開發(fā)效率,具體包含下述四個(gè)方面:
 
1.高度集成的SOC方案
 
為了解決單板的體積和功耗問題,選擇xilinx的SOC芯片作為處理主芯片,該芯片包含一片高性能FPGA,相比傳統(tǒng)的CPU+FPGA方案,SOC方案有如下優(yōu)點(diǎn):
 
i.功耗
 
如果采用傳統(tǒng)的CPU(4W)+FPGA(15W)分體式解決方案,整體功耗接近20W。SOC方案按照FPGA資源利用率為80%來計(jì)算,典型功耗在10W左右,遠(yuǎn)低于CPU+FPGA的方案,這對(duì)很多采用電池供電的嵌入式設(shè)備來說,待機(jī)時(shí)間大大延長(zhǎng)了。
 
ii.BOM面積
 
高集成的方案大大節(jié)省了單板的PCB面積,進(jìn)而縮小了整機(jī)的體積。
 
2.HLS快速開發(fā)
 
CPU需要很強(qiáng)的通用性來處理各種不同的數(shù)據(jù)類型,同時(shí)又要邏輯判斷又會(huì)引入大量的分支跳轉(zhuǎn)和中斷的處理,這些都使得CPU的內(nèi)部結(jié)構(gòu)異常復(fù)雜,所以,用CPU進(jìn)行流程控制和調(diào)度時(shí)很高效,但如果程序中需要進(jìn)行大量的復(fù)雜計(jì)算,CPU則顯得力不從心。
 
現(xiàn)在的深度學(xué)習(xí)和機(jī)器視覺領(lǐng)域,恰恰是包含大量的數(shù)學(xué)運(yùn)算,因此需要采用其它擁有大量計(jì)算單元的器件進(jìn)行硬件加速處理,常用的有DSP、GPU和FPGA,主流的架構(gòu)是主控制流程在CPU上運(yùn)行,DSP、GPU和FPGA做數(shù)據(jù)運(yùn)算。
 
由于FPGA內(nèi)部有大量的DSP和可編程模塊,因此是效率最高的選擇,但它的開發(fā)語言(Verilog和VHDL)相對(duì)底層,且和DSP、GPU、CPU代碼無法兼容,所以開發(fā)群體相對(duì)小眾,編程效率較低,開發(fā)周期長(zhǎng)。如下圖:
 
鑒于此,HLS開發(fā)方式應(yīng)運(yùn)而生,HLS即高層次描述(High Level Synthesis),之后綜合成可用的網(wǎng)表文件的技術(shù)。這里的“高”指采用C/C++進(jìn)行編程,而不是傳統(tǒng)的Verilog和VHDL語言。Vivado工具將C程序轉(zhuǎn)換成Verilog代碼后,進(jìn)行綜合、優(yōu)化、布局布線等操作。開發(fā)流程圖如下:
 
應(yīng)用了HLS開發(fā)方式后,開發(fā)周期大大縮短,如下圖:
 
3.高效的驗(yàn)證環(huán)境
 
在FPGA開發(fā)過程中,仿真驗(yàn)證階段占用了70%左右的時(shí)間,其中包括了反復(fù)編寫和優(yōu)化激勵(lì)、結(jié)果驗(yàn)證的過程。使用HLS開發(fā)后,這部分工作量會(huì)大大縮短,加快開發(fā)進(jìn)度。
 
Vivado開發(fā)包括一個(gè)Co-Sim的過程,整個(gè)過程包括如下幾個(gè)步驟,最終完成RTL代碼的仿真。
 
Co-Sim根據(jù)C語言的testbench建立一個(gè)RTL代碼和C語言的testbench之間的通信方式,來傳輸仿真激勵(lì)數(shù)據(jù)。
 
Co-Sim根據(jù)C語言的testbench來生成仿真激勵(lì)。
 
Co-Sim啟動(dòng)仿真,將激勵(lì)灌入并行處理后的RTL代碼,并且驗(yàn)證輸出是否正確。
 
整個(gè)驗(yàn)證過程,Co-Sim工具將開發(fā)人員從繁雜的編寫RTL激勵(lì)和結(jié)果驗(yàn)證中解放出來,只需將精力放在如何在C語言層面編寫激勵(lì)即可,因此大大提高了開發(fā)效率。
 
4.HLS的優(yōu)化
 
整個(gè)開發(fā)過程中,如何寫出適合HLS高效綜合的C語言代碼,貫穿整個(gè)HLS開發(fā)主線,也是難點(diǎn)所在。主要的優(yōu)化方式有如下幾點(diǎn),供大家參考:
 
i. 吞吐量?jī)?yōu)化
 
數(shù)據(jù)吞吐量定義為單位時(shí)間內(nèi)模塊處理數(shù)據(jù)的數(shù)量,是衡量加速算法的一個(gè)重要指標(biāo),F(xiàn)PGA內(nèi)改進(jìn)數(shù)據(jù)吞吐量的方法有Pipeline和Dataflow兩種。
 
下圖A是沒有進(jìn)行Pipeline處理的代碼,只有當(dāng)RD、CMP和WR整個(gè)處理過程完成后,才會(huì)進(jìn)行下一組數(shù)據(jù)的處理,即處理一組數(shù)據(jù)需要3個(gè)時(shí)鐘周期。圖B是進(jìn)行Pipeline優(yōu)化后的代碼,每個(gè)時(shí)鐘周期都有數(shù)據(jù)輸入并被處理,所以吞吐量是圖A的3倍。
 
Dataflow是另外一種在函數(shù)之間進(jìn)行并行優(yōu)化的方式。下圖是沒有進(jìn)行Dataflow并行計(jì)算優(yōu)化的模塊,函數(shù)間依次處理一組數(shù)據(jù),所有處理流程結(jié)束后,input接口才會(huì)允許進(jìn)行下一組數(shù)據(jù)。
 
采用Dataflow方式后如下圖,會(huì)在函數(shù)間增加Channel,這是一個(gè)用于緩存中間數(shù)據(jù)的buffer,當(dāng)一級(jí)function處理完數(shù)據(jù)后將其存入緩存,function可以繼續(xù)處理下一組數(shù)據(jù),而不用等待所有流程處理完畢后再繼續(xù)工作。
 
Pipeline和Dataflow都是增加并行處理的有效手段。
 
ii. Latency優(yōu)化
 
Latency是處理一組數(shù)據(jù)的時(shí)間,這是體現(xiàn)算法實(shí)時(shí)性的重要指標(biāo)。HLS可以通過設(shè)置編譯選項(xiàng)來設(shè)置一個(gè)函數(shù)的Latency,優(yōu)化函數(shù)處理時(shí)間。另外,還可以通過合并loop來優(yōu)化Latency,因?yàn)槊總€(gè)C語言的loop都會(huì)被綜合成一個(gè)或多個(gè)狀態(tài)機(jī),而多個(gè)狀態(tài)機(jī)級(jí)聯(lián)的時(shí)候一定會(huì)增加額外的處理延遲。我們可以使用merge指令來合并多個(gè)狀態(tài)機(jī),優(yōu)化整體處理Latency。
 
iii. 面積優(yōu)化
 
在FPGA上實(shí)現(xiàn)一個(gè)算法,除了速度和吞吐量,算法占用的資源也是重要的考量指標(biāo)。一個(gè)占用資源過多的算法是不可行的,或者說是代價(jià)昂貴的,可以通過優(yōu)化數(shù)據(jù)的bit位寬來優(yōu)化占用的資源。
 
在C語言中通常我們只會(huì)使用char/int/float等固定長(zhǎng)度的數(shù)據(jù)類型,而在FPGA中,由于高度可編程,我們可以隨意定義自己想要使用的數(shù)據(jù)類型的寬度,例如我們可以根據(jù)需要,使用12/11/10bit位寬的整型數(shù)據(jù),這樣大大減少了資源使用數(shù)量。
 
當(dāng)C語言中有很多小的Array時(shí)會(huì)消耗大量FPGA中的RAM資源,HLS支持RAM合并的功能,即將很多小的Array合并放入一個(gè)RAM塊中,減少RAM消耗的數(shù)量。
 
二、效益和收益
 
HLS是一個(gè)橋接硬件和軟件開發(fā)領(lǐng)域的工具,給FPGA開發(fā)提供了很多好處,主要有:
 
由于可以在更高抽象語言的基礎(chǔ)上進(jìn)行開發(fā),極大的提高了硬件開發(fā)人員的生產(chǎn)力。
 
降低了FPGA開發(fā)門檻,使軟件開發(fā)人員可以快速的介入FPGA開發(fā)。
 
以下面四個(gè)算法加速為例,從開發(fā)速度和工作量上來看HLS帶來的收益。
 
1.開發(fā)時(shí)間大大縮短
 
開發(fā)時(shí)間是體現(xiàn)效率、快速推出版本的一個(gè)重要指標(biāo),通過使用HLS開發(fā)方式,會(huì)使整個(gè)團(tuán)隊(duì)在視覺圖像處理算法和CNN上很大提升。
 
下表是兩種開發(fā)方式下的人力對(duì)比,其中RTL開發(fā)方式?jīng)]有實(shí)際做,是根據(jù)算法的復(fù)雜度進(jìn)行預(yù)估的。從對(duì)比來看,HLS開發(fā)效率至少是RTL的3倍。
 
2. 代碼行數(shù)減少
 
代碼行數(shù)是體現(xiàn)工作量,尤其是后期維護(hù)工作量的一個(gè)重要指標(biāo)。HLS后期維護(hù)的是C語言代碼,無論從代碼量還是可讀性來說,都遠(yuǎn)遠(yuǎn)優(yōu)于Verilog。
 
下表是兩種開發(fā)方式下的代碼行數(shù)對(duì)比,其中RTL方式?jīng)]有實(shí)際編碼,但是從以前的開發(fā)經(jīng)驗(yàn)和算法復(fù)雜度來看,每個(gè)算法至少是50000行以上的代碼規(guī)模,與HLS方式相比相差了不止一個(gè)數(shù)量級(jí)。
 
HLS開發(fā)方式下,代碼的維護(hù)變得相當(dāng)簡(jiǎn)單,且對(duì)于初學(xué)者來說,理解整個(gè)算法的流程框架也更容易,但比較難的點(diǎn)是理解編譯選項(xiàng)的含義和開發(fā)方式。
 
在算法實(shí)現(xiàn)上,HLS是一個(gè)高效的工具,但由于C語言還是要變成可綜合的Verilog,所以C語言的寫法還是要遵循特定的可綜合的規(guī)則。
 
三、自動(dòng)駕駛運(yùn)算平臺(tái)
 
自動(dòng)駕駛所需的運(yùn)算能力體現(xiàn)在車端和云端兩個(gè)方面:
 
1.車端
 
車端運(yùn)算平臺(tái)一般放在汽車后備箱,主要負(fù)責(zé)通過傳感器數(shù)據(jù)感知周圍的環(huán)境,用高精度地圖實(shí)時(shí)定位,并按照算法模型做出駕駛決策。
 
2.云端
 
云端則需要一臺(tái)數(shù)據(jù)處理能力超強(qiáng)的數(shù)據(jù)中心,所有與云端連接的車輛都會(huì)將自己的行駛數(shù)據(jù)上傳到這里。云端利用這些數(shù)據(jù),通過深度/增強(qiáng)學(xué)習(xí)訓(xùn)練決策和感知的算法模型。經(jīng)過訓(xùn)練優(yōu)化的算法模型在經(jīng)過穩(wěn)定性驗(yàn)證后將會(huì)被重新更新到各個(gè)車輛終端中,這是未來自動(dòng)駕駛所使用的自我優(yōu)化體系。
 
車端對(duì)于安全性和實(shí)時(shí)性要求很高,需要對(duì)周圍環(huán)境迅速做出決策;云端數(shù)據(jù)量龐大,所有這些都對(duì)運(yùn)算能力提出了很高的要求。
 
目前車端和云端運(yùn)算平臺(tái)采用較多的處理器是GPU,GPU有數(shù)量眾多的計(jì)算單元,可以并行運(yùn)行同時(shí)處理很多相對(duì)簡(jiǎn)單但具有大量數(shù)據(jù)的任務(wù)。
 
2016年NVIDIA推出的專門針對(duì)自動(dòng)駕駛的 Drive PX2平臺(tái)在車端應(yīng)用比較廣泛,Drive PX2中使用了兩個(gè)Tegra Parker,以及多個(gè)Pascal架構(gòu)的GPU,每秒能夠執(zhí)行24萬億次操作。Drive PX2配合云端數(shù)據(jù)中心的NVIDIA Tesla GPU,可在更短的時(shí)間內(nèi)創(chuàng)建和更新適用于自動(dòng)駕駛汽車的精細(xì)地圖,過去要花幾周時(shí)間才能完成的過程現(xiàn)在幾乎可以實(shí)時(shí)完成。
 
下圖為NVIDIA的端到端完整自動(dòng)駕駛計(jì)算平臺(tái):
Drive PX2已經(jīng)搭載在 Tesla 的量產(chǎn)車型 Model S 以及 Model X 上,大部分已公布的使用 NVIDIA 方案的測(cè)試車基本上都搭載的 Drive PX2,如奧迪、沃爾沃和 ZF 等。
 
百度的自動(dòng)駕駛Apollo車端為了實(shí)現(xiàn)高性能穩(wěn)定的計(jì)算,采用的是工業(yè)級(jí)PC作為運(yùn)算單元,配置6th-Gen Intel Core i7/i5 LGA1151 CPU 和NVIDIA GeForce GTX1050* GPU。
 
雖然GPU的應(yīng)用比較廣泛,但它在深度學(xué)習(xí)方面也存在著一些局限性,如下:
 
由于FPGA的計(jì)算構(gòu)架可以全定制,功耗低,其并行處理資源可擴(kuò)展性和靈活性較好,所以它在很大程度上克服了GPU的弱點(diǎn)。現(xiàn)在FPGA被越來越多的公司關(guān)注,其可編程特性可以滿足專有計(jì)算構(gòu)架的需求,微軟、Intel等公司都在大量部署基于FPGA的系統(tǒng)。
 
FPGA在ADAS(高級(jí)駕駛輔助系統(tǒng))方面的出貨量也在迅速增加,去年的出貨量應(yīng)該不會(huì)低于3Mu。
 
【地平線】
 
2017年初,地平線公司發(fā)布了基于FPGA-BPU的ADAS系統(tǒng),預(yù)計(jì)其成本和功耗都將比現(xiàn)有GPU低一個(gè)數(shù)量級(jí)。從xilinx工程師那了解到,地平線采用的FPGA芯片,和前面介紹的機(jī)器人算法加速實(shí)踐選擇的是同一款,據(jù)說該系統(tǒng)已被比亞迪自動(dòng)駕駛汽車采用。
 
【寶馬&Intel】
 
去年,寶馬集團(tuán)攜手Intel共同研發(fā)全自動(dòng)駕駛解決方案,全新發(fā)布的Intel GO無人駕駛解決方案提供世界級(jí)處理器和FPGA技術(shù),以最高效的方式平衡了性能和功耗,同時(shí)滿足汽車行業(yè)對(duì)散熱和安全性的苛刻要求。
 
車端:
 
Intel GO為關(guān)鍵功能提供了可拓展的開發(fā)和計(jì)算平臺(tái),包括傳感器聚合、駕駛策略、環(huán)境建模、路徑規(guī)劃和決策。
 
云端:
 
Intel GO提供廣泛的技術(shù),包括處理器、FPGA、固態(tài)硬盤和Nervana人工智能平臺(tái)等,為無人駕駛行業(yè)所需的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)提供了強(qiáng)大的訓(xùn)練和模擬基礎(chǔ)設(shè)施。
 
當(dāng)然FPGA做深度學(xué)習(xí)或其它算法加速也有一些問題,比如產(chǎn)品本身迭代比較慢,成本較高等。
 
四、結(jié)語
 
回顧過去自動(dòng)駕駛所使用的計(jì)算平臺(tái),可以看到由最開始使用CPU,到后來的GPU,到現(xiàn)在GPU和FPGA的組合使用。機(jī)器人領(lǐng)域?qū)μ幚砥鞯倪x擇也基本是這個(gè)路線,相信未來算法和芯片會(huì)協(xié)同進(jìn)化,更好的支撐人工智能各領(lǐng)域的發(fā)展。
 

責(zé)任編輯:王維