天天看點

地平線羅恒博士:如何打造一顆好的自動駕駛AI晶片

1月20日,地平線在智東西公開課開設的「地平線AI晶片技術專場」順利完結。在本次專場中,地平線BPU算法負責人羅恒博士就《如何打造一顆好的自動駕駛AI晶片》這一主題進行了直播講解。

羅恒博士圍繞AI計算需求增長帶來領域專有架構晶片、自動駕駛軟體算法方案、從自動駕駛軟體算法方案看對AI晶片的要求、一些設計自動駕駛AI晶片的實踐四部分進行了深入解讀。

本次專場分為主講和Q&A兩個環節,以下是主講環節的全程實錄:

地平線羅恒博士:如何打造一顆好的自動駕駛AI晶片

大家好,很高興和大家一起探讨地平線在自動駕駛晶片設計方面的一些想法。我是羅恒,2011年博士畢業于上海交通大學,博士期間一直在做深度學習方面的研究,後随圖靈獎得主Yoshua Bengio進行博士後研究;2016年加入地平線,做 BPU算法、工具鍊相關的産品研發工作,先後推動了中國首款邊緣AI晶片、首款車規級晶片的誕生。車規級晶片在2020年獲得了“第十屆吳文俊人工智能專項獎”晶片項目一等獎。

地平線羅恒博士:如何打造一顆好的自動駕駛AI晶片

首先,想和大家講下Jeff Dean在2017年的一張圖。這張圖解釋了AI為什麼是可能的。AI有兩種算法:一種是傳統算法,如上圖的紫線部分,随着資料量、模型複雜度的增加,準确度和精度很快達到了飽和,同時傳統算法主要依賴于人工設計;另一種算法是機器學習或基于神經網絡的算法,這類算法當資料量少、模型小時,可能不如人工設計的算法精度高,但随着資料和計算的增加,它的精度會持續上漲。目前,大多數的AI任務并沒有達到飽和,隻要資料量越多、模型越大,性能就可能持續提升。

上圖縱軸的精度表示一個模型的精度,如果模型能代表一個軟體的功能,則可以持續提升軟體的功能。例如抖音,它的資料非常容易擷取,隻需浏覽它時就會捕獲到資料,而當你不去刷它,則會一直播放目前的内容。這是它在強迫你給一個回報,然後利用這些回報在雲端進行大量計算來估計你的喜好,而估計你的喜好就是模型的結果,即軟體功能本身。當越來越多使用者使用抖音時,雲端擷取計算變得非常容易,就可以持續提升模型的精度,也在持續提升軟體功能。

在抖音或其他網際網路應用中,由于問題是被充分定義的,是以它們實際上是一個相對簡單的任務。但自動駕駛不同,雖然自動駕駛也會用到各種各樣的模型,但這些模型無法直接對應到最終的功能。即使能持續提高模型的精度,但能否持續提高自動駕駛的功能仍是一個問題。例如特斯拉,它以端到端的方式不斷發展,就是希望能用一個模型,代表軟體的功能,然後利用資料與計算持續優化自動駕駛的功能。

自動駕駛是AI計算中的一種,這些年AI計算的需求增長非常快,帶來了大量的領域專有架構晶片,它們與以往CPU有明顯的差別。但這些AI計算晶片也面臨着巨大的挑戰,表現在自動駕駛的軟體算法方案并沒有收斂,即使是在同一家公司,軟體算法方案也在持續的疊代、變化。從這些軟體算法中也可以看出對AI晶片的需求,而算法本身也在高速演進,然後結合以上這些來看下我們是如何思考、設計自動駕駛AI晶片的。是以,本次講解内容主要分為以下4個部分:

1. AI計算需求增長帶來領域專有架構晶片

2. 自動駕駛軟體算法方案

3. 從自動駕駛軟體算法方案看對AI晶片的要求

4. 一些設計自動駕駛AI晶片的實踐

1

AI計算需求增長帶來領域專有架構晶片

地平線羅恒博士:如何打造一顆好的自動駕駛AI晶片

