天天看點

地平線AI晶片技術專場第2講主講回顧

2月23日,地平線在智東西公開課開設的「地平線AI晶片技術專場」第2講已順利完結,由地平線進階研發總監淩坤主講,主題為《好的自動駕駛AI晶片更是“好用”的晶片》

淩坤老師從軟體2.0的開發範式講起,結合地平線自動駕駛AI晶片的開發實踐,從軟硬結合+軟硬解耦的平衡、AI晶片開發原則、軟體2.0開發範式的基礎設施艾迪AI開發平台、天工開物工具鍊、豐富的軟體棧等方面深入講解如何打造一顆“好用”的自動駕駛AI晶片。

首先歡迎大家來到本次課程,也感謝智東西公開課提供的平台,讓我們有機會做相關的交流。上次課程中地平線羅恒博士重點講解了一個好的自動駕駛晶片應該是什麼樣子,今天則是關于怎麼樣把自動駕駛晶片做成一個好用的晶片。

地平線AI晶片技術專場第2講主講回顧

我叫淩坤,地平進階研發總監,畢業于中國科學院計算技術研究所,十餘年專注于CPU/DSP/DSA上的編譯器&指令架構聯合優化和實作;2016年加入地平線,負責地平線天工開物工具鍊和艾迪AI開發平台相關研發團隊的管理;曾任地平線編譯器研發部負責人,先後參與多代地平線征程處理器的指令集架構定義、編譯器和工具鍊研發、産品化、市場推廣及量産落地相關工作。

本次課程主要分為以下3個部分:

1、關注軟硬結合前提下的軟硬解耦

2、好用的關鍵:提升産品研發效率

3、用軟體2.0基礎設施、工具鍊、開放軟體棧和豐富樣例成就開發者

過去很多年裡,我們一直在做傳統意義上的算法和軟體研發。在這套體系下,程式員首先要了解清楚問題是什麼?怎麼解?在此基礎上寫好代碼,并讓代碼運作起來,看是否正确。而随着晶片性能越來越高,存儲資料、模型容量越來越大,機器學習方法幫助我們解決了許多實際的問題,是以進入到軟體2.0時代。伴随着未來摩爾定律的持續演進,基于軟體2.0的研發工作會越來越多,我們要準備好迎接軟體2.0的開發時代。

地平線AI晶片技術專場第2講主講回顧

回看軟體2.0的開發範式,它與軟體1.0完全不同。在軟體1.0中,當我們要解決一個問題時,首先需要開發者把問題定義的十厘清楚;然後把問題分解成具體步驟,并把每一步的解決方法也想的非常明白;再寫出代碼,代碼做好測試後內建起來,看能否解決實際問題。如果不能解決,反過來再看,是問題沒有定義清楚?問題沒有分解清楚?問題的解決方法不正确?還是程式員代碼沒寫好?反複檢查、調試、驗證,以上就是軟體1.0開發的閉環疊代過程。例如當控制一輛車往前走時,如果路上沒有超過限速,前方沒有障礙物,那接下來車輛可以加速,加速到多少時不能再加速,這是一個典型的 if-then-else問題,是以整個軟體1.0時代的代碼程式都是圍繞 if-then-else、 for循環函數等典型的概念展開。

當到了軟體2.0時代,面臨的是一個完全不同的開發模式。首先需要定義問題,同時需要大量的資料,資料用來表示幾種不同的情況;然後再設計一個适當的模型,模型能夠對問題做分類或檢測;之後在大量标注資料上做模型訓練,訓練完成後再部署內建, 在場景中看大概有多少結果是正确的,多少結果是錯誤的;再持續的采集資料,做标注、訓練,或者更改模型的設計,來解決這些錯誤的badcase。

