日本无码免费高清在线|成人日本在线观看高清|A级片免费视频操逼欧美|全裸美女搞黄色大片网站|免费成人a片视频|久久无码福利成人激情久久|国产视频一二国产在线v|av女主播在线观看|五月激情影音先锋|亚洲一区天堂av

  • 手機站
  • 小程序

    汽車測試網(wǎng)

  • 公眾號
    • 汽車測試網(wǎng)

    • 在線課堂

    • 電車測試

凌坤:好的自動駕駛AI芯片更是“好用”的芯片

2022-03-18 21:24:31·  來源:地平線HorizonRobotics  
 
導(dǎo)讀地平線在智東西公開課開設(shè)「地平線AI芯片技術(shù)專場」。第二期課程中,地平線高級研發(fā)總監(jiān)凌坤就《好的自動駕駛AI芯片更是“好用”的芯片》這一主題進行了直播

導(dǎo)讀

地平線在智東西公開課開設(shè)「地平線AI芯片技術(shù)專場」。第二期課程中,地平線高級研發(fā)總監(jiān)凌坤就《好的自動駕駛AI芯片更是“好用”的芯片》這一主題進行了直播講解。


凌坤老師從軟件2.0的開發(fā)范式講起,結(jié)合地平線自動駕駛AI芯片的開發(fā)實踐,從軟硬結(jié)合+軟硬解耦的平衡、AI芯片開發(fā)原則、軟件2.0開發(fā)范式的基礎(chǔ)設(shè)施艾迪AI開發(fā)平臺、天工開物工具鏈、豐富的軟件棧等方面深入講解如何打造一顆“好用”的自動駕駛AI芯片。
首先歡迎大家來到本次課程,也感謝智東西公開課提供的平臺,讓我們有機會做相關(guān)的交流。上次課程中地平線羅恒博士重點講解了一個好的自動駕駛芯片應(yīng)該是什么樣子,今天則是關(guān)于怎么樣把自動駕駛芯片做成一個好用的芯片。

圖片


我叫凌坤,地平高級研發(fā)總監(jiān),畢業(yè)于中國科學(xué)院計算技術(shù)研究所,十余年專注于CPU/DSP/DSA上的編譯器&指令架構(gòu)聯(lián)合優(yōu)化和實現(xiàn);2016年加入地平線,負責地平線天工開物工具鏈和艾迪AI開發(fā)平臺相關(guān)研發(fā)團隊的管理;曾任地平線編譯器研發(fā)部負責人,先后參與多代地平線征程處理器的指令集架構(gòu)定義、編譯器和工具鏈研發(fā)、產(chǎn)品化、市場推廣及量產(chǎn)落地相關(guān)工作。


本次課程主要分為以下3個部分:1、關(guān)注軟硬結(jié)合前提下的軟硬解耦2、好用的關(guān)鍵:提升產(chǎn)品研發(fā)效率3、用軟件2.0基礎(chǔ)設(shè)施、工具鏈、開放軟件棧和豐富樣例成就開發(fā)者


過去很多年里,我們一直在做傳統(tǒng)意義上的算法和軟件研發(fā)。在這套體系下,程序員首先要理解清楚問題是什么?怎么解?在此基礎(chǔ)上寫好代碼,并讓代碼運行起來,看是否正確。而隨著芯片性能越來越高,存儲數(shù)據(jù)、模型容量越來越大,機器學(xué)習(xí)方法幫助我們解決了許多實際的問題,因此進入到軟件2.0時代。伴隨著未來摩爾定律的持續(xù)演進,基于軟件2.0的研發(fā)工作會越來越多,我們要準備好迎接軟件2.0的開發(fā)時代。

圖片