上圖中的右部分橫軸表示時代,2012年AlexNet第一次赢得了ImageNet比賽,并開啟了一輪AI熱潮的序幕。縱軸表示訓練這些模型所需的時間,可以看到呈現出數量級的增長,7年之間對算力的需求增加了6個數量級。但同期的左邊圖,表示通用計算,即CPU,它的增長速度則在迅速放緩,在摩爾定律發揮作用時,最快每一年半計算性能提升一倍。但現在,已經從每6年翻一倍,增加到每20年翻一倍,是以CPU注定無法提供 AI算力。

當計算需求遠遠超出摩爾定律和以往人類提升算力、增加計算的速度時,該如何呢?我們發現機器學習和神經網絡絕大多數是線性代數的加速運算,而它們相較于一個通用的程式設計語言,加速的可能性和并行性空間非常大。舉一個矩陣乘的例子,如果用 Python運作矩陣乘的速度為1,當利用一個更具機器學習特性的C語言去編寫,速度提升了47倍;如果再把一些循環并行起來,能提升到300多倍;如果對存儲做一些優化,提升到6000多倍,最後在硬體上對向量的計算增加一些加速指令,則可以提升到6萬多倍。從1到6萬多倍的提升,就來自于對特定問題的深刻了解。

有了巨大的需求,也有了相應的解決方案,整個行業都開始高歌猛進,朝着 AI專用加速器的方向發展。代表性的産品是2015年谷歌在自有資料中心使用的高度定制化AI推理晶片TPU。2019年,計算需求已經從最早的雲端到了自動駕駛領域,特别是特斯拉已經開始使用自有高度定制化的AI推理晶片FSD。同時,2019年全世界已經約有100家組織推出或正在研發AI推理晶片,這個數字到現在可能變得更大。

由于如何設計與如何評估這些晶片是緊密聯系在一起的,是以正确的設計/評估這些晶片可以從以下三方面考慮:

首先,AI模型在不同的任務、場景中,性能評估目标是不同的;

其次,晶片是一個實體的實作,它對成本和功耗限制不同,由于目前隻有少量的 AI任務實作收斂,算法本身也在持續疊代;

最後,AI算法本身并不是跑得越快越好,不同的算法還存在準确率的問題,要同時考慮到快和準。

把上面三點放在一起充分考慮,能夠對設計和評估這些晶片有越來越深刻的認識,就可以在設計中做出取舍。

地平線于2015年6月成立,是中國第一家AI晶片創業公司。地平線的定位是在邊緣做 AI晶片,企業定位不同的背後是需求不同。像英偉達、華為、谷歌,它們的整體架構設計,主要面向資料中心,而資料中心往往處理海量資料,需要高吞吐率和限定時間的響應;并且在雲端,AI任務種類繁多,基本上各類任務在雲端都可以找到;但在雲端,任務本身是限定在虛拟世界,是一個封閉的、定義單純的任務,是以模型加速就是最核心的負載。

相較于資料中心,自動駕駛的需求會非常不同,這些不同的需求也導緻了設計上取舍的不同。比如對自動駕駛而言,無論采用什麼樣的技術路線,有一個事實是無法回避的:處理的資料是流資料,即資料源源不斷的通過各種傳感器到達車上,這時必須對資料進行馬上處理,而且延遲越低越好。延遲越低就越能根據周圍的情況作出反應,及時刹車并控制車量,來保證安全。

從設計上來看,我們的晶片和特斯拉FSD,都是面向Batchsize=1去優化的。而 GPU以及其他一些以雲為核心業務的公司,設計的AI晶片往往需要比較大的資料量,資料積累比較多,才能把晶片使用率發揮的更好。

2

自動駕駛軟體算法方案

對自動駕駛而言,盡管現在有各種各樣的傳感器,但從計算的角度來看,核心是計算視覺,主要有兩個原因:第一個原因是整個實體世界是一個語義的世界,自動駕駛汽車需要識别出前面的交通标志牌、車道線,以及障礙物是普通障礙物,還是随時會動的障礙物,這都是語義的問題,不可能通過視覺以外的其他方案得到解決;第二個原因是視覺能夠帶來最大量的資料,其他傳感器每秒獲得資料量比攝像頭獲得的資料相差了許多數量級。同時,由于軟體算法在持續重構中,往往需要不同的方案設計,是以需要不同的加速方式,是以要充分考慮AI加速與CPU、GPU、 DSP的協調。在車上,成本、散熱和雲端也有完全不同的限制,由于車和人的生命安全相關,是以對它的可靠性要求也高。

