【2023 · CANN训练营第一季】应用开发深入讲解之模型转换工具

ATC是昇腾CANN体系下的模型转换工具,用于将开源框架如Caffe、MindSpore、TensorFlow和ONNX的模型转换为昇腾AI处理器支持的.om格式。转换过程涉及算子调度、权重重排和内存优化等步骤,以提升模型在硬件上的执行性能。转换时需要指定模型路径、框架类型、输入格式和形状等参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应用开发深入讲解之模型转换工具

1.基本概念

昇腾张量编译器(Ascend Tensor Compiler,简称ATC)是异构计算架构CANN体系下的模型转换工具, 它可以将开源框架的网络模型或Ascend IR定义的单算子描述文件(json格式)转换为昇腾AI处理器支持的.om格式离线模型。

模型转换过程中,ATC会进行算子调度优化、权重数据重排、内存使用优化等具体操作,对原始的深度学习模型进行进一步的调优,从而满足部署场景下的高性能需求,使其能够高效执行在昇腾AI处理器上。

img

2.参数说明

  • –model

填写原始网络模型文件路径与文件名。参数使用参考示例如下:

#Caffe模型
--model=$HOME/module/resnet50.prototxt --weight=$HOME/module/resnet50.caffemodel
#MindSpore模型
--model=resnet50.air
#pb模型
--model=resnet50.pb
#onnx模型
--model=resnet50.onnx
  • –framework

填写原始网络模型框架,参数取值与使用参考示例如下:

#取值为0时,即为Caffe框架网络模型,模型包括后缀为prototxt的模型文件和后缀为caffemodel的权重文件
--framework=0
#取值为1时,即为MindSpore框架网络模型,仅支持后缀为*.air的模型文件。
--framework=1
#取值为3时,即为TensorFlow框架网络模型,只支持尾缀为pb的模型文件
--framework=3
#取值为5时,即为ONNX格式网络模型,仅支持ai.onnx算子域中opset v11版本的算子,用户也可以将其他opseth版本的
算子(比如opset v9),通过PyTorch转换成opset v11版本的ONNX算子;而使用PyTorchi训练出的pth模型需要转化为
ONNX格式的模型,才能进行模型转换。
--framework=5
  • –input_format

填写输入数据格式,Caffe、ONNX默认为NCHW;TensorFlow:默认为NHWC。

该参数一般不需要填写,直接使用默认值即可,但是该参数存在以下限制:

如果TensorFlow模型是通过ONNX模型转换工具输出的,则该参数必填,且值为NCHW。

当原始框架为MindSpore时,只支持配置为NCHW。

如果摸型转换时开启AIPP,在进行推理业务时,输入图片数据要求为NHWC排布,该场景下最终与APP连接的输入节点的格式被强制改成NHWC,可能与atc模型转换命令中–input format参数指定的格式不一致。

#input format参数填写示例
--input format=NCHW
  • –input_shape

填写模型输入输出的shape,格式为"input_name:n,c,h,w";模型输入唯一且shapel固定时,可以不填写该参数。以下情况必须要设置该参数:

​ a.模型有多个输入,则不同输入之间使用英文分号分隔,例如"input_name1:n1,c1,h1,w1;input_name2:n2,c2,h2,w2"。input_name必须是转换前的网络模型中的节点名称。
​ b. 原始模型中输入数据的某个维度不固定,例如input_name1:?,h,w,c,该参数必填。其中“?”为batch数,表示一次处理的图片数量,可以直接设置为固定值。

#input shape参数填写示例
--input shape="actual input 1:1,3,224,224"
  • –output
    当进行开源框架的网络模型转换时,填写输出的离线模型的路径以及文件名。参数使用参考示例如下:

    #指定目录
    --output=SHOME/resnet50
    #当前目录
    --output=resnet50
    

    换后的模型文件名以该参数指定的为准,自动以.om后缀结尾。

  • –insert_op_conf

填写插入算子的配置文件路径与文件名,例如aipp预处理算子。

#aipp预处理
--insert op_conf=aipp.cfg
  • –soc version

    填写模型转换时昇腾AI处理器的版本。参数使用参考示例如下:

#昇腾310A处理器使用示例
--soc version=Ascend310

#昇腾310PAI处理器使用示例
--soc version=Ascend310P3

#昇腾910Al处理器使用示例
--soc version=Ascend910A

3.常见使用命令

#caffe模型,不使用aipp
atc --model=resnet50.prototxt --weight=resnet50.caffemodel --framework=0 --output=resnet50 --soc_version=Ascend310 --input_format=NCHW

#pb模型,不使用aipp
atc --model=resnet50_tensorflow_1.7.pb --framework=3 --output=resnet50 --soc_version=Ascend310

#onnx模型,不使用aipp
atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="actual_input_1:1,3,224,224" --soc_version=Ascend310

#onnx模型,使用aipp
atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="actual_input_1:1,3,224,224" --soc_version=Ascend310 --insert_op_conf=aipp.cfg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值