将TVM集成到PyTorch上
随着TVM不断展示出对深度学习执行效率的改进,很明显PyTorch将从直接利用编译器堆栈中受益。PyTorch的主要宗旨是提供无缝且强大的集成,而这不会妨碍用户。为此,PyTorch现在具有基于TVM的官方后端torch_tvm。
用法很简单:
import torch_tvm
torch_tvm.enable()
PyTorch将尝试在其JIT编译过程中,将所有可能的运算符转换为已知的Relay运算符。
背景
与许多其他ML框架不同,PyTorch公开了一个渴望执行的编程接口。这种编程风格避免了基于图的元编程,而专注于以Python方式直接控制n维数组(张量)。因此,该框架最初非常适合模型的试验和开发,但不适用于自动性能优化或部署。为了利用优化的编译器技术,PyTorch引入了一些较大的更改来解决此问题。
PyTorch 1.0引入了PyTorch IR,PyTorch专用的中间表示形式,用于类似于Relay的模型。可以通过模型跟踪将PyTorch程序转换为IR,该跟踪记录模型或Python的子集TorchScript的执行。新的TVM后端将PyTorch的IR降低到了Relay,并能够透明地提高PyTorch的性能,而无需用户参与。
整合与结果
为了支持Relay,PyTorch JIT添加了两个功能:自定义转换过程和自定义子图解释器。
当torch_tvm启用时,可以转换到中继PyTorch IR的子图Expr旨意被标记为继电器兼容。由于PyTorch IR并不总是包含形状信息,因此在调用之前,无法以有用的方式编译任何子图。
在用户调用期间,PyTorch JIT运行时将确定输入形状信息,并使用新的Relay C ++构建系统编译先前标记的子图。根据输入形状来缓存编译,以供后续运行。可以在README中找到更多详细信息。
torch_tvm建立了一个连续的基准测试系统,该系统正在监视ResNet18在CPU上的性能。对于各种ResNet型号,TVM的性能都是默认PyTorch JIT后端的两倍以上。在AWS c5n.4xlarge实例上使用16个线程实现的每秒迭代次数(越大越好)。
这些结果令人鼓舞,该项目将继续致力于,在更多模型上提高CPU推理速度。
未来的工作
现在,PyTorch JIT进行了大量工作来查找其IR的纯功能子集,以馈送到Relay。这避免了将别名和控制流信息映射到中继的需要,但这不是必需的。将更多的PyTorch IR映射到Relay可能会取得性能上的胜利,这是该项目的目标。PyTorch IR在开发过程中正在迅速变化,因此必须谨慎进行。
将做更多的工作来确保PyTorch和TVM代码之间的切换是有效的。这包括统一线程模型,分配器以及减少与将输入复制到TVM相关的开销。
解析
如果已经编写了PyTorch模型,最简单的入门方法就是使用torch.jit.trace以下方法
import torch_tvm
from your_model import model, inputs

torch_tvm.enable(opt_level=3)

iters = 100
warmup = 10

Ensure your model is in eval mode and also turn off gradients.

with torch.no_grad():

Use tuned parameters for better performance.

with autotvm.apply_history_best(“test/autotvm_tuning.log”):
# This is where all the compilation happens.
trace_tvm = torch.jit.trace(model, inputs)

# Warmup
for _ in range(warmup):_ = trace_tvm(*inputs)# Benchmark
start = time.time()
for _ in range(iters):_ = trace_tvm(*inputs)
tvm_time = time.time() - startprint("Took {}s to run {} iters".format(tvm_time, iters))

这段代码大部分来自Benchmarks.py。请注意,用于AVX2 LLVM编译的调整参数位于存储库test/文件夹中。
如果更直接使用Relay,可以通过(隐式)跟踪或TorchScript,直接从PyTorch函数中提取表达式:
def add(a, b, c):
return a + b + c

via tracing

relay_graph = torch_tvm.to_relay(add, inputs)

@torch.jit.script
def mul(a, b, c):
return a * b * c

via script

relay_graph = torch_tvm.to_relay(mul, inputs)