下面從需求側來看自動駕駛軟體算法的挑戰。首先是技術路線,在純視覺方案中,主要以特斯拉為主。他們認為視覺能夠提供了最大的備援,而雷射雷達或其他傳感器提供的資料量很少,是以容易出現問題,但視覺資料量非常大,模型的健壯性非常好。在多類傳感器融合的方案中,像國内的華為、小鵬等。除此之外,像 Mobileye,它希望能有兩套感覺系統來做備援,當兩套感覺系統之間的相關性非常低時,就能極大提高整個系統的安全性。

從行業上來看,即使是一家公司,軟體算法方案也在持續變化,典型的例子是特斯拉。剛開始特斯拉使用Mobileye的方案來解決自動駕駛問題,之後開始自研算法轉向使用 NVIDIA GPU,進一步發現 NVIDIA GPU無論在功耗、算力、成本上都無法滿足需求,之後自研了FSD晶片,并于2019年投入使用。

無論是放棄Mobileye,還是轉向 NVIDIA,或是自研FSD晶片,每一次硬體的大幅改變,也會帶來軟體算法的大幅改變。去年特斯拉放棄了Radar,等于完全使用神經網絡模型估計物體距離、加速度,這又是一次對軟體算法的改變。再到去年的AI Day,多個攝像頭的視訊直接輸入到模型裡,然後通過模型最終輸出時,已經是時空一緻的結果。最近馬斯克接受采訪時表示,特斯拉已經完成了從視覺到向量空間的完整映射。

通過上面可以看出,當設計一個自動駕駛AI晶片時,首先要對未來算法軟體發展方向做積極估計,同時也要尊重客戶對不同方案的嘗試,是以需要在這些趨勢中找大方向,找主要沖突。

3

從自動駕駛軟體算法方案看對AI晶片的要求

地平線羅恒博士:如何打造一顆好的自動駕駛AI晶片

回到算法本身,算法也在迅速變化,而且算法的很多變化可能會對晶片設計帶來一些緻命的影響。像WaveNet,它的技術核心是把文本轉換成人一樣的語音技術,2016年由谷歌發明。剛出現時,這個算法對計算量的需求非常大,無法實時完成計算,也無法實時與人進行互動。當WaveNet算法做出了一些優化,計算效率提升了1000倍,這時GPU可以20倍實時運作,谷歌馬上就把它産品化,并放在谷歌助手中。但這個算法隻能在雲端用,無法在端側的AIoT場景使用。

這時谷歌公司想根據當時的WaveNet算法開發一個加速晶片,但2018年算法又一次演進,有數百倍的性能提升,這使得手機CPU能夠運作WaveNet。而一個晶片的研發周期很長,晶片的研發一直到2019年才完成,後續也沒有聽到這個晶片的量産情況。這是一個極端的例子,是以想提醒的是算法在持續變化,我們需要對未來做判斷。

我們最關心的是視覺,視覺中最重要的是卷積神經網絡。卷積神經網絡從上世紀90年代誕生到現在,總體發展不像WaveNet那麼快。人們看到的是一張圖,而機器看到的是一個矩陣,矩陣裡面的像素點表示像素強度、多個Channel 、RGB等。卷積的運算是把輸入圖像轉化為一張可以被機器了解的圖,在整個卷積神經網絡運算的過程中,分辨率在不斷下降,Channel數在不斷增多,本質上是不斷的看圖像更大範圍,然後把更大範圍用一個點來表示,即把圖像高度抽象化,并從不同層面解釋這張圖。

目前,卷積神經網絡對于AI、自動駕駛是一個最重要的模型。特斯拉公開表示,它的模型中卷積的計算量占比達到了98%。卷積的計算過程是利用卷積核中的一組參數,這組參數會掃過圖像中的每一個像素點,然後把輸入值和參數值點對點相乘,之後累加相乘得到最後的結果。盡管它是一個很簡單的計算,但由于卷積本身有各種變形,網絡結構在深度、寬度等各方面也做變形,卷積層之間也有不同的連接配接方式,以及使用各種各樣的激活函數,是以可以産生了各種各樣的卷積神經網絡。

地平線羅恒博士:如何打造一顆好的自動駕駛AI晶片

