WebDNN:浏览器上运行的最快DNN执行框架(Macbook也行)

简介:
本文来自AI新媒体量子位(QbitAI)

深度神经网络(DNN)已经被证明在图像识别、视频识别、自然语言处理、游戏人工智能等诸多不同领域都具有非常大的潜力,当前,DNN也已经被应用到多种产品之中。

然而,DNN计算所需的成本非常高,并且在通常情况下,DNN的执行需要基于硬件加速的大量执行环境设置进程。因此,要在像笔记本电脑、智能手机这样的终端用户设备上执行DNN并不十分现实。

过去解决这些问题的方法是云计算。而现在,东京大学机器智能实验室(MIL)开发的WebDNN又提出了一条新的途径。

WebDNN是什么?

WebDNN是一种开源软件框架,用于在浏览器上执行DNN的预训练模型。

WebDNN包含两种模型:图形转译器,用于将训练过的模型转译并优化成能够在浏览器上执行的格式;以及描述符运行器,用于在浏览器上执行转换过的模型。

图形转译器是一种脱机模型,通过python(3.6版本)实现。它会输出包含JavaScript和二进制权数据的“图形转译器”文件。只有应用开发者需要运行这一模型。

描述符运行器则是一种在线模型,用于在终端用户的浏览器上运行图像转译器,通过JavaScript实现。应用开发者需要使用程序库所提供的API来对模型进行输入并显示输出结果。

特性

WebDNN主要有以下三种关键特性:

免安装

WebDNN在浏览器上执行DNN模型。通常情况下,每个终端用户的设备上都应该已经安装好了浏览器,同时用户会对它非常熟悉。因此,DNN应用的产出会变得更为容易,不会像原生应用安装那么麻烦。

目前市面上存在着几种主流的浏览器,并且它们都有着能够用于加速的不同特性。在每一种浏览器上,WebDNN都有几种能使DNN模型执行进程速度最大化的策略。

非开销接口

JavaScript是一种在浏览器上运行的标准编程语言,它通过解释器来执行。因此,它需要一定的计算开销,也无法完全发挥CPU的性能;在GPU上,也有同样的问题。

现在的浏览器都支持WebGL,一种能够实现GPU使用的JavaScript API。然而,这个API是为图形处理而设计,并不适合进行通用计算;除此之外,用WebGL进行通用计算还会增加计算开销。

WebDNN使用了新一代的JavaScript API——包括用于GPU执行的WebGPU,以及用于CPU执行的WebAssembly。这些API能够帮助充分发挥GPU和CPU的能力。

针对推理阶段的专门优化

为了实现更快的执行过程,对DNN模型的计算图进行优化非常重要。DNN的执行包括两个阶段:训练阶段和推理阶段,并且它们需要不同的优化策略。WebDNN只着眼于在终端用户设备上执行的推理阶段并支持激进优化。这种优化管道能够被应用于不同DNN框架所训练的模型,不需要编辑训练代码。

兼容浏览器平台


 下方数字为最低版本要求。

通过WebGPU、WebAssembly和Fallback后端,WebDNN能够在所有主流浏览器上运行。

其中,WebGPU后端是三种途径中最快的,但目前该API只支持Safari技术预览版;WebAssembly后端速度次之,能够兼容大部分主流浏览器;Fallback后端则只能进行向下兼容,且速度并不那么快。

在Safari技术预览版中,默认禁用WebGPU API。启用方法是在菜单中点击:“Develop” > “Experimental Features” > “WebGPU”

效果

处理时间——与Keras.js对比

(量子位注:Keras.js是GitHub上的一个开源项目,在GPU的支持下,能够用于在浏览器上运行Keras模型。)

测试环境:

  • Mac Book Pro ,2015年初版本
  • macOS 10.12.4 Sierra
  • Intel Core i5 2.7 GHz CPU
  • 16GB内存
  • Intel Iris Graphics 6100 GPU
  • Safari技术预览,版本30

模型:VGG16, Inception-v3, ResNet50

输入形状:Inception-v3——(1, 299, 299, 3),其它——(1, 224, 224, 3)

 纵轴为每张图像消耗的时间,单位毫秒。

结果显示,搭载了后端WebGPU的WebDNN速度明显快于Keras.sj,而搭载了后端WebAssembly的WebDNN,速度则稍快于搭载了后端GPU的Keras.sj。

在每一个DNN模型及后端,WebDNN在速度上都比Keras.sj更快。当对图形转译器进行优化后,WebDNN的速度将得到进一步提升。

