深度解读昇腾CANN计算图优化技术,提升算法计算效率

news2024/11/27 6:41:08

随着大模型时代的到来,AI算法的能力上限不断被刷新,算力门槛也在持续飙升,如何在有限的计算资源的条件下优化和训练模型显得尤其重要。面向计算图编译和运行优化场景,昇腾AI异构计算架构CANN(Compute Architecture for Neural Networks)开放GE(Graph Engine)图引擎,通过计算图优化、计算图下沉、内存复用和多流水并行等技术可将计算图执行性能提升20%,同时开放图引擎接口支持开发者自定义图结构,获得最优执行性能。

基于GE图引擎能力,昇腾已支持TensorFlow计算图模式,并原生支持PyTorch框架。开发者只需要使用PyTorch原生的torch.compile接口,昇腾AI处理器后端就会对PyTorch生成的计算图进行接管、转化为AIR,再进行端到端的图编译深度优化,降低内存需求、提升计算性能,同时最大程度减少开发者的修改工作。接下来,我们将分几期内容深度解读CANN的GE图引擎的诸多开放能力和关键技术,从而帮助开发者优化算法编译和运行效率。

1 Eager模式与图模式

当前业界主流的深度学习框架(例如PyTorch、TensorFlow等)都提供了Eager(Eager Execution,即时执行)模式与图模式。Eager模式的特点是每个计算操作下发后立即执行,图模式的特点是所有计算操作构造成一张图,以图的粒度下发执行。Eager模式的痛点在于没有图的全局视角,一些融合、优化手段无法高效开展。成图以后,编译器的视角更广,计算操作可以更好地化简、优化,从而获得更好的执行性能。

GE针对图进行了系列优化,包括通用的图优化技术“公共子表达式消除”、“剪枝”、“死边消除”,以及特有的Shape优化技术、内存优化技术等。下面对GE的图优化技术详细展开介绍。

2 GE支持通用图优化技术

2.1 常量折叠

常量折叠核心为在编译阶段直接计算并替换常量表达式的值,从而减少运行时的计算负担。例如,表达式2+3会在编译时被直接替换为5”,从而会减少图中节点的数量这种优化有助于减小模型体积提高执行效率和性能

一般来说,常量折叠的处理方式为:若某算子输入都是常量且可进行折叠,折叠后该算子与其Const输入都融合为一个Const,如下图所示。

 除此之外,GE还支持如下几类常量折叠相关优化。

  1. Shape计算类算子(如Shape、Rank、Size等)的常量折叠,当Shape计算类算子的输入Shape为静态时,可以将其计算结果替换为Const。
  2. Shape调整类算子(ExpandDims、Squeeze、Unsqueeze等)的优化。当Shape调整类算子的输入Shape为静态时,可以将其从图中删除。
  3. 所有输出均为空Tensor的算子。空Tensor的特点为Shape中包含0,意味着Tensor中无数据。因此可将其替换为Const,该Const仅用于承载描述原算子的输出Shape信息。

2.2 公共子表达式消除

公共子表达式消除识别图中相同的子表达式,将其合并为一份公共表达式,以便在后续计算时直接引用,而不需要重新计算。这样可以减少程序中重复计算的次数,提高程序的执行效率。

2.3 剪枝

GE支持在编译前指定输出节点,只保留对输出数据有贡献的节点,从而缩小模型大小,提升编译性能。如下图所示,若指定输出节点为NetOutput,则仅保留右边紫色底纹的小图。

2.4 死边消除

当图中存在条件控制算子(如If、Case等)时,会根据其输入中的条件(cond)判断走哪个分支。若cond在编译时已确定,即可明确所走的分支,此时可将不会走到的分支删除,从而减少算子编译、图编译耗时,这种删除冗余分支的情况称之为死边消除。

如上图所示,若cond输入为Const,则已经可以确定走右侧的then分支还是else分支。经过死边消除后的图如下所示。其中PartitionedCall代表一个局部调用,用于将子图调度起来。