回看軟件2.0的開發(fā)范式,它與軟件1.0完全不同。在軟件1.0中,當我們要解決一個問題時,首先需要開發(fā)者把問題定義的十分清楚;然后把問題分解成具體步驟,并把每一步的解決方法也想的非常明白;再寫出代碼,代碼做好測試后集成起來,看能否解決實際問題。如果不能解決,反過來再看,是問題沒有定義清楚?問題沒有分解清楚?問題的解決方法不正確?還是程序員代碼沒寫好?反復(fù)檢查、調(diào)試、驗證,以上就是軟件1.0開發(fā)的閉環(huán)迭代過程。例如當控制一輛車往前走時,如果路上沒有超過限速,前方?jīng)]有障礙物,那接下來車輛可以加速,加速到多少時不能再加速,這是一個典型的 if-then-else問題,所以整個軟件1.0時代的代碼程序都是圍繞 if-then-else、 for循環(huán)函數(shù)等典型的概念展開。
當?shù)搅塑浖?.0時代,面臨的是一個完全不同的開發(fā)模式。首先需要定義問題,同時需要大量的數(shù)據(jù),數(shù)據(jù)用來表示幾種不同的情況;然后再設(shè)計一個適當?shù)哪P?,模型能夠?qū)栴}做分類或檢測;之后在大量標注數(shù)據(jù)上做模型訓(xùn)練,訓(xùn)練完成后再部署集成, 在場景中看大概有多少結(jié)果是正確的,多少結(jié)果是錯誤的;再持續(xù)的采集數(shù)據(jù),做標注、訓(xùn)練,或者更改模型的設(shè)計,來解決這些錯誤的badcase。
在過程中,沒有一個程序員能把問題解法想得十分清楚。比如識別一只貓,貓的毛發(fā)是彎的還是直的、貓的顏色是花的還是純色,貓的兩只耳朵是豎著的還是彎著的,程序員并不是通過這種方式解決問題。從每一個像素點定義的角度來看,這些問題是一個數(shù)據(jù)驅(qū)動的問題,即通過100萬張或1000萬張不同的圖片給模型做訓(xùn)練。在這種模式下,程序員不需要對問題應(yīng)該怎么解有非常深刻的認識,也不需要知道計算機每一步該怎么操作,只需關(guān)注卷積神經(jīng)網(wǎng)絡(luò)的容量和里面的信息,反向傳播時梯度是怎樣傳播的,激活函數(shù)應(yīng)該怎么設(shè)置等問題。

圖片


軟件2.0時代的方法可以讓機器像人一樣看懂和聽懂周圍的世界,所以它有廣泛的應(yīng)用場景,而且隨著摩爾定律的持續(xù)進步,有非常大的成長空間。關(guān)于自動駕駛芯片的好用,也應(yīng)該圍繞著軟件2.0的開發(fā)范式展開,因為1.0時代已經(jīng)有四五十年的積累,各種工具已經(jīng)非常完善,在此基礎(chǔ)上更多的是一些微創(chuàng)新,而2.0時代則是一種底層方法論層面的顛覆式創(chuàng)新。
在這套開發(fā)范式下,對于機器來說,軟件2.0的技術(shù)可以讓它感知周圍的世界,知道自己在世界里處于什么位置,當世界里有很多自主移動的目標時,可以預(yù)測周圍的目標的運動軌跡,可以規(guī)劃自身的動作是繞開目標,還是直著前進或停下來,進而控制自己完成動作。

01 關(guān)注軟硬結(jié)合前提下的軟硬解耦


首先回顧下歷史,在看歷史時會發(fā)現(xiàn)一個很重要的點是“應(yīng)用對性能的追求沒有止境”。在這種情況下,很多芯片一代一代的往前走。從1970年開始,各種各樣的芯片、計算設(shè)備層出不窮,也造就了很多PC時代。

圖片


上圖左邊的藍色統(tǒng)計表來自于2021年ACM通訊的一個統(tǒng)計結(jié)果,該圖表明在過去的20多年里,微處理器性能的提升在逐漸放緩。同時站在供應(yīng)商的角度,從黃色統(tǒng)計表中可以看出,單位研發(fā)投入下微處理器的性能提升也在逐漸變小,所以未來在通用處理器上的研發(fā)投入產(chǎn)出比會越來越低。越來越多的公司會把更多精力投在多核和異構(gòu)加速器上,右圖就是一個很好的證明。
由于人們對性能的追求沒有止境,單個芯片上的晶體管數(shù)量會呈指數(shù)級增長。而單個線程的性能,在2010年左右逐漸放緩。因為物理條件的限制,頻率也不再增長,并隨著工藝制成的變化,整個芯片的功耗也處于一個停滯的狀況。與此同時,單個芯片里的邏輯處理器核心變得很多,這會導(dǎo)致我們在追求非常高延遲增強時,由于單線程的性能沒有大的變化,使得我們無法通過單線程的通用處理器達到很好的效果,只能把代碼做并行,或引入異構(gòu)加速器來實現(xiàn)性能優(yōu)化。

圖片


