首页 > 其他分享 >昇腾实践丨ATC模型转换动态shape问题案例

昇腾实践丨ATC模型转换动态shape问题案例

时间:2023-09-08 14:33:54浏览次数:61  
标签:转换 ATC -- 模型 dynamic 案例 shape size

本文分享自华为云社区《ATC模型转换动态shape问题案例》,作者:昇腾CANN。


ATC(Ascend Tensor Compiler)是异构计算架构CANN体系下的模型转换工具:它可以将开源框架的网络模型(如TensorFlow等)以及Ascend IR定义的单算子描述文件转换为昇腾AI处理器支持的离线模型;模型转换过程中,ATC会进行算子调度优化、权重数据重排、内存使用优化等具体操作,对原始的深度学习模型进行进一步的调优,从而满足部署场景下的高性能需求,使其能够高效执行在昇腾AI处理器上。

本期就分享几个关于ATC模型转换动态shape相关问题的典型案例,并给出原因分析及解决方法:

  1. 原始网络模型shape中存在不固定的维度值,模型转换未设置shape信息
  2. 动态BatchSize/动态分辨率/动态维度场景,只设置一个档位,模型转换失败
  3. 使用动态batchsize参数转模型时,其他档位设置了-1,模型转换失败
  4. 使用动态分辨率参数转模型时,其他档位设置了-1,模型转换失败

01 原始网络模型shape中存在不固定的维度值,模型转换未设置shape信息

问题现象描述

获取原始网络模型,执行如下命令进行模型转换:

atc --model=./resnet_shape.pb --framework=3 --output=./out/resnet_shape --soc_version=Ascend310

报错信息如下:

ATC run failed, Please check the detail log, Try 'atc --help' for more information
E10001: Value [-1] for parameter [Inputs] is invalid. Reason: maybe you should set input_shape to specify its shape
Solution: Try again with a valid argument.

原因分析

原始模型的shape存在不固定的维度值“-1”,模型输入样例如下,模型转换时,并未给不固定的维度值赋值。

昇腾实践丨ATC模型转换动态shape问题案例_CANN

解决措施

  • 设置固定shape。模型转换时,给不确定的维度值设置固定取值,示例如下:
atc --model=./resnet_shape.pb --framework=3 --output=./out/resnet_shape --soc_versinotallow=Ascend310 --input_shape="Inputs:1,224,224,3"
  • 设置shape分档。与动态BatchSize参数配合使用,使转换后的模型进行推理时,可以每次处理多种数量的图片,示例如下:
atc --model=./resnet_shape.pb --framework=3 --output=./out/resnet_shape --soc_versinotallow=Ascend310 --input_shape="Inputs:-1,224,224,3" --dynamic_batch_size="1,2,4,8"

这样转换后的离线模型,可以支持每次处理1、2、4、8张图片,而不用再进行4次模型转换。

  • 设置shape范围。模型转换时,将对应维度的值设置成一个范围,示例如下:
atc --model=./resnet_shape.pb --framework=3 --output=./out/resnet_shape --soc_versinotallow=Ascend910 --input_shape="Inputs:1~10,224,224,3"

这样转换后的离线模型,可以支持每次处理1~10张范围内的图片。

02 动态BatchSize/动态分辨率/动态维度场景,只设置一个档位,模型转换失败

问题现象描述

此类问题我们以--dynamic_batch_size参数为例进行说明。

使用ATC工具进行模型转换时,使用--dynamic_batch_size参数转换支持多个BatchSize的模型,转换命令样例如下:

atc --model=./resnet50_tensorflow_1.7.pb --input_shape="Placeholder:-1,224,224,3" --dynamic_batch_size="2" --soc_versinotallow=Ascend310 --output=./out/test --framework=3

报错信息如下:

ATC run failed, Please check the detail log, Try 'atc --help' for more information
E10035: [--dynamic_batch_size], [--dynamic_image_size], or [--dynamic_dims] has [1] profiles, which is less than the minimum ([2]).
        Solution: Ensure that the number of profiles configured in [--dynamic_batch_size], [--dynamic_image_size], or [--dynamic_dims] is at least the minimum.
        TraceBack (most recent call last):
        [GraphOpt][Prepare] Failed to run multi-dims-process for graph[test].[FUNC:OptimizeAfterGraphNormalization][FILE:fe_graph_optimizer.cc][LINE:639]
        Call OptimizeAfterGraphNormalization failed, engine_name:AIcoreEngine, graph_name:test[FUNC:OptimizeAfterGraphNormalization][FILE:graph_optimize.cc][LINE:224]        build graph failed, graph id:0, ret:1343225857[FUNC:BuildModelWithGraphId][FILE:ge_generator.cc][LINE:1656]

