[经验分享] 【玄铁杯第三届RISC-V应用创新大赛】Licheepi 4A 环境搭建以及功能试用

hollyedward   2023-12-5 11:23 楼主

使用板卡所带的npu需要烧录最新的系统,才能支持最新的npu驱动,我选用的是debian系统

官方提供了开发环境的docker镜像,我在windows上使用 dcoekr for windows,基于wsl2,有界面配置较为简单,而且搭配vscode也可以更好地管理镜像和容器。

批注 2023-12-05 112215.png

使用docker搭建环境

在powershell下使用docker命令拉取镜像

1)获取 HHB 环境的 Docker 镜像:

docker pull hhb4tools/hhb:2.4.5
 

image.png  

2)在设置-docker engine里可以配置相关参数,如容器大小、镜像地址

image.png  

3)在vscode中下载docker扩展

安装完成后在左边会有一个图标,进入管理界面

 

image.png  

可以看到在vscode里的docker管理插件有很多功能,设备上的有的容器和镜像都能在这里查看管理,右键可以启动容器或者关闭。

从镜像启动一个容器。

image.png  

image.png  

或者使用命令运行容器

image2.png

 

 

3)启动容器后名称前面会出现一个绿色箭头,表示容器正在运行。

使用vscode连接docker的好处就是可以使用vscode直接编辑镜像里的文件,这里可以查看目录文件,以及对文件进行查看和编辑,对于习惯用vscode的用户真的很方便。

image.png  

也可以使用shell连接docker,右键里面的attach shell默认是使用sh,界面显示和功能都不及bash,我们需要新建一个终端,使用docker命令指定连接bash

 

image.png  

使用bash进入容器

docker exec -it 96c7e3dcad93bb2bb605e6c5dd7572705397346041c244b6ab54b2036d8f5eea /bin/bash

image.png  

查看使用的hbb版本是最新的

hbb.png

 

 

 

使用这个插件也可以从镜像里下载文件到主机,但是我暂时没有找到可以上传文件的地方,网上搜索了的教程比较老试了也没有用,最后还是使用docker命令进行docker镜像和主机之间的文件传输

4)使用命令 docker cp 主机地址 docker镜像id:镜像里的地址,windows和linux使用的文件隔离符号是相反的

将下载的文件从主机上传到镜像 

 docker cp C:\Users\imagi\Downloads\mobilenetv2-12.onnx  96c7e3dcad93:/home/example/th1520_npu/onnx_mobilenetv2_c++/

将镜像里的文件传到主机

docker cp 96c7e3dcad93:/home/example/th1520_npu/onnx_mobilenetv2_c++/  C:\Users\imagi\Downloads\

最后将编译后的文件通过scp传给开发板

scp -r C:\Users\imagi\Downloads\onnx_mobilenetv2_c++\ debian@192.168.137.36:~

icheePi4A 平台上部署 mobilenetv2 模型完成图像分类

1)进入已经配置好的虚拟环境ort

source /root/ort/bin/activate

2)编译后的文件在开发板上执行需要给权限

//给文件夹赋权
chmod -R 777 onnx_mobilenetv2_c++/
//给文件赋权
chmod -x 777 mobilenetv2_example

3)运行该可执行文件

./mobilenetv2_example

4)可以成功推理

debian@lpi4a:~/onnx_mobilenetv2_c++$ sudo su
root@lpi4a:/home/debian/onnx_mobilenetv2_c++# cd
root@lpi4a:~# ls
hhb_onnxruntime_th1520-2.6.0-cp311-cp311-linux_riscv64.whl  ort
onnxruntime-1.14.1-cp311-cp311-linux_riscv64.whl            prebuilt_whl
root@lpi4a:~# source /root/o
onnxruntime-1.14.1-cp311-cp311-linux_riscv64.whl  ort/
root@lpi4a:~# source /root/ort/bin/activate
(ort) root@lpi4a:~# cd /home/debian/onnx_mobilenetv2_c++
(ort) root@lpi4a:/home/debian/onnx_mobilenetv2_c++# ls
hhb_out        input_img.bin_output0_1_1000.txt  main.cpp             mobilenetv2_example  shl.hhb.bm
input_img.bin  input_img.tensor                  mobilenetv2-12.onnx  persian_cat.jpg      synset.txt
(ort) root@lpi4a:/home/debian/onnx_mobilenetv2_c++# ./mobilenetv2_example
 ********** preprocess image **********
 ********** run mobilenetv2 **********