雖然單個線程的性能處于增長緩慢甚至停滯的狀態(tài),但在軟件和算法層面,還有非常多的空間可以做優(yōu)化。上圖上半部分是對矩陣乘例子的優(yōu)化。當我們用Python實現(xiàn)矩陣乘時,假設(shè)它的速度為1,把 Python代碼改成Java或C時,可以看到有11倍甚至47倍的提升。這是語言之間的變化,只是用不同的編程語言改寫,與芯片架構(gòu)無關(guān)。之后的循環(huán)并行利用到芯片上的多核;并行分置則是把矩陣分塊,然后放在緩存里;再用自動向量化,自動化的利用芯片里已經(jīng)提供的數(shù)據(jù)流并行CMD指令;當使用較寬的AVX向量時,在代碼里面直接寫AVX函數(shù)調(diào)用,最多可以得到6萬多的加速比。所以,當我們圍繞軟件和算法的特點挖掘更多硬件特性時,就能通過這種軟硬結(jié)合的方式獲得非常大的性能提升和極具性價比的計算平臺。
最近,有件有意思的新聞,Intel在新的大小核架構(gòu)中,為了保證軟件兼容性,放棄了部分芯片中AVX512支持。 
接下來看下軟硬結(jié)合和軟硬解耦過去在整個技術(shù)棧中是怎樣做的?當我們看標準的C和C++代碼時,這與芯片無關(guān),可以實現(xiàn)軟硬解耦,它是怎么做到的呢?我們以LLVM編譯器為例,編譯器里有前端、中端和后端,其中前端和中端里有很多的代碼分析、優(yōu)化和變換,這些都與芯片架構(gòu)無關(guān)。編譯器后端也有與芯片有關(guān)的部分,像ARM后端和RISC-V后端,通過這些之后,編譯器可以把代碼變成可執(zhí)行文件,這些可執(zhí)行文件可以部署在ARM芯片或RISC-V芯片上運行。
對比Intel AVX禁用的消息, 在最新的ARM處理器架構(gòu)上,引入了一個SVE向量處理單元,它可以用來取代NEON。NEON是在 ARM架構(gòu)上的一個SIMD擴展指令集,它類似于AVX的單指令多數(shù)據(jù),但NEON是定寬的,即128比特。SVE則是變長的,它可以實現(xiàn)128比特、256比特和512比特的寬度。在性能評估上,最高可以獲得3.5倍的加速比。在SVE指令集層面并沒有詳細規(guī)定{128、256、512},它是在具體芯片實現(xiàn)時,硬件可以自己定一些常數(shù)來做,而所有的指令都是通過自己判斷或者加入一些參數(shù)的方式進行,可以不考慮向量的實際寬度,即在相同的指令下,既可以在128比特寬度下執(zhí)行二進制代碼,也可以在256比特或512比特寬度下執(zhí)行二進制代碼,不會出現(xiàn)英特爾AVX512的情況。所以ARM在數(shù)據(jù)并行方面,在二進制代碼兼容性的思考是比較超前的,它在想辦法規(guī)避掉問題,保持二進制兼容,通過這種方式能很好的支持底層晶體管為上面的服務(wù),同時保持好軟硬解耦。
剛剛講到了C和C++,在真正面向AI時代時,不得不提到GPU,即CUDA。利用GPU里大量并行的單指令多線程架構(gòu),可以實現(xiàn)非常復(fù)雜的數(shù)據(jù)流并行運算,進而加速上層的張量計算,來獲得比較好的 AI性能加速。
這里很典型的CUDA是英偉達提出來的,它通過NVCC編譯器變成PDX代碼,PDX代碼在各代GPU上都會有自己的PTXToGPU編譯器,再通過驅(qū)動就可以在Ampere架構(gòu)GPU或Turing架構(gòu)GPU上運行。在過去的很多年里,英偉達在這方面有非常多的積累,而且形成了比較強的市場主導(dǎo)地位。
在AI時代,英偉達基本上是在唱主角的,雖然AMD最近市值有了比較大的提升,但AMD對AI方面的知識一直處于被動的狀態(tài)。最近AMD比較大的動作是提出了ROCm編譯器,雖然沒有明確的介紹,但可以認為它是為了更好的兼容CUDA生態(tài),所以它會把CUDA代碼先通過一個轉(zhuǎn)換器轉(zhuǎn)成HIP代碼,再通過ROCm編譯器,最后在AMD的GPU上運行。

圖片