Demo

WebDNN还有两个官方的Demo。

Demo 1:图像风格迁移模型

 浮世绘风格的猎豹。

Demo 2:ResNet50图像识别模型

 可能训练得不太好,海豚识别成了大白鲨……

以上两个示例,其预训练模型的执行都是通过WebDNN在浏览器上完成的。

量子位尝试了一下风格迁移的Demo,特别邀请阿凡提老师作为出镜测试嘉宾,结果有点尴尬,如下图所示:


我们用的也是Macbook,想测试的同学,可以直接访问这个网址:

https://mil-tokyo.github.io/webdnn/neural_style_transfer.html?run=1

相关地址

GitHub地址:

https://github.com/mil-tokyo/webdnn

document:

https://mil-tokyo.github.io/webdnn/docs/index.html

官网(有demo):

https://mil-tokyo.github.io/webdnn/#about

还有一个插曲:量子位曾经试图寻找该实验室的官网,发现一个类似的页面,不过这个页面嘛……我们截图如下:

【完】

本文作者:唐旭
原文发布时间: 2017-06-05
相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
打赏
0
0
0
0
16429
分享
相关文章
如何在Linux运行RStudio Server并实现Web浏览器远程访问
如何在Linux运行RStudio Server并实现Web浏览器远程访问
293 0
跨浏览器兼容性:确保您的网站在各个平台上无缝运行
在当今多样化的网络浏览器市场中,确保您的网站能够在不同浏览器上正常运行变得至关重要。跨浏览器兼容性是一项关键任务,涉及到确保您的网站在不同浏览器和设备上都提供一致的用户体验。本博客将深入探讨跨浏览器兼容性的重要性、挑战以及如何实施有效的兼容性策略。
296 0
Eko:一句话就能快速构建复杂工作流的 AI 代理开发框架!快速实现自动操作电脑和浏览器完成任务
Eko 是 Fellou AI 推出的开源 AI 代理开发框架,支持自然语言驱动,帮助开发者快速构建从简单指令到复杂工作流的智能代理。
509 12
Eko:一句话就能快速构建复杂工作流的 AI 代理开发框架!快速实现自动操作电脑和浏览器完成任务
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
Agent-E 是一个基于 AutoGen 代理框架构建的智能自动化系统,专注于浏览器内的自动化操作。它能够执行多种复杂任务,如填写表单、搜索和排序电商产品、定位网页内容等,从而提高在线效率,减少重复劳动。本文将详细介绍 Agent-E 的功能、技术原理以及如何运行该系统。
349 5
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
TypeScript的介绍,let age:number = xxx,可以直接看出数据类型,Type由微软开发,可以在任何浏览器和系统中运行,比较适合大型项目,TypeScript的安装
TypeScript的介绍,let age:number = xxx,可以直接看出数据类型,Type由微软开发,可以在任何浏览器和系统中运行,比较适合大型项目,TypeScript的安装
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
766 1
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
146 0
Rust 和 WebAssembly 搞大事啦!代码在浏览器中运行,这波操作简直逆天!
【8月更文挑战第31天】《Rust 与 WebAssembly:将 Rust 代码运行在浏览器中》介绍了 Rust 和 WebAssembly 的强大结合。Rust 是一门安全高效的编程语言,而 WebAssembly 则是新兴的网页技术标准,两者结合使得 Rust 代码能在浏览器中运行,带来更高的性能和安全性。文章通过示例代码展示了如何将 Rust 函数编译为 WebAssembly 格式并在网页中调用,从而实现复杂高效的应用程序,同时确保了内存安全性和跨平台兼容性,为开发者提供了全新的可能性。
249 0
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
【7月更文挑战第14天】这篇教程介绍了如何使用Java和Selenium构建一个支持跨浏览器测试的自动化测试框架。设计的核心是通过读取配置文件来切换不同浏览器执行测试用例。配置文件中定义了浏览器类型(如Firefox、Chrome)和测试服务器的URL。代码包括一个`BrowserEngine`类,它初始化配置数据,根据配置启动指定的浏览器,并提供关闭浏览器的方法。测试脚本`TestLaunchBrowser`使用`BrowserEngine`来启动浏览器并执行测试。整个框架允许在不同浏览器上运行相同的测试,以确保兼容性和一致性。
155 3
《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)
【6月更文挑战第14天】本文介绍了如何使用TestNg进行自动化测试,特别是通过变量参数启动不同浏览器的步骤。
109 5

量子位

+ 订阅

热门文章

最新文章