使用ATC工具将主流开源框架模型转换为昇腾模型

举报
昇腾CANN 发表于 2023/02/26 22:23:48 2023/02/26
1.5w+ 2 0
【摘要】 本文介绍了昇腾CANN提供的模型转换工具ATC,介绍了其功能、架构,并以具体样例介绍了该工具的基本使用方法以及常用设置。

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

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

  1. 它可以将开源框架的网络模型(例如TensorFlow、ONNX等)转换为昇腾AI处理器支持的模型文件(.om格式),用于后续的模型推理。
  2. 它可以将基于Ascend IR定义的单算子描述文件(*.json格式转换为昇腾AI处理器支持的模型文件.om格式),用于后续在整网中验证算子功能。

模型转换过程中,ATC会进行算子调度优化、权重数据重排、内存使用优化等操作,对开源框架的网络模型做进一步调优,使其高效地在昇腾AI处理器上执行。

02 ATC工具功能架构

3.PNG

  • 开源框架网络模型编译流程:
  1. 使用ATC工具转换模型时开源框架网络模型经过Parser解析后,转换为昇腾的中间图IR Graph。
  2. 中间IR Graph经过图准备,图拆分,图优化,图编译等一系列操作后,转成适配昇腾AI处理器的*.om模型文件
  3. 后续用户调用AscendCL提供的模型加载执行等接口实现模型推理。
  • 单算子编译流程:
  1. 使用ATC工具转换单算子时单算子经过编译后,转换成适配昇腾AI处理器的单算子*.om模型文件。
  2. 后续用户调用AscendCL提供的单算子模型加载、执行等接口在整网中验证单算子功能。

03如何使用ATC工具

下面以Caffe框架ResNet-50网络模型为例,介绍如何使用ATC工具转换模型。

1. 将Caffe框架ResNet-50网络模型模型文件*.prototxt、权重文件*.caffemodel上传至ATC工具所在的Linux服务器

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

atc --framework=0 --soc_version=${soc_version} 
--model=$HOME/mod/resnet50.prototxt 
--weight=$HOME/mod/resnet50.caffemodel 
--output=$HOME/module/out/caffe_resnet50

参数解释如下:

  • --framework:原始网络模型框架类型,0表示Caffe框架。
  • --soc_version:指定模型转换时昇腾AI处理器的版本,例如Ascend310
  • --model:原始网络模型文件路径,含文件名。
  • --weight:原始网络模型权重文件路径含文件名,仅当原始网络模型是Caffe时需要指定。
  • --output:转换后的*.om模型文件路径,含文件名,转换成功后模型文件名自动以.om后缀结尾。

3. 若提示ATC run success信息,则说明模型转换成功。

    在--output参数指定的路径下,可查看转换后的模型文件例如caffe_resnet50.om。

04 ATC工具支持更多特性

上述只给出了ATC工具进行模型转换最基本的命令,本章节给出ATC工具支持的更多特性,方便用户进一步了解。

  • ATC工具支持将原始模型文件或昇腾*.om模型文件转换成json格式

    - 原始模型文件—>json文件

    atc --mode=1 --framework=0 --om=$HOME/mod/resnet50.prototxt 
    --json=$HOME/mod/out/caffe_resnet50.json

    ​​​​​- 昇腾*.om模型文件—>json文件

    atc --mode=1 --om=$HOME/mod/out/caffe_resnet50.om  
    --json=$HOME/mod/out/caffe_resnet50.json
  • ATC工具支持自定义*.om模型的输入输出数据类型

        模型转换时支持指定网络模型的输入或输出节点的数据类型、Format支持设置精度

        此处的示例命令场景:针对Caffe框架ResNet50网络模型,转换后的模型输入为FP16类型,指定Pooling算子作为输出,并且该输出节点为FP16类型

atc --framework=0 --soc_version=${soc_version} 
--model=$HOME/mod/resnet50.prototxt 
--weight=$HOME/mod/resnet50.caffemodel 
--output=$HOME/mod/out/caffe_resnet50  --input_fp16_nodes="data" 
--out_nodes="pool1:0" --output_type="pool1:0:FP16" 
  • ATC工具支持设置动态BatchSize/动态分辨率

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

        - 动态BatchSize

atc --framework=0 --soc_version=${soc_version}  
--model=$HOME/mod/resnet50.prototxt 
--weight=$HOME/mod/resnet50.caffemodel 
--output=$HOME/mod/out/caffe_resnet50 
--input_shape="data:-1,3,224,224"   --dynamic_batch_size="1,2,4,8" 

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

        动态分辨率

atc --framework=0 --soc_version=${soc_version}  
--model=$HOME/mod/resnet50.prototxt 
--weight=$HOME/mod/resnet50.caffemodel 
--output=$HOME/mod/out/caffe_resnet50 
--input_shape="data:1,3,-1,-1"   --dynamic_image_size="224,224;448,448"

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

05 更多介绍

关于ATC工具更多参数和特性说明,请登录昇腾社区查阅:

[1]昇腾文档中心

[2]昇腾社区在线课程

[2]昇腾论坛

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

作者其他文章

评论(2

抱歉,系统识别当前为高风险访问,暂不支持该操作
  • 作者头像

    yd_2149812032023/03/14 02:46:191楼举报回复

    atc转换模型,对服务器有要求吗?华为云服务器2核4g可以转yolov5的模型吗,目前在服务器执行atc --model=yolov5_t.onnx --framework=5 --output=yolov5m_b1 --soc_version=Ascend310 --input_format=NCHW --input_shape="images:1,3,640,640" --out_nodes="Conv_482:0;Conv_498:0;Conv_514:0"

    一直保持在ATC start working now, please wait for a moment.
    不动也不报错
    • 作者头像

      昇腾CANN2023/10/18 06:54:26举报回复

      尊敬的开发者您好,让您久等了,关于上述问题答复如下:
      ATC转模型对服务器是有要求的,可以参见《CANN软件安装指南中》的“CANN软件包支持的OS清单”部分,查看您的服务器是否符合要求。
      如果符合要求,模型转换时可以通过设置打屏环境变量,查看转换流程:export ASCEND_SLOG_PRINT_TO_STDOUT=1
      若设置上述环境变量后,仍旧未打屏有效信息,则请在atc转换命令中增加--log参数(不能设置为null)显示相应的日志级别。

      感谢您的支持,合作愉快

全部回复

上滑加载中

设置昵称

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

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

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