上圖右部分畫了虛線,這是由于當我們決策是買英偉達GPU,還是買AMD GPU做AI計算加速時,大部分的開發(fā)者都會去選擇英偉達,因為不用擔心編譯器或Runtime的問題,或者有些bug沒有被測到,進而導(dǎo)致生產(chǎn)效率受到很大影響,所以右邊用了虛線。這條線雖然存在,但是好與壞,很多的用戶和開發(fā)者都已經(jīng)用腳在投票,這是一個典型的軟硬結(jié)合和軟硬解耦不易做到權(quán)衡的問題。而且在英偉達的歷代GPU上可以通過PTX代碼實現(xiàn)比較好的軟硬解耦。同時,軟硬結(jié)合就體現(xiàn)在了NVCC編譯器和CUDA對芯片架構(gòu)的深層次挖掘和利用上,上面是軟件1.0。
再來看軟件2.0,它的整個開發(fā)流程大概分成以下幾個階段:先對一個模型進行訓(xùn)練,之后做量化,因為量化能帶來芯片功能和效能的提升,再來看精度是否達標,然后做模型編譯到芯片平臺上運行。上述這些步驟,包括地平線在內(nèi),大部分芯片廠商都可以做到比較好的軟硬解耦。通過這種形式的軟硬解耦能夠保證開發(fā)者過去寫的一些歷史研發(fā)代碼可以在平臺上更好的運行,同時也能保證一定的供應(yīng)鏈安全。
剛剛在回顧歷史,而面向 AI計算的軟硬件設(shè)計還需要一個比較完整的工程架構(gòu)來保證。首先要有性能,在此基礎(chǔ)上,再來看怎么樣做好軟硬件解耦。結(jié)合地平線的實踐,一般情況下會從硬件設(shè)計和軟件設(shè)計兩個層面來看,硬件設(shè)計主要針對存儲、張量計算組織、指令集設(shè)計,軟件方面包括計算分析和并行優(yōu)化、數(shù)據(jù)并行和依賴分析優(yōu)化、片上存儲管理和指令調(diào)度。它們的核心目標是為了能夠最大化硬件資源的利用率。
為了保證未來持續(xù)的競爭力,需要更多的晶體管來做更多的事情,但是這些晶體管到底用來做什么?怎么樣保證最大化利用好這些資源,為上層AI算法和應(yīng)用提供足夠多的AI計算能力,就需要軟硬結(jié)合的一整套工程迭代框架。
地平線有一個BPU架構(gòu)建模工具,它可以對功耗、性能、面積做建模,輸入的是指令序列,建模工具為模型性能分析工具提供了一些硬件配置信息和指令性能信息。模型性能分析工具則提供了性能和精度方面的分析結(jié)果,同時為BPU架構(gòu)建模提供輸入。BPU架構(gòu)是在探索未來的芯片架構(gòu),模型性能分析工具則在探索接下來的編譯器、模型量化工具、訓(xùn)練工具應(yīng)該怎么做。它們有個很重要的輸入:Testing Benchmark。如果Testing Benchmark沒選好,整個閉環(huán)會轉(zhuǎn)歪,所以 Testing Benchmark選取十分重要。

圖片


Testing Benchmark的選取一定要把握好算法演進趨勢,由于Benchmark里面包含了豐富的、代表未來演進趨勢的算法模型,利用好Benchmark和相關(guān)變換之后,就能更好的平衡軟硬結(jié)合和軟硬解耦。像地平線已經(jīng)達到百萬芯片出貨量的征程二代和征程三代芯片里就有比較多的設(shè)計,在2016年、2017年時已經(jīng)考慮到了相關(guān)一些算法的演進趨勢。
地平線就有一個非常強大的算法軟件團隊,這個團隊不停的去看、去聽或去實踐算法的實際應(yīng)用情況,及未來的演進趨勢,更好的為Testing Benchmark提供輸入。

圖片


接下來將結(jié)合地平線的實際情況進行說明,希望可以給大家一些新的啟發(fā),或帶來一些不同的觀點和角度。在地平線的芯片架構(gòu)設(shè)計中,包括Testing Benchmark的選取,面向的都是未來重要場景里的關(guān)鍵算法,而且一定要在產(chǎn)品驅(qū)動里做架構(gòu)迭代,要看產(chǎn)品里模型的泛化性怎樣,模型實際應(yīng)用起來運行的如何,它對哪些目標能夠識別的很好,哪些還有問題,把這些點在產(chǎn)品層面盡量挖掘出來,然后在產(chǎn)品驅(qū)動敏捷架構(gòu)迭代和未來重要場景關(guān)鍵算法兩個層面的結(jié)合下形成Testing Benchmark。
同時,地平線有很多世界領(lǐng)先的專家團隊,他們結(jié)合過去幾十年在計算架構(gòu)、軟件、硬件、芯片和算法方面的積累,預(yù)判在AI計算層面還有哪些工作可以做相關(guān)的優(yōu)化和創(chuàng)新。這里首先看重效能,并要兼顧靈活,具體會從芯片架構(gòu)、算法和編譯器三個角度來做,而且這三個方面會有很多交叉領(lǐng)域的思維碰撞及工程實踐迭代。例如當我們看指令集時,不僅僅是看RISC-V指令集,而是看在編譯器眼中張量計算到底是什么。在這種情況下,我們應(yīng)該怎么樣做指令集,彈性張量核、片上存儲、可編程流處理架構(gòu)等這方面有哪些思維碰撞,通過這些方面的具體的技術(shù)點來給大家一個大概的感覺,即軟硬結(jié)合和軟硬解耦在什么樣情況下可以找到平衡。
當我們提到軟硬結(jié)合和軟硬解耦時,最終芯片都需要最大化的解放開發(fā)者的生產(chǎn)力,讓他們快速研發(fā)產(chǎn)品。所以地平線堅持做好自動化工具,自動化的利用芯片特性,如果芯片特性不能被自動化利用,那究竟是工具的問題,還是芯片架構(gòu)設(shè)計的問題,抑或是算法層面上的問題,這些都需要嚴格的論證。在這個情況下,我們把工具做好,自動化的利用這些特性,自動的分析模型,分析依賴,去變換、提高性能,并降低帶寬。
在編譯器優(yōu)化上,首先是把張量計算拆分開,通過對特征圖和卷積kernel的計算拆分,編譯器可以用更小的粒度描述計算,避免引入不必要的依賴,提升數(shù)據(jù)并行性,創(chuàng)造潛在的調(diào)度機會。

