經(jīng)過前面幾章的鋪墊,接下來的章節(jié)就開始進(jìn)入到 NPU 相關(guān)的開發(fā)測試了。本章呢,記錄下我分別在 Solus 上對 npu 相關(guān)例程的仿真以及實(shí)際在 YY3568 上進(jìn)行的 npu 例程測試,本章的重點(diǎn)是在 Solus 上仿真環(huán)境的搭建以及為了更友好地在 YY3568 和 Solus 上傳遞文件而在 Solus 上搭建 NFS 環(huán)境走的坑。本章記錄了我碰到一下幾個(gè)問題:
- 搭建仿真環(huán)境安裝 python 依賴時(shí),bfloat16 軟件包使用 pip 直接安裝出錯(cuò)(error: ‘unique_ptr’ in namespace ‘std’ does not name a template type),解決方法是下載最新的源碼包并對最新的源碼打 sdist 包并使用 pip 本地安裝
- 搭建 NFS 環(huán)境時(shí)竟然出錯(cuò),使用 systemctl status nfs-server.service查看出錯(cuò)(rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)),逐步定位是 /etc/netconfig 內(nèi)容不正確導(dǎo)致(竟然為空,從網(wǎng)上找到 sample 粘貼進(jìn)去解決問題)
- 默認(rèn) buildroot 編譯的根文件系統(tǒng)沒有 mount.nfs 支持需要放開
1. 在 Solus 上搭建 NPU 仿真環(huán)境
這里主要參考的資料是:
- Rockchip_Quick_Start_RKNN_SDK_V1.3.0_CN.pdf
- Rockchip_RKNPU_User_Guide_RKNN_API_V1.3.0_CN.pdf
- Rockchip_Quick_Start_RKNN_Toolkit2_CN-1.3.0.pdf
- Rockchip_User_Guide_RKNN_Toolkit2_CN-1.3.0.pdf
剛好 Solus 上有 python3.8 版本,所以就按照 python3.8 的依賴進(jìn)行安裝了:python3.8 -m pip install -r requirements_cp38-1.3.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
因?yàn)?pypi 上的 bfloat16 這個(gè)包有問題,問題截圖如下:
最新的 bfloat16 已經(jīng)修復(fù)了這個(gè)問題,我之前想的是臨時(shí)修改 pip 下載的 bfloat16 的源碼發(fā)現(xiàn)找不到源碼,后來就在 github 上找到的上游倉庫的源碼,下面就是怎么打包并安裝了,從網(wǎng)上了解到了 Source Distribution,然后嘗試在 bfloat16 的源碼執(zhí)行 python setup.py sdist
順利的打包出來了,接著就是直接 pip install xxxx
安裝就可以了。這個(gè)問題解決了之后,后面步驟就參考文檔進(jìn)行模型測試了,我選取的是 external/rknn-toolkit2/examples/tflite/mobilenet_v1 這個(gè)例程,結(jié)果截圖如下:
從圖中可以看到仿真模擬結(jié)果顯示的 Top5 內(nèi)容,后續(xù)可以和在YY3568上實(shí)際運(yùn)行的結(jié)果進(jìn)行對比。
2. 在 Solus 上搭建 NFS 環(huán)境并在 YY3568 上測試同樣的 npu 例程
這個(gè)文章之所以擱了這么就的原因就是這個(gè) NFS 服務(wù)的問題,困擾了我將近兩天,要不然文章昨天就發(fā)出去了。因?yàn)槲议_始是使用 eopkg install nfs-util
從官方倉庫安裝的 nfs 服務(wù)軟件包,竟然不能正常啟動(dòng) nfs-server.service,我感覺很驚訝,接著我就發(fā)了帖子start nfs-server.service failed,還好有很熱情的社區(qū)伙伴回復(fù),我嘗試手動(dòng)安裝最新版本的 nfs-util-2.6.3 還是無法正常啟動(dòng) nfs 服務(wù),我嘗試根據(jù) systemd 的錯(cuò)誤打印去看 nfs-util 的代碼。在這個(gè)過程中我對使用 journalctl
查看日志又了進(jìn)一步的印象,比如:
- 使用 sudo journalctl -x 相比普通用戶的 journalctl 可以看到更多內(nèi)容的打印信息
- journalctl -p xx 可以過濾要打印的日志優(yōu)先級(jí),如果是單個(gè)數(shù)字,小于等于這個(gè)級(jí)別的日志都會(huì)打印出來;如果是一個(gè)范圍:1...2,那么只會(huì)打印1和2這個(gè)級(jí)別范圍內(nèi)的打印信息。
感謝 journalctl ,也正是這個(gè)打印后來逐步幫助我解決了這個(gè)問題:
首先我在 https://raindocs.blogspot.com/2019/09/kernel-svc-failed-to-register-nfsaclv2.html?m=1 了解到 nfs-server 之前需要啟動(dòng) rpcbind 服務(wù),然后我就嘗試使用 systemd 啟動(dòng) rpcbind 服務(wù),我嘗試啟動(dòng)這個(gè)服務(wù)并嘗試使用 journalctl 查看日志,發(fā)現(xiàn)會(huì)打開 /etc/netconfig 文件,我的這個(gè)文件竟然是空的,所以我搜索了一下這個(gè)文件的 sample,找到了相關(guān)的內(nèi)容復(fù)制到這個(gè)文件如下:
udp6 tpi_clts v inet6 udp - -
tcp6 tpi_cots_ord v inet6 tcp - -
udp tpi_clts v inet udp - -
tcp tpi_cots_ord v inet tcp - -
rawip tpi_raw - inet - - -
local tpi_cots_ord - loopback - - -
unix tpi_cots_ord - loopback - - -
然后再啟動(dòng) rpcbind 就正常了,接著啟動(dòng) nfs-server 也就順利啟動(dòng)了,解決了之后我現(xiàn)在本地掛載測試下通過了,截圖如下:
下一步就是在 YY3568 上測試了,發(fā)現(xiàn)默認(rèn)竟然沒有 mount.nfs 工具,只能在 buildroot 中放開 nfs utils 編譯,將需要的 mount.nfs
和依賴庫 libtirpc.so.3.0.0
tftp 過去,就可以正常 nfs 掛載了,測試external/rknpu2/examples/rknn_mobilenet_demo
例程,截圖如下:
對比在 Solus 上的仿真結(jié)果,發(fā)現(xiàn)在 YY3568 的 npu 上進(jìn)行測試結(jié)果具有明顯的一致性。
審核編輯:湯梓紅
-
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209329 -
文件系統(tǒng)
+關(guān)注
關(guān)注
0文章
284瀏覽量
19904 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5032瀏覽量
97375 -
NPU
+關(guān)注
關(guān)注
2文章
279瀏覽量
18582 -
RK3566
+關(guān)注
關(guān)注
0文章
145瀏覽量
4824
發(fā)布評論請先 登錄
相關(guān)推薦
評論