将TVM集成到PyTorch上相关推荐

  1. 将TVM集成到PyTorch

    将TVM集成到PyTorch 随着TVM不断展示出对深度学习执行效率的改进,很明显PyTorch将从直接利用编译器堆栈中受益.PyTorch的主要宗旨是提供无缝且强大的集成,而这不会妨碍用户.PyTo ...

  2. 如何在TVM上集成Codegen(上)

    如何在TVM上集成Codegen(上) 许多常用的深度学习内核,或者提供DNNL或TensorRT等框架和图形引擎,让用户以某种方式描述模型,从而获得高性能.此外,新兴的深度学习加速器也有自己的编译器 ...

  3. 在PyTorch上用Keras,分布式训练开箱即用,告别没完没了的Debug

    鱼羊 发自 凹非寺  量子位 报道 | 公众号 QbitAI 在开始一个新的机器学习项目时,难免要重新编写训练循环,加载模型,分布式训练--然后在Debug的深渊里看着时间哗哗流逝,而自己离项目核心还 ...

  4. TVM 优化 ARM GPU 上的移动深度学习

    TVM 优化 ARM GPU 上的移动深度学习 随着深度学习的巨大成功,将深度神经网络部署到移动设备的需求正在迅速增长.与桌面平台上所做的类似,在移动设备中使用 GPU 既有利于推理速度,也有利于能源 ...

  5. TVM在ARM GPU上优化移动深度学习

    TVM在ARM GPU上优化移动深度学习 随着深度学习的巨大成功,将深度神经网络部署到移动设备的需求正在迅速增长.与在台式机平台上所做的类似,在移动设备中使用GPU可以提高推理速度和能源效率.但是,大 ...

  6. 【组队学习】【29期】7. 集成学习(上)

    7. 集成学习(上) 航路开辟者:李祖贤.薛传雨.六一.杨毅远.陈琰钰 领航员:刘思含 航海士:李祖贤 基本信息 开源内容:https://github.com/datawhalechina/ense ...

  7. 【组队学习】【23期】Datawhale集成学习(上)

    集成学习(上) 开源内容:https://github.com/datawhalechina/team-learning-data-mining/tree/master/IntegratedLearn ...

  8. ElasticSearch集成SpringData史上最全查询教程

    ElasticSearch集成SpringData史上最全查询教程 1.简单介绍 springboot 使用springdata操作es,ElasticsearchRepository使用QueryB ...

  9. TVM:在树莓派上部署预训练的模型

    TVM:在树莓派上部署预训练的模型 之前我们已经介绍如何通过Python接口(AutoTVM)来编译和优化模型.本文将介绍如何在远程(如本例中的树莓派)上部署预训练的模型. 在设备上构建 TVM Ru ...

最新文章

  1. jQuery插件开发 - 其实很简单
  2. Windows 7 状态栏图标消失恢复
  3. More Effective C++: 01基础议题
  4. python 删除list中的第一个元素
  5. async/await 的基本实现和 .NET Core 2.1 中相关性能提升
  6. Java获得时间 String与Timestamp互转
  7. 立冬节气,设计师需要的PNG素材已为你备好
  8. matlab中常微分方法,MATLAB解常微分方程组的解法(好东西要共享)
  9. 围成一圈的排列组合问题_行测技巧:巧解环形排列组合
  10. 支持向量机很全的代码和数据集
  11. oracle regexp_instr,Oracle REGEXP_INSTR 用法
  12. 多元统计分析-联合分析
  13. windows设置自动获取IP地址
  14. 台达PLC与紫金桥监控组态软件的连接
  15. CNN之Xception Keras实现模型训练
  16. commitizen和cz-customizable配置git commit message
  17. CVPR2022论文集锦 | CVPR2022最新论文 | CVPR2022审稿结果 | CVPR2022录取结果
  18. 如何在 JavaScript 中检查数字是正数还是负数
  19. web项目中上传的图片项目重新部署之后被清空如何解决?
  20. SPSS数据类型学习

热门文章

  1. 本地打包Docker镜像上传至阿里云远程仓库(一站式脚本)
  2. Alibaba Cloud Linux 2.1903 LTS 64位服务器yum源下载404,Alibaba Cloud Linux 2实例中使用docker-ce、epel等YUM源安装软件失败
  3. ssh(Struts+spring+Hibernate)三大框架整合-简述
  4. 2022-2028年中国软件测试行业市场研究及前瞻分析报告
  5. GCC 编译 C++ 程序分步骤流程(预处理 gcc -E、编译 gcc -S、汇编 gcc -c 和链接 gcc 以及 gcc -o 选项)
  6. centos使用yum快速安装java的方法
  7. 提高班第三周周记(中秋第一天)
  8. LeetCode简单题之两个数组的交集 II
  9. ONNX MLIR应用示例(含源码链接)
  10. Camera噪声问题