基于香橙派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处理器上执行。
主要过程:
- 开源框架网络模型经过Parser解析后,转换为昇腾的中间图IR Graph。
- 中间图IR Graph经过图准备,图拆分,图优化,图编译等一系列操作后,转成适配昇腾AI处理器的*.om模型文件。
- 用户可调用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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
20个Python 正则表达式应用与技巧
本文分享自华为云社区《Python 正则表达式大揭秘应用与技巧全解析》,作者:柠檬味拥抱。 Python 中的 re 模块是用于处理正则表达式的强大工具。正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式。在本文中,我们将探讨 Python 中 re 模块的应用和一些技巧,帮助您更好地理解和利用正则表达式。 1. 导入 re 模块 在开始之前,首先要确保已经导入了 re 模块: import re 2. 使用 re 模块进行匹配 以下是一个简单的示例,演示如何使用 re 模块在字符串中查找特定模式的匹配项: text = "The quick brown fox jumps over the lazy dog" # 使用 re 模块查找匹配项 matches = re.findall(r'\b\w{3}\b', text) print(matches) # 输出匹配的单词列表 在上面的示例中,我们使用了\b\w{3}\b这个正则表达式来匹配长度为3的单词。\b表示单词的边界,\w{3}表示匹配三个字母字符。re.findall()函数返回所有匹...
- 下一篇
详解K8s 镜像缓存管理kube-fledged
本文分享自华为云社区《K8s 镜像缓存管理 kube-fledged 认知》,作者: 山河已无恙。 我们知道k8s上的容器调度需要在调度的节点行拉取当前容器的镜像,在一些特殊场景中, 需要 快速启动和/或扩展的应用程序。例如,由于数据量激增,执行实时数据处理的应用程序需要快速扩展。 镜像比较庞大,涉及多个版本,节点存储有限,需要动态清理不需要的镜像 无服务器函数通常需要在几分之一秒内立即对传入事件和启动容器做出反应。 在边缘设备上运行的 IoT 应用程序,需要容忍 边缘设备和镜像镜像仓库之间的间歇性网络连接。 如果需要从 专用仓库中拉取镜像,并且无法授予每个人从此 镜像仓库拉取镜像的访问权限,则可以在群集的节点上提供镜像。 如果集群管理员或操作员需要对应用程序进行升级,并希望事先验证是否可以成功拉取新镜像。 kube-fledged是一个kubernetes operator,用于直接在 Kubernetes 集群的worker节点上创建和管理容器镜像缓存。它允许用户定义镜像列表以及这些镜像应缓存到哪些工作节点上(即拉取)。因此,应用程序 Pod 几乎可以立即启动,因为不需要从镜像仓...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作