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.mzph.cn/pingmian/59807.shtml

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

相关文章

深究JS底层原理

一、JS中八种数据类型判断方法 在JavaScript中,数据类型分为两大类:基本(原始)数据类型和引用(对象)数据类型。 基本数据类型(Primitive Data Types) 基本数据类型是表示简单的数…

ssm071北京集联软件科技有限公司信息管理系统+jsp(论文+源码)_kaic

毕 业 设 计(论 文) 题目:北京集联软件科技有限公司信息管理系统 \ 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本信息…

Yocto 项目下通过网络更新内核、设备树及模块

Yocto 项目下通过网络更新内核、设备树及模块 前言 在 Yocto 项目的开发过程中,特别是在进行 BSP(Board Support Package)开发时,经常需要调整特定软件包的版本,修改内核、设备树以及内核模块。然而,每次…

k8s集群安装(kubeadm)

k8s集群安装(kubeadm) 1、环境准备(master和node节点都执行)1.1、替换yum源1.2、关闭selinux1.3、永久关闭防火墙1.4、永久关闭swap1.5、修改主机名添加host1.6、时间同步1.7、将桥接的IPv4流量传递到iptables的链1.8、docker安装…

Ubuntu 修改时区 同步时间

Ubuntu 修改时区 同步时间 1、设置系统时区为中国上海2、更新软件包列表3、安装 ntpdate 工具4、从阿里云 NTP 服务器同步时间5、将系统时间同步到硬件时钟6、读取硬件时钟时间 1、设置系统时区为中国上海 timedatectl set-timezone Asia/Shanghai2、更新软件包列表 apt upda…

什么是JVM实现

JVM(Java Virtual Machine,Java虚拟机)实现是指将JVM规范转化为具体可执行代码的过程和结果。JVM规范定义了Java虚拟机应该具备的功能、行为以及与其他组件的交互方式,但它本身并不包含具体的实现代码。因此,不同的组织…

【日常问题排查小技巧-连载】

线上服务CPU飙高排查 先执行 top,找到CPU占用比较高的进程 id,(比如 21448) jstack 进程 id > show.txt(jstack 21448 > show.txt) 找到进程中CPU占用比较高的线程,线程 id 转换为 16 进…

您与此网站之间建立的连接不安全解决方法

如果你打开网站,地址栏有警告,点进去是这样的提示:您与此网站之间建立的连接不安全,了解详细信息。 请勿在此网站上输入任何敏感信息(例如密码或信用卡信息),因为攻击者可能会盗取这些信息。 …

【与AI+】学习SAP开发有什么渠道可以推荐

前言:好的,我又将开辟一个新的专栏,这个专栏呢,就准备放一些我向AI提问的问题,以及AI的回答。因为感觉真的好方便哈哈哈~ 我不是很确定我的专栏文章内容是否涉及版权,以及也不确定这些整合过的文字是否涉嫌…

江苏博才众创科技产业园集团拟投资10亿元在泰兴打造汽车零部件产业园

2024年11月7日,泰兴市高新技术产业开发区与江苏博才众创科技产业园集团举行新能源汽车零部件智能制造产业园项目签约仪式。 泰兴市高新区党工委委员、管理办副主任王峰表示:高新区是全市项目建设的主阵地,近年来聚焦高端化、智能化、绿色化&a…

Flutter 的 Widget 概述与常用 Widgets 与鸿蒙 Next 的对比

一、Flutter 的 Widget 概述 Flutter 是 Google 开发的一款开源 UI 框架,旨在帮助开发者快速构建高性能、高保真度的移动、Web 和桌面应用程序。在 Flutter 中,UI 的构建完全是通过 Widget 来实现的。Widget 是 Flutter 中所有用户界面元素的基础构建块…

【python】Flask

文章目录 1、Flask 介绍2、Flask 实现网页版美颜效果3、参考 1、Flask 介绍 Flask 是一个用 Python 编写的轻量级 Web 应用框架。它设计简单且易于扩展,非常适合小型项目到大型应用的开发。 以下是一些 Flask 库中常用的函数和组件: 一、Flask 应用对…

FastAPI —— 请求参数验证

1.hello world 给后端船数据 hello world 接口给后端传 COVID-19 感染数据_高性能 FastAPI 框架入门精讲-慕课网 #!/usr/bin/python3 # -*- coding:utf-8 -*- # __author__ __Jack__from typing import Optionalfrom fastapi import FastAPI from pydantic import BaseModel…

产品经理如何使用项目管理软件推进复杂项目按时上线

前言 相信很多产品同学或多或少都有过这样的经历:平时没有听到任何项目延期风险,但到了计划时间却迟迟无法提测……评审时没有任何argue,提测后发现开发的功能不是自己想要的……费劲九牛二虎之力终于让项目上线了,然而发现成果达…

新系统如何进行模型环境配置

在机器学习和深度学习中,一个良好的开发环境能够显著提高工作效率。本篇博客将详细介绍如何在新的Linux系统(以Ubuntu为例)上进行模型环境的配置,包括基础系统设置、Python虚拟环境搭建、常用库的安装以及GPU驱动和CUDA的安装等。…

机器视觉:轮廓匹配算法原理

轮廓匹配的模板变量主要包括模板图像(Template)和待检测图像(Source Image) 在轮廓匹配中,模板变量主要包括一下几个关键部分: ‌模板图像(Template)‌:这是进行匹配的…

OpenAI大事记;GPT到ChatGPT参数量进化

目录 OpenAI大事记 GPT到ChatGPT参数量进化 OpenAI大事记 GPT到ChatGPT参数量进化 ChatGPT是从初代 GPT逐渐演变而来的。在进化的过程中,GPT系列模型的参数数量呈指数级增长,从初代GPT的1.17亿个参数,到GPT-2的15 亿个参数,再到 GPT-3的1750 亿个参数。模型越来越大,训练…

STM32移植RT-Thread---时钟管理

一RTT时钟节拍概念 RT-Thread的时钟节拍(Tick)是操作系统用于管理时间和任务调度的一个基本单位。它在实时操作系统中尤为关键,用于实现任务的延时、超时管理等功能。以下是关于RT-Thread时钟节拍的简单说明: 1.Tick定义&#x…

Am I Isolated:一款安全态势基准测试工具

基于Rust的容器运行时扫描器作为一个容器运行,检测用户容器运行时隔离中的漏洞。 它还提供指导,帮助用户改善运行时环境,以提供更强的隔离保证。 容器的现状是它们并不包含(隔离)。 容器隔离的缺失在云原生环境中有…

SQLite的BLOB数据类型与C++二进制存储学习记录

一、BLOB数据类型简介 Blob(Binary Large Object)是一种用于存储二进制数据的数据类型,在数据库中常用于存储图片、音频和视频等大型(大数据量)的二进制数据[1-2]。需要注意的是,SQLite中BLOB类型的单对象最…