圖片


接著是指令調(diào)度,指定調(diào)度也是非常經(jīng)典的編譯器優(yōu)化方法,我們在編譯器層面也做了很多工作。首先它是張量,相對于寄存器來說,很大的不同在于張量是變化的,它有不同的channel、kernel,卷積核。因此,需要對張量數(shù)據(jù)做建模,同時在軟件方面要有很強的指令流水線調(diào)度,即是軟流水。
軟流水的流程如左上角圖所示,做完Load、Conv、Store后,再做Load、Conv、Store。由于兩個Load之間沒有必然的聯(lián)系,可以用如左下角圖的方式做成流水線,可以看到每一組的方塊本身就是一個循環(huán)體,但是循環(huán)體內(nèi)部的三條指令沒有必然的聯(lián)系,通過這種方式三個指令就能自由靈活的同時運行。右下角圖表示一個實際的網(wǎng)絡(luò)執(zhí)行過程,可以看到卷積陣列基本上是完全排滿的,沒有任何縫隙。ddr_load在中間配合著為卷積陣列提供輸入,同時會有一些別的運算。整體上可以獲得非常高的卷積利用率。
上面是提到了卷積切分和指令調(diào)度,但很關(guān)鍵的問題是這么多層該怎么樣切分?這首先想到了C語言編譯器是怎么做的,它針對每一個函數(shù)內(nèi)部做分析、編譯,然后看函數(shù)內(nèi)部的這些代碼該怎樣做相互之間的優(yōu)化。同理,當把卷積神經(jīng)網(wǎng)絡(luò)的一次Inference看成一個函數(shù)時,應(yīng)該通盤去看函數(shù)內(nèi)部的整個執(zhí)行過程中計算要怎樣去做。

圖片


在地平線的實踐中,我們利用了一套計算融合技術(shù),把算子綜合去看。如上圖左邊所示,把operator整個融合在一起,因為片上的memory總是很有限的,而且很貴,必要時溢出一些數(shù)據(jù)到DDR里,騰出一塊片上空間來保證執(zhí)行可以進行下去,這塊空間越小越好,這樣整個DDR的訪存帶寬可以很小。
右下角這張圖是720p圖片輸入到ResNet101網(wǎng)絡(luò)中,可以看到開始是先把圖片裝載到芯片內(nèi)部,然后通過中間的運算,再把它存到DDR里。中間的過程只有三次DDR的訪問,這三次實現(xiàn)了一些數(shù)據(jù)的搬進、搬出,前面大概是一個18層的層融合輸出,再有一個14層的層融合輸出,最后是一個三層的融合輸出,通過這種方式可以最小化整個Inference過程中對DDR帶寬的訪存壓力。與此同時,還可以看片上的memory到底被利用的怎樣,挖掘接下來memory怎樣被利用滿,是在編譯器上優(yōu)化,還是在芯片架構(gòu)或算法張量大小上做更合理的調(diào)整。

圖片


上圖是把所有的效果放在一起宏觀展示,可以看到有全局的計算融合,單層計算拆分和全局計算融合和依賴分析與指令調(diào)度。

02 好用的關(guān)鍵:提升產(chǎn)品研發(fā)效率


什么是“好用”?我認為好用是把開發(fā)者頭腦里對產(chǎn)品的思考,利用芯片上所能提供的輔助設(shè)施,以最快的方式打造出他最想要的產(chǎn)品,來提升研發(fā)效率。

圖片


怎么樣提升研發(fā)效率,也不是一個容易衡量的詞,所以先看歷史。上圖是過去100年時間里整個計算技術(shù)的發(fā)展,從最早利用機械搖桿的密碼破譯、線纜插拔的彈道計算,到商用計算、辦公游戲云服務(wù),再到大家比較熟悉的移動通信,包括安卓和iOS。在此之前都無法繞開圖靈機以及控制圖靈機的編程模型,去實現(xiàn)人們想要機器做的行為。
如果大家摸索過幾種不同的編程語言時,可以看到不管是C、C++、Java或Python,它的核心還是if-else、循環(huán)、跳轉(zhuǎn),只不過在用途、編譯計算等方面會有一些不同,但基礎(chǔ)東西是沒有變的。但是到了自主機器人時代是完全不同的,機器可以看懂和聽懂周圍的世界,這是一個數(shù)據(jù)驅(qū)動的可微分編程方式。在貫穿在整個過程中,應(yīng)用場景和開發(fā)范式都在持續(xù)迭代。
再回過頭來看,2.0時代越來越重要,所以圍繞著2.0時代的“好用”,就是2.0時代的開發(fā)。但會遇到一個問題,到底應(yīng)該做什么樣的事情,以什么樣的標準來衡量,才能把軟件2.0時代的開發(fā)做得好。我請教了一個老師:C++之父,他在2020年發(fā)表了一篇paper,這篇paper在講2006年到2020年14年間C++的發(fā)展。

