阅读更多


 

翻译 | 林椿眄

编辑 | 周翔

 

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...

  • 06_QLibrary.zip

    06_QLibrary.zip

  • 毕业设计: 基于Densenet + CTC技术的文字检测识别的技术研究

    本毕设课题是属于计算机视觉下的目标检测与识别,对象为自然场景下的各种文本信息,通俗的说就是检测识别图片中的文本信息。由于文本的特殊性,本毕设将整个提取信息的过程可以分为检测、识别两个部分。 论文对用到的相关技术概念有一定的介绍分析,如机器学习,深度学习,以及各种的网络模型及其工作原理过程。 检测部分采用水平检测文本线方式进行文本检测,主要参考了乔宇老师团队的 CTPN 方法,并在正文部分从模型的制作到神经网络的设计实现对系统进行了较为详细的分析介绍。 识别部分则采用的是 Densenet + CTC,对于印刷体的文字有较好的识别。

  • 毕业设计 基于javaweb的在线答题平台

    毕业设计 基于javaweb的在线答题平台

  • numpy安装 python get-pip.py

    numpy安装 numpy安装 python get-pip.py

  • 基于用户、物品的协同过滤算法.zip

    协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。

Global site tag (gtag.js) - Google Analytics