本文由华为云社区分享《使用ATC工具将主流开源框架模型转换为昇腾模型-云社区-华为云》,作者:升腾CANN。
什么是ATC,它能做什么?
Ascend Tensor Compiler(简称ATC)是基于Ascend CANN架构系统的模型转换工具。什么是ATC?它能为您做什么?
您可以将开源框架(TensorFlow、ONNX等)中的网络模型转换为升腾AI处理器支持的模型文件(.om格式),用于后续的模型推理。您可以将基于Ascend IR定义的单个算子描述文件(*.json格式)转换为Ascend AI处理器支持的模型文件(.om格式)。稍后可以使用它来验证网络上的操作员功能。在模型转换过程中,ATC会进行优化算子调度、重新排列权重数据、优化内存使用等操作,进一步优化开源框架中的网络模型,并利用Ascend AI处理器在上面高效运行。
ATC工具功能架构
开源框架网络模型编译流程:使用ATC工具转换模型时,开源框架网络模型经过解析器解析,转换为升腾的中间图IR图。经过图准备、图划分、图优化、图编译等一系列操作,中间图IR图被转换为与升腾AI处理器兼容的*.om模型文件。后续用户可以调用AscendCL提供的模型加载、执行等接口来实现模型推理。单算子编译流程:使用ATC工具转换单算子时,会编译并转换为与升腾AI处理器兼容的单算子*.om模型文件。后续用户可以调用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:转换模型时指定Ascend AI处理器版本(例如Ascend310)。 --model:原始网络模型文件路径,包括文件名。 --weight:如果原始网络模型是Caffe,则只需指定原始网络模型权重文件路径(包括文件名)。 --output:转换后的*.om模型文件路径(含文件名) 如果转换成功,模型文件名会自动以.om后缀结尾。 3. 如果看到ATC执行成功的消息,则模型转换成功。
您可以在--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模型file - json file atc --mode=1 --om=$HOME/mod/out/caffe_resnet50.om - -json=$HOME/mod/out/caffe_resnet50.json ATC工具支持*.om模型输入,支持自定义输出数据类型。支持模型转换时指定网络模型输入或输出节点的数据类型和格式。支持设置精度等
命令场景示例:对于Caffe框架ResNet50网络模型,转换后的模型输入为FP16类型,指定池化算子为输出,输出节点为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不固定,因为目标的数值不固定,所以每次推理都是,存在浪费计算资源,因此模型转换必须支持该设置。实际推理时,通过AscendCL接口设置本次推理所需的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]升腾论坛
点击下方抢先了解华为云新技术~
华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云
#华为云开发者联盟#
版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。