3 GE特有的增强图优化技术

3.1 Shape优化技术

当整图或局部图Shape为静态时,GE有较大空间可以减少编译耗时,提升调度性能。比如使能更多的算子融合,使能更多的图裁剪优化,以及使能模型下沉调度,其性能相对于Host调度有较大优势,这个后续会有详细介绍。因此GE在增强图优化技术中,会通过下面介绍的各种技术手段将计算图shape优化成静态Shape。

3.1.1 常量折叠与InferShape协同

对于GE来说,除了常规的常量折叠外,还支持对Shape确定的算子进行折叠。在图模式下,Shape推导可以和常量折叠交替进行,直至无可常量折叠的节点。先看下不做协同技术的优化结果,假设先做InferShape再做常量折叠,Gather的indices输入为[1,0,2,3]):

上图的逻辑为对Data取Shape,用于对Data做Reshape操作。

  1. Data输出Shape为[3,4,5,6],经过Shape推导后,Reshape的输出shape为动态shape。
  2. 对Shape算子做常量折叠,得出中图。
  3. 对Gather算子做常量折叠,得出右图。此时Reshape输出为动态shape,此时Reshape的shape输入虽然是const,但因为缺少InferShape流程,Reshape及其下游算子仍为动态shape。

若常量折叠与InferShape协同工作,接上述图示,InferShape再次执行,如下图所示。 

  1. Reshape的shape输入为Const,因此对Reshape做InferShape得出输出Shape为[4,3,5,6],如左图所示。
  2. 对Reshape做常量折叠优化,继续对Cast做Infershape,得出输出Shape为[4,3,5,6],如右图所示,至此图中所有节点的Shape全部推导为静态Shape。 

3.1.2 对循环算子While的Shape推导

While算子的语义为按某种条件,将body子图中的算子循环计算。但因编译时循环条件往往并不确定,因此While算子的输出shape通常为动态Shape中的Unknown Rank(body中若有维度调整类算子,可能导致输出维度不确定)。

在GE中,对于While算子会多次推导body子图,将上一次推导的子图输出Shape作为子图输入Shape再次推导,直到两次推导的输出Shape一致,则认为Shape已经推导稳定,并将最后一次推导结果作为While算子的输出Shape。这种处理策略的好处是尽可能推导出更多信息。

例如,while算子的输出可能是静态Shape,这样可以促成模型走下沉调度,提升执行性能;也可能是动态Shape中的Unknown Shape(知道维度信息,但不知道轴信息),此时维度信息也是后续Shape推导的重要信息。

3.1.3 动态分档

在模型推理的场景中,有时候模型输入的数据批次大小BatchSize和图像分辨率大小ImageSize是无法固定的。比如智能交通的应用中,需要视频结构化的应用框架,往往需要先做人机非目标检测,再针对每一个行人、机动车、非机动车目标做相对应的属性识别。这类应用场景中,检测模型往往输入的个数不固定,检测到的目标分辨率大小不固定,因此相应的属性识别模型的输入也就不固定。此类场景对于BatchSize和ImageSize有Shape动态变化的需求,但通常其Shape是有变化规律的,如BatchSize一般有倍数关系。

因此,GE提供了动态分档能力,对于shape可变的输入tensor,以若干离散的固定shape进行替代,每次指定其中一个固定shape,并输入该shape大小的数据进行推理。

动态分档模型的优势在于,虽然模型输入shape是动态的,但是用户只需要加载一次模型,通过传入不同动态档位参数就可实现动态需求,在执行时,模型以静态模型下沉的方式执行,从而获得较好的调度性能。

动态分档示意图

  1. Data1是网络的原始输入,设置的shape值为最大档位值。
  2. Data2作为第二个输入,自动添加到Graph中,表示真实的档位值;
  3. 提供新算子MapIndex实现分档映射的作用,对于不同的BatchSize、ImageSize值,输出对应的index值(Scale值,0~N-1),作为case算子的index判断条件。