在過程中,沒有一個程式員能把問題解法想得十厘清楚。比如識别一隻貓,貓的毛發是彎的還是直的、貓的顔色是花的還是純色,貓的兩隻耳朵是豎着的還是彎着的,程式員并不是通過這種方式解決問題。從每一個像素點定義的角度來看,這些問題是一個資料驅動的問題,即通過100萬張或1000萬張不同的圖檔給模型做訓練。在這種模式下,程式員不需要對問題應該怎麼解有非常深刻的認識,也不需要知道計算機每一步該怎麼操作,隻需關注卷積神經網絡的容量和裡面的資訊,反向傳播時梯度是怎樣傳播的,激活函數應該怎麼設定等問題。

地平線AI晶片技術專場第2講主講回顧

軟體2.0時代的方法可以讓機器像人一樣看懂和聽懂周圍的世界,是以它有廣泛的應用場景,而且随着摩爾定律的持續進步,有非常大的成長空間。關于自動駕駛晶片的好用,也應該圍繞着軟體2.0的開發範式展開,因為1.0時代已經有四五十年的積累,各種工具已經非常完善,在此基礎上更多的是一些微創新,而2.0時代則是一種底層方法論層面的颠覆式創新。

在這套開發範式下,對于機器來說,軟體2.0的技術可以讓它感覺周圍的世界,知道自己在世界裡處于什麼位置,當世界裡有很多自主移動的目标時,可以預測周圍的目标的運動軌迹,可以規劃自身的動作是繞開目标,還是直着前進或停下來,進而控制自己完成動作。

1.關注軟硬結合前提下的軟硬解耦

首先回顧下曆史,在看曆史時會發現一個很重要的點是“應用對性能的追求沒有止境”。在這種情況下,很多晶片一代一代的往前走。從1970年開始,各種各樣的晶片、計算裝置層出不窮,也造就了很多PC時代。

地平線AI晶片技術專場第2講主講回顧

上圖左邊的藍色統計表來自于2021年ACM通訊的一個統計結果,該圖表明在過去的20多年裡,微處理器性能的提升在逐漸放緩。同時站在供應商的角度,從黃色統計表中可以看出,機關研發投入下微處理器的性能提升也在逐漸變小,是以未來在通用處理器上的研發投入産出比會越來越低。越來越多的公司會把更多精力投在多核和異構加速器上,右圖就是一個很好的證明。

由于人們對性能的追求沒有止境,單個晶片上的半導體數量會呈指數級增長。而單個線程的性能,在2010年左右逐漸放緩。因為實體條件的限制,頻率也不再增長,并随着工藝制成的變化,整個晶片的功耗也處于一個停滞的狀況。與此同時,單個晶片裡的邏輯處理器核心變得很多,這會導緻我們在追求非常高延遲增強時,由于單線程的性能沒有大的變化,使得我們無法通過單線程的通用處理器達到很好的效果,隻能把代碼做并行,或引入異構加速器來實作性能優化。

地平線AI晶片技術專場第2講主講回顧

雖然單個線程的性能處于增長緩慢甚至停滞的狀态,但在軟體和算法層面,還有非常多的空間可以做優化。上圖上半部分是對矩陣乘例子的優化。當我們用Python實作矩陣乘時,假設它的速度為1,把 Python代碼改成Java或C時,可以看到有11倍甚至47倍的提升。這是語言之間的變化,隻是用不同的程式設計語言改寫,與晶片架構無關。之後的循環并行利用到晶片上的多核;并行分置則是把矩陣分塊,然後放在緩存裡;再用自動向量化,自動化的利用晶片裡已經提供的資料流并行CMD指令;當使用較寬的AVX向量時,在代碼裡面直接寫AVX函數調用,最多可以得到6萬多的加速比。是以,當我們圍繞軟體和算法的特點挖掘更多硬體特性時,就能通過這種軟硬結合的方式獲得非常大的性能提升和極具成本效益的計算平台。

最近,有件有意思的新聞,Intel在新的大小核架構中,為了保證軟體相容性,放棄了部分晶片中AVX512支援。