圖片


上圖的縱坐標是C++社區(qū)的活躍程度,橫坐標是時間,可以看到C++在一個很快速的上升期之后,在2000年左右出現(xiàn)了下降,在2006年出現(xiàn)了一個拐點,之后推出了C++11,C++14,C++ 17 ,C++20,軟件開發(fā)者的數(shù)量開始有了非常大的提升。


在這14年里,Bjarne帶領(lǐng)整個C++標準委員會討論究竟需要把什么樣的內(nèi)容放到C++標準里,讓全世界的C++開發(fā)工程師利用他們手上能拿到的編譯器做好開發(fā),比如C++11在Windows下編程可能是Visual Studio ,在Linux下編程可能是GCC或LVM或者其他一些商用的編譯器,那究竟要增加什么樣的特性,C++才能更好用?要用什么樣的標準來衡量“好用”?


他總結(jié)了兩個點:C++一定要讓應(yīng)用能夠非常好的利用硬件性能特性來提升硬件效能,同時更好的管控底層的編程復(fù)雜度。這兩句話也很矛盾,高效利用硬件,像是某種形式的軟硬結(jié)合。有效降低復(fù)雜度,是某種情況下的軟硬解耦。同時,他也提出來一條原則,要能夠讓程序員寫出好的代碼,并創(chuàng)造出好的應(yīng)用,而不是預(yù)防程序員出bug。一種是補補丁,一種是更好的牽引,來成就更好的開發(fā)者。


從這點讓我們更加堅信AI芯片上的開發(fā)也需要充分釋放硬件的性能,降低開發(fā)的復(fù)雜度,讓AI開發(fā)者們在 AI芯片平臺上開發(fā)自己最主要的應(yīng)用,并把它變成一個很好的產(chǎn)品,推向客戶、市場。結(jié)合C++ 14年的發(fā)展歷史,我們認為這樣的平臺才是一個“好用”的開發(fā)平臺。

03 用軟件2.0基礎(chǔ)設(shè)施、工具鏈、開放軟件棧和豐富樣例成就開發(fā)者


結(jié)合軟件2.0的編程模式和編程范式,究竟應(yīng)該怎么做才能做出一個好用的芯片、上層軟件開發(fā)環(huán)境。在這方面地平線也在一直實踐,所以下面將結(jié)合地平線的實踐,從軟件2.0的基礎(chǔ)設(shè)施、工具鏈、開放軟件棧和豐富樣例幾個層面來介紹一些相關(guān)的思考,我們也相信這可能是通往好用芯片,尤其是好用AI芯片、自動駕駛芯片,一定要走的路。


AI芯片需要一個工具鏈和軟件2.0基礎(chǔ)設(shè)施,在基礎(chǔ)設(shè)施方面要有數(shù)據(jù)標注、模型訓(xùn)練平臺,它可以支持算法開發(fā)和訓(xùn)練、算法評測、端到端的數(shù)據(jù)閉環(huán),這樣才能把更多的數(shù)據(jù)回傳到基礎(chǔ)設(shè)施里做數(shù)據(jù)驅(qū)動的軟件2.0開發(fā)。而軟件1.0經(jīng)過40多年的時間已經(jīng)變得非常成熟,我們在上面也會堅持做微創(chuàng)新。


另外一方面是模型部署優(yōu)化和性能分析,AI算法放在芯片上運行起來時要很快、性能要好、精度要高,出問題后要知道怎樣分析。當把算法用起來時是整套應(yīng)用的開發(fā),它最終會幫助開發(fā)者達到最終產(chǎn)品的目標。


首先講下基礎(chǔ)設(shè)施,這里會結(jié)合地平線艾迪AI開發(fā)工具平臺的實踐。艾迪AI開發(fā)工具平臺是一個高效的軟件2.0訓(xùn)練、測試、管理的工具平臺。它由有幾部分組成,比如在邊緣側(cè)有車、芯片,通過加密傳輸把數(shù)據(jù)傳過來。在云端也是一套完整的基礎(chǔ)設(shè)施,包括半/全自動的標注工具,自動化模型訓(xùn)練,長尾場景管理、軟件自動集成、自動化回歸測試,最后這整套模型通過OTA升級部署到芯片上。同時,在端上還有影子模式、量產(chǎn)相關(guān)的模型部署、功能安全和信息安全方面的工作。


這一整套工作不僅僅面向地平線的芯片,其他的芯片也一樣,只是模型部署有所不同,但面向軟件2.0的方法論都是一樣的。開發(fā)者圍繞關(guān)鍵場景的問題挖掘,模型迭代全流程的自動化,可以大幅改善算法的研發(fā)效率,而且可以開放的對接到各類的終端上面。通過這種方式,大大提升了算法研發(fā)人員的研發(fā)效率。

