TVM将深度学习模型编译为WebGL

使用TVM将深度学习模型编译为WebGL

TVM带有全新的OpenGL / WebGL后端!

OpenGL / WebGL后端

TVM已经瞄准了涵盖各种平台的大量后端:CPU,GPU,移动设备等。这次,添加了另一个后端:OpenGL / WebGL。

OpenGL / WebGL使能够在未安装CUDA的环境中利用GPU。在浏览器中使用GPU的方法。

后端允许以3种不同的方式使用OpenGL / WebGL:

  • 本地OpenGL:可以将深度学习模型编译为OpenGL,完全使用Python在本地计算机上直接运行。
  • 带有RPC的WebGL:可以将深度学习模型编译到WebGL中,通过Emscripten(带有JavaScript主机代码和WebGL设备代码)将其导出为共享库。通过RPC将该库部署到在浏览器中运行的TVM JavaScript运行时系统上。
  • 带有静态库的WebGL:可以将深度学习模型编译到WebGL中,将其与TVM JavaScript运行时系统链接,然后导出整个程序包。在浏览器上的网页中运行该模型,而无需依赖。详细流程如图1所示。

依靠Emscripten及其fastcomp LLVM后端来生成javascript后端。

TVM将深度学习模型编译为WebGL

 

 图1

与X有何不同?

在浏览器上运行神经网络并不是一件新鲜事。例如安德烈·卡帕蒂(Andrej Karpathy)的ConvNetJS 和Google的DeepLearning.JS

带WebGL的TVM的独特之处是什么?最大的区别是TVM中的op内核是自动编译的,而不是手写的。如图2所示,TVM利用统一的AST定义内核,将其编译为在不同平台上进行编码。

TVM将深度学习模型编译为WebGL

 

 图2

表明:

  • 将现有模型部署到WebGL,无需编写大量其他代码。NNVM / TVM模型定义对于所有目标都是相同的,只需要将其编译为新目标即可。
  • 要添加一个新的op内核,只需要在TVM中定义一次,而不是为每个目标实现一次。无需知道如何编写GLSL代码,即可向WebGL添加新的操作内核!

基准benchmark

为典型的工作负载执行基准测试:使用resnet18进行图像分类。

5岁的笔记本电脑,该笔记本电脑具有8核Intel®Core™i7-3610QM和GTX650M。

在此基准测试中,从Gluon模型动物园下载了一个resnet18模型,对猫图像进行了端到端分类。仅测量模型执行时间(没有模型/输入/参数加载),每个模型运行100次以获取平均值。结果如图3所示。

TVM将深度学习模型编译为WebGL

 

 图3

基准测试有4种不同的设置:

  • CPU(LLVM):将模型编译为LLVM IR和JIT。完全在CPU上运行。
  • OpenCL:将模型编译到OpenCL中。仍然有一些胶水glue代码已编译到LLVM,负责设置和启动OpenCL内核。在本地计算机上运行。
  • OpenGL:与OpenCL相同,但编译为OpenGL。
  • WebGL:粘合代码被编译为LLVM,使用Emscripten的Fastcomp LLVM后端转换为JavaScript。设备代码被编译为WebGL。在Firefox中执行模型。

上面的结果可以看出,TVM OpenGL后端具有与OpenCL相似的性能。更有趣的是,浏览器中的WebGL版本,并不比台式机OpenGL慢得多。考虑到宿主代码是JavaScript,非常令人惊讶。可能是由于Emscripten生成了asm.js,在Firefox中进行重大优化。

这是将深度学习模型自动编译到Web浏览器中的第一步。随着将优化引入TVM堆栈,会有有更多的性能改进。

上一篇:逆向工程-- 二进制文件转换为 LLVM IR llvm-mctoll


下一篇:LLVM编译器架构