AOE性能调优问题案例

AOE(Ascend Optimization Engine)是一款自动性能调优工具,目的是为了充分利用有限的硬件资源,满足算子和整网的性能要求。

本期就分享几个关于AOE性能调优问题的典型案例,并给出原因分析及解决方法。

  1. 调优过程中进程异常退出
  2. 无法命中调优生成的知识库
  3. 参数设置不合理,导致报错内存不足

01调优过程进程异常退出

问题现象描述

在调优过程中,可能会出现如下类似报错。

现象1:调优直接异常终止,出现类似下面的信息:

现象2:触发进程退出,调优日志中出现类似下面红框的信息:

原因分析

可能原因是内存不足,可以通过如下步骤进行分析。

使用dmesg命令确认操作系统是否触发"Out of memory"导致进程退出。

dmesg |grep "Out of memory"

系统显示如下类似信息,表示触发了"Out of memory"。

[519308.099433] Out of memory: Killed process 994362 (aoe) total-vm:23064888kB, anon-rss:16472380kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:35352kB oom_score_adj:0

处理步骤

更换为有更大Host内存的调优环境。

02 无法命中调优生成的知识库

现象描述

使用AOE完成调优后,生成了知识库,但在ATC转模型时却无法命中生成的知识库。

可能原因

AOE性能调优和ATC模型转换时,存在一些相同的参数,这些参数可能会影响网络的shape、网络中部分算子的dtype、网络结构等,所以这些参数在AOE性能调优和ATC模型转换/AOE再次调优时需要保持一致。参数范围及具体影响如下。

  • input_format:影响输入数据格式。
  • input_shape:影响模型输入数据的shape。
  • output_type:影响网络输出数据类型或影响某个输出节点的数据类型。
  • insert_op_conf、fusion_switch_file、enable_scope_fusion_passes、enable_small_channel:影响网络结构。
  • out_nodes:影响网络中的输出节点。
  • input_fp16_nodes:影响输入节点的数据类型。
  • is_input_adjust_hw_layout:影响网络的输入数据类型和格式。
  • is_output_adjust_hw_layout:影响网络的输出数据类型和格式。
  • precision_mode、op_precision_mode、modify_mixlist、keep_dtype、op_select_implmode、optypelist_for_implmode:影响网络部分算子的dtype。
  • dynamic_batch_size、dynamic_image_size、dynamic_dims:影响网络的shape。

处理步骤

在AOE性能调优和ATC模型转换/AOE再次调优时,可能原因中的参数取值需要保持一致。

03参数设置不合理,导致报错内存不足

现象描述

TensorFlow训练场景下调优时,可能会出现如下类似报错。

第一种报错