INFO: Mapping phase 'Convert to CnnModel' - Started...
INFO: Mapping phase 'Convert to CnnModel' - Finished after 106.277ms
INFO: Hw optimizer max_threads = 1
INFO: fast_optim = 1000
INFO: Mapping phase 'Process Graph Topology' - Started...
INFO: Mapping phase 'Process Graph Topology' - Finished after 7981.096ms
INFO: Mapping phase 'Search for optimal solution' - Started...
INFO: Mapping phase 'Search for optimal solution' - Finished after 46375.076ms
INFO: Mapping phase 'Apply Graph Solution' - Started...
INFO: Mapping phase 'Apply Graph Solution' - Finished after 1244.890ms
INFO: Mapping phase 'Processing Coefficients' - Started...
INFO: Mapping phase 'Processing Coefficients' - Finished after 1220.243ms
INFO: Mapping phase 'Process Graph Hierarchy' - Started...
INFO: Mapping phase 'Process Graph Hierarchy' - Finished after 342.447ms
INFO: Mapping phase 'Late DSC Remover' - Started...
INFO: Mapping phase 'Late DSC Remover' - Finished after 5.915ms
INFO: Mapping phase 'Init all layers' - Started...
INFO: Mapping phase 'Init all layers' - Finished after 114.970ms
INFO: Mapping phase 'Assigning passes to cores' - Started...
INFO: Mapping phase 'Assigning passes to cores' - Finished after 30.937ms
INFO: Mapping phase 'Processing Memory Requirements' - Started...
INFO: Mapping phase 'Processing Memory Requirements' - Finished after 299.067ms
INFO: Mapping phase 'Execution Reorder' - Started...
INFO: Mapping phase 'Execution Reorder' - Finished after 24.217ms
INFO: Mapping phase 'Calculating Synchronization data' - Started...
INFO: Mapping phase 'Calculating Synchronization data' - Finished after 882.452ms
INFO: Mapping phase 'Lower to IR' - Started...
INFO: Mapping phase 'Lower to IR' - Finished after 597.547ms
INFO: Mapping phase 'Generate Binary Stream' - Started...
INFO:   BUFF  1 :  3192832 : Coefficients
INFO:   BUFF  2 :   150528 : Network Input
INFO:   BUFF  3 :     1000 : Network Output
INFO:   BUFF  4 :  2236416 : Temporary
INFO:   BUFF  5 :   132352 : Command Stream
INFO:   TOTAL   : 5713128 bytes
INFO: segment_id 0 - NNA
INFO:   input     buffer 2 [1 3 224 224 ] Q8s0.018333z-13 1
INFO:   output    buffer 3 [1 1000 ] Q8s0.094434z-43 1
INFO:   cmdstream buffer 5
INFO:   coeff     buffer 1
INFO:   temporary buffer 4
INFO: Mapping phase 'Generate Binary Stream' - Finished after 193.585ms
INFO: NNA clock:792000 [kHz]
INFO: Heap :ocm (0x18)
INFO: Heap :anonymous (0x2)
INFO: Heap :dmabuf (0x2)
INFO: Heap :unified (0x5)
FATAL: Importing 150528 bytes of CPU memory has failed (wrong memory alignment)
Run graph execution time: 14.72540ms, FPS=67.91

=== tensor info ===
shape: 1 3 224 224
data pointer: 0x1f73220

=== tensor info ===
shape: 1 1000
data pointer: 0x3fe9f39000
The max_value of output: 16.053827
The min_value of output: -8.026914
The mean_value of output: -0.001889
The std_value of output: 9.203342
 ============ top5: ===========
283: 16.053827
281: 14.165141
287: 11.709850
285: 11.615416
282: 11.332113
free(): invalid pointer
Aborted
 ********** postprocess result **********
 ********** probability top5: **********
n02123394 Persian cat
n02123045 tabby, tabby cat
n02127052 lynx, catamount
n02124075 Egyptian cat
n02123159 tiger cat

 

本帖最后由 hollyedward 于 2023-12-5 11:26 编辑

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复