摘要:Host调度模式下,GE将模型中算子的执行单元划分为Host CPU执行与Device(昇腾AI处理器)执行两大类。

本文分享自华为云社区《深度解读昇腾CANN小shape算子计算优化技术,进一步减少调度开销》,作者:昇腾CANN。

GE(Graph Engine)将模型的调度分为Host调度与下沉调度两种模式。经过上期的介绍我们知道,在模型为静态shape时,由于其输入tensor shape固定不变,在编译时就能确定所有算子的输入输出shape,并能提前完成模型级内存编排、tiling计算等Host调度工作,因此采用模型下沉调度方式可以将整个模型下沉到Device侧执行,从而提升模型调度性能。

与之对应的,在模型为动态shape的情况下,由于输入tensor shape不确定,需要在上一个算子完成shape推导后,才能确定下一个算子的输入shape等信息,因此无法将整个模型下沉执行,只能采用Host调度模式。

1 Host调度简介及优化背景

所谓Host调度,是指模型的调度主体位于Host CPU,由CPU完成逐算子调度。一个算子的调度任务为kernel执行准备必要参数,通常包含shape推导、tiling、内存分配、launch等。

Host调度模式下,GE将模型中算子的执行单元划分为Host CPU执行与Device(昇腾AI处理器)执行两大类。对于卷积、MatMul等对算力要求高的算子,会被划分到Device执行;而由于shape信息在Host CPU维护,Shape、Reshape等算子更适合被划分到Host CPU执行;除此之外,还有一些算子,在shape较小时,计算量也很小,调度开销往往大于算子的实际计算开销,就需要考虑如何尽可能减少调度开销带来的性能影响。

图1 网络拓扑片段

图1是一段网络拓扑片段示例,按照一般的调度机制,Gather、Concat算子会下沉到Device侧计算,Shape、Unsqueeze、Reshape算子在Host侧计算。其执行时序如图2所示,模型E2E执行耗时除了包含算子计算的时间外,还包含Host与Device之间的数据拷贝、算子下沉调度、Stream同步等开销,整体执行E2E耗时在毫秒级别。

图2 优化前执行时序

而对于小shape(如shape size小于8)的Gather、Concat,算子本身在Host侧CPU的计算开销上仅微秒级别,与Device侧计算的性能相差无几。此时下发带来的额外开销就显得比较明显。针对上述这种shape较小且输入Tensor内存在Host的场景,GE识别将这部分算子保留在Host侧执行,可有效减少调度开销带来的性能影响。

2 小shape算子计算优化实现

在图编译流程执行到引擎选择之后,GE选择在Host侧执行的算子并将其作为锚点,然后向后递归查找计算数据个数小于8的算子,并将这些算子的执行引擎修改为Host CPU。针对图1所示的网络片段,假设shape算子的输出的shape size小于8,则Gather、Concat算子的执行引擎都会被刷新成Host CPU。优化后执行时序如图3所示,此时模型执行只有算子计算带来的开销,经测试约为10微秒(3ms –> 10us),显著的提高了E2E执行性能。

图3 优化前后执行前后时序对比

3 优化效果

以LLaMA2大语言推理模型为例,符合上述执行引擎刷新的算子有Pack、Gather、Concat等约650+个,刷新前模型E2E耗时约1.062S,刷新后执行时间优化到了1.009S,吞吐提升5%。

4 更多介绍

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

点击关注,第一时间了解华为云新鲜技术~