接下來看下軟硬結合和軟硬解耦過去在整個技術棧中是怎樣做的?當我們看标準的C和C++代碼時,這與晶片無關,可以實作軟硬解耦,它是怎麼做到的呢?我們以LLVM編譯器為例,編譯器裡有前端、中端和後端,其中前端和中端裡有很多的代碼分析、優化和變換,這些都與晶片架構無關。編譯器後端也有與晶片有關的部分,像ARM後端和RISC-V後端,通過這些之後,編譯器可以把代碼變成可執行檔案,這些可執行檔案可以部署在ARM晶片或RISC-V晶片上運作。

對比Intel AVX禁用的消息, 在最新的ARM處理器架構上,引入了一個SVE向量處理單元,它可以用來取代NEON。NEON是在 ARM架構上的一個SIMD擴充指令集,它類似于AVX的單指令多資料,但NEON是定寬的,即128比特。SVE則是變長的,它可以實作128比特、256比特和512比特的寬度。在性能評估上,最高可以獲得3.5倍的加速比。在SVE指令集層面并沒有詳細規定,它是在具體晶片實作時,硬體可以自己定一些常數來做,而所有的指令都是通過自己判斷或者加入一些參數的方式進行,可以不考慮向量的實際寬度,即在相同的指令下,既可以在128比特寬度下執行二進制代碼,也可以在256比特或512比特寬度下執行二進制代碼,不會出現英特爾AVX512的情況。是以ARM在資料并行方面,在二進制代碼相容性的思考是比較超前的,它在想辦法規避掉問題,保持二進制相容,通過這種方式能很好的支援底層半導體為上面的服務,同時保持好軟硬解耦。

剛剛講到了C和C++,在真正面向AI時代時,不得不提到GPU,即CUDA。利用GPU裡大量并行的單指令多線程架構,可以實作非常複雜的資料流并行運算,進而加速上層的張量計算,來獲得比較好的 AI性能加速。

這裡很典型的CUDA是英偉達提出來的,它通過NVCC編譯器變成PDX代碼,PDX代碼在各代GPU上都會有自己的PTXToGPU編譯器,再通過驅動就可以在Ampere架構GPU或Turing架構GPU上運作。在過去的很多年裡,英偉達在這方面有非常多的積累,而且形成了比較強的市場主導地位。

在AI時代,英偉達基本上是在唱主角的,雖然AMD最近市值有了比較大的提升,但AMD對AI方面的知識一直處于被動的狀态。最近AMD比較大的動作是提出了ROCm編譯器,雖然沒有明确的介紹,但可以認為它是為了更好的相容CUDA生态,是以它會把CUDA代碼先通過一個轉換器轉成HIP代碼,再通過ROCm編譯器,最後在AMD的GPU上運作。

地平線AI晶片技術專場第2講主講回顧

上圖右部分畫了虛線,這是由于當我們決策是買英偉達GPU,還是買AMD GPU做AI計算加速時,大部分的開發者都會去選擇英偉達,因為不用擔心編譯器或Runtime的問題,或者有些bug沒有被測到,進而導緻生産效率受到很大影響,是以右邊用了虛線。這條線雖然存在,但是好與壞,很多的使用者和開發者都已經用腳在投票,這是一個典型的軟硬結合和軟硬解耦不易做到權衡的問題。而且在英偉達的曆代GPU上可以通過PTX代碼實作比較好的軟硬解耦。同時,軟硬結合就展現在了NVCC編譯器和CUDA對晶片架構的深層次挖掘和利用上,上面是軟體1.0。

再來看軟體2.0,它的整個開發流程大概分成以下幾個階段:先對一個模型進行訓練,之後做量化,因為量化能帶來晶片功能和效能的提升,再來看精度是否達标,然後做模型編譯到晶片平台上運作。上述這些步驟,包括地平線在内,大部分晶片廠商都可以做到比較好的軟硬解耦。通過這種形式的軟硬解耦能夠保證開發者過去寫的一些曆史研發代碼可以在平台上更好的運作,同時也能保證一定的供應鍊安全。

