【CANN文档速递07期】模型转换浅谈

举报
昇腾CANN 发表于 2022/07/08 15:59:40 2022/07/08
【摘要】 昇腾张量编译器(Ascend Tensor Compiler,简称ATC)是昇腾CANN架构体系下的模型转换工具。它可以将开源框架的网络模型或Ascend IR定义的单算子描述文件(json格式)转换为昇腾AI处理器支持的.om格式离线模型。模型转换过程中,ATC会进行算子调度优化、权重数据重排、内存使用优化等具体操作,对原始的深度学习模型进行进一步的调优,从而满足部署场景下的高性能需求。

img_technology_22052511.jpg

01 什么是ATC,它能做什么?

昇腾张量编译器(Ascend Tensor Compiler,简称ATC)是昇腾CANN架构体系下的模型转换工具:

  • 它可以将开源框架的网络模型或Ascend IR定义的单算子描述文件(json格式)转换为昇腾AI处理器支持的.om格式离线模型。
  • 模型转换过程中,ATC会进行算子调度优化、权重数据重排、内存使用优化等具体操作,对原始的深度学习模型进行进一步的调优,从而满足部署场景下的高性能需求,使其能够高效执行在昇腾AI处理器上。

其中,开源框架网络模型支持情况如下:

img_technology_22052501.png

02 ATC工具功能架构


img_technology_22052502.png

开源框架网络模型场景:

  1. 开源框架网络模型经过Parser解析后,转换为中间态IR Graph。
  2. 中间态IR经过图准备,图拆分,图优化,图编译等一系列操作后,转成适配昇腾AI处理器的离线模型。
  3. 用户将转换后的离线模型上传到板端环境,通过AscendCL接口加载模型文件实现推理过程。

单算子描述文件场景:

  1. 通过ATC工具进行单算子编译后,转成适配昇腾AI处理器的单算子离线模型。
  2. 用户将转换后的单算子模型文件上传到板端环境,通过AscendCL接口加载单算子模型文件来验证单算子功能。

03 如何使用ATC工具

下面以Caffe框架ResNet-50网络模型为例,为您演示如何借助ATC工具进行模型转换。

1. 参见昇腾社区相关文档安装CANN软件包,并设置ATC运行所需环境变量。在任意路径执行atc --help命令,若回显参数信息,则说明ATC工具能正常使用。

2. 准备要进行转换的ResNet-50网络模型文件*.prototxt、权重文件*.caffemodel,然后上传到ATC工具所在Linux服务器。

3. 执行如下命令进行模型转换。

img_technology_22052503.png

参数解释如下:

 --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文件

img_technology_22052504.png

• 离线模型转json文件

该场景下需要先将原始模型转成离线模型,然后再将离线模型转成json文件。

img_technology_22052505.png

自定义离线模型的输入输出数据类型

模型转换时支持指定网络模型的输入、输出节点的Datatype、Format、支持精度选择等高级参数。例如,针对Caffe框架ResNet50网络模型,要求转换后模型输入为FP16类型,指定Pooling算子作为输出,并且该输出节点为FP16类型,则转换命令为:

img_technology_22052506.png

离线模型支持动态BatchSize/动态分辨率

某些推理场景,如检测出人脸后再执行人脸识别网络,由于人脸个数不固定导致人脸识别网络输入BatchSize不固定;如果每次推理都按照最大的BatchSize或最大分辨率进行计算,会造成计算资源浪费,因此,模型转换需要支持动态BatchSize和动态分辨率的设置,实际推理时,通过AscendCL接口设置具体的BatchSize和动态分辨率。

• 动态BatchSize

img_technology_22052507.png

其中,“--input_shape ”中的“-1”表示设置动态BatchSize,具体支持哪些BatchSize由“--dynamic_batch_size”决定。

• 动态分辨率

img_technology_22052508.png

其中,“--input_shape ”中的“-1,-1”表示设置动态分辨率,具体支持哪些分辨率由“--dynamic_image_size ”决定。

05 更多介绍

关于ATC工具更多参数和特性说明,请登录昇腾社区,阅读相关文档

img_technology_22052509.png

昇腾CANN文档中心致力于为开发者提供更优质的内容和更便捷的开发体验,助力CANN开发者共建AI生态。任何意见和建议都可以在昇腾社区反馈,您的每一份关注都是我们前进的动力。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。