首页 > 其他分享 >ATC:一个能将主流开源框架模型转换为昇腾模型的神奇工具

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

时间:2023-02-28 10:57:57浏览次数:57  
标签:resnet50 ATC -- 模型 开源 HOME mod

摘要:本文介绍了昇腾CANN提供的模型转换工具ATC,介绍了其功能、架构,并以具体样例介绍了该工具的基本使用方法以及常用设置。

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

什么是ATC,它能做什么?

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

  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]昇腾论坛

 

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

标签:resnet50,ATC,--,模型,开源,HOME,mod
From: https://www.cnblogs.com/huaweiyun/p/17163186.html

相关文章

  • 盒模型问题
    一个有宽度高度和padding以及border的盒子到底有多大答:宽度加padding加border的总和验证代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-......
  • 28、完整的模型验证步骤
    利用已经训练好的模型,给它提供输入1'''完整模型的验证'''2importtorch3importtorchvision4fromPILimportImage5fromtorchimportnn67'''1、......
  • AtCoder Beginner Contest 280 A-F 题解
    比赛链接A-PawnonaGrid模拟。#include<cstdio>#include<algorithm>#include<cstring>usingnamespacestd;constintN=15;intn,m,ans;chars[N];i......
  • AtCoder Beginner Contest 279 A-E 题解
    比赛链接A-wwwvvvvvv直接模拟#include<cstdio>#include<cstring>constintN=105;intn,ans;chars[N];intmain(){ scanf("%s",s+1); for(inti=1......
  • AtCoder Beginner Contest 291 A-F 题解
    。。。比赛链接A-camelCase直接循环判断。#include<cstdio>#include<cstring>constintN=20;chars[N];intmain(){ scanf("%s",s+1); for(inti=1;......
  • 一文深度剖析扩散模型究竟学到了什么?
    前言 本文介绍的这篇文章提供了关于扩散模型从其训练数据中复制内容的潜力的重要见解,这项研究可以帮助改进扩散模型的设计和训练,确保它们能够生成独特的原创艺术和图形,非......
  • JAVA加载PMML算法模型
    注:加载失败时尝试修改pmml文件版本为4.3依赖<dependency><groupId>org.jpmml</groupId><artifactId>pmml-evaluator</artifactId><version>1.4.1</versi......
  • 26、利用GPU训练模型
    1、使用GPU来训练,找到四个板块的cuda函数,进行调用 1、  只有当cuda可用的时候才把变量引过去,下面调用的时候都一样,但是这样每次都写会很麻烦2、数据集是不能直......
  • 外汇天眼:如何辨别优秀程序化交易模型?
    程序化的理解程序化一般分为两类模型,一类是趋势模型,一类是震荡模型,如果你想两者结合起来就要看自己的本事了,我的建议是程序化需要不停的去完善,但千万不能追求完美,以下所说模......
  • vuex中commit和dispatch的区别
    一直都没整明白commit和dispath的区别,今天总算整明白了1、commit和dispatch的区别commit和dispatch的区别在于commit是提交mutatious的同步操作,dispatch是分发actions的......