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

TVM计算图分割--分割方式

文章目录

  • TVM中的计算图分割方式
      • 1. Partition Pass
      • 2. dataflow_pattern
      • 3. 内置图分割接口
      • 4. Pipeline Executor
      • 5. BYOC框架
      • 6. UMA

深度学习模型通常是用计算图来表示的。计算图是一种有向无环图,其中节点代表算子,表示一个操作,节点之间的边表示算子之间的数据依赖。计算图分割是指将计算图按照所属执行平台划分为若干个子图,每个子图分别执行在对应硬件上,以最大化值执行效率。

TVM中的计算图分割方式

1. Partition Pass

TVM中的所有涉及计算图分割的方式底层实现都是通过Partition Pass来实现的。因为在TVM中,计算图是通过Relay表示的,封装为IRModule对象。计算图分割操作是以IR上的优化Pass实现的。经过Partition Pass之后的子图会包装为复合函数并在原始IRModule中以函数调用的方式出现。
在这里插入图片描述

2. dataflow_pattern

TVM的前端接口还提供了一组算子匹配函数封装在dataflow_pattern中,可以按照制定的pattern匹配子图,并且封装了分割函数可以把匹配的子图划分出来。
在这里插入图片描述

dataflow_pattern还可以进一步做子图rewrite。具体参考:
https://tvm.apache.org/docs/reference/langref/relay_pattern.html
https://tvm.apache.org/docs/reference/api/python/relay/dataflow_pattern.html

3. 内置图分割接口

这些内置的接口都对应着一个明确的后端硬件,其实现过程还是基于BYOC框架完成的。

# 这种内置的接口实质是基于BYOC框架实现的
# ACL
from tvm.relay.op.contrib.arm_compute_lib import partition_for_arm_compute_lib
module = partition_for_arm_compute_lib(module)

# TensorRT
from tvm.relay.op.contrib.tensorrt import partition_for_tensorrt
mod, config = partition_for_tensorrt(mod, params)

#Vitis
from tvm.relay.op.contrib.vitis_ai import partition_for_vitis_ai
mod = partition_for_vitis_ai(mod, params, dpu=dpu_target)

4. Pipeline Executor

使用graph_split的分割方式是把relay表示的计算图(一个IRModule)分割为两个子计算图即两个IRModule。与普通Relay表示的计算图一样,只不过是编译需要pipeline_executor_build对象。该分割方式不涉及后端执行平台的信息。

# 自定义逻辑拆分
from test_pipeline_executor import graph_split

split_config = [{
   "op_name": "nn.relu", "op_index": 0}]
subgraphs = graph_split(net["main"], split_config, params)
mod0, mod1 = subgraphs

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

相关文章:

  • 英伟达基于Mistral 7B开发新一代Embedding模型——NV-Embed-v2
  • ES6更新的内容中什么是proxy
  • MySQL-初识数据库
  • Go开发指南- Goroutine
  • Java I/O(输入/输出)——针对实习面试
  • JVM详解:类的加载过程
  • QT Widget:使用技巧
  • CSS3中的2D变换(位移、缩放、旋转、扭曲、多重变换、变换原点)
  • 公共命名空间:内置名
  • 技术速递|GitHub Copilot upgrade assistant for Java 技术预览发布!
  • 大数据专业为什么要学习Hadoop课程
  • 【C++】——继承
  • AWS EC2镜像费用详解:什么是免费的,什么是收费的?
  • 信息安全工程师(76)网络安全应急响应技术原理与应用
  • 【Vue】简易博客项目跟做
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十二:在屏幕上显示多路视频播放,可以有不同的分辨率,格式和帧率。
  • 高活跃社区 Doge 与零知识证明的强强联手,QED 重塑可扩展性
  • Programming language theory 编程语言理论-05-curring 柯里化
  • UniTask/Unity的PlayerLoopTiming触发顺序
  • c语言--数组
  • Linux命令学习,diff 命令
  • <数据集>草莓叶片病害识别数据集<目标检测>
  • Kafka经典面试题
  • 品牌与 ASO – 品牌搜索对 ASO 的影响
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码,AVPacket 重要函数,结构体成员学习
  • AI周报(11.3-11.9)