1。 先提個綱

今天上手一塊板子:R329 EVB板。

R329來自國產晶片廠商全志科技,定位是智慧語音晶片。

其上一代產品是R328,19年用在了很多智慧語音產品上,比如天貓精靈、百度語音助手等。

為什麼能用進去?大致可以認為是功耗低、價格低、效能夠用、產品闊以(絕不不是因為前東家所以才誇~)。

在2020年,全志推出了新一代的R329,主打的是更優功耗,更高效能,更高性價比,其次的亮點是裡面的Arm china 0。256T AIPU,雙核DSP HIFI,這我剛拿到了開發板r329_evb5_v1,就迫不及待地上手了~

上手之前我稍微構思了下,覺得應該做成系列記錄教程,由淺入深地記錄我的開發過程,讓工程能力偏弱的演算法工程師也能跟著一步步看懂,然後上手部署實踐。

於是我就想著以我朋友(接近新手)的視角來玩這塊板子,分為三個階段,上手階段,應用階段,魔改階段。

上手階段:

就是從一開始的板子上電,接線,搭開發環境、看文件、配置編譯核心等等,總之是板子跑起來,為後續的開發做準備;

應用階段:

我們嘗試交叉編譯過程,移植深度學習推理框架(如NCNN,TNN等),使用zhouyi AIPU跑深度學習模型,使用雙核DSP做回聲消除等等,最終的目的是跑一個語音模型實現關鍵詞喚醒,跑yolo實現目標檢測功能,咱先實現功能,效能、精度調優留到第三步。

魔改階段:

這個階段,我們越過應用者視角,進入精英開發者視角,就NPU、CPU的硬體特點進行深入hack,瞭解分析底層的硬體原理,知道每一條指令跑在硬體的哪個部分,知道在任一時刻,該指令出現在哪個地方哪個階段;深入的剖析AI模型部署的方方面面,比如AI演算法最佳化啊、量化分析啊,運算元效能最佳化啊,效能分析啊等等,總之我覺得這部分是最有意思的。

2. 上手篇·新手級記錄過程

首先,你得拿到板子對吧,怎麼拿?

要麼淘寶買,要麼申請試用(下階段的試用申請可以私信我瞭解喲)!

板子拿到了,我相信你跟我朋友(沒接觸過嵌入式有AI基本瞭解的某一線大廠演算法工程師,簡稱朋友)一樣有這樣的疑問?

“這塊板子能幹啥?”

我想了下,這麼回的:

“你用過智慧音箱沒?百度的小度、小米的小愛,阿里的天貓精靈等等,你語音一叫它就答應,還能語音互動;你去吃海底撈的時候,會發現一個端菜的機器人對吧,這種機器人可以分辨行人、桌子、菜品,你擋住它道了還會跟你battle;剛剛所說的那些產品 那些功能都是這樣的板子實現的,具體來說就是在板子上跑了深度學習語音模型、影象模型比如KWS,YOLO啊啥的。”

解決了朋友的能幹啥的疑問之後,我問了下朋友:

“從你的角度來看,你覺得應該要有哪些資源以及知識才可把板子跑起來?然後把AI模型部署上去實現上面說的那些功能?”

朋友回答說:

“。。。我還是之前在大學的時候接觸過嵌入式,現在基本都忘了,我也不太清楚了呀,你突然這麼一問,現在完全是懵的呀~”

也對,其實也理解,邊緣嵌入式端模型工程部署是伴隨著AI的發展而蓬勃興起的,17年左右開始發展,在19年到達頂峰,目前已趨於平緩;而原來學校階段基本教的都是嵌入式的基礎知識,畢竟那時候AI還沒火起來呢,現在相當於在原來的嵌入式基礎上加入了AI的相關屬性,因此 一部分的嵌入式工程師學習深度學習的知識,或者新晉的深度學習演算法工程師學習嵌入式知識,從而就衍生了邊緣端部署最佳化工程師的崗位,屬於傳統HPC領域中的一個小分支。

