网络性能总不好?专家帮你来“看看”— CANN 6.0 黑科技 | 网络调优专家AOE,性能效率双提升
随着深度学习模型复杂度和数据集规模的增大,计算效率的提升成为不可忽视的问题。然而,算法网络的多样性、输入数据的不确定性以及硬件之间的差异性,使得网络调优耗费巨大成本,即使是经验丰富的专家,也需要耗费数天的时间。
CANN(Compute Architecture for Neural Networks)是华为针对AI场景推出的异构计算架构,对上支持多种AI框架,对下服务AI处理器与编程,发挥承上启下的关键作用,是昇腾AI基础软硬件平台的核心。为了在提升网络性能的同时降低巨大的人工调优成本,CANN推出了自动化网络调优工具AOE(Ascend Optimization Engine),通过构建包含自动调优策略生成、编译、运行环境验证的闭环反馈机制,不断迭代,最终得到最优调优策略,从而在AI硬件上获得最佳网络性能。以ResNet50推理网络为例,经AOE调优后的网络性能提升100%以上,调优耗时不到30分钟。

针对网络模型,AOE分别提供了算子调优、子图调优与梯度调优的功能。其中算子调优,主要针对算子的调度(Schedule)进行优化,从而使得昇腾AI处理器的多级Buffer与计算单元形成高效的流水并发作业流,充分释放硬件算力;子图调优,通过智能化的数据切分策略提升缓存利用率,从而大幅提升计算效率;梯度调优主要应用于集群训练场景下,通过自动化寻找最优梯度切分策略、降低通信拖尾时间,从而提升集群训练性能。同时,AOE能够支持多种主流开源框架,在训练和推理场景下全方位满足不同开发者的网络性能调优诉求。

算子调优,提升计算节点执行效率
强化学习,生成Vector算子最优调度策略
AI处理器在计算过程中需要精心排布才能充分发挥算力,计算组件间的流水排布很大一部分由调度来承载,一个很小的调度操作映射到硬件行为上都可能产生巨大的差异。想要提升网络性能,势必需要为给定网络在指定设备上开发一套专属的调度逻辑。
网络的组成单元是算子,为算子执行寻找最优的调度策略是提升网络性能的关键。昇腾AI处理器的核心计算单元是AI Core,针对运行在AI Core上的算子,可以分为Vector与Cube两类,其中Vector算子主要负责执行向量运算,Cube算子主要负责执行矩阵运算。
针对Vector算子,CANN采用了RL强化学习(Reinforcement Learning)搜索框架,将算子调度过程抽象成了基于MCTS蒙特卡洛树搜索(Monte Carlo Tree Search)的决策链,并模拟人工进行决策,再通过和环境不断交互得到性能数据,作为反馈值指导下一步决策。通过此方法一步步改善自身行为,最终获取算子执行对应的完整最优调度策略。

经过AOE调优后的Vector算子,平均性能较调优前可提升10%以上,平均调优时间仅需200s,效率与性能都有较大提升。
遗传算法,提高Cube算子搜索效率
我们知道在深度学习网络中包含了大量的矩阵乘计算,而这部分计算在昇腾AI处理器中均通过Cube算力来承担,因此Cube算子作为重型算子,在网络中的影响权重较大,所以针对Cube算子的性能提升会给整个网络的性能带来较大的收益。
通过强化学习模式的搜索,我们已经可以做到解放人力进行Vector类型的算子优化,因为Vector算子的计算Buffer单一,调度算法可以基于各种Schedule原语为算子构建完整的调度策略。而Cube算子涉及多块片上Buffer之间的数据交互,如果按照和Vector算子相同的调优方式,可能最终会因为搜索空间过大导致搜索效率低下和搜索策略不佳的结果。
针对Cube算子,AOE以Schedule模板为基础,利用GA遗传算法(Genetic Algorithm),通过选择、交叉、变异等方式对影响最大的Schedule原语参数进行多轮调优,从而得到候选Tiling集,再根据在真实环境编译执行的性能反馈数据将候选策略进行排序,得到最优策略。

以卷积算子为例,若人工调优,需要消耗一个算子优化专家两天的时间;若使用AOE智能调优,平均仅需3分钟即可达到相同甚至更优的性能优化效果,极大地节省了人力成本!
子图调优,获得更智能的数据切分
算子调优已经使得网络性能有了可观的提升,但AOE并没有止步于此。AOE在更宏观的粒度上加入了子图调优,从而实现更智能的数据切分。
深度学习模型的计算往往有较大的数据吞吐,数据读写往往成为网络性能的瓶颈,因此对于高速缓存利用率的提升成为计算效率优化的关键手段。
昇腾AI处理器中包含了高速缓存以降低外部访存的带宽压力,然而由于特征图(Feature Map)和模型参数的数据量巨大,会导致算子计算过程中的Cache命中率较低,影响整网计算效率。为了更好地提升高速缓存Cache命中率,AOE引入了子图调优的概念。
子图调优,基于算子切分数学等价原则,根据硬件Cache大小、算子shape等信息,将网络模型中的算子切分成多个算子,然后编排切分后算子的执行顺序,通过获取最佳的性能反馈,确定计算图切分策略和执行顺序。这样,就可以将一次性的数据流计算分解成多次进行执行,在分解后的数据流分支上,数据大小相比之前成倍递减,进而实现了Cache命中率的显著提升。

