【CANN文档速递07期】模型转换浅谈
01 什么是ATC,它能做什么?
昇腾张量编译器(Ascend Tensor Compiler,简称ATC)是昇腾CANN架构体系下的模型转换工具:
- 它可以将开源框架的网络模型或Ascend IR定义的单算子描述文件(json格式)转换为昇腾AI处理器支持的.om格式离线模型。
- 模型转换过程中,ATC会进行算子调度优化、权重数据重排、内存使用优化等具体操作,对原始的深度学习模型进行进一步的调优,从而满足部署场景下的高性能需求,使其能够高效执行在昇腾AI处理器上。
其中,开源框架网络模型支持情况如下:
02 ATC工具功能架构
开源框架网络模型场景:
- 开源框架网络模型经过Parser解析后,转换为中间态IR Graph。
- 中间态IR经过图准备,图拆分,图优化,图编译等一系列操作后,转成适配昇腾AI处理器的离线模型。
- 用户将转换后的离线模型上传到板端环境,通过AscendCL接口加载模型文件实现推理过程。
单算子描述文件场景:
- 通过ATC工具进行单算子编译后,转成适配昇腾AI处理器的单算子离线模型。
- 用户将转换后的单算子模型文件上传到板端环境,通过AscendCL接口加载单算子模型文件来验证单算子功能。
03 如何使用ATC工具
下面以Caffe框架ResNet-50网络模型为例,为您演示如何借助ATC工具进行模型转换。
1. 参见昇腾社区相关文档安装CANN软件包,并设置ATC运行所需环境变量。在任意路径执行atc --help命令,若回显参数信息,则说明ATC工具能正常使用。
2. 准备要进行转换的ResNet-50网络模型文件*.prototxt、权重文件*.caffemodel,然后上传到ATC工具所在Linux服务器。
3. 执行如下命令进行模型转换。
参数解释如下:
--framework:原始网络模型框架类型,0表示Caffe框架。
--soc_version:指定模型转换时昇腾AI处理器的版本,例如Ascend310。
--model:原始网络模型文件路径与文件名。
--weight:原始网络模型权重文件路径与文件名,仅当原始网络模型是Caffe时需要指定。
--output:
• 若是开源框架的网络模型:存放转换后的离线模型的路径及文件名,文件名以指定的为准,自动以.om后缀结尾。
• 若是单算子描述文件:存放转换后的单算子模型的路径。
4. 若提示ATC run success信息,则说明模型转换成功。
在--output参数指定的路径下,可查看离线模型:caffe_resnet50.om。
04 ATC工具高级特性
上述只给出了ATC工具进行模型转换最基本的命令,本章节给出ATC工具支持的更多高级特性,方便用户进一步了解,如下场景假设用户已经准备好待转换的模型
原始模型文件或离线模型转成json文件
如果用户不方便查看原始模型或离线模型的参数信息时,可以将原始模型或离线模型转成json文件进行查看。
• 原始模型文件转json文件
• 离线模型转json文件
该场景下需要先将原始模型转成离线模型,然后再将离线模型转成json文件。
自定义离线模型的输入输出数据类型
模型转换时支持指定网络模型的输入、输出节点的Datatype、Format、支持精度选择等高级参数。例如,针对Caffe框架ResNet50网络模型,要求转换后模型输入为FP16类型,指定Pooling算子作为输出,并且该输出节点为FP16类型,则转换命令为:
离线模型支持动态BatchSize/动态分辨率
某些推理场景,如检测出人脸后再执行人脸识别网络,由于人脸个数不固定导致人脸识别网络输入BatchSize不固定;如果每次推理都按照最大的BatchSize或最大分辨率进行计算,会造成计算资源浪费,因此,模型转换需要支持动态BatchSize和动态分辨率的设置,实际推理时,通过AscendCL接口设置具体的BatchSize和动态分辨率。
• 动态BatchSize
其中,“--input_shape ”中的“-1”表示设置动态BatchSize,具体支持哪些BatchSize由“--dynamic_batch_size”决定。
• 动态分辨率
其中,“--input_shape ”中的“-1,-1”表示设置动态分辨率,具体支持哪些分辨率由“--dynamic_image_size ”决定。
05 更多介绍
关于ATC工具更多参数和特性说明,请登录昇腾社区,阅读相关文档
昇腾CANN文档中心致力于为开发者提供更优质的内容和更便捷的开发体验,助力CANN开发者共建AI生态。任何意见和建议都可以在昇腾社区反馈,您的每一份关注都是我们前进的动力。
- 点赞
- 收藏
- 关注作者
评论(0)