yolo检测适配昇腾Atlas300IDuo笔记

本文档记录 AI 服务在昇腾(Ascend)Atlas 300I Duo 推理卡上的完整适配过程,涵盖环境配置、驱动/固件/Docker 安装、模型转换、AI 服务集成。



一、环境配置

1. 基础环境

项目配置
物理机系统银河麒麟 Kylin V10(aarch64)
CPUHUAWEI Kunpeng 920 7260 @ 2.6GHz / 128 核
NPUAtlas 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 包尝试安装。


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

使用该方式转换出的模型进行测试,不再出现精度损失。


2. 集成 AI 服务

将原使用 pt 推理 和 trt 推理 的部分,统一替换为 om 推理,并修改相应模型加载逻辑即可。


附录

A. 参考资料汇总

主题链接
驱动与固件下载https://www.hiascend.com/hardware/firmware-drivers/community?product=2&model=18&cann=8.2.RC2&driver=Ascend+HDK+25.2.0
昇腾 Docker 化部署https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/softwareinst/instg/instg_0020.html?Mode=DockerIns&InstallType=local&OS=Debian&Software=cannToolKit
镜像仓库https://www.hiascend.com/developer/ascendhub
YOLOv7-for-PyTorch 官方代码https://gitee.com/ascend/modelzoo-GPL/tree/master/built-in/PyTorch/Official/cv/object_detection/Yolov7_for_PyTorch
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

B. 关键文件/目录说明

路径 / 文件说明
Ascend-hdk-310p-npu-driver_25.2.0_linux-aarch64.runNPU 驱动安装包
Ascend-hdk-310p-npu-firmware_7.7.0.6.236.runNPU 固件安装包
Ascend-docker-runtime_7.1.RC1_linux-aarch64.run昇腾容器运行时
Ascend-mindie_2.1.RC2_linux-aarch64_abi1.runMindIE 推理框架
docker-packages/Docker 离线安装 RPM 包
fusion_switch.cfg禁用算子融合的配置文件
aipp_*.configAIPP 前处理加速配置
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