如上圖右邊所示,每個圈代表一個卷積神經網絡,橫軸表示卷積神經網絡需要多少計算量,縱軸表示精度,圈表示模型參數量。是以可以看到這些模型的表現完全不同,比如最右面的兩個大圈,它們的精度可能剛過70%,但它們所需的計算量和其他網絡有很大差别,也就是當硬體對所有網絡加速完全一緻時,得到同樣的精度,使用右邊模型需要10倍的時間。

而這一時期整個學術界紛紛轉向ImageNet,算法精度也随之不斷提高。除了右邊兩個綠圈比較特殊之外,通常随着計算量的增加,精度也在不斷上升。而到實際工作中也會面臨這樣的問題:需要在速度和精度之間找一個折中,這個時期怎麼用一個更大的網絡得到更好的精度,可以考慮一些專家設計的網絡擴充方法。

對于神經網絡來說,給它更多的資料和計算,準确性就會迅速提升。從2012年AlexNet第一次參加ImageNet開始,到2017年比賽最後一界,卷積神經網絡的精度已經非常高。這時開始尋找在同樣的精度下,如何去減少計算,提升模型的效率,出現了一系列有代表性的模型:SqueezeNet、MobileNet、ShuffleNet。這時也出現了卷積神經網絡産生以來最重要的一次變化:Depthwise Convolution。另外一個變化是需要在模型的計算量和精度上找折中的方式,這時可以開始在小範圍内開始尋找,并使用一些自動化的搜尋。

2019年,随着EfficientNet的出現,我們認為卷積神經網絡結構的演進暫時進入一個平緩發展的階段。為什麼?因為在卷積發展的二十幾年中,出現了Depthwise Convolution,而傳統算法都是人工設計的模型結構,再到機器設計的模型結構,這也是一個大的變化。這兩個大的變化被很好的結合在EfficientNet中,由此我們認為卷積出現新變化的可能性比較少。這個觀點在2019年EfficientNet發表時,我們就已經是看到了,到目前為止,這個觀點依舊可靠。

接下來是 Transformer,Transformer實際上是一個非常特别的神經網絡,卷積神經網絡通過一層一層的卷積,并經過很深的層數後,在feature map上的一個點,可以看見原圖一個更大的區域。以識别建築物為例,如果想識别出建築物,不僅僅需要看到有窗戶,可能還需要看到房頂、天空、地面之間的關系,它們之間是一個長距離的相關性。當天空、草地、窗戶等同時符合一定的空間規律時,才能定義這是一個建築物或莊園。

Transformer來自于自然語言處理,機制是從輸入一開始就計算任意兩點之間的相關性,即每一層計算都可以直接計算很長距離之間的兩兩相性,這個能力是CNN不具備的,而它對于了解圖像很關鍵。是以, Transformer在實際應用中也表現了巨大的潛力,但仍存在一個問題:Transformer在視覺任務中很難定義基本單元是什麼。基本單元可以很大,也可以很小,像高分辨率語義分割中,基本單元可以是像素級别,而在做一些物體識别時,基本單元可以是車、行人等大的物體。

Transformer在計算任意兩點之間的相關性時,會産生非常大的計算量。如果不計算點和點之間的相關性,而是限制計算patch和patch之間的相關性,如果patch設定太大,一些精細的相關性會被忽略,如果patch設定太小,計算量又太大。Transformer等類似工作采取的方式是限制計算相關性的範圍,即限制 Self-Attention的範圍,無需與全圖計算相關性,隻需與一些局部進行計算。好處是計算效率得到了保障,壞處則是 Transformer相對于CNN最大的特别性受到了限制,而這個限制一定程度上受限于GPU,因為在很遠距離兩兩計算的計算架構上,GPU不太友好。

總之, Transformer相對于卷積神經網絡有全新的特性,但這個全新的特性并沒有很好的發揮出來,是以短期之内還是以卷積神經網絡為主,Transformer則提供一些特殊的作用。比如特斯拉,它需要把多路攝像頭的視訊最終融合到一起,得到一個完整的向量空間表示,而對于不同攝像頭資料輸入到模型之後的特征融合,使用 Transformer是一種非常好的方法。