剛剛在回顧曆史,而面向 AI計算的軟硬體設計還需要一個比較完整的工程架構來保證。首先要有性能,在此基礎上,再來看怎麼樣做好軟硬體解耦。結合地平線的實踐,一般情況下會從硬體設計和軟體設計兩個層面來看,硬體設計主要針對存儲、張量計算組織、指令集設計,軟體方面包括計算分析和并行優化、資料并行和依賴分析優化、片上存儲管理和指令排程。它們的核心目标是為了能夠最大化硬體資源的使用率。

為了保證未來持續的競争力,需要更多的半導體來做更多的事情,但是這些半導體到底用來做什麼?怎麼樣保證最大化利用好這些資源,為上層AI算法和應用提供足夠多的AI計算能力,就需要軟硬結合的一整套工程疊代架構。

地平線有一個BPU架構模組化工具,它可以對功耗、性能、面積做模組化,輸入的是指令序列,模組化工具為模型性能分析工具提供了一些硬體配置資訊和指令性能資訊。模型性能分析工具則提供了性能和精度方面的分析結果,同時為BPU架構模組化提供輸入。BPU架構是在探索未來的晶片架構,模型性能分析工具則在探索接下來的編譯器、模型量化工具、訓練工具應該怎麼做。它們有個很重要的輸入:Testing Benchmark。如果Testing Benchmark沒選好,整個閉環會轉歪,是以 Testing Benchmark選取十分重要。

地平線AI晶片技術專場第2講主講回顧

Testing Benchmark的選取一定要把握好算法演進趨勢,由于Benchmark裡面包含了豐富的、代表未來演進趨勢的算法模型,利用好Benchmark和相關變換之後,就能更好的平衡軟硬結合和軟硬解耦。像地平線已經達到百萬晶片出貨量的征程二代和征程三代晶片裡就有比較多的設計,在2016年、2017年時已經考慮到了相關一些算法的演進趨勢。

地平線就有一個非常強大的算法軟體團隊,這個團隊不停的去看、去聽或去實踐算法的實際應用情況,及未來的演進趨勢,更好的為Testing Benchmark提供輸入。

地平線AI晶片技術專場第2講主講回顧

接下來将結合地平線的實際情況進行說明,希望可以給大家一些新的啟發,或帶來一些不同的觀點和角度。在地平線的晶片架構設計中,包括Testing Benchmark的選取,面向的都是未來重要場景裡的關鍵算法,而且一定要在産品驅動裡做架構疊代,要看産品裡模型的泛化性怎樣,模型實際應用起來運作的如何,它對哪些目标能夠識别的很好,哪些還有問題,把這些點在産品層面盡量挖掘出來,然後在産品驅動靈活架構疊代和未來重要場景關鍵算法兩個層面的結合下形成Testing Benchmark。

同時,地平線有很多世界領先的專家團隊,他們結合過去幾十年在計算架構、軟體、硬體、晶片和算法方面的積累,預判在AI計算層面還有哪些工作可以做相關的優化和創新。這裡首先看重效能,并要兼顧靈活,具體會從晶片架構、算法和編譯器三個角度來做,而且這三個方面會有很多交叉領域的思維碰撞及工程實踐疊代。例如當我們看指令集時,不僅僅是看RISC-V指令集,而是看在編譯器眼中張量計算到底是什麼。在這種情況下,我們應該怎麼樣做指令集,彈性張量核、片上存儲、可程式設計流處理架構等這方面有哪些思維碰撞,通過這些方面的具體的技術點來給大家一個大概的感覺,即軟硬結合和軟硬解耦在什麼樣情況下可以找到平衡。