這一頓battle之後,就得吃中飯了,先去吃飯先~好好做個乾飯人~拜拜~

俺回來啦~開整開整~~~~~~睡午覺~

……

(下次再也不能在週末睡午覺了,比較費錢,這剛吃完午飯又得吃晚飯。。。)

好在不餓,先開個箱吧~

探遊·R329·AI部署實戰(一)

探遊·R329·AI部署實戰(一)

探遊·R329·AI部署實戰(一)

探遊·R329·AI部署實戰(一)

上電後,燈亮了,就知道硬體沒啥大問題了,接下來開始準備軟體環境。

板子的通訊介面有兩種一種是adb連線,一種是串列埠連線,我們作為開發者,兩個都得配好。

第一步先裝驅動:

這個連結下載驅動,然後在壓縮包路徑:

探遊·R329·AI部署實戰(一)

分別安裝驅動,安裝完後記得重啟喲~

按照官網的教程:

來配置啥問題也沒有,

探遊·R329·AI部署實戰(一)

探遊·R329·AI部署實戰(一)

好了,到此可以知道板子是好的了,而且也知道板子是預先燒錄好了韌體的。

此時我們按照教程去點燈也沒啥問題,

探遊·R329·AI部署實戰(一)

於是去測一下麥克風,在板子上測得資料,然後adb pull到電腦上聽一下效果,一開始用arecord指令出來很大電流聲,指定引數如下圖所示就聲音正常了。

探遊·R329·AI部署實戰(一)

可以看到,在三通道下是ok的,聽上去也挺清晰的。

探遊·R329·AI部署實戰(一)

對應的單通道下也是ok的(低音沉~高音麗~![狗頭])

探遊·R329·AI部署實戰(一)

編譯韌體和燒寫韌體部分

我們要燒錄韌體,得先有原始碼,於是先去搞原始碼。

此時你得去全志的客戶服務平臺:

申請一個賬號,然後讓官方給你開通程式碼許可權,開好後就會發個郵件給你:

探遊·R329·AI部署實戰(一)

此時按照SDK下載方法一步步執行就好啦~

然後你可以開始下程式碼啦,但此時你發現不知道宿主環境是啥?

找到文件《Tina Linux 系統軟體 開發指南》

探遊·R329·AI部署實戰(一)

於是知道了要在ubuntu14。04中進行開發,於是我便弄了個虛擬機器跑ubuntu 14。04,這其中也碰到了一次問題,就是我下錯版本了,下的是32bit版本,因此按照文件進行環境包安裝的時候就進行不下去了,最後換為64bit系統就好了,這點也是文件沒有明確指出的。

好了,下載ubuntu。14。04 64bit系統映象——>下載虛擬機器Vmware——>安裝ubuntu——>按照文件(《Tina Linux 系統軟體 開發指南》)安裝環境。。。。。

然後終於可以下程式碼啦~按照服務指導手冊的提醒,一步步開始下程式碼啦~

~~~~~~~~~~~~~~~

································

打個盹的功夫~

································

~~~~~~~~~~~~~~~

好的,現在程式碼下載好了。

我們接下來試一下編譯韌體燒錄韌體的流程:

官網連結在這:

探遊·R329·AI部署實戰(一)

直接按照官網的流程來(行文此時正在編譯中),編完後燒錄一下看有沒有什麼問題。。。。。

A few years later……

探遊·R329·AI部署實戰(一)

快了快了~

Finally~

然後我們燒錄下:

探遊·R329·AI部署實戰(一)

然後上電,完美~

探遊·R329·AI部署實戰(一)

當然,上述過程中假如我們要編譯核心支援AIPU驅動可以kernel_menuconfig 進行配置:

探遊·R329·AI部署實戰(一)

可以看到AIPU是預設驅動支援了的,但是在軟體包配置部分:

