摘要:当算子性能或者网络性能不佳时,可以使用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,让你的模型在昇腾平台上高效运行的更多相关文章

  1. JVM调优工具锦囊

    Arthas线上 分析诊断调优工具 以前我们要排查线上问题,通常使用的是jdk自带的调优工具和命令.最常见的就是dump线上日志,然后下载到本地,导入到jvisualvm工具中.这样操作有诸多不变,现 ...

  2. 转://Oracle undo 自动调优

    Oracle 10gr2的后续版本中添加了UNDO信息最短保留时间段自动调优的特性,不再仅仅依据参数UNDO_RETENTION的设定,其调优原则如下:1. 当UNDO TABLESPACE为 fix ...

  3. Android系统性能调优工具介绍

    http://blog.csdn.net/innost/article/details/9008691 经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优 ...

  4. 《深入理解Java虚拟机》(五)JVM调优 - 工具

    JVM调优 - 工具 JConsole:Java监视与管理控制台 JConsole是一个机遇JMX(Java Management Extensions,即Java管理扩展)的JVM监控与管理工具,监 ...

  5. Oracle第二话之调优工具

    Oracle第二话之调优工具 原创if 0 = -I can 发布于2019-04-09 19:53:12 阅读数 172  收藏 展开 目录 1.告警日志 2.用户进程trace文件 3.动态性能视 ...

  6. 18.jvm调优工具及案例分析

    目标: Jmap.Jstack.Jinfo详解 JvisualVm调优工具实战 JVM内存或CPU飙高如何定位 JState命令预估JVM运行情况 系统频繁Full GC导致系统卡顿实战调优 内存泄漏 ...

  7. JVM调优工具使用手册

    ​ 作为Java开发人员,我们肯定知道JDK的bin目录下有"java.exe"."javac.exe"这两个命令工具,这也是我们平时用得最多的工具.但其实bi ...

  8. java性能调优工具

    windows调优工具: 任务管理器(ctrl+alt+delete或).资源管理器(任务管理器->性能进入或运行resmon.exe):JVM分析工具Jconsole,jProfile,Vis ...

  9. mysql性能瓶颈分析、性能指标、指标搜集方法与性能分析调优工具

    本文主要讲解mysql的性能瓶颈分析.性能指标.性能指标信息的搜集工具与方法.分析调优工具的使用. 文章尚未完成. 性能瓶颈: 慢.写速度比读速度慢很多  主要的性能指标: 访问频度, 并发连接量, ...

  10. 【Java/Android性能优2】Android性能调优工具TraceView介绍

    本文参考:http://www.trinea.cn/android/android-traceview/ Android自带的TraceView堪比java的性能调优工具visualvm线程视图,可以 ...

随机推荐

  1. LGPL协议原文及中文翻译

    LGPL协议原文及中文翻译 参考链接 原文: GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 ...

  2. 一分钟了解 ChatGPT 语音对话

    一.背景 近期 ChatGPT 推出新的语音和图像功能,可以与用户进行语音对话或基于用户上传的图像进行分析和对话,提供了一种新的.更直观的交互体验.用户可以更轻松地表达自己的需求.提出问题,并获得 C ...

  3. html5学习内容-5

    (一)文字环绕排版 文字环绕图形 shape-outside属性 margin-box:外边距环绕 padding-box:内边距环绕 border-box:边框环绕 content-box:内容环绕 ...

  4. spring---面向切面(AOP @Pointcut 表达式篇)

    AOP(面向切面编程),可以说是OOP(面向对象编程)的补充和完善.OOP引入封装.继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合. 当我们需要为分散的对象引入公共行为的时候,O ...

  5. logback java动态配置【动态修改日志级别,动态修改appender】(转)

    logback 动态配置 写在前面在做java日志之前,强烈建议大家读一下这篇java日志的前世今生,对理清java日志框架很有帮助!1奉上地址: 一个著名的日志系统是怎么设计出来的 然后说一下,为啥 ...

  6. "拍牌神器"是怎样炼成的(一)--- 键鼠模拟之WinAPI

    作为本系列博文的开篇,有必要先做些声明,用于免责.以绝口水: 博文仅围绕已经弃用的.C/S结构的<上海市个人非营业性客车额度竞拍程序>客户端(NetBidClient)进行介绍,对于正在使 ...

  7. OceanBase金融SQL、亿万级别据量优化案例(Row_number 开窗 + 分页SQL)

    最近优化了不少SQL,简单的SQL顺手搞了不好意思发出来了忽悠人,复杂很考验逻辑思维的,但是又不想分享出来(自己收藏的案例),怕被人抄袭思路. 今天遇到一条很有意思的SQL案例:  性能SQL(金融行 ...

  8. SNN_文献阅读_Spiking neural networks, an introduction

    Spiking neural networks, an introduction 脉冲神经网络的生物学背景+两种采用脉冲编码的神经元模型 概论 本文介绍了脉冲神经网络的生物学背景,并将介绍两种采用脉冲 ...

  9. APISIX proxy-cache 插件用法

    APISIX 的 proxy-cache 插件可以对上游的查询进行缓存,这样就不需要上游的应用服务自己实现缓存了,或者也能少实现一部分缓存,通用的交给插件来做. 下面的操作都是基于 APISIX 3. ...

  10. Python 哈希表的实现——字典

    哈喽大家好,我是咸鱼 接触过 Python 的小伙伴应该对[字典]这一数据类型都了解吧 虽然 Python 没有显式名称为"哈希表"的内置数据结构,但是字典是哈希表实现的数据结构 ...