當我們提到軟硬結合和軟硬解耦時,最終晶片都需要最大化的解放開發者的生産力,讓他們快速研發産品。是以地平線堅持做好自動化工具,自動化的利用晶片特性,如果晶片特性不能被自動化利用,那究竟是工具的問題,還是晶片架構設計的問題,抑或是算法層面上的問題,這些都需要嚴格的論證。在這個情況下,我們把工具做好,自動化的利用這些特性,自動的分析模型,分析依賴,去變換、提高性能,并降低帶寬。

在編譯器優化上,首先是把張量計算拆分開,通過對特征圖和卷積kernel的計算拆分,編譯器可以用更小的粒度描述計算,避免引入不必要的依賴,提升資料并行性,創造潛在的排程機會。

地平線AI晶片技術專場第2講主講回顧

接着是指令排程,指定排程也是非常經典的編譯器優化方法,我們在編譯器層面也做了很多工作。首先它是張量,相對于寄存器來說,很大的不同在于張量是變化的,它有不同的channel、kernel,卷積核。是以,需要對張量資料做模組化,同時在軟體方面要有很強的指令流水線排程,即是軟流水。

軟流水的流程如左上角圖所示,做完Load、Conv、Store後,再做Load、Conv、Store。由于兩個Load之間沒有必然的聯系,可以用如左下角圖的方式做成流水線,可以看到每一組的方塊本身就是一個循環體,但是循環體内部的三條指令沒有必然的聯系,通過這種方式三個指令就能自由靈活的同時運作。右下角圖表示一個實際的網絡執行過程,可以看到卷積陣列基本上是完全排滿的,沒有任何縫隙。ddr_load在中間配合着為卷積陣列提供輸入,同時會有一些别的運算。整體上可以獲得非常高的卷積使用率。

上面是提到了卷積切分和指令排程,但很關鍵的問題是這麼多層該怎麼樣切分?這首先想到了C語言編譯器是怎麼做的,它針對每一個函數内部做分析、編譯,然後看函數内部的這些代碼該怎樣做互相之間的優化。同理,當把卷積神經網絡的一次Inference看成一個函數時,應該通盤去看函數内部的整個執行過程中計算要怎樣去做。

地平線AI晶片技術專場第2講主講回顧

在地平線的實踐中,我們利用了一套計算融合技術,把算子綜合去看。如上圖左邊所示,把operator整個融合在一起,因為片上的memory總是很有限的,而且很貴,必要時溢出一些資料到DDR裡,騰出一塊片上空間來保證執行可以進行下去,這塊空間越小越好,這樣整個DDR的訪存帶寬可以很小。

右下角這張圖是720p圖檔輸入到ResNet101網絡中,可以看到開始是先把圖檔裝載到晶片内部,然後通過中間的運算,再把它存到DDR裡。中間的過程隻有三次DDR的通路,這三次實作了一些資料的搬進、搬出,前面大概是一個18層的層融合輸出,再有一個14層的層融合輸出,最後是一個三層的融合輸出,通過這種方式可以最小化整個Inference過程中對DDR帶寬的訪存壓力。與此同時,還可以看片上的memory到底被利用的怎樣,挖掘接下來memory怎樣被利用滿,是在編譯器上優化,還是在晶片架構或算法張量大小上做更合理的調整。

地平線AI晶片技術專場第2講主講回顧

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

2.好用的關鍵:提升産品研發效率

什麼是“好用”?我認為好用是把開發者頭腦裡對産品的思考,利用晶片上所能提供的輔助設施,以最快的方式打造出他最想要的産品,來提升研發效率。

地平線AI晶片技術專場第2講主講回顧

怎麼樣提升研發效率,也不是一個容易衡量的詞,是以先看曆史。上圖是過去100年時間裡整個計算技術的發展,從最早利用機械搖杆的密碼破譯、線纜插拔的彈道計算,到商用計算、辦公遊戲雲服務,再到大家比較熟悉的移動通信,包括安卓和iOS。在此之前都無法繞開圖靈機以及控制圖靈機的程式設計模型,去實作人們想要機器做的行為。

