阅读更多


 

翻译 | 林椿眄

编辑 | 周翔

 

2017 年 8 月,华盛顿大学的陈天奇团队发布了 TVM,和 NNVM 一起组成深度学习到各种硬件的完整优化工具链,支持手机、CUDA、OpenCL、Metal、JavaScript 以及其它各种后端,而且用户可以针对这些目标平台用 Python 来进行调优。

 

那么到底什么是 TVM 呢?

 

陈天奇在论文中解释到,TVM 其实是一个端到端优化堆栈,可以降低和调整深度学习工作负载,以适应多种硬件后端。TVM 的设计目的是分离算法描述、调度和硬件接口。

 

此外,TVM 具备两个优化层:计算图优化层;具备新型调度基元的张量优化层。通过结合这两种优化层,TVM 从大部分深度学习框架中获取模型描述,执行高层级和低层级优化,生成特定硬件的后端优化代码,如树莓派、GPU 和基于 FPGA 的专用加速器。

 

同一小组的刘洪亮在微博上解释到:“TVM 可以把模型部署到不同硬件,比如群众常问的能不能用 AMD 的 GPU,用 FPGA 怎么搞,TVM 提供这个中间层有效解决这个问题”。

 

总的来说,除了比较明显的多硬件支持,更重要的是 TVM 支持相对方便的自动调优和轻量级部署。

 

之后,陈天奇团队又发布了基于 TVM 工具链的深度学习编译器 NNVM compiler O,支持将包括MxNet、Pytorch、Caffe2,、CoreML 等在内的深度学习模型编译部署到硬件上并提供多级别联合优化,速度更快,部署更加轻量级。

 

如今,谷歌工程师谈至勋又将 TVM 向前推进了一步:支持 WebGL/OpenGL 平台并可以在浏览器运。也就是说,未来你将不需要写一行 JavaScript 代码,就可以把深度学习模型自动编译生成 WebGL 并且跑在浏览器中 。

 

MxNet 的作者李沐评价到,“这是 Mxnet JavaScript frontend 往前的一大进步”。

 

以下是此次更新的完整内容解析:

 

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 运行时间系统(runtime system)中,并在浏览器上运行。

  • 带静态库的 WebGL:我们可以将深度学习模型编译为 WebGL,将其与 TVM JavaScript 运行时间系统相连接,并导出整个包。然后我们就可以不需要任何依赖库,直接在浏览器的网页中运行模型。详细流程如图 1 所示。

 

我们通过 Emscripten 及其 fastcomp LLVM 后端来生成 JavaScript 后端。

 

图 1

 

以下是 3 中使用方式的例子:

 

https://github.com/dmlc/nnvm/blob/master/tutorials/from_mxnet_to_we

bgl.py

 

和其他方法有什么不同?

 

在浏览器上运行神经网络模型已经不是一件多么新鲜的事了。Andrej Karpathy 提出的ConvNetJS,及 Google 的 DeepLearning.JS 都能够实现这种想法。

 

那么,TVM 的 WebGL 有何独特之处呢?最大的区别就在于 TVM 的 WebGL 中操作内核是自动编译的,而不是人工编译的。如图 2 所示,TVM 使用统一的 AST 来定义其内核,并将其编译为用于不同的平台的代码。


图 2

 

这就意味着:

 

  • 你不需要额外编写大量的代码就可以将现有模型部署到 WebGL 上。NNVM/TVM 模型的定义对于所有的目标来说都是一样的,因此你只需要将其编译到新的目标中。

  • 如果要添加新的操作系统内核,你只需要在 TVM 中定义一次即可,而不需要为每个目标执行一次。你也不需要知道如何编写 GLSL 代码才能向 WebGL 添加新的内核,因为这一切都能够自动生成。

 

测试基准

 

在这里,我们针对一个典型的工作负载进行了基准测试:使用 resnet18 模型进行图像分类。

 

我使用的是一台工作了 5 年的,配备 8 核英特尔酷睿™ i7-3610QM 处理器以及 GTX650M 显卡的笔记本。在基准测试中,我们从 Gluon 模型库里下载了 resnet18 模型,并对猫的图像进行端到端的分类。我们只测量了模型执行时间(这不包含模型/输入/参数的加载),每个模型运行 100 次,最终得到运行时间的平均值,其结果如图3所示。

 

图3

 

