如何在浏览器上跑深度学习模型?并且一行js代码都不用写 -pg电子游戏网站


 

翻译 | 林椿眄

编辑 | 周翔

 

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

 

那么到底什么是 tvm 呢?

 

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

 

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

 

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

 

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

 

之后,陈天奇团队又发布了基于 tvm 工具链的深度学习编译器 ,支持将包括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 中使用方式的例子:

 

 

和其他方法有什么不同?

 

在浏览器上运行神经网络模型已经不是一件多么新鲜的事了。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 条 请登录后发表评论

发表评论

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

相关推荐

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

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

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

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

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

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

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

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

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

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

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

  • 作者:mohd sanad zaki rizvi翻译:吴金笛校对:丁楠雅本文约5500字,建议阅读15分钟。本文首先介绍了tensorflow.js的重要性及其组件,并介...

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

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

  • python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。python社区提供了大量的第三方库,如numpy、pandas和requests,极大地丰富了python的应用领域,从数据科学到web开发。python库的丰富性是python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,matplotlib和seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • stm32单片机fpga毕设电路原理论文报告基于ide硬盘的数字图像存储技术研究本资源系百度网盘分享地址

  • 适合rust入门。深入浅出,事无巨细,远胜市面上所有入门书。而且是免费的

  • vb语言vb房屋租凭管理系统毕业设计(源代码 系统)本资源系百度网盘分享地址

  • 这个示例代码,我们实现了一个用 c 语言判断一个数是否为素数的函数,并通过 main() 函数来测试这个函数。整个过程简单明了,代码结构清晰,易于理解和修改。这个示例展示了 c 语言中函数的定义和调用,以及条件判断和循环等基本语法的使用。

global site tag (gtag.js) - google analytics
网站地图