当前位置: 首页 > article >正文

TVM计算图分割--LayerGroup

文章目录

    • 介绍
    • Layergroup调研
        • TVM中的Layergroup
          • TVM Layergroup进一步优化
          • MergeCompilerRegions处理菱形结构
          • TVM中基于Pattern得到的子图
        • TPUMLIR
        • 地平线的Layergroup

介绍

Layergroup目前没找到严格、明确的定义,因为不同厂家的框架考虑的因素不同,但是基本逻辑是差不多的。一般来说,Layergroup是一种计算图优化方法,旨在根据约束条件将若干层(算子)组合起来形成一个复合算子以满足后端需要。而计算图分割是针对异构执行环境的计算图优化操作,与Layergroup没有绝对的关系。一般由于专属硬件的资源受限,所以会执行layergroup操作。

这里需要解释以下算子融合和Layergroup的区别。这两者很多时候是被混用的,所以说layergroup没有明确的定义。其实二者还是有差别的。首先,二者的作用都是将计算图中若干连续算子组合为一个大的复合算子,利用局部性原理,提升算子访存命中率,减少输入输出数据访存次数以提高性能。其中,算子融合更侧重于细节的优化,一般会对几个算子先做代数上的融合操作,去掉一些中间变量,简化计算过程等;然后针对代数公式,结合硬件约束优化kernel,比如内存的复用、多线程、流水线等。但是由于硬件的约束,代数上可等价替换的,工程实现上却不容易实现,所以大多数AI框架可以融合的算子并不多。但TVM不同,由于TVM引入了计算调度分离策略以及其强大的Codegen,TVM可以为并不同后端生成较多的融合算子。至于Layergroup,没有太多的代数优化,主要的作用就是根据后端约束(内存占用大小和占用时长),将若干连续算子封装为一个复合算子,整体只做一次内存读写操作,同时控制了复合算子的大小,降低kernel调用时的负载。layergroup中的算子还是Primmitive级别的,没有被修改。对于Layergroup得到的复合算子,需要Runtime和复合算子库的配合处理。


http://www.kler.cn/a/385799.html

相关文章:

  • 动态规划-完全背包问题——322.零钱兑换
  • 《C语言程序设计现代方法》note-5 数组
  • vue之axios根据某个接口创建实例,并设置headers和超时时间,捕捉异常
  • 逆向攻防世界CTF系列37-crackme
  • 控制器ThinkPHP6
  • 网络基础(4)传输层
  • 大数据 ETL + Flume 数据清洗 — 详细教程及实例(附常见问题及解决方案)
  • gazebo仿真时xyz如何填写
  • AI赋能·创新视界——冠捷科技集团亮相第七届中国国际进口博览会
  • 无人机通信新宠 - SX1276
  • UDP协议:报文结构和注意事项
  • cesium 设置相机视角 flyTo 参数destination,orientation
  • 【算法】【优选算法】滑动窗口(上)
  • 几个docker可用的镜像源
  • Unexpected response code: 400解决
  • python 爬虫 入门 六、Selenium
  • 【网络安全】开发中存在的重定向与Referer问题
  • 【MySQL 保姆级教学】深层理解索引及特性(重点)--下(12)
  • lua入门教程:math
  • 麻省理工学院的研究人员最近开发了一种新的机器人训练方法
  • 互联网技术净土?原生鸿蒙开启全新技术征程
  • Tomcat中如何指定JDK版本
  • node.js版本管理工具nvm
  • 【dvwa靶场:XSS系列】XSS (DOM) 低-中-高级别,通关啦
  • ARM64的Mac Node.js前置工作,nvm在线安装
  • JVM中对象在堆中的生命周期?