那過去設計的晶片是否無法使用呢?Transformer本質上大部分計算依然是矩陣乘,是以現有的AI晶片都可以對它進行加速。而真正挑戰則是各種 local attention的方式,這對于靈活的資料存取有挑戰。

地平線羅恒博士:如何打造一顆好的自動駕駛AI晶片

上面介紹了許多外部的需求,當真正有了晶片之後,該如何評估晶片的性能?如何設計它?這通常是一個峰值算力的問題。但僅憑峰值算力還無法真正展現晶片性能。像上圖,兩個AI加速器的峰值算力相差幾倍,但在不同模型中實際運作時,結果有時差不多,有時差距很大。是以,一個大算力晶片不一定跑得很快,而一個小算力晶片不一定跑得很慢。它們受加速器架構、 DDR帶寬、編譯器優化政策、模型架構、輸入大小與對齊情況等各方面的影響。

當計算這麼多的模型時,如果知道哪個模型最重要,這個問題會變得比較簡單。對自動駕駛而言,什麼樣的視覺任務最重要呢?自動駕駛的核心是識别周圍有哪些物體、它們是什麼、它們的屬性是什麼、與車輛的距離如何,也需要識别一些小物體,即識别遠處的物體,是以核心負載是一個高分辨率的物體檢測問題。同時,資料是流資料,即資料需要馬上要處理,是以它也是一個Batchsize=1的高分辨率物體檢測。

選用在COCO資料集上運作各種各樣的算法,無論是在我們的晶片上,還是在GPU上,EffcientNet在同樣精度下都能達到最快的速度。盡管 GPU對EffcientNet的支援并不友好,但是EffcientNet使用的計算量仍比ResNet少七、八倍。

地平線羅恒博士:如何打造一顆好的自動駕駛AI晶片

上圖是評估的結果,橫軸表示幀率,縱軸表示精度。橙色的線表示在Xavier上運作的結果,可以看到在相對精度比較高時,Xavier能夠提供的幀率非常低,但在實際應用中,精度還需要更高,另外需要處理多路的攝像頭,而多路攝像頭的分辨率往往比COCO還高,這也是為什麼Xavier無法很好的支援自動駕駛方案,也是為什麼特斯拉要自研晶片。

黃色線是我們估計出來的Orin結果,這裡的估計方法一方面結合NVIDIA對Orin算力的公開資訊,以及對Orin相對Xavier能力提升的描述;另外一方面根據NVIDIA RTX3090,因為NVIDIA RTX3090與Orin都使用安培架構,我們會從中對使用率做一些調整。從總體評估結果來看,我們的AI晶片相對于Orin提升是非常明顯的。如果把不同精度下的幀率平均,大約是Orin的兩倍;功耗上看,我們的晶片隻有20瓦,Orin的功耗是65瓦;從能效上來看,我們有6倍多的提升。

4

一些設計自動駕駛AI晶片的實踐

那怎麼設計AI晶片呢?地平線是一家算法基因的公司,與别家企業做AI晶片的最大不同是我們認為算法是動态的、不斷變化的,我們随時都在預估未來的趨勢,同時我們又是一家晶片公司,并不僅僅看算法本身,更看重算法對計算架構的影響,這也使得在Depthwise Convolution剛推出時,能夠迅速的關注到它。僅從算法的表現來看,Depthwise是最核心的計算單元發生改變。如果結合到晶片,可以發現它對計算的需求很不同。

地平線羅恒博士:如何打造一顆好的自動駕駛AI晶片

2019年,學術界對AlexNet、GoogleNet和MobileNet三類的模型做了分析,如上圖所示,橫軸的不同點表示三個模型,縱軸是資料複用的情況。資料複用率越高時,對模型加速帶寬要求是不同的。從上圖可以看到MobileNet和其他兩個模型是非常不同的,有兩個數量級的差别,這些不同是會顯著影響計算架構。

因為有算法背景,并關注算法發展趨勢,是以我們是結合計算來看算法,是以能夠在第一時間識别出哪些方面對計算架構有重大的影響,而且它有可能變為未來非常高效率的算法。同時,地平線也是一家軟硬結合的公司,不會僅僅滿足在軟體算法層面上的探讨,也會把它做進硬體,使得晶片效率最大化。