圖片


上圖是根據(jù)算法人員研發(fā)效率做的初步分析和建模,得到了一些效率提升的數(shù)字來供大家做參考。比如數(shù)據(jù)挖掘,包括一些長尾數(shù)據(jù)管理和影子模式,在端上的影子模式像小朋友做考試題一樣,一個小朋友做100道題,可能只錯一道,但剩下的99道都沒有什么用,關(guān)鍵的這一道題要放在我們的錯題本上,持續(xù)的去溫習(xí)、迭代。所以影子模式和長尾數(shù)據(jù)管理,都是AI模型非常寶貴的錯題本。通過這種方式,數(shù)據(jù)上傳和存儲相關(guān)的效率會有很大的提升。
接下來是數(shù)據(jù)標注,原來是對所有的圖片做標注。但在車輛實際運行過程中,它是一個時間和空間連續(xù)的狀態(tài),在連續(xù)的狀態(tài)里,比如在兩個不同的車道上,超一輛速度稍微低一些的車時,可能接下來的10秒內(nèi),車都在我的視野中,之后從視野里一點一點的消失。在這10秒范圍內(nèi),如果按照1秒鐘30幀去捕捉圖片并標注,這會非常費時、費力。其實只需標注好一張圖片,并利用時間和空間的連續(xù)性,可以實現(xiàn)自動化標注,甚至可以用自主學(xué)習(xí)方式訓(xùn)練一個大模型來做標注,標注完之后只需稍微校準下,就可以獲得非常大標注效率的提升。


地平線艾迪平臺上背后有一套與車上面的芯片和板子完全一致的設(shè)備集群,這套設(shè)備集群可以讓每一個板子像車一樣運行,只不過它在機房里,并且輸入不是大街上采集的圖片,而是一些回灌的視頻圖片,在上面我們做很多的探索,像AI模型的探索、編譯架構(gòu)的探索,也可以做很多應(yīng)用代碼的修改和回歸調(diào)試,這大大地降低了整個設(shè)備、代碼和軟件算法測試的成本。


除此之外,還有Badcase管理系統(tǒng), Badcase不僅僅是圖片,還可能是某些輸入,或是軟件1.0、軟件2.0在面向自動駕駛上的一些小case。


通過這些case的管理,能夠更好的讓算法開發(fā)者直接找到錯題本,看怎么做來解決問題,大大提升的研發(fā)效率。經(jīng)過這一整套研發(fā)效率的提升,可以更好的服務(wù)芯片上的產(chǎn)品開發(fā)。


接下來再講下工具鏈和應(yīng)用開發(fā)。如果大家有在英偉達平臺上的開發(fā)經(jīng)驗,流程大概如下:先進行浮點模型訓(xùn)練,然后量化,看精度是否達標,如果不達標再做迭代,接下來模型編譯放在平臺上運行。地平線也很尊重開發(fā)者的開發(fā)習(xí)慣來做工具鏈和應(yīng)用開發(fā)。

圖片


地平線天工開物已經(jīng)服務(wù)了100多家客戶,這100多家客戶中的開發(fā)者,用這些工具、讀這些文檔、看這些例子,然后在基礎(chǔ)上,把他們的想法、創(chuàng)造性發(fā)揮出來,遇到問題時去分析調(diào)試。


我們把他們看到的問題、想法,在發(fā)揮創(chuàng)造性上面遇到的阻礙,反過來幫助我們改進和提升天工開物工具鏈,這套千錘百煉的工具鏈就可以更好的提升效率。除此之外,因為是面向車,所以地平線也遵循著完整的ISO26262流程去做開發(fā)。在今年預(yù)計會完成整個功能安全的認證,讓整套工具鏈交付給客戶和開發(fā)者時,讓他們更放心、更安全。

圖片


訓(xùn)練后量化工具也是一個很典型的軟硬解耦工具,任何訓(xùn)練的符合規(guī)范要求的浮點模型,通過這個工具都可以部署在地平線芯片上。這個工具本身是一個軟件,與芯片一起做了很多的聯(lián)合優(yōu)化,聯(lián)合優(yōu)化反過來可以提升量化精度,即經(jīng)過量化工具的轉(zhuǎn)換,不用做訓(xùn)練,它的精度的損失與英偉達量化后的精度對比如上圖所示,可以看到量化的精度都是比英偉達量化后要好的。這是一個很典型的追求軟硬解耦,同時通過軟硬結(jié)合的方式,來打造一個對程序員和開發(fā)者更好用工具的過程。


在訓(xùn)練工具上,我們也有類似的創(chuàng)新,比如訓(xùn)練的Plugin,在優(yōu)化和編譯器方面也有很多相關(guān)的工具,它們都是來自于客戶的寶貴建議和開發(fā)者的實際訴求。