该基准测试在 4 中不同的设置下运行的:

 

  • CPU(LLVM):模型被编译到 LLVM IR 和 JIT'ed 上,因此它完全运行在 CPU 上。

  • OpenCL:模型被编译到 OpenCL 上。还有一部分的 glue code 编译在 LLVM 上,用于设置并启动 OpenCL 内核。然后我们在本地的机器上运行该模型。

  • OpenGL:和 OpenCL 设置一样,不过模型是被编译到 OpenGL 上。

  • WebGL:glue code 被编译到 LLVM 平台上,进而通过 Emscripten 的 Fastcomp LLVM 后端转换为 Javascript。设备的代码被编译到 WebGL 平台上,我们可以在Firefox 浏览器上运行该模型。

 

从以上得到的结果我们可以看到,TVM OpenGL 后端与 OpenCL 有相似的性能。更有意思的是,浏览器中的 WebGL 版本并不比桌面端的 OpenGL 运行效率慢。考虑到主机的代码是 JavaScript 编写的,出现这个现象的确让人惊讶。这可能是由于 Emscripten 生成了 asm.js,使得模型在 Firefox 浏览器中的运行效率得到了显著优化。

 

这个更新迈出了将深度学习模型自动编译到浏览器的第一步。我们会为 TVM 堆栈加入更多的优化,期待模型的性能能够得到更多的改进