軟體算法層面上,在2017年7月,我們發現當模型非常小時,精度的損失很大,是以我們設計了一套量化訓練算法,利用量化訓練解決Depthwise模型的精度問題,并申請了專利。而學術界到2019年,谷歌才推出相應的量化算法。現在我們的算法、硬體架構又在朝前演進,對于這類模型隻需利用浮點模型轉換。我們在工具鍊方面已經支援了100多家的客戶,精度問題上也表現得很好。

同時,還有一些其他的考慮,比如Kernel Size,由于在傳統卷積中擴大Kernel Size代價很高,但在Depthwise卷積中的計算量非常小,是以這種情況下,擴大Kernel Size代價非常低。根據在軟體算法層面上的驗證,我們做了FPGA上車實測,并把軟體算法方案放進去,最終在2019年獲得了CES創新獎。

下面回到自動駕駛場景本身。盡管技術路線、軟體算法方案的演進各不相同,但也存在一些共性,像全資料鍊路考慮、精度和性能的折中、多模型的靈活排程等。除此之外,像自動駕駛要求檢測精度很高,在評估軟硬體算法方案時,IoU=0.9;當需要把遠處的物體檢測出來實作小物體檢測時,要有高分辨率的輸入;還有一些穩定性、高優先級任務搶占的要求等。同時,像一些語義分割任務,涉及許多高分辨率的輸出,對帶寬壓力很大,需要對帶寬要做壓縮。此外,當自動駕駛為了适應光線強度的大幅變化時,需要融合雷射雷達資料。有時還想使用ISP,但是不想要ISP的長延時,需要當ISP處理一部分時,BPU、AI加速提前啟動,雙方從overlap中往前走,這些都是我們的設計。

地平線羅恒博士:如何打造一顆好的自動駕駛AI晶片

根據上面的内容可知,我們需要在一個更大的空間去設計AI晶片,具體做怎樣做呢?我們經曆了兩個階段,第一個階段如上圖左邊所示,一半是硬體,一半是軟體,我們希望把硬體和軟體聯合起來考慮。那怎麼把它們結合起來呢?以前公司有幾個團隊,在右邊工作的是軟體團隊、算法團隊、編譯器團隊,軟體團隊主要看整體軟體方案該怎樣排程,各方面的性能瓶頸如何;算法團隊主要看整個算法的發展趨勢如何,有哪些可能性需要考慮;編譯器團隊在軟體算法方案确定之後,進一步的分析資料複用的情況,對資料計算并行等做分析。

有了這些分析後,可以把更細節的要求給到硬體團隊,然後硬體團隊結合這些細節要求做指令級的設計、做加速器的設計、做存儲的設計。同時,硬體團隊在設計過程中又會提出一些新的限制,随後軟體團隊再去思考雙方如何配合,哪些是硬體團隊做,哪些是軟體團隊做,如何既保持很高的效率,又保持未來的靈活性。

經過五六年的合作演化,從原來人和人之間的合作,慢慢變成現在的一些流程和工具,目前主要是上圖右邊的方式,軟體算法團隊主要工作在Benchmark,他們定義了哪些Benchmark是需要測試的。目前,主要集中在模型層面,而更加完整的方案還在持續的向前推進。

Model Performance Analysis Tool層可以了解為一個簡單的模拟器,也就是編譯器團隊以往人工的工作,現在變成了一個工具。編譯器團隊不再直接在一個個模型上工作,隻要把工具做好,所有模型結果都可以得到。而它會得到兩個内容,一個是硬體給它的各種限制,像硬體的各種配置、各種特性。有了這些之後,可以生成一個指令序列,這個指令序列在BPU Architecture Modeling的模組化工具裡,它一方面可以直接用一些高階綜合的方式得到功耗面積,另一方面利用這些指令流可以估計出性能。同時,Model Performance Analysis Tool模拟器也可以估計出性能和精度。

當有了這樣一個工具,好處在于可以把Benchmark做得很大,而工程師們不再面向一個模型工作,而是面向一個工具工作。架構設計團隊也可以有更多的選擇,這些選擇都是在少量編碼的情況下,在更大的空間上完成各種軟硬體的結合方案。

以上是我們設計AI晶片不同地方,一方面從需求、軟體算法方案、算法演進出發,另一方面把軟體、硬體充分結合,來聯合優化目标。

繼續閱讀