昇腾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
14deb 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 | sudo apt update && sudo apt upgrade -y |
3. Python环境配置
- 安装Miniconda:
1
2wget 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
4conda 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. 工具包获取
- 官方渠道:华为昇腾社区
- 备用资源(x86架构):
链接: Ascend-cann-toolkit_8.0.RC3.alpha001_linux-x86_64.run
提取码: abel
- 备用资源(aarch64架构):
链接: Ascend-cann-toolkit_8.0.RC3.alpha001_linux-aarch64.run
提取码: abel ### 2. 安装步骤 在终端输入以下命令1
2chmod +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……
1
2sudo find ./ -name libascend_hal.so # 查找库路径
sudo cp {找到的路径} /usr/local/lib/ # 拷贝库到共享库目录include /usr/local/lib添加至文件最后一行后,终端输入以下命令
1
2ldconfig # 更新共享库缓存
sudo ldconfig # 更新系统缓存
- 添加环境变量:
1
2echo "source ~/Ascend/ascend-toolkit/set_env.sh" >> ~/.zshrc
source ~/.zshrc
三、模型转换流程
1. ONNX模型验证
1 | import onnx |
若此处输出”inputxxxx”,因此于–input_shape中,填入的模型名称为”inputxxxx”
2. atc本地转换(开发环境)
1 | atc --model=model.onnx \ |
四、昇腾开发板部署
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
常见问题排查
- 库文件缺失:
- 现象:
libascend_hal.so: cannot open shared object file:No such…… - 解决:检查环境变量配置,确认
LD_LIBRARY_PATH包含库路径
- 现象:
- 输入形状不匹配:
- 现象:
Input shape mismatch - 解决:使用Netron工具可视化模型,确认输入节点名称和维度
- 现象:
- 算子不支持:
- 现象:
Unsupported op type: XXX - 解决:查阅CANN算子清单,考虑自定义算子或模型结构调整
- 现象: