初级功能
原始模型文件或离线模型转成JSON文件
场景介绍
如果用户不方便查看原始模型或离线模型的参数信息时,可以将原始模型或离线模型转成JSON文件进行查看。
转换方法
本章节以TensorFlow框架ResNet50网络模型为例进行演示,单击Link,根据页面提示获取ResNet50网络模型文件(*.pb)。
-
原始模型文件转JSON文件
命令示例如下:
atc --mode=1 --om=$HOME/module/resnet50_tensorflow_1.7.pb --json=$HOME/module/out/tf_resnet50.json --framework=3- --mode:运行模式,1表示原始模型文件或离线模型转JSON,此处特指原始模型文件转JSON。
- --om:指定ResNet50网络模型文件所在路径。
- --json:转换为JSON格式的文件路径和文件名。
- --framework:原始框架类型,3表示TensorFlow。
-
离线模型转JSON文件
该场景的前提是用户根据开源框架的TensorFlow网络模型转换成离线模型已经得到了om离线模型文件,命令示例如下:
atc --mode=1 --om=$HOME/module/out/tf_resnet50.om --json=$HOME/module/out/tf_resnet50.json- --mode:运行模式,1表示原始模型文件或离线模型转JSON,此处特指离线模型文件转JSON。
- --om:指定离线模型文件所在路径。
关于参数的详细解释请参见参数说明。若提示如下信息,则说明转换成功。
若模型转换失败,请参见《故障处理》>“错误码参考”章节进行辅助定位。
ATC run success, welcome to the next use.
成功执行命令后,在--json参数指定的路径下,可查看转换后的JSON文件信息,如下为部分JSON片段:
{
"node": [
{
"attr": [
{
"key": "shape",
"value": {
"shape": {
"dim": [
{
"size": 1
},
{
"size": 224
},
{
"size": 224
},
{
"size": 3
}
]
}
}
},
{
"key": "dtype",
"value": {
"type": "DT_FLOAT"
}
}
],
"name": "Placeholder",
"op": "Placeholder"
},
...
]
}
离线模型支持动态batch_size/动态分辨率
IPV350不支持动态batch_size和动态分辨率特性。
场景介绍
某些推理场景,如检测出目标后再执行目标识别网络,由于目标个数不固定导致目标识别网络输入batch_size不固定。如果每次推理都按照最大的batch_size或最大分辨率进行计算,会造成计算资源浪费。
为此,ATC工具提供了--dynamic_batch_size参数设置batch_size档位;提供了--dynamic_image_size参数设置分辨率档位。
转换方法
如下转换示例以TensorFlow框架ResNet50网络模型为例进行演示,单击Link,根据页面提示获取ResNet50网络的模型文件(*.pb)。
-
以CANN软件包运行用户登录开发环境,将模型文件(*.pb)上传到开发环境任意路径,例如上传到$HOME/module/目录下。
-
执行如下命令生成离线模型。(如下命令中使用的目录以及文件均为样例,请以实际为准)
-
动态batch_size
atc --model=$HOME/module/resnet50_tensorflow_1.7.pb --framework=3 --output=$HOME/module/out/tf_resnet50 --soc_version=<soc_version> --input_shape="Placeholder:-1,224,224,3" --dynamic_batch_size="1,2,4,8" -
动态分辨率
atc --model=$HOME/module/resnet50_tensorflow_1.7.pb --framework=3 --output=$HOME/module/out/tf_resnet50 --soc_version=<soc_version> --input_shape="Placeholder:1,-1,-1,3" --dynamic_image_size="224,224;448,448"
关键参数解释如下:
- --dynamic_batch_size:设置动态batch_size参数。
- --dynamic_image_size:设置输入图片的动态分辨率参数。
- --input_shape:指定模型输入数据的shape,配合--dynamic_batch_size或--dynamic_image_size参数使用。
- --model:ResNet50网络模型文件所在路径。
- --framework:原始框架类型,3表示TensorFlow。
关于参数的详细解释请参见参数说明。若提示如下信息,则说明模型转换成功。
若模型转换失败,请参见《故障处理》>“错误码参考”章节进行辅助定位。
ATC run success, welcome to the next use.成功执行命令后,在--output参数指定的路径下,可查看离线模型(如:tf_resnet50.om)。
模型转换完成后,在生成的om离线模型中,会新增一个输入(如图1中红框中的Data输入),在模型推理时通过该新增的输入提供具体的batch_size值(或分辨率值)。例如,a输入的batch_size是动态的(或分辨率是动态的),在om离线模型中,会有与a对应的b输入来描述a的batch_size(或分辨率取值)。
-
离线模型支持动态维度
场景介绍
为支持Transformer等网络模型在输入Tensor维度不确定的场景,ATC工具提供了--dynamic_dims参数实现ND格式下任意维度的档位设置。ND表示支持任意格式。
转换方法
本章节以TensorFlow框架ResNet50网络模型为例进行演示,单击Link,根据页面提示获取ResNet50网络模型文件(*.pb)。
-
以CANN软件包运行用户登录开发环境,将模型文件上传到开发环境任意路径,例如上传到$HOME/module/目录下。
-
执行如下命令生成离线模型。(如下命令中使用的目录以及文件均为样例,请以实际为准)
atc --model=$HOME/module/resnet50_tensorflow_1.7.pb --framework=3 --output=$HOME/module/out/tf_resnet50 --soc_version=<soc_version> --input_shape="Placeholder:-1,-1,-1,3" --dynamic_dims="1,224,224;8,448,448" --input_format=ND关键参数解释如下:
- --dynamic_dims:设置ND格式下动态维度档位。
- --input_shape:指定模型输入数据的shape,配合--dynamic_dims参数使用。
- --input_format:指定Format为ND格式。
- --model:ResNet50网络模型文件所在路径。
- --framework:原始框架类型,3表示TensorFlow。
关于参数的详细解释请参见参数说明。若提示如下信息,则说明模型转换成功。
若模型转换失败,请参见《故障处理》>“错误码参考”章节进行辅助定位。
ATC run success, welcome to the next use.成功执行命令后,在--output参数指定的路径下,可查看离线模型。
模型转换完成后,在生成的om离线模型中,会新增一个输入(如图1中红框中的Data输入),在模型推理时通过该新增的输入提供具体的维度值。例如,a输入的维度为动态的,在om离线模型中,会有与a对应的b输入来描述a的维度值。
自定义离线模型的输入输出数据类型
场景介绍
模型转换时支持指定网络的输入节点、输出节点的DataType、Format、模型转换支持精度选择等关键参数。
假如,针对TensorFlow框架ResNet-50网络模型,要求转换后离线模型的输入数据为Float16类型,指定MaxPoolWithArgmax算子作为输出算子(对应的节点名称为fp32_vars/MaxPoolWithArgmax),并且指定该输出节点的数据类型为FP16。该场景下就需要分别使用--input_fp16_nodes、--out_nodes、--output_type等参数来实现上述功能。
转换方法
本章节以TensorFlow框架ResNet50网络模型为例进行演示,单击Link,根据页面提示获取ResNet50网络模型文件(*.pb)。
-
以CANN软件包运行用户登录开发环境,将模型文件(*.pb)上传到开发环境任意路径,例如上传到$HOME/module/目录下。
-
执行如下命令生成离线模型。(如下命令中使用的目录以及文件均为样例,请以实际为准)
atc --model=$HOME/module/resnet50_tensorflow_1.7.pb --framework=3 --output=$HOME/module/out/tf_resnet50 --soc_version=<soc_version> --input_fp16_nodes="Placeholder" --out_nodes="fp32_vars/MaxPoolWithArgmax:0" --output_type="fp32_vars/MaxPoolWithArgmax:0:FP16"关键参数解释如下:
- --input_fp16_nodes:指定输入数据类型为Float16。
- --out_nodes:指定MaxPoolWithArgmax算子作为模型的输出。
- --output_type:指定输出节点的数据类型为Float16。
- --model:ResNet50网络模型文件所在路径。
- --framework:原始框架类型,3表示TensorFlow。
关于参数的详细解释请参见参数说明。若提示如下信息,则说明模型转换成功。
若模型转换失败,请参见《故障处理》>“错误码参考”章节进行辅助定位。
ATC run success, welcome to the next use.成功执行命令后,在output参数指定的路径下,可查看离线模型(如:tf_resnet50.om)。图1为MaxPoolWithArgmax算子作为模型输出算子的示意图(下图使用Netron可视化软件打开)。
借助离线模型查看软件基础版本号
场景介绍
不同CANN软件包版本,由于软件功能差异,所转换出的离线模型功能也有差异,该场景下建议用户使用匹配CANN软件版本的ATC工具重新进行模型转换。假如用户已有转换好的离线模型,想查看使用的CANN软件包基础版本号,则可以参见本章节完成。
查看方法
-
获取已经转换好的离线模型,例如tf_resnet50.om,并以CANN软件包运行用户将其上传至开发环境任意目录,例如上传到$HOME/module/目录下。
-
将离线模型转成JSON文件:
atc --mode=1 --om=$HOME/module/tf_resnet50.om --json=$HOME/module/out/tf_resnet50.json- --om:指定离线模型文件tf_resnet50.om所在路径。
- --json:转换为JSON格式的文件路径和文件名。
在转换后的JSON文件中,可以查看原始模型转换为离线模型时,使用的基础版本号,示例如下(如下为部分JSON片段),<version>即为展示的版本号信息:
{ "key": "opp_version", "value": { "s": "<version>" } }, ... ... { "key": "atc_version", "value": { "s": "<version>" } }, ... ... { "key": "atc_cmdline", "value": { "s": "xxx/atc.bin --model ./resnet50_tensorflow.pb --framework 3 --output ./out/tf_resnet50 --soc_version <soc_version>" } }, ... ... { "key": "soc_version", "value": { "s": "<soc_version>" } },