原因分析

使用ATC工具进行模型转换,如果使用了--dynamic_batch_size或--dynamic_image_size或--dynamic_dims动态shape参数时,请确保设置的档位数取值范围为(1,100],既必须设置至少2个档位,最多支持100档配置。

上述模型转换命令,只设置了一个档位,不符合参数设置要求。

解决措施

重新设置模型转换时的档位信息,至少设置2个档位,档位之间使用英文逗号分隔。改后样例如下:

atc --model=./resnet50_tensorflow_1.7.pb --input_shape="Placeholder:-1,224,224,3" --dynamic_batch_size="2,4" --soc_version=Ascend310 --output=./out/test --framework=3

03 使用动态batchsize参数转模型时,其他档位设置了-1,模型转换失败

问题现象描述

使用ATC工具进行模型转换时,使用--dynamic_batch_size参数转换支持多个BatchSize的模型,转换命令样例如下:

atc --model=./resnet50_tensorflow_1.7.pb --input_shape="Placeholder:-1,-1,-1,3" --dynamic_batch_size="2,4,8" --soc_version=Ascend310 --output=./out/test --framework=3

报错信息如下:

ATC run failed, Please check the detail log, Try 'atc --help' for more information
E10018: Value [-1] for shape [1] is invalid. When [--dynamic_batch_size] is included, only batch size N can be –1 in [--input_shape].
        Possible Cause: When [--dynamic_batch_size] is included, only batch size N can be –1 in the shape.
        Solution: Try again with a valid [--input_shape] argument. Make sure that non-batch size axes are not –1.
        TraceBack (most recent call last):
        [--dynamic_batch_size] is included, but none of the nodes specified in [--input_shape] have a batch size equaling –1.

原因分析

使用ATC工具进行模型转换,如果使用了--dynamic_batch_size参数,shape中只有N支持设置为"-1",且只支持N在shape首位的场景,既shape的第一位设置为"-1"。如果N在非首位场景下,请使用--dynamic_dims参数进行设置。

上述模型转换命令,shape中N、H、W都设置了"-1",不符合参数设置要求。

解决措施

重新设置模型转换时的参数信息,只设置shape中的N为"-1"。改后样例如下:

atc --model=./resnet50_tensorflow_1.7.pb --input_shape="Placeholder:-1,224,224,3" --dynamic_batch_size="2,4,8" --soc_version=Ascend310 --output=./out/test --framework=3

04 使用动态分辨率参数转模型时,其他档位设置了-1,模型转换失败

问题现象描述

使用ATC工具进行模型转换时,使用--dynamic_image_size参数转换支持多个分辨率的模型,转换命令样例如下:

atc --model=./resnet50_tensorflow_1.7.pb --input_shape="Placeholder:-1,-1,-1,3" --dynamic_image_size="448,448;224,224" --soc_version=Ascend310 --output=./out/test --framework=3

报错信息如下:

ATC run failed, Please check the detail log, Try 'atc --help' for more information
E10019: When [--dynamic_image_size] is included, only the height and width axes can be –1 in [--input_shape].
        Possible Cause: When [--dynamic_image_size] is included, only the height and width axes can be –1 in the shape.
        Solution: Try again with a valid [--input_shape] argument. Make sure that axes other than height and width are not –1.

原因分析

使用ATC工具进行模型转换,如果使用了--dynamic_image_size参数,shape中只有H、W支持设置为"-1",且只支持format为NCHW、NHWC格式;其他format场景,设置分辨率请使用--dynamic_dims参数。上述模型转换命令,shape中N、H、W都设置了"-1",不符合参数设置要求。

解决措施

重新设置模型转换时的参数信息,只设置shape中的H,W为"-1"。改后样例如下:

atc --model=./resnet50_tensorflow_1.7.pb --input_shape="Placeholder:1,-1,-1,3" --dynamic_image_size="448,448;224,224" --soc_version=Ascend310 --output=./out/test --framework=3

05 更多介绍

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

[2]昇腾社区在线课程:https://www.hiascend.com/zh/edu/courses

[3]昇腾论坛:https://www.hiascend.com/forum

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


