使用Apache TVM将机器学习编译为WASM和WebGPU
使用Apache TVM将机器学习编译为WASM和WebGPU
TLDR
在Apache TVM深度学习编译器中引入了对WASM和WebGPU的支持。实验表明,在将模型部署到Web时,TVM的WebGPU后端可以接近本机 GPU的性能。

概述
计算是现代机器学习应用程序的支柱之一。GPU的引入加快了深度学习的工作量,极大地提高了运行速度。部署机器学习的需求不断增长,浏览器已成为部署智能应用程序的自然之所。
TensorFlow.js和ONNX.js将机器学习引入浏览器,但Web版本和本机版本之间在性能上仍然存在着不小的差距。许多原因之一是缺乏对Web上GPU的标准访问和高性能访问。WebGL缺少高性能着色学习所需的重要功能,例如计算着色器和通用存储缓冲区。
WebGPU是下一代Web图形标准。与最新一代的图形API(例如Vulkan和Metal)一样,WebGPU提供了一流的计算着色器支持。
为了探索在浏览器中使用WebGPU进行机器学习部署的潜力,增强了深度学习编译器Apache(incubating)TVM,以WASM(用于计算启动参数并调用设备启动的主机代码)和WebGPU(用于设备)为目标。执行初步结果是非常积极的-第一次,可以在Web上部署机器学习应用程序,同时仍能接近GPU的本机性能。
机器学习编译器

试用WebGPU的自然反应是为深度神经网络(矩阵乘法和卷积)中的原始算子编写着色器,然后直接优化性能。这是现有框架(例如TensorFlow.js)使用的传统工作流程。
相反,采用了基于编译的方法。TVM自动从TensorFlow,Keras,PyTorch,MXNet和ONNX等高级框架中提取模型,使用机器学习驱动的方法自动生成低级代码,在这种情况下,将以SPIR-V格式计算着色器。然后可以为可部署模块生成的代码打包。
编译的方法的一个重要优点是基础架构的重用。通过重用基础结构来优化CUDA,Metal和OpenCL等本机平台的GPU内核,能够轻松地(相对于其它方法)以Web为目标。如果WebGPU API到本机API的映射有效,可以通过很少的工作获得类似的性能。更重要的是,AutoTVM基础架构,能够针对特定模型专门化计算着色器,从而能够为感兴趣的特定模型生成最佳的计算着色器。
构建WASM和WebGPU编译器
为了构建可以针对WASM和WebGPU的编译器,需要以下元素:
- 用于计算着色器的SPIR-V生成器。
- 主机程序的WASM生成器。
- 加载和执行生成的程序的runtime。
TVM已经有Vulkan的SPIR-V目标,使用LLVM生成主机代码。可以仅将二者的用途重新生成设备和主机程序。
主要挑战是runtime。需要一个runtime来加载着色器代码,并使主机代码对话能够正确地与着色器通信。TVM具有最低的基于C ++的runtime。构建了一个最小的Web runtime库,生成的着色器和主机驱动代码链接,生成一个WASM文件。但是,此WASM模块仍然包含两个未知的依赖项:
- runtime需要调用系统库调用(malloc,stderr)。
- wasmruntime需要与WebGPU驱动程序进行交互(在Javascript中,WebGPU API是the first-class citizen)。
WASI是解决第一个问题的标准解决方案。尽管网络上还没有成熟的WASI,使用emscripten生成类似WASI的库,提供这些系统库。
通过在TVM的JS runtime内部构建WebGPU runtime来解决第二个问题,在调用GPU代码时,从WASM模块中回调这些功能。使用TVM runtime系统中的PackedFunc机制,可以通过将JavaScript闭包传递到WASM接口,直接公开高级runtime原语。这种方法将大多数runtime代码保留在JavaScript中,随着WASI和WASM支持的成熟,可以将更多JS代码引入WASM runtime。

性能