如果大家摸索過幾種不同的程式設計語言時,可以看到不管是C、C++、Java或Python,它的核心還是if-else、循環、跳轉,隻不過在用途、編譯計算等方面會有一些不同,但基礎東西是沒有變的。但是到了自主機器人時代是完全不同的,機器可以看懂和聽懂周圍的世界,這是一個資料驅動的可微分程式設計方式。在貫穿在整個過程中,應用場景和開發範式都在持續疊代。

再回過頭來看,2.0時代越來越重要,是以圍繞着2.0時代的“好用”,就是2.0時代的開發。但會遇到一個問題,到底應該做什麼樣的事情,以什麼樣的标準來衡量,才能把軟體2.0時代的開發做得好。我請教了一個老師:C++之父,他在2020年發表了一篇paper,這篇paper在講2006年到2020年14年間C++的發展。

地平線AI晶片技術專場第2講主講回顧

上圖的縱坐标是C++社群的活躍程度,橫坐标是時間,可以看到C++在一個很快速的上升期之後,在2000年左右出現了下降,在2006年出現了一個拐點,之後推出了C++11,C++14,C++ 17 ,C++20,軟體開發者的數量開始有了非常大的提升。

在這14年裡,Bjarne帶領整個C++标準委員會讨論究竟需要把什麼樣的内容放到C++标準裡,讓全世界的C++開發工程師利用他們手上能拿到的編譯器做好開發,比如C++11在Windows下程式設計可能是Visual Studio ,在Linux下程式設計可能是GCC或LVM或者其他一些商用的編譯器,那究竟要增加什麼樣的特性,C++才能更好用?要用什麼樣的标準來衡量“好用”?

他總結了兩個點:C++一定要讓應用能夠非常好的利用硬體性能特性來提升硬體效能,同時更好的管控底層的程式設計複雜度。這兩句話也很沖突,高效利用硬體,像是某種形式的軟硬結合。有效降低複雜度,是某種情況下的軟硬解耦。同時,他也提出來一條原則,要能夠讓程式員寫出好的代碼,并創造出好的應用,而不是預防程式員出bug。一種是補更新檔,一種是更好的牽引,來成就更好的開發者。

從這點讓我們更加堅信AI晶片上的開發也需要充分釋放硬體的性能,降低開發的複雜度,讓AI開發者們在 AI晶片平台上開發自己最主要的應用,并把它變成一個很好的産品,推向客戶、市場。結合C++ 14年的發展曆史,我們認為這樣的平台才是一個“好用”的開發平台。

3.用軟體2.0基礎設施、工具鍊、開放軟體棧和豐富樣例成就開發者

結合軟體2.0的程式設計模式和程式設計範式,究竟應該怎麼做才能做出一個好用的晶片、上層軟體開發環境。在這方面地平線也在一直實踐,是以下面将結合地平線的實踐,從軟體2.0的基礎設施、工具鍊、開放軟體棧和豐富樣例幾個層面來介紹一些相關的思考,我們也相信這可能是通往好用晶片,尤其是好用AI晶片、自動駕駛晶片,一定要走的路。

AI晶片需要一個工具鍊和軟體2.0基礎設施,在基礎設施方面要有資料标注、模型訓練平台,它可以支援算法開發和訓練、算法評測、端到端的資料閉環,這樣才能把更多的資料回傳到基礎設施裡做資料驅動的軟體2.0開發。而軟體1.0經過40多年的時間已經變得非常成熟,我們在上面也會堅持做微創新。

另外一方面是模型部署優化和性能分析,AI算法放在晶片上運作起來時要很快、性能要好、精度要高,出問題後要知道怎樣分析。當把算法用起來時是整套應用的開發,它最終會幫助開發者達到最終産品的目标。

