使用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后端。

图1

与X有何不同?

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

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

图2

表明:

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

基准benchmark

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

5岁的笔记本电脑,该笔记本电脑具有8核IntelCorei7-3610QM和GTX650M。

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

图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堆栈,会有有更多的性能改进。

TVM将深度学习模型编译为WebGL的更多相关文章

  1. 用 Java 训练深度学习模型,原来可以这么简单!

    本文适合有 Java 基础的人群 作者:DJL-Keerthan&Lanking HelloGitHub 推出的<讲解开源项目> 系列.这一期是由亚马逊工程师:Keerthan V ...

  2. CUDA上深度学习模型量化的自动化优化

    CUDA上深度学习模型量化的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参数 ...

  3. CUDA上的量化深度学习模型的自动化优化

    CUDA上的量化深度学习模型的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参 ...

  4. AI佳作解读系列(一)——深度学习模型训练痛点及解决方法

    1 模型训练基本步骤 进入了AI领域,学习了手写字识别等几个demo后,就会发现深度学习模型训练是十分关键和有挑战性的.选定了网络结构后,深度学习训练过程基本大同小异,一般分为如下几个步骤 定义算法公 ...

  5. 『高性能模型』Roofline Model与深度学习模型的性能分析

    转载自知乎:Roofline Model与深度学习模型的性能分析 在真实世界中,任何模型(例如 VGG / MobileNet 等)都必须依赖于具体的计算平台(例如CPU / GPU / ASIC 等 ...

  6. 深度学习模型stacking模型融合python代码,看了你就会使

    话不多说,直接上代码 def stacking_first(train, train_y, test): savepath = './stack_op{}_dt{}_tfidf{}/'.format( ...

  7. 深度学习模型融合stacking

    当你的深度学习模型变得很多时,选一个确定的模型也是一个头痛的问题.或者你可以把他们都用起来,就进行模型融合.我主要使用stacking和blend方法.先把代码贴出来,大家可以看一下. import ...

  8. 利用 TFLearn 快速搭建经典深度学习模型

      利用 TFLearn 快速搭建经典深度学习模型 使用 TensorFlow 一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章<Tenso ...

  9. Roofline Model与深度学习模型的性能分析

    原文链接: https://zhuanlan.zhihu.com/p/34204282 最近在不同的计算平台上验证几种经典深度学习模型的训练和预测性能时,经常遇到模型的实际测试性能表现和自己计算出的复 ...

随机推荐

  1. 多维数据处理之主成分分析(PCA)

    在灵巧手与假手理论中,为了研究人手的运动协同关系,需要采集各个关节的运动学量或者多个采集点的肌电信号,然而由于人手关节数目或者EMG采集点数量较多,加上多次采样,导致需要过多的数据需要处理.然而事实上 ...

  2. 【Set】Set集合求并集,交集,差集

    /** * @author: Sam.yang * @date: 2020/11/16 11:14 * @desc: Set集合操作工具类 */ public class SetOptUtils { ...

  3. 【docker-compose】docker-compose环境安装

    docker-compose: 是一个用于定义和运行多容器 Docker 的应用程序工具,可以帮助我们可以轻松.高效的管理容器 安装: 1.安装pip 工具-目的是为了下载docker-compose ...

  4. hdu4864 贪心

    题意:        给你n太机器,m个任务,每个任务和机器都有两个权值x,y,每个机器只能被一个任务使用,条件是机器的两个权值分别比任务的大于等于,每个任务获得的价值是x*500+y*2,问你最多能 ...

  5. 预防NSA勒索病毒攻击脚本

    预防445端口勒索病毒修复脚本 直接复制下去,创建一个文件,名字随意后缀是.bat,然后双击就可以了(如果提示拒绝访问,就直接右键管理员,尤其是Win8 Win10). :+添加关键注册表以及停掉并且 ...

  6. [CTF]摩斯电码

    摩尔斯电码 -----------转载 https://morse.supfree.net/ 摩尔斯电码定义了包括:英文字母A-Z(无大小写区分)十进制数字0-9,以及"?"&qu ...

  7. <JVM下篇:性能监控与调优篇>补充:使用OQL语言查询对象信息

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  8. 『政善治』Postman工具 — 10、Postman中对Cookie的操作

    目录 1.往常的Cookie处理方式 2.Postman中的Cookie管理机制 3.自定义Cookie管理内容 在接口测试中,某些接口的调用,需要带入已有Cookie,比如有些接口需要登陆后才能访问 ...

  9. OOP第二章博客

    OO第二次博客作业 (1)作业分析 三次作业在处理多线程的协同配合时都是使用将同步放在自己写的"线程安全类"(经测试有些许漏洞_,但是不影响结果就是了): 我个人倾向于把wait( ...

  10. 【近取 key】Alpha 阶段任务分配

    项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 alpha阶段初始任务分配 我在这个课程的目标是 进一步提升工程化开发能力,积累团队协作经验,熟悉 ...