进行了一个快速实验,比较了通过TVM的WebGPU后端和使用本地GPU runtime(Metal和OpenCL)的本地目标执行完整计算图的情况。在MobileNet模型上,可以发现WebGPU可以接近Metal的性能。假设Chrome WebGPU的runtime以MacOS上的Metal(而不是OpenCL)为目标,可以放心地假设以GPU为目标时,性能几乎没有损失。
此基准不包括CPU到GPU的数据复制成本,而仅基准GPU的执行。从CPU到GPU的数据复制,仍会占用25%的执行时间。可以通过诸如连续执行设置中的双缓冲之类的方法,进一步摊销这些成本。
报告的mobilenet的端到端runtime,绝不是最佳选择,重复使用了GTX 1080 Ti的优化程序,这与Intel图形GPU截然不同。希望通过在目标平台上使用AutoTVM来进一步提高性能。
展望未来
结果表明,在网络上进行机器学习有许多有趣的机会。值得注意的是,WebGPU是一个仍在不断发展的API,其含义可能会超出Web应用程序。例如,当WebGPU成熟,通过WASI标准化时,可以将其定位为WebGPU的本机API,使用WebGPU的独立WASM应用程序。
TVM社区还积极地在基于Rust的runtime上工作,该runtime将提供更强大的WASM支持,wgpu和Rust WASM生态系统等项目的交互更加轻松。
提出的方法为大多数WASM的应用场景提供了有效的机器学习支持。接近本机的性能,可以释放浏览器上更好的联合学习功能。相同的编译程序包,也应该能够在本机WASM执行程序上运行,为应用程序提供sandbox 。
使用Apache TVM将机器学习编译为WASM和WebGPU的更多相关文章
- TVM编译机器学习到 WASM 和 WebGPU
TVM编译机器学习到 WASM 和 WebGPU TLDR TVM 深度学习编译器对 WASM 和 WebGPU 的支持.实验表明,TVM 的 WebGPU 后端在将模型部署到 Web 时可以接近原生 ...
- TVM适配NN编译Compiler缺陷
TVM适配NN编译Compiler缺陷 内容纲要 前言 TVM针对VTA的编译流程 自定义VTA架构:TVM的缺陷与性能瓶颈 TVM缺陷与瓶颈 缺陷一:SRAM配置灵活性差 缺陷二:计算阵列配置僵硬 ...
- 试试将.NET7编译为WASM并在Docker上运行
之前有听到说Docker支持Wasmtime了,刚好.NET7也支持WASM,就带大家来了解一下这个东西,顺便试试它怎么样. 因为WASM(WebAssembly) 一开始是一个给浏览器的技术,比起J ...
- Centos7 Apache 2.4.18编译安装
安装环境:CentOS Linux release 7.0.1406 (Core) 0x01 到官网http://httpd.apache.org/download.cgi#apache24下载apa ...
- Apache 流媒体 拖动模块编译
Windows使用apxs独立编译 Apache 模块 http://blog.sina.com.cn/s/blog_43b83d340100mdhl.html 安装 apxs 1.解压apxs.zi ...
- 以Apache模块的方式编译安装php-5.4.27
为什么要安装低版本的php? 由于apc,xcache的更新版本跟不上php版本的速度,所以,我们需要安装比较稳定的php低版本程序,再安装其它与之相匹配的扩展. 开工: 新建用户及用户组 group ...
- 以Apache模块的方式编译安装php-5.5.4
新建用户及用户组 groupadd webuser useradd -g webuser webuser 下载php-5.5 下载地址:http://pan.baidu.com/s/1o6I6Lnk ...
- apache ranger源码编译
官方文档 http://ranger.apache.org/quick_start_guide.html Quick Start Guide Build Process 1. Check out th ...
- apache atlas源码编译打包 centos
参考:https://atlas.apache.org/InstallationSteps.html https://blog.csdn.net/lingbo229/article/details/8 ...
随机推荐
- img 的data-src 属性及懒加载
一.什么是图片懒加载 当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需请求一次),当图片出现在浏览器的可视区域内时,才设置图片真正的路径, ...
- php正则表达式过滤空格 换行符 回车
我整理了几个比较适合的实例了,对于它们我们是有很多站长都测试过并用过了,不过文章最后我的总结也是生重要的哦,至于原因我也说不上了,因为chr是ascii编码了所以有时浏览器会自动转成ascii,特别像 ...
- POJ1719行列匹配
题意: 给一个n*m的格子,每一列都有两个白色的,其余的全是黑色的,然后要选择m个格子,要求是每一列必须也只能选一个,而每一行至少选择一个,输出一种可行的方案没,输出的格式是输出m个数,表示 ...
- Docker仓库-Docker Hub
Docker Hub Docker官方维护了一个公共仓库Docker Hub,其中已经包括了数量上百万的镜像,大部分需求都可以通过在Docker Hub 中直接下载镜像来实现. 注册: https:/ ...
- Portswigger web security academy:DOM Based XSS
Portswigger web security academy:DOM Based XSS 目录 Portswigger web security academy:DOM Based XSS DOM ...
- tp 创建文件并写入数据
代码:1.$url = Env::get('root_path').'application/admin/test.txt'; //定义创建路径 $file = fopen($url,"w& ...
- MyBaits自动配置原理
前言 首先我们建立一个SpringBoot工程,导入mybatis-spring-boot-starter依赖. <dependency> <groupId>org.mybat ...
- Java集合详解(二):ArrayList原理解析
概述 本文是基于jdk8_271版本进行分析的. ArrayList是Java集合中出场率最多的一个类.底层是基于数组实现,根据元素的增加而动态扩容,可以理解为它是加强版的数组.ArrayList允许 ...
- 数据流分析软件SQLFlow的高阶模式Job任务介绍
SQLFlow是一个可视化的在线处理SQL对象依赖关系的工具,只需要上传你的SQL脚本,它可以自动分析SQL里的数据对象,包括database.schema.table.view.column.pro ...
- [Qt]《开发指南》3.1源码分析
界面: ButterflyGraph: 可以看出,本工程在主程序main里调用窗口界面qmywidget,窗口界面继承了QWidget,并调用自定义类qperson,推测是qmywidget类中的一个 ...