首先講下基礎設施,這裡會結合地平線艾迪AI開發工具平台的實踐。艾迪AI開發工具平台是一個高效的軟體2.0訓練、測試、管理的工具平台。它由有幾部分組成,比如在邊緣側有車、晶片,通過加密傳輸把資料傳過來。在雲端也是一套完整的基礎設施,包括半/全自動的标注工具,自動化模型訓練,長尾場景管理、軟體自動內建、自動化回歸測試,最後這整套模型通過OTA更新部署到晶片上。同時,在端上還有影子模式、量産相關的模型部署、功能安全和資訊安全方面的工作。

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

地平線AI晶片技術專場第2講主講回顧

上圖是根據算法人員研發效率做的初步分析和模組化,得到了一些效率提升的數字來供大家做參考。比如資料挖掘,包括一些長尾資料管理和影子模式,在端上的影子模式像小朋友做考試題一樣,一個小朋友做100道題,可能隻錯一道,但剩下的99道都沒有什麼用,關鍵的這一道題要放在我們的錯題本上,持續的去溫習、疊代。是以影子模式和長尾資料管理,都是AI模型非常寶貴的錯題本。通過這種方式,資料上傳和存儲相關的效率會有很大的提升。

接下來是資料标注,原來是對所有的圖檔做标注。但在車輛實際運作過程中,它是一個時間和空間連續的狀态,在連續的狀态裡,比如在兩個不同的車道上,超一輛速度稍微低一些的車時,可能接下來的10秒内,車都在我的視野中,之後從視野裡一點一點的消失。在這10秒範圍内,如果按照1秒鐘30幀去捕捉圖檔并标注,這會非常費時、費力。其實隻需标注好一張圖檔,并利用時間和空間的連續性,可以實作自動化标注,甚至可以用自主學習方式訓練一個大模型來做标注,标注完之後隻需稍微校準下,就可以獲得非常大标注效率的提升。

地平線艾迪平台上背後有一套與車上面的晶片和闆子完全一緻的裝置叢集,這套裝置叢集可以讓每一個闆子像車一樣運作,隻不過它在機房裡,并且輸入不是大街上采集的圖檔,而是一些回灌的視訊圖檔,在上面我們做很多的探索,像AI模型的探索、編譯架構的探索,也可以做很多應用代碼的修改和回歸調試,這大大地降低了整個裝置、代碼和軟體算法測試的成本。

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

通過這些case的管理,能夠更好的讓算法開發者直接找到錯題本,看怎麼做來解決問題,大大提升的研發效率。經過這一整套研發效率的提升,可以更好的服務晶片上的産品開發。

接下來再講下工具鍊和應用開發。如果大家有在英偉達平台上的開發經驗,流程大概如下:先進行浮點模型訓練,然後量化,看精度是否達标,如果不達标再做疊代,接下來模型編譯放在平台上運作。地平線也很尊重開發者的開發習慣來做工具鍊和應用開發。

地平線AI晶片技術專場第2講主講回顧

地平線天工開物已經服務了100多家客戶,這100多家客戶中的開發者,用這些工具、讀這些文檔、看這些例子,然後在基礎上,把他們的想法、創造性發揮出來,遇到問題時去分析調試。

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

地平線AI晶片技術專場第2講主講回顧

訓練後量化工具也是一個很典型的軟硬解耦工具,任何訓練的符合規範要求的浮點模型,通過這個工具都可以部署在地平線晶片上。這個工具本身是一個軟體,與晶片一起做了很多的聯合優化,聯合優化反過來可以提升量化精度,即經過量化工具的轉換,不用做訓練,它的精度的損失與英偉達量化後的精度對比如上圖所示,可以看到量化的精度都是比英偉達量化後要好的。這是一個很典型的追求軟硬解耦,同時通過軟硬結合的方式,來打造一個對程式員和開發者更好用工具的過程。

