昇腾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 | chmod +x Ascend-cann-toolkit_8.0.RC3.alpha001_linux-x86_64.run |
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
2sudo find ./ -name libascend_hal.so # 查找库路径
sudo cp {找到的路径} /usr/local/lib/ # 拷贝库到共享库目录进入“/etc/ld.so.conf”,并将
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算子清单,考虑自定义算子或模型结构调整
- 现象:
附录:参考资源