昇腾边缘 AI 实战:从 WSL 交叉环境搭建到 YOLOv26-Pose OM 模型转换

📝 前言与场景

在昇腾边缘计算(如 Atlas 200I DK A2 / Orange Pi AI Pro)的开发中,我们通常采用**“PC 端交叉编译与模型转换,边缘端直接部署运行”**的模式。 本文基于 Windows WSL2 (Ubuntu)CANN 8.0.0.alpha001,手把手教你完成环境搭建,并将前沿的 YOLOv26-Pose 姿态估计模型从 .pt 转化为 .om 模型。文末附带全套血泪避坑指南。


🛠️ 第一阶段:WSL 交叉编译堡垒搭建

1. 系统级依赖安装 (WSL 终端)

安装交叉编译器和构建工具,为后续编译 ARM 架构的可执行文件做准备:

sudo apt-get update 
sudo apt-get install -y build-essential cmake g++-aarch64-linux-gnu gcc-aarch64-linux-gnu wget curl

sudo apt install python3-pip -y

# 安装模型转换所需工具
pip3 install ultralytics onnx onnxsim "numpy==1.26.4" decorator sympy scipy attrs pyyaml protobuf -i https://pypi.tuna.tsinghua.edu.cn/simple --user

sudo apt-get install -y libgl1-mesa-glx libglib2.0-0

# 加载环境
export PATH=$HOME/.local/bin:$PATH

2. 安装 CANN Toolkit (PC 端必须装 x86_64 版)

虽然目标是跑在 ARM 板子上,但在 PC 端作转换,必须安装 x86_64 版本

⚠️ 路径避坑: 在 WSL 中,Windows D 盘路径必须写 /mnt/d/,绝对不能写 D:/

# 进入安装包目录,比如
cd /mnt/d/work/Ascend/CANN

# 赋权限
chmod +x Ascend-cann-toolkit_8.0.0.alpha001_linux-x86_64.run 

# 检查
./Ascend-cann-toolkit_8.0.0.alpha001_linux-x86_64.run --check

# 安装
./Ascend-cann-toolkit_8.0.0.alpha001_linux-x86_64.run --install

image


🔑 第二阶段:ATC 环境激活(每次必做)

在 WSL 中每次新开终端准备转换模型前,必须依次执行以下命令。建议写入 ~/.bashrc

#  注入 CANN 官方环境变量
source ~/Ascend/ascend-toolkit/set_env.sh
# source ~/home/xjh/Ascend/ascend-toolkit/8.0.0.alpha001/x86_64-linux/script/set_env.sh

# 补全深层驱动模拟库路径 (解决 libascend_hal.so 找不到)
export LD_LIBRARY_PATH=$HOME/Ascend/ascend-toolkit/latest/x86_64-linux/devlib/linux/x86_64:$LD_LIBRARY_PATH

export ASCEND_HOME=/usr/local/Ascend/ascend-toolkit/8.0.0/aarch64-linux
export PATH=$ASCEND_HOME/atc/bin:$ASCEND_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ASCEND_HOME/lib64:$ASCEND_HOME/atc/lib64:$LD_LIBRARY_PATH

#  查看当前环境变量
echo $ASCEND_HOME/

#  限制编译并发数防内存打满导致崩溃
export TE_PARALLEL_COMPILER=2

image


⚙️ 第三阶段:模型锻造 (PT -> ONNX -> OM)

步骤 1:一键导出 ONNX

# opset=12 保证兼容性,simplify=True 开启算子精简(必开)
cd /mnt/d/work/Ascend/model
yolo export model=yolo26s-pose.pt format=onnx opset=12 simplify=True

image

步骤 2:执行 ATC 最终转换

# 验证atc是否启动
atc --version

# 模型转换
atc --model=yolo26s-pose.onnx \
    --framework=5 \
    --output=yolo26s-pose \
    --input_format=NCHW \
    --input_shape="images:1,3,640,640" \
    --log=error \
    --soc_version=Ascend310B4

image

image

看到 ATC run success,即可在当前目录收获神装 yolo26s-pose_aipp.om


🩸 第四阶段:血泪避坑指南 (Troubleshooting)

❌ 报错 1:libascend_hal.so: cannot open shared object file

  • 根因: 环境变量未激活,或 CANN 脚本漏掉了 devlib

  • 方案: 执行【第二阶段】的补丁 1

❌ 报错 2:AttributeError: np.float_ was removed in the NumPy 2.0 release

  • 根因: NumPy 版本过高,ATC 的 TBE 算子融合脚本使用旧接口。

  • 方案: 暴力回退 pip install numpy==1.26.4

❌ 报错 3:ATC 运行中途多进程崩溃 main process disappeared

  • 根因: YOLO-Pose 模型复杂,WSL2 内存分配不足导致系统 OOM Killer 杀掉主进程。

  • 方案: 执行【第二阶段】的补丁 2 (export TE_PARALLEL_COMPILER=2),限制并发数慢慢转。

❌ 警告 4:成功但提示 W11001: Op [/model.23/Mod] does not hit the high-priority operator...tiling offset out of range

  • 说明: 只要最终看到 ATC run success完全无需理会!

  • 解析: 1. tiling 警告是因为检测头算子碎,但在限制了并发数后内存挺过去了。 2. W11001 是提醒模型中有个别生僻算子(如求余 Mod)未命中底层汇编优化,回退到了普通 CPU 计算。这仅仅会让单次推理多花 0.几毫秒,对模型精度和可用性没有任何影响。安心使用!

请登录后发表评论

    没有回复内容