自动调优工具AOE,让你的模型在昇腾平台上高效运行
摘要:当算子性能或者网络性能不佳时,可以使用AOE进行调优。本文就带大家了解自动调优工具AOE,让你的模型在昇腾平台上高效运行。
本文分享自华为云社区《自动调优工具AOE,让你的模型在昇腾平台上高效运行》,作者:昇腾CANN 。
什么是AOE?
AOE(Ascend Optimization Engine)是一款自动调优工具,目的是为了充分利用有限的硬件资源,满足算子和整网的性能要求。
AOE通过生成调优策略、编译、在运行环境上验证的闭环反馈机制,不断迭代,最终得到最佳的调优策略,从而更充分利用硬件资源,提升网络的性能。
AOE的架构如下。

Application层:调优入口,支持如下。
- AOE:这里的AOE表示AOE进程,是离线推理场景下的调优入口。
- TFAdapter(TensorFlow Adapter):TensorFlow训练场景下的调优入口。
- PyTorchAdapter(PyTorch Adapter):PyTorch训练场景下的调优入口。
Tuning层:调优模式,支持以下类型。
- SGAT(SubGraph Auto Tuning):子图调优。一张完整的网络,会被拆分成多个子图。针对每一个子图,通过SGAT生成不同的调优策略。SGAT的调优算法通过获取每个迭代的调优策略性能数据,找到最优的调优策略,从而实现对应子图的最优性能。
- OPAT(Operator Auto Tuning):算子调优。AOE将一张整图输入给OPAT,OPAT内部进行算子融合,将融合得到的图进行算子粒度切分,针对每一个融合算子子图生成不同的算子调优策略,从而实现最优的算子性能。
- GDAT(Gradient Auto Tuning):梯度调优。分布式训练场景下,GDAT通过最大化反向计算与梯度聚合通信并行度,缩短通信拖尾时间,提升集群训练的性能。
Execute层:为执行层,支持编译(Compiler)和在运行环境上运行(Runner)。
AOE工作原理
如下以算子调优为例,介绍AOE的工作原理。

