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

本文分享自华为云社区《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信息

问题现象描述

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

css 复制代码
atc --model=./resnet_shape.pb --framework=3 --output=./out/resnet_shape --soc_version=Ascend310

报错信息如下:

vbnet 复制代码
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",模型输入样例如下,模型转换时,并未给不固定的维度值赋值。

解决措施

  • 设置固定shape。

模型转换时,给不确定的维度值设置固定取值,示例如下:

css 复制代码
atc --model=./resnet_shape.pb --framework=3 --output=./out/resnet_shape --soc_version=Ascend310 --input_shape="Inputs:1,224,224,3"
  • 设置shape分档。

与动态BatchSize参数配合使用,使转换后的模型进行推理时,可以每次处理多种数量的图片,示例如下:

css 复制代码
atc --model=./resnet_shape.pb --framework=3 --output=./out/resnet_shape --soc_version=Ascend310 --input_shape="Inputs:-1,224,224,3" --dynamic_batch_size="1,2,4,8"

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

  • 设置shape范围。

模型转换时,将对应维度的值设置成一个范围,示例如下:

css 复制代码
atc --model=./resnet_shape.pb --framework=3 --output=./out/resnet_shape --soc_version=Ascend910 --input_shape="Inputs:1~10,224,224,3"

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

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

问题现象描述

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

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

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

报错信息如下:

ini 复制代码
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个档位,档位之间使用英文逗号分隔。改后样例如下:

bash 复制代码
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的模型,转换命令样例如下:

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

报错信息如下:

sql 复制代码
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"。改后样例如下:

bash 复制代码
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参数转换支持多个分辨率的模型,转换命令样例如下:

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

报错信息如下:

sql 复制代码
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"。改后样例如下:

css 复制代码
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昇腾文档中心:www.hiascend.com/zh/document

2昇腾社区在线课程:www.hiascend.com/zh/edu/cour...

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

号外!

华为将于2023年9月20-22日,在上海世博展览馆和上海世博中心举办第八届华为全联接大会(HUAWEICONNECT 2023)。本次大会以"加速行业智能化"为主题,邀请思想领袖、商业精英、技术专家、合作伙伴、开发者等业界同仁,从商业、产业、生态等方面探讨如何加速行业智能化。

我们诚邀您莅临现场,分享智能化的机遇和挑战,共商智能化的关键举措,体验智能化技术的创新和应用。您可以:

  • 在100+场主题演讲、峰会、论坛中,碰撞加速行业智能化的观点
  • 参观17000平米展区,近距离感受智能化技术在行业中的创新和应用
  • 与技术专家面对面交流,了解最新的解决方案、开发工具并动手实践
  • 与客户和伙伴共寻商机

感谢您一如既往的支持和信赖,我们热忱期待与您在上海见面。

大会官网: www.huawei.com/cn/events/h...

欢迎关注"华为云开发者联盟"公众号,获取大会议程、精彩活动和前沿干货。

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

相关推荐
sell-cloud2 小时前
Prompt Engineering要凉了?Fable 5.5能“猜“意图,但银行正在封杀AI Agent——企业AI的真正护城河是什么
人工智能·prompt
Navicat中国4 小时前
Navicat 18 内置 AI 助手让数据库开发从繁琐操作迈向智能协作
大数据·人工智能·数据库开发
4SAPI4 小时前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
魔乐社区4 小时前
翼芯・智算测试与适配优化专区,让国产算力“选得准、跑得通、用得好“
人工智能·开源·大模型
XCDoris6 小时前
郴州logo设计机构
大数据·人工智能·python
Goboy6 小时前
一个人带三个Agent,我用全新TRAE从0到1搭了个资讯周刊站
人工智能·trae
俊哥V6 小时前
每日 AI 研究简报 · 2026-10-19
人工智能·ai
AI_AGENT_DEV_AI6 小时前
AI英语教培智能体的开发
人工智能
物联网软硬件开发-轨物科技7 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人
海宇数据7 小时前
零信任架构实战:基于海宇网上踪迹欺诈行为识别构建自动化信贷资信评估网关
运维·人工智能·架构·自动化