自动调优工具AOE,让你的模型在昇腾平台上高效运行

自动,工具,aoe,模型,平台,高效,运行 · 浏览次数 : 27

小编点评

**AOE 自动调优工具概述** AOE(Ascend Optimization Engine)是一款自动调优工具,用于优化算子和整网的性能。当算子性能或网络性能不佳时,可以使用 AOE 进行调优。 **AOE 架构** AOE 的架构如下: - Application层:支持多个调优入口,如 TensorFlow Adapter、PyTorch Adapter、Tuning 层、OPAT 和 GDAT。 - Optimize层:支持编译和运行模型。 - Execute层:负责模型的执行。 **AOE 工作原理** 当 AOE 识别算子性能或网络性能不佳时时,会调用其工作流程。工作流程如下: 1. **模型准备:**AOE 首先准备模型文件、环境变量和参数。 2. **AOE 循环:**AOE 在多个循环中迭代地优化模型。 3. **策略生成:**在每个循环中,AOE 生成不同的调优策略。 4. **模型编译:**AOE 使用生成的策略对模型进行编译。 5. **运行模型:**编译后的模型在运行环境上运行。 6. **结果记录:**AOE 记录每个策略的性能,并生成最终结果文件。 **示例命令** 以下命令演示如何使用 AOE 对 resnet50 模型进行算子调优: ``` aoe --framework=0 --model=$HOME/module/resnet50.prototxt --weight=$HOME/module/resnet50.caffemodel --job_type=2 ``` **注意** - 命令中的 `framework`、`model` 和 `job_type` 参数用于指定模型框架类型、模型文件路径和调优模式。 - `WORK_PATH` 环境变量用于存储调优临时文件路径。

正文

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

自动调优工具AOE,让你的模型在昇腾平台上高效运行

摘要:当算子性能或者网络性能不佳时,可以使用AOE进行调优。本文就带大家了解自动调优工具AOE,让你的模型在昇腾平台上高效运行。 本文分享自华为云社区《自动调优工具AOE,让你的模型在昇腾平台上高效运行》,作者:昇腾CANN 。 什么是AOE? AOE(Ascend Optimization Eng

网络性能总不好?网络调优专家AOE帮你来“看看”

摘要:为提升网络性能、降低人工调优成本,CANN推出了自动化网络调优工具AOE,通过子图调优、算子调优与梯度调优的功能,让网络可以在AI硬件上获得最佳性能。 本文分享自华为云社区《网络性能总不好?专家帮你来“看看”— CANN 6.0 黑科技 | 网络调优专家AOE,性能效率双提升》,作者:昇腾CA

[转帖]perf学习-linux自带性能分析工具

目前在做性能分析的事情,之前没怎么接触perf,找了几篇文章梳理了一下,按照问题的形式记录在这里。 方便自己查看。 什么是perf? linux性能调优工具,32内核以上自带的工具,软件性能分析。在2.6.31及后续版本的Linux内核里,安装perf非常的容易。 几乎能够处理所有与性能相关的事件。

[转帖]perf学习-linux自带性能分析工具

目前在做性能分析的事情,之前没怎么接触perf,找了几篇文章梳理了一下,按照问题的形式记录在这里。 方便自己查看。 什么是perf? linux性能调优工具,32内核以上自带的工具,软件性能分析。在2.6.31及后续版本的Linux内核里,安装perf非常的容易。 几乎能够处理所有与性能相关的事件。

[转帖]JVM性能调优监控工具

原文 https://www.cnblogs.com/haiyang1985/p/7654654.html 摘要: JDK自己提供了不少方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,本

SkyWalking的学习之一

SkyWalking的学习之一 前言 最近在学习应用调优诊断等内容. 现在实际工作中实质上的拆分和微服务在售前阶段 所以真正用到链路的地方比较少. 但是人生都是要向前看的. 想着一方面提高自己. 一方面也是为了以后着想. 在一个看不到未来和光的地方, 要么离开,要么继续深入掘进. Skywalkin

面试官:JVM调优,主要针对是哪一个区域?JVM内存结构是怎样的?

作为一个Java程序员,在日常的开发中,不必像C/C++程序员那样,为每一个内存的分配而操心,JVM会替我们进行自动的内存分配和回收,方便我们开发。但是一旦发生内存泄漏或者内存溢出,如果对Java内存结构不清楚,那将会是一件非常麻烦的事情!本文笔者将为大家详解Java内存结构。

[转帖]Region 性能调优

https://docs.pingcap.com/zh/tidb/v6.5/tune-region-performance 本文介绍了如何通过调整 Region 大小等方法对 Region 进行性能调优以及如何在大 Region 下使用 bucket 进行并发查询优化。 概述 TiKV 自动将底层数

[转帖]Linux性能优化(十二)——CPU性能调优

Linux性能优化(十二)——CPU性能调优 https://blog.51cto.com/u_9291927/2594259 一、应用程序优化 (1)编译器优化。适当开启编译器优化选项,在编译阶段提升性能。gcc提供优化选项-On会自动对应用程序的代码进行优化。(2)算法优化。使用复杂度更低的算法

[转帖]第七篇:双管齐下,JVM内部优化与JVM性能调优

文章目录 一、前言二、编译时优化2.1 Javac编译器2.2 Java语法糖2.2.1 泛型和泛型擦除2.2.2 自动装箱、自动拆箱、遍历循环2.2.3 条件编译 三、运行时优化(核心:JIT编译器/即时编译器)3.1 HotSpot虚拟机内的JIT编译器3.1.1 编译器和解释器并存的架构3.1