0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 在浏览器里运行深度学习模型推理——C++与Wasm实现

    这里使用WebAssembly做推理就可以解决实现在浏览器就把结果检测出来,只要把结果给传递给处理中心就可以了,用户数据不会上传,保护用户隐私。部署起来也简单,只要安装浏览器就行,无客户端。

  • Web 上运行深度学习框架模型 - MegEngine.js

    在近日发布的《开源深度学习框架项目参与指北》文末,我们提到了 MegEngine 在社区开发者的帮助下,已实现了MegEngine.js—— MegEngine javascript ...

  • tensorflow.js在nodejs训练猫狗分类模型在浏览器上使用

    本文章是基于tensorflow.js在nodejs中进行训练,并且基于浏览器去调用模型实现猫狗分类的一个文章,本文章整体基于本人的一个学习和实现过程的一个整理,便于后期忘记了回来翻阅,本人也是刚入门机器学习领域。...

  • 【深度学习】在浏览器中进行深度学习:TensorFlow.js (一)基本概念

    作为deeplearn.js的继任者,tensoflow.js 支持在浏览器或者nodejs中利用JavaScript来运行深度学习。并且能够支持GPU和现有的Tensorflow的模型。该项目的首页上有几个很酷炫的演示。作为热爱机器学习和前端数据可视化...

  • JavaScript玩转机器学习:在浏览器和 Node.js 训练和部署机器学习模型

    TensorFlow.js 是一个 JavaScript 库,用于在浏览器和 Node.js 训练和部署机器学习模型。 了解开始的更多方式,请参阅下面的部分。 在不直接处理张量的情况下编写 ML 程序 想要开始机器学习,同时不用担心任何...

  • 浏览器中实现深度学习?有人分析了7个基于JS语言的DL框架

    本文中,作者基于WWW’19 论文提供的线索,详细解读了在浏览器中实现深度学习的可能性、可行性和性能现状。具体而言,作者重点分析了 7 个最近出现的基于JavaScript 的 DL 框架,并对比了具体框架支持哪些 DL 任务。...

  • 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)

    TensorFlow.js (deeplearn.js)使我们能够在浏览器中构建机器学习和深度学习模型,而无需任何复杂的安装步骤。 TensorFlow.js的两个组件——Core API和Layer API。 了解如何构建一个很棒的使用Tensorflow....

  • 基于TensorFlow.js在浏览器上构建深度学习应用

    节选自《深度学习TensorFlow.js:浏览器实战篇》第八章,已获授权。在前面的章节,我们讨论了各种JavaScript概念和运行在浏览器上的各种深度学习框架。在本章...

  • JS做深度学习2——导入训练模型

    JS做深度学习2——导入训练模型 改进项目 前段时间,我做了个RNN预测金融数据的毕业设计(华尔街),当时TensorFlow.js还没有发布,我不得已使用了keras对数据进行了训练,并且拟合好了不同期货的模型,因为当时...

  • python调用tensorflow模型_在浏览器中使用TensorFlow.js和Python构建机器学习模型

    概述TensorFlow.js (deeplearn.js)使我们能够在浏览器中构建机器学习和深度学习模型,而无需任何复杂的安装步骤。TensorFlow.js的两个组件——Core API和Layer API。了解如何构建一个很棒的使用Tensorflow.js对网络...

  • Keras vs PyTorch:谁是第一深度学习框架?

    「第一个深度学习框架该怎么选」对于初学者而言一直是个头疼的问题。本文中,来自 deepsense.ai 的研究员给出了他们在高级框架上的答案。在 Keras 与 PyTorch 的对比中,作者还给出了相同神经网络在不同框架中性能的...

  • 独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)

    作者:MOHD SANAD ZAKI RIZVI翻译:吴金笛校对:丁楠雅本文约5500字,建议阅读15分钟。本文首先介绍了TensorFlow.js的重要性及其组件,并介...

  • 在浏览器中进行深度学习:TensorFlow.js (一)基本概念

     支持在浏览器或者nodejs中利用JavaScript来运行深度学习。并且能够支持GPU和现有的 Tensorflow 的模型。该项目的首页上有几个很酷炫的演示。作为热爱机器学习和前端数据可视化的我怎能不心动呢。快来和我一起来看...

  • tensorflow模型部署系列————浏览器前端部署(附代码)

    实现了tensorflow在浏览器前端计算方案,将计算任务分配在终端,可以有效地降低服务端负荷,并提供相关示例源代码。相关源码见链接 引言 本文为系列博客tensorflow模型部署系列的一部分,用于javascri...

  • 本地磁盘E的文件使用查找到的

    本地磁盘E的文件使用查找到的

  • Java毕设项目:基于spring+mybatis+maven+mysql实现的社区服务管理系统分前后台【含源码+数据库+毕业论文】

    一、项目简介 本项目是一套基于SSM框架实现的社区服务管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值 二、技术实现 jdk版本:1.8 及以上 ide工具:IDEA或者eclipse 数据库: mysql5.7及以上 后端:spring+springmvc+mybatis+maven+mysql 前端:jsp,css,jquery 三、系统功能 系统用户包括有管理员、社区用户 主要功能如下: 用户登录 用户注册 个人中心 修改密码 个人信息 社区用户管理 社区停车管理 社区公共场所管理 新闻类型管理 新闻资讯管理 社区政务服务管理 社区活动管理 活动报名管理 服务类型管理 社区安保维护管理 住户反馈管理 公共场所预约管理 社区论坛 系统管理等功能 详见 https://flypeppa.blog.csdn.net/article/details/139136499

  • 基于小程序的图书馆自习室座位预约管理微信小程序源代码(java+小程序+mysql+LW).zip

    管理员权限主要实现了管理员服务端;首页、个人中心、学生管理、座位信息管理、自习室分类管理、座位预约管理、学院分类管理、专业分类管理、留言板管理、系统管理,学生微信端;首页、座位信息、座位预约、我的等功能,基本上实现了整个图书馆自习室座位预约小程序信息管理的过程。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7 小程序开发工具:hbuildx/微信开发者工具

  • 基于知识图谱的出版物检索和推荐系统源码+文档+全部资料.zip

    【资源说明】 基于知识图谱的出版物检索和推荐系统源码+文档+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

  • 基于python深度学习对花卉进行目标检测-含摄像头识别-含代码和数据集.zip

    本代码是基于python pytorch环境安装的。下载本代码后,有个环境安装的requirement.txt文本,环境需要自行配置。或可直接参考下面博文进行环境安装。 https://blog.csdn.net/no_work/article/details/144331388 安装好环境之后, 代码如需重新训练的话,需要依次运行 01、02、03py文件。 ,如果只是调用已经训练好的模型,去做识别的话,直接运行03pyqt.py即可 以下关于每个py文件的介绍: 输入指令python 01划分数据集.py 就会将我们的数据集转成yolo格式的txt,同时生成train.txt和val.txt,和配置文件data.yaml 运行02train.py即可开始训练模型。 最后运行03pyqt.py文件就有pyqt的可视化界面。 通过点击加载图片按钮,来选择我们要识别的图片,再点击检测按钮就可以完成识别了。 如果要使用摄像头检测功能直接点击摄像头按钮即可实时检测。

Global site tag (gtag.js) - Google Analytics