在香橙派OrangePi AIPro(8T)上实现基于ACLLite与PyACL的YOLOv10端侧推理
一、基本准备工作
1. 烧录系统
详情参见官方教程。可以使用昇腾官方的制卡工具Ascend devkit imager,也可以使用传统的balenaEtcher。此处不再赘述。
2. 设置SSH连接和静态IP
2.1 PC端设置(Windows为例)
通过网线连接后,一般来说对应的网络适配器是以太网。我们需要修改网络适配器的属性,从而实现静态IP。
-
在任务栏的搜索框中输入“管理网络适配器设置”,并进入设置页面。

或者打开“设置”——“网络和Internet”——“高级网络设置”
-
找到当前的WLAN,编辑网络适配器属性,打开共享功能,并设置共享连接的网络适配器为“以太网”:
-
找到最下面的“以太网”,编辑网络适配器属性(下图中,找到“更多适配器选项”,点击“编辑”):

找到下图所示的IPv4功能,双击打开:
设置成上图这样,点“确定”保存。
实际上,应该只需要把Windows端的IP设置成同一网段的IP就可以?
实际上先设置好WLAN的共享,打开后好像是会自动变成上图这样?如果已经变成这样,不要动,直接退出;如果仍然显示自动获得,可以直接尝试
ssh连接试一下,如果不好使再调整。
这下个人电脑这边就好了,剩下需要调整开发板。
2.2 开发板设置
已经提前设置好,这一部分无需远程用户操作。项目中运维负责人需要注意。
2.2.1 静态IP设置
实际上,就是通过以下两条命令来设置网关地址和静态IP地址,并把它加入到开机自动执行的命令里(/etc/profile):
1 | ifconfig eth0 192.168.137.30 up # IPv4 addr of ethernet0 |
实际使用时会遇到权限问题,这时候可以通过设置
setuid权限位来解决特定命令的权限问题。具体来说,执行以下命令:
1
2 sudo chmod u+s /usr/sbin/ifconfig
sudo chmod u+s /usr/sbin/route或者也可以通过修改
sudoers文件来实现,但是在这个板子上似乎并不好使,暂不清楚缘由。
所以,现在这个板子在通过网线和电脑直连时,以太网的IPv4地址是192.168.137.30,默认网关是192.168.137.1。
2.2.2 解决nmcli自动管理与以上设置冲突的问题
实际连接中会发现,按照以上方法设置开发板虽然在每次开机时可以顺利进入,但是过了一小会就会自动断开连接,并且按照原IP输入重新尝试连接时不成功。经过检查后,发现是因为Network Manager默认会自动配置以太网的IP,所以就会出现当它重新配置IP后导致SSH连接失效的问题。以下给出解决方案。
1 | (base) root@orangepiaipro:~# nmcli |
按照以上步骤配置,就能重新使用SSH连接了。
3. DNS设置
如果使用以太网口共享主机的Internet连接,就会出现一个问题,即在开发板想要使用外部的网络连接时,DNS会失效,于是开发板无法通过外部网络联网。这是因为systemd-resolved服务在自动管理你的DNS,它会将/etc/resolv.conf设置成本机回送地址,也就是一个桩解析器(Stub Resolver),将域名解析请求回送给本机的DNS。一个典型的由以上服务生成的文件如上:
1 | (base) root@orangepiaipro:~# cat /etc/resolv.conf |
另外,NetworkManager也可能管理你的DNS,从而改变你手动编辑的内容。为了开发板能够顺利切换网络,我们要设置固定的DNS配置。
解决方法
-
关闭
systemd-resolved1
sudo systemctl disable systemd-resolved --now
在这之前可以先执行
sudo systemctl status systemd-resolved命令检查这一服务是否在运行中。
-
修改
NetworkManager设置1
sudo nano /etc/NetworkManager/NetworkManager.conf
然后加上:
1
2[main]
dns=none随后执行:
1
sudo systemctl restart NetworkManager
之后请手动编辑你的
/etc/resolv.conf文件,应该就可以在各种网络环境下根据你设置的DNS解析域名。以我的设置为例:1
2
3nameserver 223.5.5.5
nameserver 8.8.8.8 # Google
nameserver 114.114.114.114
4. 风扇转速设置
默认的风扇转速并不足以让板子降温,在跑代码的时候散热效果更是让人不能满意。所以需要通过npu-smi设置风扇转速。
1 | sudo npu-smi set -t pwm-mode -d 0 # 0: manual 1: auto |
还可以根据以上命令写一些自动化的调整脚本。
5. 配置代理
我使用的是这个仓库中的脚本:https://github.com/nelvko/clash-for-linux-install.git,开发者也可根据喜好自行选择代理软件。
如果初次拉取因没有代理而出现问题,可以使用加速前缀https://gh-proxy.com/ ,也可以在本机下载压缩包解压后通过SSH传入开发板。随后请参考本仓库的README.md。
5.1 配置Git代理
在以上这个脚本运行后,Git的代理并没有随之设置好,我们还需要手动配置以下Git的全局代理,从而能够顺利地从Github上拉取代码。
执行以下两行代码,配置HTTP代理:
1 | git config --global http.proxy http://127.0.0.1:7890 # http代理(Clash的默认端口7890) |
随后可以使用这两行命令分别取消代理:
1 | git config --global --unset http.proxy |
还可以使用以下命令检查代理:
1 | git config --global --get http.proxy |
关于SSH连接的配置方法暂略,开发者可以自行在网上搜索教程。
6. 配置Zerotier虚拟局域网(可选)
在团队合作的时候需要保证每一个成员都能顺利连接到开发板,传统的方法是配置内网穿透。这里我们使用了一种更加便捷的方法——配置Zerotier的VLAN,从而使得大家都能通过私有IP登录到同一开发板。
关于其原理和用户端的配置方法,已经在另一篇文章讲得比较清楚了,这里给出主机端(开发板)配置的命令。
6.1 开发板部署
1 | curl -s https://install.zerotier.com | sudo bash |
执行完以上任意一条指令后,会出现:
1 | *** Enabling and starting ZeroTier service... |
随后记住你要加入网络的ID,并执行以下命令
1 | sudo zerotier-cli join xxxxxxxx # Network ID |
就可以实现不在同一局域网内的远程连接了。如下图,出现这样的标识证明已经成功加入。

