yolo检测适配昇腾Atlas300IDuo笔记
yolo检测适配昇腾Atlas300IDuo笔记
本文档记录 AI 服务在昇腾(Ascend)Atlas 300I Duo 推理卡上的完整适配过程,涵盖环境配置、驱动/固件/Docker 安装、模型转换、AI 服务集成。
文章目录
一、环境配置
1. 基础环境
| 项目 | 配置 |
|---|---|
| 物理机系统 | 银河麒麟 Kylin V10(aarch64) |
| CPU | HUAWEI Kunpeng 920 7260 @ 2.6GHz / 128 核 |
| NPU | Atlas 300I Duo × 2 |
本方案针对 aarch64(鲲鹏) 架构,所有安装包均需使用对应的 aarch64 版本。
2. 基础命令
# 查看 NPU 是否在位(d500 为昇腾 NPU 的 PCI 设备标识)
lspci | grep d500
lspci | grep d500用于确认物理机上已正确挂载昇腾 NPU 设备。
3. 驱动和固件安装
(1)检查依赖
# 检查 gcc
rpm -qa | grep gcc
# 检查 kernel-devel(需与当前内核版本匹配)
rpm -qa | grep kernel-devel-$(uname -r)
# 检查 make
make -v
安装驱动前需确保
gcc、make、kernel-devel均已安装且版本匹配,否则驱动编译/安装会失败。
(2)创建驱动运行用户
驱动进程需要以专用用户运行,创建 HwHiAiUser 用户:
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash
(3)安装固件
# 先用 --check 进行安装前环境自检
./Ascend-hdk-310p-npu-firmware_7.7.0.6.236.run --check
# 通过校验后再执行安装(--install)
./Ascend-hdk-310p-npu-firmware_7.7.0.6.236.run --install
(4)安装驱动
./Ascend-hdk-310p-npu-driver_25.2.0_linux-aarch64.run --full
- 使用
--full参数执行完整安装。 - 安装完成后,如日志提示需要重启,则按要求重启系统。
- 重启后执行
sudo su,通过npu-smi info验证驱动是否安装成功。
(5)验证
# 查看 NPU 型号与工作状态
npu-smi info
4. Docker 安装
昇腾环境通常以容器方式承载推理服务,本步骤安装 Docker 以及昇腾专用容器运行时 Ascend Docker Runtime。
(1)安装 Docker
dnf install -y docker-engine.aarch64
也可通过离线 RPM 包安装,详见下文「离线安装(可选)」小节。
(2)安装 Ascend Docker Runtime
chmod +x Ascend-docker-runtime_7.1.RC1_linux-aarch64.run
# 自检
./Ascend-docker-runtime_7.1.RC1_linux-aarch64.run --check
# 安装
./Ascend-docker-runtime_7.1.RC1_linux-aarch64.run --install
# 重载 daemon 并重启 docker
systemctl daemon-reload && systemctl restart docker
离线安装 Docker(可选)
若无法使用在线源安装 Docker,可以找一台同配置的可以联网的机器,下载docker 安装包,安装包位于 docker-packages/ 目录。
mkdir -p ./docker-packages
dnf install -y --downloadonly --downloaddir=./docker-packages docker-engine.aarch64