最终,在算子调优和子图调优的共同作用下,使用AOE进行性能调优后,主流推理网络的平均性能提升30%以上。以ResNet50推理网络为例,性能较调优前提升超过100%,整网调优耗时30分钟以内。
梯度调优,提升集群训练性能
大规模集群训练场景中,存在着计算节点多、梯度聚合过程复杂、通信开销大的痛点。梯度聚合过程和计算过程怎么更好的一定程度上相互掩盖,让整个过程保证较好的线性度,也是性能提升的关键问题。为此,AOE引入了梯度调优的功能,通过智能梯度切分算法,自动搜索出最优梯度参数切分方式,为梯度传输选择合适的通信时机和通信量,最大限度让计算和通信并行,从而将通信拖尾时间降至最低,促使集群训练达到最优性能。

相对人工调整梯度聚合数据量,自动梯度调优可以将梯度聚合数据量调参时间从数人天缩短至数十分钟,一举获得最优聚合策略,降低人工调参的不确定性。AOE通过调优知识库记录模型调优经验,使得模型聚合策略能够动态适应不同集群规模。
经过AOE调优后,主流训练网络在昇腾AI处理器上执行性能较调优前平均提升了20%以上。以ResNet50训练网络为例,性能较调优前提升了23%,整网调优耗时2H以内。
写在最后
昇腾异构计算架构CANN始终致力于提供“开放易用、极致性能”的AI开发体验,不断降低AI开发的门槛与成本。CANN提供的昇腾调优引擎AOE克服了传统调优方法耗时长、泛化性差、维护成本高等影响开发效率和可用性的弊端,为AI开发者提供了更智能化的性能优化手段。
以梦为马,未来可期,相信通过CANN的持续创新与不断演进,定将进一步释放AI硬件的澎湃算力,加速AI应用场景落地,共建智慧世界。
相关文章:
网络性能总不好?专家帮你来“看看”— CANN 6.0 黑科技 | 网络调优专家AOE,性能效率双提升
随着深度学习模型复杂度和数据集规模的增大,计算效率的提升成为不可忽视的问题。然而,算法网络的多样性、输入数据的不确定性以及硬件之间的差异性,使得网络调优耗费巨大成本,即使是经验丰富的专家,也需要耗费数天的时…...
Qss自定义属性
QSS自定义属性 更多精彩内容👉个人内容分类汇总 👈👉QSS样式学习 👈文章目录QSS自定义属性[toc]前言一、实现效果二、使用方式1.QSS设置Q_PROPERTY属性样式2.QSS设置动态属性样式3.qproperty-<属性名称>语法14.qproperty-&…...
连接金蝶云星空,数据交互轻松搞定!丨三叠云
金蝶云星空 路径 拓展 >> 插件 功能简介 新增插件「金蝶云星空」。 用户可通过配置「金蝶云星空」插件,就可以实时获取「金蝶云星空」的数据,同时支持回填数据至金蝶系统内。 地图视图 路径 表单 >> 表单设计 功能简介 新增「地图视…...
JSX是什么,React为什么使用JSX,babel怎么转译JSX的
JSX是什么,React为什么使用JSX,babel怎么转译JSX的 在前端的框架中有两种“描述UI”的方案,一种是JSX语法,一种是模板语言。 其中React就是选择的JSX,Vue就是选择的模板语言。 JSX其实就是一个语法糖,在…...
从工地转行软件测试,拿下13k+年终奖是种什么体验?
最近,一则名为《我:毕业五年,存款5000。她:中传硕士,火锅店保洁》的视频走红网络,两位名校毕业生看似高开低走的就业经历,引起了很多人的共鸣。她们所传达的并不是所谓的躺平、摆烂,而是希望更多…...
前端面试题 —— 计算机网络(二)
目录 一、POST和PUT请求的区别 二、GET方法URL长度限制的原因 三、页面有多张图片,HTTP是怎样的加载表现? 四、HTTP2的头部压缩算法是怎样的? 五、说一下HTTP 3.0 六、HTTP协议的性能怎么样? 七、数字证书是什么?…...
山东大学机器学习期末2022
接力:山东大学机器学习期末2021 本来是不想写的,因为不想回忆起考试时啥也不会的伤痛,没想到最后给分老师海底捞,心情好了一些,还是一块写完 备考建议:多看ppt,多看ppt,多看ppt 山东…...
FEBC2022|打造VR内容生态闭环 佳创视讯持续加码轻量化内容建设
2月24日,由陀螺科技主办的未来商业生态链接大会作为 2023 癸卯兔年开年率先召开的行业重要影响力盛会在深圳成功召开。今年大会云集了科技、软件、游戏、XR等元宇宙领域的世界500强、上市公司及行业独角兽企业,围绕游戏、元宇宙、XR、数字营销等多项热门…...
Redis常见的数据类型命令
文章目录Redis 常见的数据类型及命令一、常见的NoSQL二、Redis 简介三、key 键的一些操作命令四、Redis的五种基本数据结构1、String(字符串)介绍常用命令1.1 set/get1.2 append1.3 strlen1.4 setex1.5 mset/mget1.6 setrange/getrange1.7 setnx1.8 incr…...
Python3+Selenium3自动化测试-(准备)
最近在学习selenium自动化测试相关的内容,所以将实际准备情况做一记录, # 系统:win10(64位) # 浏览器:Chrome(67.0)、Firefox(61.0)、IE # python版本:3.6.5 # Selenium:3.13.0Selenium简介 Selenium是一…...
VUE的安装和创建
安装node.js 进入node官网进行下载,然后一直下一步。 测试是否安装成功: 命令提示窗下执行:npm -v 若出现版本号,则安装成功。 安装npm源: npm config set registry http://registry.npm.taobao.org 查看:…...
ETL工具(kettle) 与 ETL产品(BeeloadBeeDI) 差之毫厘,谬以千里
E T L——是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。工具——原指工作时所需用的器具,后引申为达…...
轻松入门H3C无线AC上线AP【入门篇】
我们知道华三的最新模拟器支持了无线AC的配置,今天就浅浅的出个无线AC的教程,你上也会的那种。今天我们模拟的是二层环境下,笔者准备了2个AP,以此展示AP上线到AC的教程,并且用手机测试WiFi连接正常,且客户端…...
尚医通(二十五)就医提醒和预约统计
目录一、就医提醒1、搭建定时任务模块二、后台管理系统-预约统计功能1、开发每天预约数据接口2、封装远程调用接口3、搭建统计分析模块4、整合统计功能前端一、就医提醒 我们通过定时任务,每天8点执行,提醒就诊 1、搭建定时任务模块 (1&…...
网页js版音频数字信号处理:H5录音+特定频率信号的特征分析和识别提取
文章目录一、网页中的音频数据源二、FFT:时域转频域三、信号的特征分析四、信号的识别提取附录音频数字信号处理 Audio DSP (Digital Signal Processing) 是一个复杂又专业的话题,本文介绍的是如何从音频中实时分析和识别出特定频率信号的一种方法&#…...
uniapp结合腾讯云及时通信IM的聊天记录本地存储方案
uniapp结合腾讯云及时通信IM的聊天记录本地存储方案 UniApp 是一个跨平台的应用开发框架,可以使用 Vue.js 开发多端应用(如H5、小程序、App等)。在 UniApp 中,可以使用 uni-app 提供的文件系统 API 完成本地文件存储的操作。 1.…...
PyQGIS开发 -- 基础学习笔记
1、自主学习QGIS开发虽然QGIS本身功能强大,但还是架不住我们要编写新的功能、新的业务流程、新的算法。前文中我们提到,扩展QGIS有2种方法,一是用Python、C来写QGIS的插件;另一种就是基于QGIS的C API开发独立应用程序。然而后者资…...
一篇了解模块打包工具之 ——webpack(1)
本篇采用问题引导的方式来学习webpack,借此梳理一下自己对webpack的理解,将所有的知识点连成一条线,形成对webpack的记忆导图。 最终目标,手动构建一个vue项目,目录结构参考vue-cli创建出来的项目 一、问问题 1. 第…...
k8s学习之路 | Day16 k8s 中的容器初探
文章目录容器镜像镜像名称镜像拉取策略私有仓库的拉取策略容器的环境变量和启动命令容器的环境变量容器的启动命令容器的生命周期钩子postStartpreStop容器的探针startupProbelivenessProbereadinessProbek8s 集群中最小的管理单元就是一个Pod,而Pod里面才是容器&am…...
export、import、commit、save、load的区别
目录1. docker export 和 docker import2. docker commit3.docker save 和 docker load1. docker export 和 docker import docker export 容器ID/容器Name > xxx.tar 导出一个容器快照 docker import xxx.tar NewImageName:tag 导入一个容器快照到本地镜像库 适用场景&a…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