使用case算子,按照档位配置将原图复制为case的N个子图,根据步骤3的index选择相应Batch分支函数执行。

3.2 内存优化技术

Const节点一般用于保存权重,所需内存往往较大,为了降低Const在Host和Device上的内存占用,GE在图编译的过程中通过下述所示两个阶段对Const做去重。
1. 图优化过程中,通过内存比较的方式对相同value的Const仅保留其中一个。如下图所示,通过多级条件匹配,确定可以被删除的冗余Const。经过比对后,在图上可以删除冗余的Const,从而节省Host内存空间。 

2. 经过步骤1后,还存在某些因图结构因素(例如融合后可能导致成环)或者Shape描述不同而无法被删除的冗余Const。因此,在结束图优化后,将Const节点的权重整块拷贝到Device之前,若经过二进制比对后发现某些Const节点的权重相同,则这些Const节点可以共享内存,从而节省Device的内存空间。

4 更多介绍

GE计算图优化的相关技术的介绍就到这里,欢迎大家关注后续技术分享。如需获取更多学习资源请登录昇腾社区。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1874935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

餐饮点餐系统

餐饮点餐系统是一款为餐厅和顾客提供便捷点餐服务的在线平台。 1.DDL CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,username VARCHAR(50) NOT NULL UNIQUE COMMENT 用户名,password VARCHAR(255) NOT NULL COMMENT 密码,email VARCHAR(100) UNIQUE…

http服务网络请求如何确保数据安全(含python示例源码)

深度学习类文章回顾 【YOLO深度学习系列】图像分类、物体检测、实例分割、物体追踪、姿态估计、定向边框检测演示系统【含源码】 【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】 【深度学习】YOLOV8数据标注及模型训练方法整体流程…

命令行中关于windows hash md5 , mac hash md5 , linux hash md5 文件校验方式

md5, sha-1 ,sha256. windows certutil -hashfile filename md5certutil -hashfile filename sha1certutil -hashfile filename sha256macos 平台 md5 filenameshasum -a 1 filenameshasum -a 256 filenamelinux 平台 md5sum filenameshasum -a 1 fil…

菜籽桌面4.5.0~4.5.1常见问题解答

目录 如何刷机? 刷机失败? 无法方控? 无法画中画? 原车音乐跟我安装的音乐一起播放? 原车音乐停了,我安装的软件也跟着没声音了? 调节声音时忽大忽小? 怎么安装软件? 软件…

spring boot (shiro)+ websocket测试连接不上的简单检测处理

1、用前端连接测试的demo一切正常,但是到了项目中连接不上了 一开始以为是地址错,但是换了apifox测试也是不可以。 2、考虑是shiro进行了拦截了,所以就访问不到了地址,那么就放行。 3、再次用apifox测试,成功了。 当然…

Halcon 如何让图像自适应窗口

