使用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相关推荐

  1. TVM编译机器学习到 WASM 和 WebGPU

    TVM编译机器学习到 WASM 和 WebGPU TLDR TVM 深度学习编译器对 WASM 和 WebGPU 的支持.实验表明,TVM 的 WebGPU 后端在将模型部署到 Web 时可以接近原生 ...

  2. 机器学习编译MLC 笔记 1-5章(上)

    文章目录 元张量函数 TensorIR 端到端模型执行 自动程序优化 与机器学习框架的整合 课程主页: 机器学习编译 具体内容查看vedio和notes,本文先当与一个精简笔记和脉络梳理,如有错误还请 ...

  3. 机器学习编译入门课程学习笔记第二讲 张量程序抽象

      本节课的slides链接如下:https://mlc.ai/summer22-zh/slides/2-TensorProgram.pdf:notes链接如下:https://mlc.ai/zh/c ...

  4. 陈天奇:首个机器学习编译课程!

    Datawhale干货 来源:机器之心编辑部 陈天奇:「因为世界上还没有关于这个方向的系统性课程,所以这一次尝试应该会是和小伙伴们共同的探索」. 随着机器学习框架和硬件需求的发展,机器学习 / 深度学 ...

  5. TVM适配NN编译Compiler缺陷

    TVM适配NN编译Compiler缺陷 内容纲要 前言 TVM针对VTA的编译流程 i. 自定义VTA架构:TVM的缺陷与性能瓶颈 TVM缺陷与瓶颈 i. 缺陷一:SRAM配置灵活性差 ii. 缺陷二 ...

  6. 基于Apache Spark的机器学习及神经网络算法和应用

    使用高级分析算法(如大规模机器学习.图形分析和统计建模等)来发现和探索数据是当前流行的思路,在IDF16技术课堂上,英特尔公司软件开发工程师王以恒分享了<基于Apache Spark的机器学习及 ...

  7. dotnet 将C#编译为wasm让前端html使用

    其实 dotnet 是全栈的首选,原因是因为可以开发的方向太多,比如大本营PC端,以及后台.还有移动端,包括 IOS 和安卓端.现在还能用来写前端,本文就来告诉大家如何在前端使用现有的C#代码,通过 ...

  8. Apache Kafka流+机器学习(Spark,TensorFlow,H2O.ai)

    我于2017年5月开始在Confluent工作,担任技术传播者,专注于围绕开源框架Apache Kafka的主题. 我认为机器学习是当今最热门的流行语之一,因为它可以在任何行业中增加巨大的商业价值. ...

  9. 转:apache+python+mod_python+django 编译安装指南

    apache+python+mod_python+django 编译安装指南 1.本文将知道你在 linux 下使用源码包安装 apache 2.2.16 python 2.7 mod_python ...

最新文章

  1. [WTL] STLport安装指南
  2. Delphi 2009 超前预知!
  3. 网络协议之:还在用HTTP代理?过时了,快试试SOCKS5
  4. RabbitMQ教程总结
  5. Polo the Penguin and Matrix
  6. 十分钟上线 - 函数计算构建支付宝小程序的后端
  7. c# 日期函数[string.Format----GetDateTimeFormats] --转载
  8. 递归方法无限级菜单--javascript v1.0
  9. 数据结构上机实践第八周项目3-顺序串算法
  10. java 自定义注解 生成json_Java使用@JsonDeserialize注解实现自定义反序列化器
  11. 最全地理数据下载地址/全国地表径流量数据获取/土地利用数据/植被类型数据/NPP数据/土壤侵蚀数据/土壤质地分类/降雨量栅格数据/太阳辐射量数据
  12. ISP(六) 空间域图像变换(图像反转、对数变换、幂次变换、分段线性变换、直方图均衡与匹配)
  13. 汽车CAN总线-基础
  14. Android自定义相机自动对焦、定点对焦
  15. For菜鸟文章:PE文件格式,qduwg翻译
  16. 家庭收支记账软件--Java
  17. 一阶常系数微分方程组的笔记
  18. [从头学绘画] 第21节 八段锦
  19. 7-7 The Whimper of Universe (30 分)
  20. python怎么下载安装mac_Python 安装和环境搭建(Mac版)

热门文章

  1. 2022-2028年中国美瞳行业应用市场需求及开拓机会研究报告
  2. etcd 笔记(03)— etcd 客户端使用(键值的增、删、改、查)、watch监测键、lease使用(创建租约、撤销租约、刷新租期、查询租期)
  3. Python字节码介绍
  4. LeetCode简单题之数组形式的整数加法
  5. TensorFlow实现超参数调整
  6. 无人驾驶汽车开发平台,加速无人驾驶汽车的商业化
  7. 自动驾驶架构与实现路径
  8. centos命令大全
  9. C++ 预编译的时候使用defined 的含义
  10. HarmonyOS 修改App的默认加载的界面