将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启用时,可以转换到Relay PyTorch IR的子图Expr,旨意被标记为Relay 兼容。由于PyTorch IR并不总是包含形状信息,因此在调用之前,无法以有用的方式编译任何子图。
在用户调用期间,PyTorch JIT Runtime将确定输入形状信息,并使用新的Relay C ++构建系统,编译先前标记的子图。根据输入形状来缓存编译,以供后续运行。可以在README中找到更多详细信息。
torch_tvm建立了一个连续的基准测试系统,该系统正在监视ResNet18在CPU上的性能。对于各种ResNet型号,TVM的性能都是默认PyTorch JIT后端的两倍以上。下图详细描述了在AWS c5n.4xlarge实例上,使用16个线程实现的每秒迭代次数(越大越好):
这些结果令人鼓舞,该项目将继续致力于在更多模型上提高CPU推理速度。
未来的工作
现在,PyTorch JIT进行了大量工作来查找其IR的纯功能子集,馈送到Relay。避免了将采样和控制流信息映射到Relay,这不是必需的。将更多的PyTorch IR映射到Relay,可能会取得性能上的胜利,这是该项目的目标。PyTorch IR在开发过程中正在迅速变化,因此必须谨慎进行。
将做更多的工作来确保PyTorch和TVM代码之间的切换是有效的。这包括统一线程模型,分配器以及减少与将输入复制到TVM相关的开销。
help文件
如果已经编写了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))

注意,用于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的主要宗旨是提供无缝且强大的集成,而这不会妨碍用户.为此, ...

  2. 桥接PyTorch和TVM

    桥接PyTorch和TVM 人工智能最引人入胜的一些应用是自然语言处理.像BERT或GPT-2之类的模型及其变体,可以获住足够多的文本信息. 这些模型属于称为Transformers的神经网络类体系结 ...

  3. (!详解 Pytorch实战:①)kaggle猫狗数据集二分类:加载(集成/自定义)数据集

    这系列的文章是我对Pytorch入门之后的一个总结,特别是对数据集生成加载这一块加强学习 另外,这里有一些比较常用的数据集,大家可以进行下载: 需要注意的是,本篇文章使用的PyTorch的版本是v0. ...

  4. 陈天奇团队发布TVM:把深度学习部署到手机、树莓派等更多硬件

    本文来自AI新媒体量子位(QbitAI) △ 陈天奇,华盛顿大学计算机系博士生,此前毕业于上海交通大学ACM班.XGBoost.cxxnet等著名机器学习工具的作者,MXNet的主要贡献者之一. DM ...

  5. Pytorch实现MNIST(附SGD、Adam、AdaBound不同优化器下的训练比较) adabound实现

     学习工具最快的方法就是在使用的过程中学习,也就是在工作中(解决实际问题中)学习.文章结尾处附完整代码. 一.数据准备   在Pytorch中提供了MNIST的数据,因此我们只需要使用Pytorch提 ...

  6. TensorFlow与PyTorch模型部署性能比较

    TensorFlow与PyTorch模型部署性能比较 前言 2022了,选 PyTorch 还是 TensorFlow?之前有一种说法:TensorFlow 适合业界,PyTorch 适合学界.这种说 ...

  7. tvm模型部署c++ 分析

    tvm模型部署c++ 分析 tvm c++部署官方教程 https://github.com/apache/tvm/tree/main/apps/howto_deploy https://tvm.ap ...

  8. Meta 开移动端 AI 生成神器 PyTorch Live,打造人工智能驱动的移动体验

    整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 近日,PyTorch 开发者大会如期召开.在会上,Meta 发布了PyTorch Live,这是一套可以为移动端用户提供人工智能 ...

  9. 2022年了,PyTorch和TensorFlow选哪个?

    Datawhale推荐 作者:Ryan O'Connor,来源:机器之心 坊间传闻:「TensorFlow 适合业界,PyTorch 适合学界」.都 2022 年了,还是这样吗? 2022年了,你是选 ...

最新文章

  1. linux 排程命令,Ubuntu 排程設定 :Crontab 排程使用教學
  2. OpenCV-Python 雪花飘落特效
  3. 李宏毅深度学习——逻辑回归
  4. SAP UI5 应用开发教程之五十二 - 如何使用 SAP UI5 的标准控件结合 Cordova 插件调用手机摄像头进行条形码扫描
  5. Codeforces 920E-Connected Components? (set,补图,连通块)
  6. 股票实例_注意了!手中的股票涨停,但是却封不住反复打开,说明了什么?看懂持股不慌...
  7. 谈谈你对php的收获和不足,我的收获与不足
  8. .Net Core下使用MQTT协议直连IoT平台
  9. 国内成品油价近期历次调整一览
  10. java 实现验证码功能
  11. 简单又帅气的折纸机器人教程_几张纸做出帅气纸飞机,做法简单飞行速度超快,手工折纸飞机...
  12. Total Commander 常用快捷键
  13. 基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法
  14. VS SP6补丁安装失败解决方法(Visual Studio 6.0 Service Pack 6 Setup was not completed successfully.)
  15. 如何提高自己的工作能力 高效工作方法是绝效
  16. 青青草php,青青草原博客
  17. 显卡驱动程序如何更新
  18. Linux下parity联盟链的实现
  19. php更换wordpress用户头像,WordPress修改评论默认头像的方法
  20. 三星android pie更新,三星Android Pie更新路线图公布 Galaxy Note9需等明年二月

热门文章

  1. 基于Golang的对象序列化的程序包开发——myJsonMarshal
  2. 2022-2028年中国锂电池设备行业深度调研及投资前景预测报告
  3. c语言函数传参时候的类型强制装换
  4. 【机器学习】RNN循环神经网络
  5. VAE变分自编码器实现
  6. 自主数据类型:在TVM中启用自定义数据类型探索
  7. 视觉导航的神经拓扑SLAM
  8. Django 定义模型2.1
  9. HarmonyOS Text设置换行
  10. Android EditText 编辑框 获取焦点的方法