深度解读昇腾CANN小shape算子计算优化技术,进一步减少调度开销的更多相关文章

  1. 一键抠除路人甲,昇腾CANN带你识破神秘的“AI消除术”

    摘要:都说人工智能改变了生活,你感觉到了么?AI的魔力就在你抠去路人甲的一瞬间来到了你身边.今天就跟大家聊聊--神秘的"AI消除术". 引语 旅途归来,重温美好却被秀丽河山前的路人 ...

  2. 开发实践丨昇腾CANN的推理应用开发体验

    摘要:这是关于一次 Ascend 在线实验的记录,主要内容是通过网络模型加载.推理.结果输出的部署全流程展示,从而快速熟悉并掌握 ACL(Ascend Computing Language)基本开发流 ...

  3. 我就是认真:Linux SWAP 深度解读(必须收藏)

    我就是认真:Linux SWAP 深度解读(必须收藏) http://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651660097& ...

  4. 深度解读 AlphaGo 算法原理

    http://blog.csdn.net/songrotek/article/details/51065143 http://blog.csdn.net/dinosoft/article/detail ...

  5. 【转载】深度解读 java 线程池设计思想及源码实现

    总览 开篇来一些废话.下图是 java 线程池几个相关类的继承结构: 先简单说说这个继承结构,Executor 位于最顶层,也是最简单的,就一个 execute(Runnable runnable) ...

  6. Java并发指南12:深度解读 java 线程池设计思想及源码实现

    ​深度解读 java 线程池设计思想及源码实现 转自 https://javadoop.com/2017/09/05/java-thread-pool/hmsr=toutiao.io&utm_ ...

  7. 干货来了!2019阿里云合作伙伴峰会SaaS加速器专场回顾合集:嘉宾分享、深度解读

    2019年7月26日,在上海举办的阿里云合作伙伴峰会上,阿里云正式发布SaaS生态战略,计划用阿里云的品牌.渠道.资本.方法论.技术加持伙伴,成就亿级营收独角兽. 该生态战略计划招募10家一级SaaS ...

  8. .NET 5 Preview 1的深度解读和跟进

    这几天微软.NET 团队发布了.NET 5 Preview-1, 如约而至.很兴奋,因为.NET Core和.NET Framework终于实现了大一统,同时也很期待,期待.NET 5能给我们带来哪些 ...

  9. AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(上篇)

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 张钦坤 腾讯研究院秘书长蔡雄山 腾讯研究院法律研究中心副主任祝林华 腾讯研究院法律研究中心助理研究员曹建峰 腾讯研究院法律研究中心高级研究员 ...

  10. 如何用区块链技术解决信任问题?Fabric 架构深度解读

    阿里妹导读:区块链技术,随着比特币的兴起而为大家所知.但是具体到技术本身,大家相对熟悉的几个词可能是“数据不可篡改”.“公开链”.“分布式数据”.“共识机制”等. 这篇文章将抛砖引玉,通过深度解读Hy ...

随机推荐

  1. base64图片文件上传OSS,下载OSS图片转换为InputStream,文件转base64,base64转文件工具类

    base64图片文件上传OSS,下载OSS图片转换为InputStream,文件转base64,base64转文件工具类 OSSUtils.java public class OSSUtils { p ...

  2. hibernate映射对照表

    2.3. Basic Types Basic value types usually map a single database column, to a single, non-aggregated ...

  3. 08-Python迭代器与生成器

    迭代器 什么是迭代器 迭代是Python最强大的功能之一,是访问序列中元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器 ...

  4. php常用缓存逻辑

    代码 //行为限频 if (!function_exists('doSomethingLimit')) { function doSomethingLimit($key, $second, Closu ...

  5. 从PDF到OFD,国产化浪潮下多种文档格式导出的完美解决方案

    前言 近年来,中国在信息技术领域持续追求自主创新和供应链安全,伴随信创上升为国家战略,一些行业也开始明确要求文件导出的格式必须为 OFD 格式.OFD 格式目前在政府.金融.税务.教育.医疗等需要文件 ...

  6. 【Hadoop报错】The directory item limit is exceeded: limit=1048576 items=1048576

    问题描述: 调度系统执行hive任务失败,一直执行失败,报错如下: java.io.IOException: java.net.ConnectException: Call From #HostNam ...

  7. Java 集合元素排序接口Comparable

    什么是Comparable public interface Comparable<T> { /** * Compares this object with the specified o ...

  8. Spring里面bean的依赖和继承

    继承 bean继承:两个类之间大多数的属性都相同,避免重复配置,通过bean标签的parent属性重用已有的Bean元素的配置信息 继承指的是配置信息的复用,和java类的继承没有关系 video.j ...

  9. javascript深入参数传递

    我们都知道javascript的基础数据类型有: Undefined . Null . Boolean . Number . String . 如果从一个变量向另一个变量复制基本类型的值,会在变量对象 ...

  10. P1006

    前面事情太多了,所以搁了很多的题没做 第一个不容易想的点就是这两条路是不会重叠的,所以可以转化成两条都从原点出发不相交的路径 第二点就是该如何去表示这两种路径,第一种是用四维数组存位置(这里非法解的递 ...