使用板卡所带的npu需要烧录最新的系统,才能支持最新的npu驱动,我选用的是debian系统
官方提供了开发环境的docker镜像,我在windows上使用 dcoekr for windows,基于wsl2,有界面配置较为简单,而且搭配vscode也可以更好地管理镜像和容器。
使用docker搭建环境
在powershell下使用docker命令拉取镜像
1)获取 HHB 环境的 Docker 镜像:
docker pull hhb4tools/hhb:2.4.5
2)在设置-docker engine里可以配置相关参数,如容器大小、镜像地址
3)在vscode中下载docker扩展
安装完成后在左边会有一个图标,进入管理界面
可以看到在vscode里的docker管理插件有很多功能,设备上的有的容器和镜像都能在这里查看管理,右键可以启动容器或者关闭。
从镜像启动一个容器。
或者使用命令运行容器
3)启动容器后名称前面会出现一个绿色箭头,表示容器正在运行。
使用vscode连接docker的好处就是可以使用vscode直接编辑镜像里的文件,这里可以查看目录文件,以及对文件进行查看和编辑,对于习惯用vscode的用户真的很方便。
也可以使用shell连接docker,右键里面的attach shell默认是使用sh,界面显示和功能都不及bash,我们需要新建一个终端,使用docker命令指定连接bash
使用bash进入容器
docker exec -it 96c7e3dcad93bb2bb605e6c5dd7572705397346041c244b6ab54b2036d8f5eea /bin/bash
查看使用的hbb版本是最新的
使用这个插件也可以从镜像里下载文件到主机,但是我暂时没有找到可以上传文件的地方,网上搜索了的教程比较老试了也没有用,最后还是使用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 编辑