写点什么

ATC:一个能将主流开源框架模型转换为昇腾模型的神奇工具

  • 2023-02-28
    中国香港
  • 本文字数:2021 字

    阅读完需:约 7 分钟

ATC:一个能将主流开源框架模型转换为昇腾模型的神奇工具

本文分享自华为云社区《使用ATC工具将主流开源框架模型转换为昇腾模型》,作者: 昇腾 CANN。

什么是 ATC,它能做什么?


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


  1. 它可以将开源框架的网络模型(例如 TensorFlow、ONNX 等)转换为昇腾 AI 处理器支持的模型文件(.om 格式),用于后续的模型推理。

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


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

ATC 工具功能架构



  • 开源框架网络模型编译流程:


  1. 使用 ATC 工具转换模型时,开源框架网络模型经过 Parser 解析后,转换为昇腾的中间图 IR Graph。

  2. 中间图 IR Graph 经过图准备,图拆分,图优化,图编译等一系列操作后,转成适配昇腾 AI 处理器的*.om 模型文件。

  3. 后续用户可调用 AscendCL 提供的模型加载、执行等接口实现模型推理。


  • 单算子编译流程:


  1. 使用 ATC 工具转换单算子时,单算子经过编译后,转换成适配昇腾 AI 处理器的单算子*.om 模型文件。

  2. 后续用户可调用 AscendCL 提供的单算子模型加载、执行等接口在整网中验证单算子功能。

如何使用 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。

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 ”决定。

更多介绍


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


[1]昇腾文档中心

[2]昇腾社区在线课程

[2]昇腾论坛


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
ATC:一个能将主流开源框架模型转换为昇腾模型的神奇工具_人工智能_华为云开发者联盟_InfoQ写作社区