ATC模型转换动态shape问题案例

2024-01-05 12:20

本文主要是介绍ATC模型转换动态shape问题案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 shapeSolution: Try again with a valid argument.

原因分析

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

解决措施

  • 设置固定shape。

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

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

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

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范围。

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

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

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

报错信息如下:

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模型转换动态shape问题案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/572848

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了