一 如何让图像自适应窗口 read_image(Image,1)get_image_size(Image,Width, Height)dev_close_window()dev_open_window(0,0,Width/2,Height/2,black,WindowHandle)dev_set_part(0,0,Height-800,Width-800)dev_display(Image)二 如何实现彩色图像转化为灰色图像 read_image(I…

Java nio 的线程通信机制线程通信Pipe

Java的Pipe是一种新的线程通信机制,传统的线程通信可以是通过共享内存的方式,socket等方式,而Pipe是通过Java NIO 通信的方式实现共享内存,优点类似于go语言的管道 先上代码 public static void main(String[] args) throws IOEx…

国外的Claude3.5 Sonnet Artifacts和国内的CodeFlying孰强孰弱?

在Claude 3.5 Sonnet发布后,最受大家关注的问题应该就是它在编写代码能力上的变化。 要知道在Claude3.0发布以来的这几个月就因为它的编写代码能力而一直受到人们的诟病。 那Anthropic这次终于是不负众望,在Claude 3.5 Sonnet中更新了一个叫做Artifact…

.net core 的 winform 的 浏览器控件 WebView2

在.NET Core WinForms应用程序中,没有直接的“浏览器控件”,因为WinForms不支持像WebBrowser控件那样的功能。但是,你可以使用WebView2控件,它是一个基于Chromium的浏览器内核,可以在WinForms应用程序中嵌入Web内容。 …

用英文介绍芝加哥(1):Making Modern Chicago Part 1 Building a Boomtown

Making Modern Chicago | Part 1: Building a Boomtown Link: https://www.youtube.com/watch?vpNdX0Dm-J8Y&listPLmSQiOQJmbZ7TU39cyx7gizM9i8nOuZXy&index4 Summary Summary of Chicago’s History and Development Urban Planning and Growth Chicago, often r…

新手入门爬虫:从零开始,轻松掌握网络数据采集技术(有实战)

在互联网高速发展的今天,数据已经成为了各行各业的重要资源。而爬虫作为一种特殊的程序,可以帮助我们快速地获取到大量的数据。本文将从零开始,带领大家了解爬虫的基本概念、原理以及实践操作,帮助新手轻松掌握网络数据采集技术。…

浅谈逻辑控制器之Switch控制器

浅谈逻辑控制器之Switch控制器 Switch Controller是Apache JMeter中一个强大的逻辑控制器,它允许用户基于特定的变量值或参数来控制哪些子采样器被执行。与简单地按照配置顺序执行的控制器不同,Switch Controller根据提供的“switch value”来决定执行哪…

行业推荐!IG5216量产工具下载,IG5216开卡软件分享

国内固态硬盘常用,且有量产工具流传出来的主控厂商包括慧荣、群联、点序、英韧、得一微、瑞昱、联芸、迈威、国科、华澜微等等。 每个主控需要用各自对应的量产工具,不同的量产工具支持的闪存颗粒也有差异,因此要根据固态硬盘实际的主控型号…

Charles抓包工具系列文章(三)-- 接口映射工具(Map Remote和Map Local)

一、背景 前文的http请求都是静态的,像compose a new request,仅适用于接口的自测。 回放repeat 一个 http 请求,也无法做到动态调试。 这里的动态还是静态,是站在客户端的角度,数据是实时的,可调试的。 …

【R语言】plot输出窗口大小的控制

如果需要输出png格式的图片并设置dpi,可采用以下代码 png("A1.png",width 10.09, height 10.35, units "in",res 300) 为了匹配对应的窗口大小,在输出的时候保持宽度和高度一致即可,步骤如下: 如上的“10…

Verilog进行结构描述(四):Verilog逻辑强度(strength)模型

目录 1.Verilog提供多级逻辑强度。2.基本单元强度说明语法3.信号强度值系统4.Verilog多种强度决断 微信公众号获取更多FPGA相关源码: 1.Verilog提供多级逻辑强度。 逻辑强度模型决定信号组合值是可知还是未知的,以更精确的描述硬件的行为。下面这些情…

【ONLYOFFICE深度探索】:ONLYOFFICE桌面编辑器8.1震撼发布,打造高效办公新境界

文章目录 一、功能完善的PDF编辑器:解锁文档处理新维度二、幻灯片版式设计:释放创意,打造专业演示三、改进从右至左显示:尊重多元文化,优化阅读体验四、新增本地化选项:连接全球用户,跨越语言障…

Redis--18--Redis Desktop Manage下载与安装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Redis Desktop Manage1.官网下载https://redis.io/insight/ 2.安装方法3.使用方法3.1.进入RedisDesktopManager的主界面3.2 新建连接3.3 支持操作 Redis Desktop Ma…

面试-JMM的内存可见性

1.JAVA内存模型 分析: 由于JVM运行程序的实体是线程,而每个线程创建时,JVM都会 为其创建一个工作内存(栈空间),用于存储线程私有的数据。而java内存模型中规定所有变量都存储在主内存中。主内存是共享内存区域,所有线程都可以访问…

标准版回收站的商品怎么删除?

管理后台/维护/数据维护/清除数据 里面就可以清空回收站的商品