在訓練工具上,我們也有類似的創新,比如訓練的 Plugin,在優化和編譯器方面也有很多相關的工具,它們都是來自于客戶的寶貴建議和開發者的實際訴求。

在此基礎上是一個非常豐富的軟體棧,軟體站裡底層是OS,再底層是一些開發闆,往上是一些軟體和開發的參考方案。當各位拿到我們的晶片或工具時,它裡面包含了一整套的工具鍊和開發元件,這些開發元件可以降低開發中的複雜度。與此同時,上面還會有很多的應用參考解決方案,以白盒或開源的方式提供給開發者。我們相信通過這些也可以大大提升開發者的效率,讓開發者可以做出更好的産品,同時得到好用的效果。

總之,地平線在艾迪平台和天工開物上,包括了算法開發和應用、算法評測、端到端的資料閉環,AI算法部署,應用開發,診斷、調試、性能調優。這個過程都是面向開發者的,完全為開發者服務,而且是為開發者的産品研發效率服務。是以在這個過程中,一定要秉承開放、靈活、相容,并且要做到高性能的原則。在這些原則的指引下,參考比較多的曆史經驗和教訓,以史為鑒去看接下來怎麼做來實作更好用的 AI晶片開發工具。

上面講了一個好用的開發工具,但它需要在市場上做相關的驗證和疊代。當去看整個市場上的車載晶片時,我們發現中國尤其是國産的自主品牌,已經成為全球頂級汽車智能晶片和算法、計算平台的“角鬥場”。比如2021年 Mobileye的EyeQ5,高通的Snapdragon Ride,英偉達的Xavier和Orin都是在國内自主品牌的自主車型上面首發,包括地平線征程3和征程5。

最後,再回顧下今天的内容,結合地平線的實踐,我們正在做一個更好用的、世界一流的人工智能計算平台,它的目标是讓開發者更好在上面開發基于AI的産品。包括旭日和征程晶片,晶片架構、編譯器、SoC、AI算法、深度學習架構的技術交融,軟硬協同優化,通過BPU微架構、版圖、時序、片上網絡、指令架構、運作排程、通信、功耗等方面提升性能和可靠性,流片驗證,把它用在機器上,讓機器像人一樣可以看懂、聽懂周圍的世界。這點是保證了好用晶片裡面軟硬結合和軟硬結合的核心。

除此之外,天工開物工具鍊沉澱了最領先的輕量化模型研發實踐、模型壓縮、量化訓練、訓練後量化、深度學習架構、運作時環境、AI應用方案到工具鍊中,通過自動化、工具化、樣例化,服務萬千開發者,普惠AI,讓賦能機器更高效。

地平線的艾迪平台,通過端雲協同、資料閉環、自動資料挖掘、自動化标注提升算法研發效率,通過評測叢集和硬體在環測試提升邊緣側疊代效率。它背後還有一整套的硬體和評測叢集,為了完成模型的訓練,還要對GPU叢集做管理,同時這些資料也要有存儲管理,整個過程都要自動化高效排程。如果前面是為了提升算法的研發效率,後面就是為了提升硬體資源的使用率。

上面看到的是産品,産品背後是一整套的軟體代碼和基礎架構。這包括怎麼樣寫代碼來實作高系統吞吐率、低延遲、高性能、低記憶體占用,并讓系統正确且确定地運作的代碼。從最基礎晶片裡的啟動裝載器,到晶片上的架構設計,架構設計上的彙編代碼類似于張量指令代碼,然後作業系統的驅動到核心,到編譯器和Runtime的環境,再到深度學習架構、量化,這一整套的技術棧都是用代碼一點點累積出來的。它還會用到多線程、高性能算法庫、單核多線程、多核多線程、多SoC上的通訊排程、車規級的功能安全,這些方面都需要在軟體層面考慮到。

繼續閱讀