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

2023-12-30 01:50

本文主要是介绍自动调优工具AOE,让你的模型在昇腾平台上高效运行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是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的简单介绍。关于更多内容,可以在昇腾文档中心查看,您也可在“昇腾社区在线课程”板块学习视频课程,学习过程中的任何疑问,都可以在“昇腾论坛”互动交流!

相关参考:

[1]昇腾文档中心

[2]昇腾社区在线课程

[3]昇腾论坛

这篇关于自动调优工具AOE,让你的模型在昇腾平台上高效运行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/m0_71340392/article/details/129753481
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/551348

相关文章

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

sqlite3 命令行工具使用指南

《sqlite3命令行工具使用指南》本文系统介绍sqlite3CLI的启动、数据库操作、元数据查询、数据导入导出及输出格式化命令,涵盖文件管理、备份恢复、性能统计等实用功能,并说明命令分类、SQL语... 目录一、启动与退出二、数据库与文件操作三、元数据查询四、数据操作与导入导出五、查询输出格式化六、实用功

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手