[ERROR] GE(685297,python3):2022-04-06-07:15:09.383.996 [graph_var_manager.cc:402]687614 AssignVarMem: ErrorNo: 1343225857(Parameter's invalid!) [COMP][MEM_ALLOC][Check][Param] Out of memory: current var size[13962468864] exceeds total var size[13958643712] 

第二种报错

[ERROR] GE(685297,python3):2022-04-06-07:15:09.383.996 [graph_var_manager.cc:402]687614 AssignVarMem: ErrorNo: 1343225857(Parameter's invalid!) [COMP][MEM_ALLOC][Check][Param] Out of memory: current graph size[13962468864] exceeds total graph size[13958643712] 

可能原因

报错内存不足的可能原因是:TensorFlow训练脚本中的内存相关参数(graph_memory_max_size网络静态内存和最大动态内存、variable_memory_max_size变量内存)设置不合理,当调优过程中内存超过这些参数取值时,系统报错。

处理步骤

针对分析的可能原因,请参考以下方法处理:

修改sess.run模式下的session配置项或者Estimator模式下的npu_bridge.estimator.npu.npu_config。具体步骤如下。

  • 第一种报错处理办法:修改variable_memory_max_size的取值为报错信息中的current var size + 1GB,修改graph_memory_max_size的取值为31GB - variable_memory_max_size。
  • 第二种报错处理办法:修改graph_memory_max_size的取值为报错信息中的current graph size + 1GB,修改variable_memory_max_size的取值为31GB - graph_memory_max_size。

修改示例如下:

sess.run模式

custom_op.parameter_map["graph_memory_max_size"].s = tf.compat.as_bytes(str(26*1024 * 1024 * 1024))

Estimator模式

config = NPURunConfig(graph_memory_max_size=str(26*1024 * 1024 * 1024)) 
variable_memory_max_size

04 更多介绍 

[1]昇腾文档中心:昇腾社区-官网丨昇腾万里 让智能无所不及

[2]昇腾社区在线课程:开发者主页-昇腾社区

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/181295.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openebs

1. 简介 OpenEBS是一款使用Go语言编写的基于容器的块存储开源软件。OpenEBS使得在容器中运行关键性任务和需要数据持久化的负载变得更可靠。 OpenEBS是一组存储引擎,允许您为有状态工作负载(StatefulSet)和Kubernetes平台类型选择正确的存储解决方案。 在高层次上…

智慧城市排水系统,管网水位监测仪怎么监测

地下排水管网应用于城市的多个环境之中,比如排放雨水,污水或者是地表水等,总之是在维护城市的安全运行,并且保护城市地下生命线处于正常状态。但是一旦排水系统面对各种极端天气,便有可能会突发安全事故,导…

Linux学习第33天:Linux INPUT 子系统实验(二):Linux 自带按键驱动程序的使用

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本节笔记主要内容是学会如何使用Linux自带的按键驱动程序。 一、自带按键驱动程序源码简析 配置选项路径如下: -> Device Drivers ->…

人工智能师求职面试笔试题及答案汇总

人工智能师求职面试笔试题及答案汇总 1.如何在Python中实现一个生成器? 答:在Python中,生成器是一种特殊类型的迭代器。生成器允许你在需要时才生成值,从而节省内存。生成器函数在Python中是通过关键字yield来实现的。例如&…

英语——分享篇——每日200词——1-200

1——ball——[bɔːl]——n.球——ball——ba爸(拼音)ll筷子(象形)——爸爸用筷子夹球——The kid is playing the ball. ——孩子在玩皮球。 2——boat——[bəʊt]——n.船——boat——bo60(象形)at在(熟词)——60个人在船上——I have 60 boats.——我有60艘船。 3——bag—…

GCC编译器

一:GCC编译器介绍 在Linux上写过C并且编译过的同学想必一定要和GCC打交道,可能刚接触的同学只知道GCC是一款编译工具。其实GCC发展至今并不是一开始作者就想把GCC打造成如今一统江山的一个工具,而是给他的另一个宏伟计划的一个配套&#xff0…

【Orangepi Zero2 全志H616】驱动蜂鸣器

一、用户手册对应的I/O 二、wiringPi库示例代码 三、代码实现 四、创建shell脚本 五、接线和运行结果 一、用户手册对应的I/O 二、wiringPi库示例代码 1 #include <stdio.h>2 #include <wiringPi.h>34 #define NUM 17 //26pin5 //#define NUM 18 //26pin6 //#…

工作数字化的中国历程 | 从 OA 到 BPM 到数字流程自动化

业务流程是由“活动”&#xff08;或称“工作任务”&#xff09;构成的&#xff0c;在企业里的所有工作是不是都叫流程&#xff0c;或者属于流程的一部分&#xff0c;这个概念很绕&#xff0c;我觉得没有必要去做学究气的辨析。我曾经提出过一个从工作的两个特性&#xff08;产…

伪随机序列——m序列及MATLAB仿真

文章目录 前言一、m 序列1、m 序列的产生2、m 序列的性质①、均衡性②、游程分布③、移位相加特性④、自相关函数⑤、功率谱密度⑥、伪噪声特性 二、M 序列1、m 序列的产生2、m 序列的性质 三、MATLAB 中 m 序列1、m 序列生成函数的 MATLAB 代码2、MATLAB 仿真 前言 在通信系统…

白标软件:时间与金钱的双赢助手

白标的好处是你不需要从零开始构建一个应用程序。供应商提供软件解决方案&#xff0c;而你提供品牌&#xff0c;并将应用程序包装、市场推广和盈利。 白标软件帮助节省时间和金钱的六种方式&#xff1a; 1、不需要招募软件开发组织或专业人员 传统上&#xff0c;软件开发需要…

strongswan:configure: error: OpenSSL Crypto library not found

引子 在配置strongswan时&#xff0c;有时会遇到以下错误&#xff08;其实所有需要openssl的软件configure时都有可能遇到该问题&#xff09;&#xff1a; configure: error: OpenSSL Crypto library not found 解决方法 crypto是什么呢? 是OpenSSL 加密库(lib), 这个库需要op…

深度学习_4 数据训练之线性回归

训练数据 线性回归 基本原理 比如我们要买房&#xff0c;机器学习深度学习来预测房价。房价的影响因素有&#xff1a;卧室数量&#xff0c;卫生间数量&#xff0c;居住面积。此外&#xff0c;还需要加上偏差值来计算。我们要找到一个正确率高的计算方法来计算。 首先&#…

Solidity入门第一步之数据类型

各种类型介绍 数值类型(Value Type)&#xff1a;包括布尔型(bool)&#xff0c;整数型(int、uint、uint256)等等&#xff0c;这类变量赋值时候直接传递数值。引用类型(Reference Type)&#xff1a;包括数组和结构体&#xff0c;这类变量占空间大&#xff0c;赋值时候直接传递地…

Python---字符串中的count()方法

count()方法 主要功能&#xff1a;求子串在字符串中出现的次数 count 英 /kaʊnt/ v. &#xff08;按顺序&#xff09;数数&#xff1b;计数&#xff0c;点数目&#xff1b;把……算入&#xff0c;包括&#xff1b;重要&#xff1b;被允许&#xff0c;被接受&#xff1b;…

[自学记录08*]LDR、HDR与ToneMapping

一、Dynamic Range—动态范围 Dynamic Range表示动态范围&#xff0c;检测DR&#xff0c;DR又分为LDR&#xff08;Low Dynamic Range&#xff09;和HDR&#xff08;High Dynamic Range&#xff09;。它们都是表示亮度值范围的一种方式&#xff0c;那么有什么区别呢。 1.LDR …

ke9案例三:页面提交文件,我服务器端接收

案例三:页面提交文件,我服务器端接收 ProcessFile.java 1value "/process-file" 2获取邮件消息的所有部分part--Collection<Part> partsrequest.getParts(); 3遍历每一个part 4之后可以打印头文件等String headerpart.getHeader("content-disposition&q…

Hive【Hive(八)自定义函数】

自定义函数用的最多的是单行函数&#xff0c;所以这里只介绍自定义单行函数。 Coding 导入依赖 <dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>3.1.3</version></dependency>…

Flow-based models(NICE);流模型+NICE+代码实现

参考&#xff1a; 李宏毅春季机器学习NICE: Non-linear Independent Components Estimationhttps://github.com/gmum/nice_pytorch 文章目录 大致思想数学预备知识Jacobian矩阵行列式以及其几何意义Change of Variable Theorem Flow-based modelNICE理论代码 大致思想 Flow-B…

Solidity数据类型之函数类型

solidity中函数的形式 function <function name>(<parameter types>) {internal|external|public|private} [pure|view|payable] [returns (<return types>)]每个关键字的意思&#xff08;方括号里面的写不写都可以&#xff09; function&#xff1a; 声明函…

【0基础学Java第七课】-- 类和对象01

7. 类和对象 7.1 面向对象的初步认知7.1.1 什么是面向对象7.1.2 面向对象与面向过程 7.2 类定义和使用7.2.1 简单认识类7.2.2 类的定义格式7.2.3 定义一个狗类7.2.4 定义一个学生类 7.3 类的实例化7.3.1 什么是实列化7.3.2 引用只能指向对象&#xff0c;且不能同时指向多个对象…