探遊·R329·AI部署實戰(一)

可以看到,並沒有提供支援,也就是說我們用不了哇,據瞭解是智慧財產權屬於ARM china,全志這邊並不能直接使用,需要原IP廠自己開放了;

其次HIFI雙核DSP部分也是不能直接使用的,因為版權屬於科聲訊,因此作為發燒開發者的我們,可玩性大大降低了!因此期待儘快釋放AIPU、DSP部分資源出來呀~

ok,此時整個流程都算走了一遍了,可以得到階段性的結論: 板子是ok的,基本環境已搭建好~

3。 探究交叉編譯工具

這個時候我們下一步的探索就是交叉編譯環境的確認了,我們只需要造個最簡單的hello world函式,交叉編譯後能在開發板上執行。

我要在開發板上執行怎麼弄呢?

這個時候就是交叉編譯 工具鏈出場了!啥?你問我啥叫交叉編譯?為什麼要有這個?

嗯,我簡單說,你開發機器是虛擬機器裡面的ubuntu,這裡編譯的程式碼只能在虛擬機器ubuntu裡面跑,但是現在我要移植到目標板R329的tina中去,因此新加一箇中間層,我編譯的時候選擇某個特定的編譯器,生成的程式碼可以直接在R329-tina中跑,這個特定的編譯器就是交叉編譯器。

為什麼要有這個?因為宿主機中開發方便很多啊~你要是開發板效能強到跟電腦主機一樣了,各種環境也很完善了,那就不需要這麼麻煩了呀,直接開發板上開發就完事了~

好了,現在到實操了,官方文件這部分不是很詳細,我把摸索的過程寫出來,希望能幫到後來者:

第一步在宿主機造一個簡單的helloworld。c

探遊·R329·AI部署實戰(一)

確保宿主機能正常執行。

探遊·R329·AI部署實戰(一)

第二步找到交叉編譯工具

最新的線上文件,

探遊·R329·AI部署實戰(一)

我們的目標平臺是arm,因此選擇arm目錄;

目錄內有glibc跟musl兩套庫,我諮詢官方得知是musl庫,於是我一路先擇到:

探遊·R329·AI部署實戰(一)

在該目錄下編譯hellworld。c函式,得到嵌入式平臺下的目標檔案helloworld22,經vmhgfs共享檔案,再透過adb push helloworld22 /home/,送到板子上,此時執行發現:

探遊·R329·AI部署實戰(一)

推測可能是:

編譯器版本的問題,編譯核心的跟應用的而不一致,

也有可能是因為宿主機是64bit的,而我們目標板的程式是32bit的(試了下aarch64也不行)。

因此我們先用static編譯頂一下:

探遊·R329·AI部署實戰(一)

哇~久違的hello world啊~(我們技術渣就是這樣的啦,一點點東西就很開心了~)

探遊·R329·AI部署實戰(一)

至此,整個流程算是跑通啦~

4. 小結一下

1。 文件還是有一些盲區的,對於一些新手朋友不是很友好,建議直接上docker啊,這樣我就完全不用管環境配置問題啦~

2。 主要的玩點在於HIFI雙核DSP跟0。25TOPs的AIPU核,但是這兩個目前都沒法用啊,這部分希望儘快解決呀~後面的語音+影象模型部署還等著上呢~我總不能跑在算力10幾個GFLOPs的A53核上 吧~

3。 文件開放的不夠全面,比如AIPU的一系列開發文件(手動狗頭)。

4。 其他的後續碰到補充。

呼~ 開篇總算水完啦~我這次是跟朋友一邊做一邊寫的,根據朋友的建議,特意把某些地方寫的很繁瑣,希望大家不要嫌囉嗦呀~

後記:

人生河流這麼短,流淌的慾望貪戀卻這麼多,我能安心做好一些事情,求得本心就足矣。

拜白~ 下期見~