昇腾CANN模型转换实践指南

本文主要讲解在Ubuntu系统上搭建CANN环境并实现onnx到CANN模型的转换实践。

一、开发环境配置

1. 系统准备

  • 推荐系统: Ubuntu 20.04 LTS
  • 换源配置:
    1
    sudo vim /etc/apt/sources.list
    替换为阿里云镜像源:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

    deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

    deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

    deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

    deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

2. 安装基础依赖

1
2
3
sudo apt update && sudo apt upgrade -y
sudo apt-get install -y gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev
sudo apt-get install -y unzip pciutils net-tools libblas-dev gfortran libblas3 libopenblas-dev libncursesw5-dev

3. Python环境配置

  • 安装Miniconda:
    1
    2
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    bash Miniconda3-latest-Linux-x86_64.sh -b -u -p $HOME/miniconda3
  • 创建专用环境:
    1
    2
    3
    4
    conda create -n cann python=3.9
    conda activate cann
    pip3 install --upgrade pip
    pip install attrs numpy==1.17.2 decorator sympy cffi pyyaml pathlib2 psutil protobuf scipy requests onnx

二、CANN Toolkit安装

1. 工具包获取

2. 安装步骤

在终端输入以下命令

1
2
chmod +x Ascend-cann-toolkit_8.0.RC3.alpha001_linux-x86_64.run
./Ascend-cann-toolkit_8.0.RC3.alpha001_linux-x86_64.run --install

3. 环境配置

对于Atlas 200 AI加速模块 (RC场景)和Atlas 500 小站(运行环境aarch64架构)来说,当开发环境是一台X86 PC进行环境搭建时,需要在开发环境中安装交叉编译工具

  • 安装交叉编译工具:

    1
    sudo apt install g++-aarch64-linux-gnu
  • 解决共享库问题:
    上述安装过程中若出现报错:

    1
    libascend_hal.so: cannot open shared object file: No such……

    进入到Ascend目录下输入

    1
    2
    sudo find ./ -name libascend_hal.so  # 查找库路径
    sudo cp {找到的路径} /usr/local/lib/ # 拷贝库到共享库目录

    进入“/etc/ld.so.conf”,并将include /usr/local/lib添加至文件最后一行后,终端输入以下命令

    1
    2
    ldconfig # 更新共享库缓存
    sudo ldconfig # 更新系统缓存
  • 添加环境变量:

    1
    2
    echo "source ~/Ascend/ascend-toolkit/set_env.sh" >> ~/.zshrc
    source ~/.zshrc

三、模型转换流程

1. ONNX模型验证

1
2
3
import onnx
model = onnx.load('model.onnx')
print("输入节点:", [input.name for input in model.graph.input])

若此处输出”inputxxxx”,因此于–input_shape中,填入的模型名称为”inputxxxx”

2. atc本地转换(开发环境)

1
2
3
4
5
atc --model=model.onnx \
--framework=5 \
--output=model \
--soc_version=Ascend310B1 \
--input_shape="inputxxxx:1,3,224,224"

四、昇腾开发板部署

1. 文件传输

将onnx文件传输到昇腾开发板上

1
scp ./model.onnx root@10.0.0.1:/pytroch

2. 板端模型转换

使用ATC工具将onnx转化为om,我这里的昇腾型号是Ascend310B1

1
atc --model=./model.onnx --framework=5 --output=/root --soc_version=Ascend310B1

3. 转换验证

成功输出示例:

1
ATC run success

常见问题排查

  1. 库文件缺失:

    • 现象:libascend_hal.so: cannot open shared object file:No such……
    • 解决:检查环境变量配置,确认LD_LIBRARY_PATH包含库路径
  2. 输入形状不匹配:

    • 现象:Input shape mismatch
    • 解决:使用Netron工具可视化模型,确认输入节点名称和维度
  3. 算子不支持:

    • 现象:Unsupported op type: XXX
    • 解决:查阅CANN算子清单,考虑自定义算子或模型结构调整

附录:参考资源

  1. CANN官方文档
  2. ATC工具参数详解
  3. 昇腾开发者论坛