此后如果仍然发现无法连接,需要重启以下zerotier-one的服务。
1 | sudo systemctl restart zerotier-one |
然后基本上就可以连接了,初次连接/重新配zerotier的时候一般会出现类似这样的提示:

之后就可以正常连接。
7. 设置算力超频(可选)
Orange AIPro默认1GHz的情况下可提供提供的算力为 8 TOPS,可以每秒钟执行 8 万亿次浮点运算。后续可通过官方提供的firmware补丁包超频CPU到1.6GHz,同时可超频AI算力到12TOPS。
打开香橙派官网,找到对应型号的资料页面,点击“官方工具——下载”,在百度网盘中找到对应的超频固件包下载到开发板里。这里给出官网链接:
下载好固件包后,依次执行以下几行命令:
1 | chmod +x Ascend310B-firmware-7.3.t10.0.b528-rc-signed-opiaipro-12t-1.6ghz-20240605.run |
提示更新完成后,断电重启系统。重启后使用以下命令切换算力挡位:
1 | (base) root@orangepiaipro:~# npu-smi set -t nve-level -i 0 -c 0 -d 1 |
随后再次重启,执行以下命令,如果“aicore freq”像下面一样变成了“750”,那么就代表升级成功。
1 | (base) root@orangepiaipro:~# grep "aicore freq" /var/log/npu/slog/device-0/device-0* |
8. 升级昇腾CANN工具包和内核
在此网页中下载资源,因为无法直接用wget或curl获取,所以建议连接外部显示屏使用桌面环境下载。(这类情况下软件包默认被下载到/home/HwHiAiUser/Downloads目录中)
下载好后依次执行以下命令(示例):
1 | cd /home/HwHiAiUser/Downloads |
安装完成后,检查用户.bashrc里是否存在以下这一行命令:
1 | source /usr/local/Ascend/ascend-toolkit/set_env.sh |
如果没有,请执行以下命令添加环境变量:
1 | echo 'source /usr/local/Ascend/ascend-toolkit/set_env.sh' >> ~/.bashrc |
9. 设置Control CPU工作数量(可选)
开发板使用的昇腾 SOC 总共有 4 个 CPU,这 4 个 CPU 既可以设置为control CPU,也可以设置为 AI CPU。默认情况下,control CPU 和AI CPU 的分配数量为3:1。使用 npu-smi info 命令可以查看下 control CPU 和 AI CPU 的分配数量。
1 | (base) HwHiAiUser@orangepiaipro:~# npu-smi info -t cpu-num-cfg -i 0 -c 0 |
在模型转换等过程中,我们暂时不需要设置AI CPU,所以可以把所有CPU都设置成control CPU,等到需要AI CPU的时候再切换回来。执行以下命令:
1 | npu-smi set -t cpu-num-cfg -i 0 -c 0 -v 0:4:0 |
随后执行reboot重启,完成变更。
10. 设置交换内存(可选)
-
创建swap文件
1
fallocate -l 32G /swapfile
-
修改文件权限
1
chmod 600 /swapfile
-
设置成swap空间
1
mkswap /swapfile
-
启用swap
1
swapon /swapfile
-
如果需要开机自启,请执行以下命令:
1
echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
-
查看swap状态
1
free -h
二、模型工作
1. 准备onnx模型
有两种方式获得示例模型。一是克隆YOLOv10的Github仓库,并使用ultralytics的转换工具将.pt格式的模型转换成onnx格式(此处具体细节可以参考仓库的README.md文件),二是可以直接从官方的release界面下载它提供的onnx格式的模型文件。具体步骤略。
2. 转换成om格式模型
使用昇腾自带的atc工具。执行命令:
1 | atc --model=yolov10m.onnx --framework=5 --output=yolov10m_310B4 --input_shape="images:1,3,640,640" --soc_version=Ascend310B4 |
可能会碰见如下的提示,但是不代表转化失败,无需担心:
1 | (base) HwHiAiUser@orangepiaipro:~/Codes/yolov10-om/models$ atc --model=yolov10m.onnx --framework=5 --output=yolov10m_310B4 --input_shape="images:1,3,640,640" --soc_version=Ascend310B4 |
3. 安装ACLLite-python库
可以参考仓库链接中的官方教程。
实际安装过程中不能原封不动按照教程来,几处需要注意的操作总结如下:
先在
~/下克隆下来这个仓库,再执行教程中的操作执行这一步时:
1
2 # 安装ffmpeg
sudo apt-get install -y libavformat-dev libavcodec-dev libavdevice-dev libavutil-dev libswscale-dev libavresample-dev需要把最后一个库改成
libswresample-dev。
- 执行这一步时:
1 python3 -m pip install av==6.2.0会出现版本不兼容的问题。因此命令需要去掉版本号,直接让
pip选择合适版本安装即可。
4. 使用ACLLite-python进行推理
4.1 构建项目目录
迁移过来的项目的结构可以自行决定,我们使用的主框架代码来自于昇腾社区用户“蹦蹦炸弹max”的仓库。
基于此代码,我们的项目目录结构应为以下所示:
1 | (base) root@orangepiaipro:~/Codes# cd yolov10-om/ |
data/:待推理数据,可以是图片/视频;outputs/:输出结果;classes.py:类别标签文件;utils.py:保存了图像预处理和结果可视化的代码;
4.2 尝试推理
首先确保已经将ACLLite库复制到应有的位置。重新执行一遍以下命令:
1 | cp -r ${HOME}/ACLLite/python ${THIRDPART_PATH} |
然后,打开你的yolov10_acllite.py所在的目录,在确保yolov10_acllite.py中已经设置好了对应的输入样本(图片/视频),且data/下有对应的数据文件后,执行python yolov10_acllite.py这一命令。得到以下提示:
1 | (base) root@orangepiaipro:~/Codes/yolov10-om# python3 yolov10_acllite.py |
就说明成功了!可以在outputs/中查看输出结果。
三、参考内容
[1] 基于香橙派AI Pro的yolov10模型推理迁移;
[2] 昇腾ACLLite库gitee主页.