yolo检测适配昇腾Atlas300IDuo笔记

yolo检测适配昇腾Atlas300IDuo笔记

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


文章目录

  • yolo检测适配昇腾Atlas300IDuo笔记
    • 一、环境配置
    • 二、模型适配
      • [1. 模型转换](#1. 模型转换)
        • [(1)pt 转 onnx](#(1)pt 转 onnx)
        • [(2)onnx 转 om(含 AIPP 加速前处理)](#(2)onnx 转 om(含 AIPP 加速前处理))
        • [(3)使用 msit 定位精度问题](#(3)使用 msit 定位精度问题)
      • [2. 集成 AI 服务](#2. 集成 AI 服务)
    • 附录
      • [A. 参考资料汇总](#A. 参考资料汇总)
      • [B. 关键文件/目录说明](#B. 关键文件/目录说明)

一、环境配置

1. 基础环境

项目 配置
物理机系统 银河麒麟 Kylin V10(aarch64)
CPU HUAWEI Kunpeng 920 7260 @ 2.6GHz / 128 核
NPU Atlas 300I Duo × 2

本方案针对 aarch64(鲲鹏) 架构,所有安装包均需使用对应的 aarch64 版本。

2. 基础命令

bash 复制代码
# 查看 NPU 是否在位(d500 为昇腾 NPU 的 PCI 设备标识)
lspci | grep d500
  • lspci | grep d500 用于确认物理机上已正确挂载昇腾 NPU 设备。

3. 驱动和固件安装

(1)检查依赖
bash 复制代码
# 检查 gcc
rpm -qa | grep gcc

# 检查 kernel-devel(需与当前内核版本匹配)
rpm -qa | grep kernel-devel-$(uname -r)

# 检查 make
make -v

安装驱动前需确保 gcc、make、kernel-devel 均已安装且版本匹配,否则驱动编译/安装会失败。

(2)创建驱动运行用户

驱动进程需要以专用用户运行,创建 HwHiAiUser 用户:

bash 复制代码
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash
(3)安装固件
bash 复制代码
# 先用 --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)安装驱动
bash 复制代码
./Ascend-hdk-310p-npu-driver_25.2.0_linux-aarch64.run --full
  • 使用 --full 参数执行完整安装。
  • 安装完成后,如日志提示需要重启,则按要求重启系统。
  • 重启后执行 sudo su,通过 npu-smi info 验证驱动是否安装成功。
(5)验证
bash 复制代码
# 查看 NPU 型号与工作状态
npu-smi info

4. Docker 安装

昇腾环境通常以容器方式承载推理服务,本步骤安装 Docker 以及昇腾专用容器运行时 Ascend Docker Runtime。

(1)安装 Docker
bash 复制代码
dnf install -y docker-engine.aarch64

也可通过离线 RPM 包安装,详见下文「离线安装(可选)」小节。

(2)安装 Ascend Docker Runtime
bash 复制代码
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/ 目录。

bash 复制代码
mkdir -p ./docker-packages

dnf install -y --downloadonly --downloaddir=./docker-packages docker-engine.aarch64

把安装包复制到离线的机器上,可使用本地 RPM 包离线安装,:

bash 复制代码
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 推理镜像
bash 复制代码
docker pull --platform=arm64 \
  swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.1.RC2-300I-Duo-py311-openeuler24.03-lts
(2)创建并启动容器
bash 复制代码
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
bash 复制代码
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 加速前处理)
bash 复制代码
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 工具进行精度对比。

bash 复制代码
# 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 文件,在其中配置禁用所有算子融合,然后重新转换:

bash 复制代码
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.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 前处理加速配置
相关推荐
普通人612 小时前
WebGL与WebGPU入门指南
开发语言·webgl·1024程序员节
jay神1 天前
基于 YOLOv8 的手势识别系统(Web 版)
前端·人工智能·python·深度学习·yolo·计算机视觉·计算机毕业设计
猫猫不是喵喵.1 天前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
鱼听禅1 天前
Ubuntu安装YOLOv8进行菌落识别训练
linux·python·yolo·ubuntu
jay神3 天前
基于深度学习的交通流量预测系统(Web 版)
前端·人工智能·深度学习·yolo·计算机毕业设计
带电的小王4 天前
YOLO27:官方预览页放出全部规格,60.5 mAP 破 YOLO 纪录,但权重还没发布
yolo
jay神4 天前
基于 YOLOv8 的轴承缺陷检测(Web 版)
前端·人工智能·yolo
jay神4 天前
基于 YOLOv8 的森林火灾检测系统(Web 版)
前端·yolo
fish_zzzz4 天前
笔记-论数据结构2
1024程序员节
微尘hjx5 天前
【Deep-OC-SORT 06】多轨迹算法Deep-OC-SORT-CMC相机运动补偿
yolo·目标检测·目标跟踪·ultralytics·轨迹算法·deep-oc-sort·车流统计