把安装包复制到离线的机器上,可使用本地 RPM 包离线安装,:
cd docker-packages
rpm -ivh --nodeps --force ./*.rpm
# 启动并设置开机自启
systemctl enable docker && systemctl start docker
在线安装失败或内网环境时,优先使用本地 RPM 包离线安装。
若没有同配置且可联网的机器,也可以前往 https://update.cs2c.com.cn/NS/V10/V10SP2/os/adv/lic/base/aarch64/Packages/ 下载对应的 RPM 包尝试安装。
- 昇腾容器化部署说明:https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/softwareinst/instg/instg_0020.html?Mode=DockerIns&InstallType=local&OS=Debian&Software=cannToolKit
- Ascend Docker Runtime容器引擎插件:https://gitcode.com/Ascend/mind-cluster/releases/v7.1.RC1
5. 镜像拉取
镜像仓库:https://www.hiascend.com/developer/ascendhub
(1)拉取 MindIE 推理镜像
docker pull --platform=arm64 \
swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.1.RC2-300I-Duo-py311-openeuler24.03-lts
(2)创建并启动容器
docker run -itd --privileged --net=host \
--shm-size 500g \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/bin/hccn_tool:/usr/bin/hccn_tool \
-v /usr/local/sbin:/usr/local/sbin \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
-v /etc/hccn.conf:/etc/hccn.conf \
-v /data_1/test:/data_1/test\
-v /etc/machine-id:/etc/machine-id \
-v /sbin/dmidecode:/sbin/dmidecode \
-v /dev/mem:/dev/mem \
--name ai_test1 \
swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.1.2-300I-Duo-py311-openeuler24.03-lts /bin/bash
关键参数说明:
| 参数 | 说明 |
|---|---|
--privileged | 以特权模式运行,容器内可访问宿主机所有设备 |
--net=host | 使用宿主网络栈,便于服务对外暴露端口 |
--shm-size 500g | 设置共享内存为 500G,避免多路并发推理因共享内存不足而失败 |
--device=/dev/davinci* | 将 NPU 设备(davinci0~3)映射进容器 |
--device=/dev/davinci_manager | 映射 NPU 管理设备 |
--device=/dev/hisi_hccn | 映射网卡/互联设备 |
--device=/dev/devmm_svm | 映射设备内存设备 |
-v /usr/local/Ascend/... | 挂载驱动与固件,使容器内可使用 NPU |
-v /data_1/test:/data_1/test | 挂载模型/数据目录 |
--name ai_test1 | 指定容器名称 |
容器创建后,后续模型转换、AI 服务运行均在此容器内(或遵循容器挂载路径)进行。
二、模型适配
1. 模型转换
流程为:pt → onnx → om。
本文以yolov7检测为例 :下载pt → onnx 转换代码:https://gitee.com/ascend/modelzoo-GPL/blob/master/built-in/PyTorch/Official/cv/object_detection/Yolov7_for_PyTorch
(1)pt 转 onnx
python export.py \
--weights xxx.pt \
--grid --simplify \
--topk-all 1000 --iou-thres 0.65 --conf-thres 0.35 \
--img-size 1280 1280 --max-wh 1280
(2)onnx 转 om(含 AIPP 加速前处理)
atc --model yolov7_640.onnx \
--output=yolov7_640_310P3 \
--framework=5 \
--soc_version=Ascend310P3 \
--insert_op_conf=aipp_yolov7_det_640.config
说明:
- 实测发现预处理部分较慢(约 30ms),通过
--insert_op_conf=aipp_*.config将通道转换、归一化等耗时操作下沉到 NPU,使用 AIPP 加速后,预处理耗时降至约 8ms。
aipp_yolov7_det_640.config样例:
(3)使用 msit 定位精度问题
为定位漏检现象,使用华为 msit 工具进行精度对比。
# 1. 安装 msit 的 compare 模块
msit install compare
# 2. 使用 msit 进行精度对比
msit debug compare \
-gm /data_1/test/weights/yolov7_640.onnx \
-om /data_1/test/weights/yolov7_640.om \
-c /usr/local/Ascend/ascend-toolkit/latest/ \
-o /data_1/test/weights/msit_results/ \
--advisor
精度对比结果显示,ONNX 转 OM 的过程中,第 234 层 将 ONNX 算子 Conv_46, Sigmoid_47, Mul_48 直接融合成 Conv_46Sigmoid_47Mul_48 算子时,首次出现精度损失;此后类似的算子融合均存在精度损失,导致后续损失不断放大。
解决方法:禁用所有算子融合。 新建 fusion_switch.cfg 文件,在其中配置禁用所有算子融合,然后重新转换:
atc --model yolov7_640.onnx \
--output=yolov7_640 \
--framework=5 \
--soc_version=Ascend310P3 \
--insert_op_conf=aipp_yolov7_det_640.config \
--fusion_switch_file=fusion_switch.cfg
使用该方式转换出的模型进行测试,不再出现精度损失。
- msit 使用说明:https://gitcode.com/Ascend/msit/tree/master/msit/docs/debug/compare
- ATC 算子融合开关参数:https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/devaids/atctool/atlasatcparam_16_0053.html
2. 集成 AI 服务
将原使用 pt 推理 和 trt 推理 的部分,统一替换为 om 推理,并修改相应模型加载逻辑即可。
附录
A. 参考资料汇总
B. 关键文件/目录说明
| 路径 / 文件 | 说明 |
|---|---|
Ascend-hdk-310p-npu-driver_25.2.0_linux-aarch64.run | NPU 驱动安装包 |
Ascend-hdk-310p-npu-firmware_7.7.0.6.236.run | NPU 固件安装包 |
Ascend-docker-runtime_7.1.RC1_linux-aarch64.run | 昇腾容器运行时 |
Ascend-mindie_2.1.RC2_linux-aarch64_abi1.run | MindIE 推理框架 |
docker-packages/ | Docker 离线安装 RPM 包 |
fusion_switch.cfg | 禁用算子融合的配置文件 |
aipp_*.config | AIPP 前处理加速配置 |
更多推荐


所有评论(0)