基于香橙派AIpro将开源框架模型转换为昇腾模型

本文分享自华为云社区《如何基于香橙派AIpro将开源框架模型转换为昇腾模型》,作者:昇腾CANN。

在前面的介绍中,我们知道了如何基于香橙派AIpro开发AI推理应用,也大致了解到在推理之前,需要把原始网络模型 (可能是 PyTorch 的、TensorFlow,可能是Caffe的等等) 转换成 .om 模型,然后才能调用昇腾的aclmdlExecute 等模型执行接口在香橙派AIpro进行模型推理。这个模型转换的过程就要用到 ATC 工具,目前 ATC 工具直接支持从 Caffe、ONNX、TensorFlow 以及 MindSpore模型的转换,所以如果你的训练框架是 PyTorch,则需要做 torch.onnx.export 操作导出成ONNX模型后才能使用ATC工具。

01 ATC工具简介

昇腾张量编译器(Ascend Tensor Compiler,简称ATC)是昇腾模型转换工具,它可以将开源框架的网络模型(例如TensorFlow、ONNX等)转换为昇腾AI处理器支持的模型文件(.om格式),用于后续的模型推理。

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

主要过程:

  1. 开源框架网络模型经过Parser解析后,转换为昇腾的中间图IR Graph。
  2. 中间图IR Graph经过图准备,图拆分,图优化,图编译等一系列操作后,转成适配昇腾AI处理器的*.om模型文件。
  3. 用户可调用AscendCL提供的模型加载、执行等接口实现模型推理。

02 ATC工具基本使用方法

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

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

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

ini 复制代码
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处理器的版本,可执行npu-smi info命令进行查询,在查询到的"Name"前增加Ascend信息,例如"Name"对应取值为xxxyy。
  • --model:原始网络模型文件路径,含文件名。
  • --weight:原始网络模型权重文件路径,含文件名,仅当原始网络模型是Caffe时需要指定。
  • --output:转换后的*.om模型文件路径,含文件名,转换成功后,模型文件名自动以.om后缀结尾。

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

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

03 ATC工具高阶用法介绍

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

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

如果用户不方便查看原始模型或离线模型的参数信息时,可以将原始模型或离线模型转成json文件进行查看:

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

    atc --mode=1 --framework=0 --om= <math xmlns="http://www.w3.org/1998/Math/MathML"> H O M E / m o d / r e s n e t 50. p r o t o t x t − − j s o n = HOME/mod/resnet50.prototxt --json= </math>HOME/mod/resnet50.prototxt−−json=HOME/mod/out/caffe_resnet50.json

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

    atc --mode=1 --om= <math xmlns="http://www.w3.org/1998/Math/MathML"> H O M E / m o d / o u t / c a f f e r e s n e t 50. o m − − j s o n = HOME/mod/out/caffe_resnet50.om --json= </math>HOME/mod/out/cafferesnet50.om−−json=HOME/mod/out/caffe_resnet50.json

2、ATC工具支持自定义*.om模型的输入输出数据类型

模型转换时支持指定网络模型的输入或输出节点的数据类型、Format,支持设置精度等。此处的示例命令场景是针对Caffe框架ResNet50网络模型,转换后的模型输入为FP16类型,指定Pooling算子作为输出,并且该输出节点为FP16类型。

bash 复制代码
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" 

3、ATC工具支持设置动态BatchSize/动态分辨率

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

  • 动态BatchSize

    atc --framework=0 --soc_version= <math xmlns="http://www.w3.org/1998/Math/MathML"> s o c v e r s i o n − − m o d e l = {soc_version} --model= </math>socversion−−model=HOME/mod/resnet50.prototxt --weight= <math xmlns="http://www.w3.org/1998/Math/MathML"> H O M E / m o d / r e s n e t 50. c a f f e m o d e l − − o u t p u t = HOME/mod/resnet50.caffemodel --output= </math>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= <math xmlns="http://www.w3.org/1998/Math/MathML"> s o c v e r s i o n − − m o d e l = {soc_version} --model= </math>socversion−−model=HOME/mod/resnet50.prototxt --weight= <math xmlns="http://www.w3.org/1998/Math/MathML"> H O M E / m o d / r e s n e t 50. c a f f e m o d e l − − o u t p u t = HOME/mod/resnet50.caffemodel --output= </math>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 "决定。

04 更多学习资源

1\]香橙派AIpro开源样例代码:[gitee.com/ascend/Edge...](https://link.juejin.cn?target=https%3A%2F%2Fgitee.com%2Fascend%2FEdgeAndRobotics "https://gitee.com/ascend/EdgeAndRobotics") \[2\]昇腾文档中心:[www.hiascend.com/zh/document](https://link.juejin.cn?target=https%3A%2F%2Fwww.hiascend.com%2Fzh%2Fdocument "https://www.hiascend.com/zh/document") \[3\]香橙派AIpro学习资源一站式导航:[www.hiascend.com/forum/threa...](https://link.juejin.cn?target=https%3A%2F%2Fwww.hiascend.com%2Fforum%2Fthread-0285140173361311056-1-1.html "https://www.hiascend.com/forum/thread-0285140173361311056-1-1.html") [**点击关注,第一时间了解华为云新鲜技术\~**](https://link.juejin.cn?target=https%3A%2F%2Fbbs.huaweicloud.com%2Fblogs%3Futm_source%3Djuejin%26utm_medium%3Dbbs-ex%26utm_campaign%3Dother%26utm_content%3Dcontent "https://bbs.huaweicloud.com/blogs?utm_source=juejin&utm_medium=bbs-ex&utm_campaign=other&utm_content=content")

相关推荐
果冻人工智能2 分钟前
打造 AI Agent 对于中产阶级来说就是场噩梦
人工智能
MediaTea14 分钟前
AI 文生图:提示词撰写技巧与示例(ChatGPT-4o 篇)
人工智能
墨绿色的摆渡人25 分钟前
用 pytorch 从零开始创建大语言模型(三):编码注意力机制
人工智能·pytorch·语言模型
zm-v-1593043398642 分钟前
ChatGPT 与 DeepSeek:学术科研的智能 “双引擎”
人工智能·chatgpt
果冻人工智能44 分钟前
美国狂奔,中国稳走,AI赛道上的龟兔之争?
人工智能
果冻人工智能1 小时前
再谈AI与程序员: AI 写的代码越来越多,那我们还需要开发者吗?
人工智能
大脑探路者1 小时前
【PyTorch】继承 nn.Module 创建简单神经网络
人工智能·pytorch·神经网络
无代码Dev1 小时前
如何使用AI去水印(ChatGPT去除图片水印)
人工智能·ai·ai-native
达柳斯·绍达华·宁2 小时前
自动驾驶04:点云预处理03
人工智能·机器学习·自动驾驶