1. 将原始开源框架模型传入GE、FE进行图准备(InferShape、算子选择等)及子图拆分。
2. 进入算子编译阶段,根据拆分的子图信息匹配知识库。
若能匹配到知识库:
- 未开启REPEAT_TUNE的场景,直接使用已有知识库中的调优策略编译算子。
- 开启REPEAT_TUNE的场景,通过AOE进行调优。
若调优后的结果优于当前已有的知识库,则会将调优后的结果存入用户自定义知识库,并使用自定义知识库中的调优策略编译算子。
若调优后的结果不优于当前已有的知识库,则不再生成用户自定义知识库,直接使用已有的知识库编译算子。
若未匹配到知识库,则通过AOE进行调优。
- 若调优后的结果优于默认调优策略的性能,会将调优后的结果写入自定义知识库,并使用自定义知识库中的调优策略编译算子。
- 若调优后的结果不优于默认调优策略的性能,不生成自定义知识库,使用默认调优策略编译算子。
3. 推理场景下,编译完成后,生成适配昇腾AI处理器的离线模型文件。训练场景下,编译完成后,生成训练好的网络模型文件。
AOE使用场景
当算子性能或者网络性能不佳时,可以使用AOE进行调优。AOE调优支持的场景如下:
- 离线推理
- TensorFlow训练
- PyTorch训练
- 在线推理
- IR构图
如何使用AOE进行调优?
如下以离线推理场景下Caffe网络的算子调优为例,介绍如何进行AOE调优。
1. 准备模型文件。
2. 配置环境变量。
必选环境变量
- CANN组合包提供进程级环境变量设置脚本,供用户在进程中引用,以自动完成环境变量设置。执行命令参考如下,以下示例均为root或非root用户默认安装路径,请以实际安装路径为准。
# 以root用户安装toolkit包
/usr/local/Ascend/ascend-toolkit/set_env.sh
# 以非root用户安装toolkit包
${HOME}/Ascend/ascend-toolkit/set_env.sh
- AOE工具依赖Python,以Python3.7.5为例,请以运行用户执行如下命令设置Python3.7.5的相关环境变量。
#用于设置python3.7.5库文件路径
export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
#如果用户环境存在多个python3版本,则指定使用python3.7.5版本
export PATH=/usr/local/python3.7.5/bin:$PATH
可选环境变量
export ASCEND_DEVICE_ID=1
export TUNE_BANK_PATH=/home/HwHiAiUser/custom_tune_bank
export TE_PARALLEL_COMPILER=7
export REPEAT_TUNE=True
命令中的参数含义如下。
- ASCEND_DEVICE_ID:昇腾AI处理器的逻辑ID。
- TUNE_BANK_PATH:调优后自定义知识库的存储路径。
- TE_PARALLEL_COMPILER:开启算子的并行编译功能。
- REPEAT_TUNE:是否重新发起调优。
3. 进行AOE调优,命令如下。命令中使用的目录以及文件均为样例,请以实际为准。
aoe --framework=0 --model=$HOME/module/resnet50.prototxt --weight=$HOME/module/resnet50.caffemodel --job_type=2
命令中的参数含义如下。
- framework:原始网络模型的框架类型。0表示Caffee。
- model:原始模型文件路径与文件名。
- weight:原始模型权重文件路径与文件名。
- job_type:调优模式,2表示算子调优。
4. 若提示如下信息,则说明AOE调优完成。
Aoe process finished
调优完成后,生成文件如下。
- 自定义知识库:若满足自定义知识库生成条件则会生成自定义知识库。
- om模型文件,存放路径为:
${WORK_PATH}/aoe_workspace/${model_name}_${timestamp}/tunespace/result/${model_name}_${timestamp}_tune.om
${WORK_PATH}:调优工作目录
${model_name}:模型名称
${timestamp}:时间戳
- 算子调优结果文件:在执行调优的工作目录下实时生成命名为“aoe_result_opat_{timestamp}_{pidxxx}.json”的文件,记录调优过程中被调优的算子信息。示例如下。
"basic": {
"tuning_name": "调优任务名",
"tuning_time(s)": 1827
}
"OPAT": {
"model_baseline_performance(ms)": 113.588725,
"model_performance_improvement": "0.31%",
"model_result_performance(ms)": 113.236731,
"opat_tuning_result": "tuning successful",
"repo_modified_operators": {
"add_repo_operators": [
{
"op_name": "strided_slice_10",
"op_type": "stridedsliced",
……
"repo_summary": {
"repo_add_num": 2,
"repo_hit_num": 17,
"repo_reserved_num": 15,
"repo_unsatisfied_num": 0,
"repo_update_num": 2,
"total_num": 19
}
5. 调优完成后,请使用调优后的自定义知识库重新推理,验证性能是否提高。
以上就是AOE的简单介绍。关于更多内容,可以在昇腾文档中心查看,您也可在“昇腾社区在线课程”板块学习视频课程,学习过程中的任何疑问,都可以在“昇腾论坛”互动交流!
自动调优工具AOE,让你的模型在昇腾平台上高效运行的更多相关文章
- JVM调优工具锦囊
Arthas线上 分析诊断调优工具 以前我们要排查线上问题,通常使用的是jdk自带的调优工具和命令.最常见的就是dump线上日志,然后下载到本地,导入到jvisualvm工具中.这样操作有诸多不变,现 ...
- 转://Oracle undo 自动调优
Oracle 10gr2的后续版本中添加了UNDO信息最短保留时间段自动调优的特性,不再仅仅依据参数UNDO_RETENTION的设定,其调优原则如下:1. 当UNDO TABLESPACE为 fix ...
- Android系统性能调优工具介绍
http://blog.csdn.net/innost/article/details/9008691 经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优 ...
- 《深入理解Java虚拟机》(五)JVM调优 - 工具
JVM调优 - 工具 JConsole:Java监视与管理控制台 JConsole是一个机遇JMX(Java Management Extensions,即Java管理扩展)的JVM监控与管理工具,监 ...
- Oracle第二话之调优工具
Oracle第二话之调优工具 原创if 0 = -I can 发布于2019-04-09 19:53:12 阅读数 172 收藏 展开 目录 1.告警日志 2.用户进程trace文件 3.动态性能视 ...
- 18.jvm调优工具及案例分析
目标: Jmap.Jstack.Jinfo详解 JvisualVm调优工具实战 JVM内存或CPU飙高如何定位 JState命令预估JVM运行情况 系统频繁Full GC导致系统卡顿实战调优 内存泄漏 ...
- JVM调优工具使用手册
作为Java开发人员,我们肯定知道JDK的bin目录下有"java.exe"."javac.exe"这两个命令工具,这也是我们平时用得最多的工具.但其实bi ...
- java性能调优工具
windows调优工具: 任务管理器(ctrl+alt+delete或).资源管理器(任务管理器->性能进入或运行resmon.exe):JVM分析工具Jconsole,jProfile,Vis ...
- mysql性能瓶颈分析、性能指标、指标搜集方法与性能分析调优工具
本文主要讲解mysql的性能瓶颈分析.性能指标.性能指标信息的搜集工具与方法.分析调优工具的使用. 文章尚未完成. 性能瓶颈: 慢.写速度比读速度慢很多 主要的性能指标: 访问频度, 并发连接量, ...
- 【Java/Android性能优2】Android性能调优工具TraceView介绍
本文参考:http://www.trinea.cn/android/android-traceview/ Android自带的TraceView堪比java的性能调优工具visualvm线程视图,可以 ...
随机推荐
- DB22
IBM官方网站提供了DB2 Express-C版本的软件免费下载: 下载地址 : http://www.ibm.com/developerworks/cn/downloads/im/udbexp/
- 17.2 实现无管道正向CMD
WSASocket 无管道正向CMD,使用WSASocket函数创建一个TCP套接字,并绑定到一个本地地址和端口上.然后使用CreateProcess函数创建一个新的CMD进程,并将标准输入.输出和错 ...
- 用Rust手把手编写一个Proxy(代理), 准备篇, 动手造轮子
用Rust手把手编写一个Proxy(代理), 准备篇, 动手造轮子 wmproxy 将实现http/https代理, socks5代理, 后续将实现websocket代理, 内外网穿透等, 会将实现过 ...
- 搭建LNMP
搭建LNMP 准备(关闭防火墙,selinux) systemctl stop firewalld systemctl disable firewalld setenforce 0 安装依赖包( ...
- 机器学习从入门到放弃:硬train一发手写数字识别
一.前言 前面我们了解了关于机器学习使用到的数学基础和内部原理,这一次就来动手使用 pytorch 来实现一个简单的神经网络工程,用来识别手写数字的项目.自己动手后会发现,框架里已经帮你实现了大部分的 ...
- bool数据类型用法
1 来自百度 1.bool为布尔型用作逻辑判断 2 2.bool只有一个字节 3 3.bool取值false和true,0为false,非0为true.(例如-1和2都是true). 4 4.bool ...
- .net 温故知新【13】:Asp.Net Core WebAPI 缓存
一.缓存 缓存指在中间层中存储数据的行为,该行为可使后续数据检索更快. 从概念上讲,缓存是一种性能优化策略和设计考虑因素. 缓存可以显著提高应用性能,方法是提高不常更改(或检索成本高)的数据的就绪性. ...
- C#中LINQ的使用知多少?LINQ常功能整理,实例源代码解析
LINQ(Language-Integrated Query)是C#语言中的一个强大的查询技术,它提供了一种统一的查询语法,可以用于查询和操作各种数据源,包括集合.数据库.XML等.下面详细描述了LI ...
- python计算代码运行时间
记录一下自己用python编写计算运行时间的代码 时间类 import time import numpy as np # 编写时间类来方便操作 class Timer: def __init__(s ...
- BI到底是什么,是否所有企业都适合上BI?
商业智能(Business Intelligence)的概念 商业智能(BI)是一种综合性的数据分析和决策支持系统,旨在帮助企业从海量的数据中提取有价值的信息,并将其转化为洞察力.报告和可视化呈现,以 ...