写点什么

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

  • 2024-04-12
    广东
  • 本文字数:2184 字

    阅读完需:约 7 分钟

基于香橙派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、执行如下命令进行模型转换。


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=$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
复制代码


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


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

04 更多学习资源


[1]香橙派 AIpro 开源样例代码:https://gitee.com/ascend/EdgeAndRobotics

[2]昇腾文档中心:https://www.hiascend.com/zh/document

[3]香橙派 AIpro 学习资源一站式导航:https://www.hiascend.com/forum/thread-0285140173361311056-1-1.html


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

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

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

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

评论

发布
暂无评论
基于香橙派AIpro将开源框架模型转换为昇腾模型_华为云_华为云开发者联盟_InfoQ写作社区