标签:转换,ATC,--,模型,dynamic,案例,shape,size
From: https://blog.51cto.com/u_15214399/7409701

相关文章

  • 服务器数据恢复-EMC存储RAID5磁盘离线热备盘未激活的数据恢复案例
    服务器数据恢复环境:北京某单位有一台EMC某型号存储,有一组由10块STAT硬盘组建的RAID5阵列,另外2块磁盘作为热备盘使用。RAID5阵列上层只划分了一个LUN,分配给SUN小机使用,上层文件系统为ZFS。服务器故障:存储RAID5阵列中有2块硬盘损坏离线,只有一块热备盘激活,RAID5阵列瘫痪,上层LUN无法......
  • 【客户案例】星融元:脊叶架构(Spine-Leaf)的云化园区网络部署实践
    前言各行业数字化转型进程加快,作为基础设施的园区网络也面临着升级压力。为此,星融元通过将先进成熟的云网络建设理念引入园区场景,推出了“云化园区网络解决方案”,帮助客户网络实现架构级的深层优化。星融元云化园区网络解决方案介绍深入底层架构的全面变革,星融元发布云化园区网络解......
  • Android入门教程 | res资源目录简介与shape的绘制和使用
    res资源目录简介简单介绍Android工程中的资源目录(resources),res。Android里的资源指的是什么?资源是指代码使用的附加文件和静态内容,例如位图、布局定义、界面字符串、动画说明等。把资源放进对应的目录后,可使用在项目R类中生成的资源ID来访问这些资源。形如R.drawable.icon,R.la......
  • 视频剪辑中花式抠图的代码实操与案例详述
    本文为阿里云智能媒体服务IMS「云端智能剪辑」实践指南第三期,讲述围绕视频剪辑及数字人训练中的抠图需求,如何运用绿幕抠图、实景抠图能力,实现高效、便捷的视频制作及合成体验。昱尘|作者悬刃|算法支持“你这背景太假了”,博主疆域阿力木因为背景太好看而被质疑,随后画风突转,网......
  • 【题解】AtCoder Regular Contest 162
    A.EkidenRace题目描述:有\(n\)个人参加了往返赛跑,每个人有一个编号\(1\)到\(n\)。已知以下信息:如果按照往路的成绩排序,那么任何两个人的成绩都不相同。同时第\(i\)个人在往路中排名第\(i\)。如果按照往返的成绩排序,那么任何两个人的成绩都不相同。同时第\(i\)个人......
  • 解决error: no matching member for call to 'connect'
    在连接信号与槽时,报错解决error:nomatchingmemberforcallto'connect'原因由于信号被重载过,同名了,但是参数不一样,就会报错。这种情况下使用使用旧版语法connect(sender,SIGNAL(func()),receiver,SLOT(func1()))......
  • AtCoder Grand Contest 041 F Histogram Rooks
    洛谷传送门AtCoder传送门神题!!!!!!!!!/bx全部格子都被覆盖不好处理,考虑钦定\(k\)个格子不被覆盖,容斥系数就是\((-1)^k\)。发现网格的行不一定连续,但是列是连续的。如果一列有格子被钦定,那么这一列就不能放棋子。由此想到枚举不能放棋子的列(至少有一个棋子被钦定的列)集合\(S\),把......
  • Linux-部署环境练习案例
    需要的文档都放在此链接里啦链接(链接是绝对安全的,文档放在百度网盘里):百度网盘这样是为了方便过审^_^部署Docker1.卸载之前版本yumremovedockerdocker-clientdocker-client-latestdocker-commondocker-latestdocker-latest-logrotatedocker-logrotatedocker-engine#或yum......
  • AtCoder Beginner Contest 318 - D(状压 dp)
    目录D-GeneralWeightedMaxMatchingD-GeneralWeightedMaxMatching题意给定无向图,边有边权。让你选择一组边,满足任意两边不相交且总边权和最大。顶点数$\le16$思路状压DP求解该问题状态:利用n位二进制表示每个顶点是否已经被选择,0表示该顶点未选,1表示当前......
  • 项目管理实践与案例
    一、实践是最好的学习方法什么是“学习”?“学”是去了解,认知,知道的一个过程,“习”是要把了解的,认知的,知道的东西通过实践来深刻体会,接下来我从时间管理、目标管理、计划管理、高效沟通、思维创新、团队学习等方面总结了几个自我管理工具,供大家学习参考。1.1:时间管理----用“四象......