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

图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的更多相关文章
- 用 Java 训练深度学习模型,原来可以这么简单!
本文适合有 Java 基础的人群 作者:DJL-Keerthan&Lanking HelloGitHub 推出的<讲解开源项目> 系列.这一期是由亚马逊工程师:Keerthan V ...
- CUDA上深度学习模型量化的自动化优化
CUDA上深度学习模型量化的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参数 ...
- CUDA上的量化深度学习模型的自动化优化
CUDA上的量化深度学习模型的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参 ...
- AI佳作解读系列(一)——深度学习模型训练痛点及解决方法
1 模型训练基本步骤 进入了AI领域,学习了手写字识别等几个demo后,就会发现深度学习模型训练是十分关键和有挑战性的.选定了网络结构后,深度学习训练过程基本大同小异,一般分为如下几个步骤 定义算法公 ...
- 『高性能模型』Roofline Model与深度学习模型的性能分析
转载自知乎:Roofline Model与深度学习模型的性能分析 在真实世界中,任何模型(例如 VGG / MobileNet 等)都必须依赖于具体的计算平台(例如CPU / GPU / ASIC 等 ...
- 深度学习模型stacking模型融合python代码,看了你就会使
话不多说,直接上代码 def stacking_first(train, train_y, test): savepath = './stack_op{}_dt{}_tfidf{}/'.format( ...
- 深度学习模型融合stacking
当你的深度学习模型变得很多时,选一个确定的模型也是一个头痛的问题.或者你可以把他们都用起来,就进行模型融合.我主要使用stacking和blend方法.先把代码贴出来,大家可以看一下. import ...
- 利用 TFLearn 快速搭建经典深度学习模型
利用 TFLearn 快速搭建经典深度学习模型 使用 TensorFlow 一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章<Tenso ...
- Roofline Model与深度学习模型的性能分析
原文链接: https://zhuanlan.zhihu.com/p/34204282 最近在不同的计算平台上验证几种经典深度学习模型的训练和预测性能时,经常遇到模型的实际测试性能表现和自己计算出的复 ...
随机推荐
- 限制pyqt5应用程序 只允许打开一次
起因 pyqt5程序创建桌面快捷方式后,多次单击图标 会打开多个UI界面,这种情况肯定是不允许的! 解决 if __name__ == '__main__': try: app = QtWidgets ...
- SQL 查询的执行顺序
SELECT语句的完整语法如下 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN & ...
- Linux下磁盘分区、卸载和磁盘配额
目录 一:查看磁盘信息 二:Linux磁盘分区 三:Linux分区的卸载 四:Linux磁盘配额 一:查看磁盘信息 fdisk : 这个命令是磁盘分区表操作工具,fdisk能将磁盘分区,同时也能为每个 ...
- SMTP、POP3和IMAP邮件协议
目录 SMTP POP IMAP 总结 DNS记录中的MX记录 今天入职第一天,公司让配置个人的内网.外网邮箱,这可把我给搞晕了,本来以前就对邮箱这块不是很了解,平时也不怎么用邮箱,顶多有个QQ邮箱而 ...
- 【python】Leetcode每日一题-不同的子序列
[python]Leetcode每日一题-不同的子序列 [题目描述] 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数. 字符串的一个 子序列 是指,通过删除一些(也可以 ...
- CRM系统有哪几种常见类型?
随着市场的快速变化,客户开始变得越来越重要,因此CRM客户管理系统开始逐渐被企业所认可.从CRM系统进入中国市场到现在十余年的发展中,越来越多的CRM厂商开始出现.为了满足不同行业.不同类型的企业的需 ...
- Java中Stream流相关介绍
什么是Stream? Stream是JDK8 API的新成员,它允许以声明性方式处理数据集合 特点 代码简洁: 函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环 多核友好 ...
- Spring Cloud Alibaba Nacos Discovery 实战
Nacos 作为服务注册中心,可以快速简单的将服务自动注册到 Nacos 服务端,并且能够动态无感知的刷新某个服务实例的服务列表,为分布式系统提供服务注册与发现功能 一.创建服务 1.创建项目 pom ...
- traceroute排查网络故障 www.qq.com排查网络故障网络不通 先ping自己
网络不通 先ping自己 在ping网关 再ping外网 再ping别人的ip 背景需求 Linux 因为其强大的网络处理能力,被广泛用于网关(实例链接)和服务器(实例链接).实际工作中,快速排查这些 ...
- sed -i 's/Search_String/Replacement_String/g' Input_File sed详细手册
本文列出的十五个例子可以帮助你掌握 sed 命令.如果要使用 sed 命令删除文件中的行,去下面的文章.注意:由于这是一篇演示文章,我们使用不带 -i 选项的 sed 命令,该选项会在 Linux 终 ...