在此基礎(chǔ)上是一個非常豐富的軟件棧,軟件站里底層是OS,再底層是一些開發(fā)板,往上是一些軟件和開發(fā)的參考方案。當各位拿到我們的芯片或工具時,它里面包含了一整套的工具鏈和開發(fā)組件,這些開發(fā)組件可以降低開發(fā)中的復(fù)雜度。與此同時,上面還會有很多的應(yīng)用參考解決方案,以白盒或開源的方式提供給開發(fā)者。我們相信通過這些也可以大大提升開發(fā)者的效率,讓開發(fā)者可以做出更好的產(chǎn)品,同時得到好用的效果。


總之,地平線在艾迪平臺和天工開物上,包括了算法開發(fā)和應(yīng)用、算法評測、端到端的數(shù)據(jù)閉環(huán),AI算法部署,應(yīng)用開發(fā),診斷、調(diào)試、性能調(diào)優(yōu)。這個過程都是面向開發(fā)者的,完全為開發(fā)者服務(wù),而且是為開發(fā)者的產(chǎn)品研發(fā)效率服務(wù)。所以在這個過程中,一定要秉承開放、靈活、兼容,并且要做到高性能的原則。在這些原則的指引下,參考比較多的歷史經(jīng)驗和教訓(xùn),以史為鑒去看接下來怎么做來實現(xiàn)更好用的AI芯片開發(fā)工具。


上面講了一個好用的開發(fā)工具,但它需要在市場上做相關(guān)的驗證和迭代。當去看整個市場上的車載芯片時,我們發(fā)現(xiàn)中國尤其是國產(chǎn)的自主品牌,已經(jīng)成為全球頂級汽車智能芯片和算法、計算平臺的“角斗場”。比如2021年 Mobileye的EyeQ5,高通的Snapdragon Ride,英偉達的Xavier和Orin都是在國內(nèi)自主品牌的自主車型上面首發(fā),包括地平線征程3和征程5。


最后,再回顧下今天的內(nèi)容,結(jié)合地平線的實踐,我們正在做一個更好用的、世界一流的人工智能計算平臺,它的目標是讓開發(fā)者更好在上面開發(fā)基于AI的產(chǎn)品。包括旭日和征程芯片,芯片架構(gòu)、編譯器、SoC、AI算法、深度學(xué)習(xí)框架的技術(shù)交融,軟硬協(xié)同優(yōu)化,通過BPU微架構(gòu)、版圖、時序、片上網(wǎng)絡(luò)、指令架構(gòu)、運行調(diào)度、通信、功耗等方面提升性能和可靠性,流片驗證,把它用在機器上,讓機器像人一樣可以看懂、聽懂周圍的世界。這點是保證了好用芯片里面軟硬結(jié)合和軟硬結(jié)合的核心。


除此之外,天工開物工具鏈沉淀了最領(lǐng)先的輕量化模型研發(fā)實踐、模型壓縮、量化訓(xùn)練、訓(xùn)練后量化、深度學(xué)習(xí)框架、運行時環(huán)境、AI應(yīng)用方案到工具鏈中,通過自動化、工具化、樣例化,服務(wù)萬千開發(fā)者,普惠AI,讓賦能機器更高效。


地平線的艾迪平臺,通過端云協(xié)同、數(shù)據(jù)閉環(huán)、自動數(shù)據(jù)挖掘、自動化標注提升算法研發(fā)效率,通過評測集群和硬件在環(huán)測試提升邊緣側(cè)迭代效率。它背后還有一整套的硬件和評測集群,為了完成模型的訓(xùn)練,還要對GPU集群做管理,同時這些數(shù)據(jù)也要有存儲管理,整個過程都要自動化高效調(diào)度。如果前面是為了提升算法的研發(fā)效率,后面就是為了提升硬件資源的利用率。


上面看到的是產(chǎn)品,產(chǎn)品背后是一整套的軟件代碼和基礎(chǔ)架構(gòu)。這包括怎么樣寫代碼來實現(xiàn)高系統(tǒng)吞吐率、低延遲、高性能、低內(nèi)存占用,并讓系統(tǒng)正確且確定地運行的代碼。從最基礎(chǔ)芯片里的啟動裝載器,到芯片上的架構(gòu)設(shè)計,架構(gòu)設(shè)計上的匯編代碼類似于張量指令代碼,然后操作系統(tǒng)的驅(qū)動到內(nèi)核,到編譯器和Runtime的環(huán)境,再到深度學(xué)習(xí)框架、量化,這一整套的技術(shù)棧都是用代碼一點點累積出來的。它還會用到多線程、高性能算法庫、單核多線程、多核多線程、多SoC上的通訊調(diào)度、車規(guī)級的功能安全,這些方面都需要在軟件層面考慮到。

分享到:
 
反對 0 舉報 0 收藏 0 評論 0
滬ICP備11026917號-25