作者|泽南、亚洲

来源|机器之心

麻省理工学院(MIT)提出的自动微分框架 Enzyme 在 NeurIPS 2020 大会上引起过不少人的兴趣,现在人们已经可以尝试使用这套工具了。

当前,PyTorch、TensorFlow 等机器学习框架已经成为了人们开发的重要工具。计算反向传播、贝叶斯推理、不确定性量化和概率编程等算法的梯度时,我们需要把所有的代码以微分型写入框架内。这对于将机器学习引入新领域带来了问题:在物理模拟、游戏引擎、气候模型中,原领域组件不是由机器学习框架的特定领域语言(DSL)编写的。因此在将机器学习引入科学计算时,重写需求成为了一个挑战。

为了解决这一问题,现在的发展趋势包含构建新的 DSL,让重写过程变得简单,或者在编程时直接进行构建。这些方法可以让我们获得有效的梯度,但是仍然需要使用 DSL 或可微分的编程语言进行重写。

开发者们自然会希望使用机器学习框架以外的代码重用已有工具,或在一种语言里写好损失函数,然后为其用例提供更简单的抽象。尽管目前已经出现了一些针对不同语言的反向自动微分框架(AD),但我们很难在 ML 框架外的代码上自动使用它们,因为其仍需要重写,且对于跨语言 AD 和库的支持有限。

为了方便开发者,来自 MIT 的研究者开源了 Enzyme,一种用于 LLVM 编译器框架的高性能自动微分(AD)编译器插件。该插件能够合成以 LLVM 中间表示(IR)表示的静态可分析程序的梯度。Enzyme 能够合成任何以面向 LLVM IR 编译器为语言编写的程序的梯度,包括 C、C ++、Fortran、Julia、Rust、Swift、MLIR 等,从而提供这些语言的本机 AD 功能。

据作者介绍,与传统的源到源和 operator-overloading 工具不同,Enzyme 在优化的 IR 上执行 AD。

在包括微软 ADBench 在内的以机器学习为重点的基准套件上,经过优化的 IR 上的 AD 的几何平均速度比未经过优化的 IR 上 AD 的几何平均速度提高了 4.5 倍,这使得 Enzyme 达到了最高的性能。

此外,Enzyme 方便使用,在 PyTorch 和 TensorFlow 上都有程序包,可让开发者便捷访问具有最新性能的外来代码梯度,从而使外来代码可直接合并到现有的机器学习工作流程中。

论文标题:

Instead of Rewriting Foreign Code for Machine Learning, Automatically Synthesize Fast Gradient

论文链接:

https://arxiv.org/abs/2010.01709

项目网页:

https://enzyme.mit.edu/

项目地址:

https://github.com/wsmoses/Enzyme

作者表示,Enzyme 可提供这些工具和能力:

  • Enzyme,一种用于 LLVM 的编译器插件,可以合成可静态微分的 LLVM IR 的快速梯度。包括 C、C ++、Fortran、Rust、Swift 等编译器前端生成的中间表示(IR)。

  • PyTorch-Enzyme/TensorFlow-Enzyme,一个外部功能接口,允许机器学习研究者使用 PyTorch 和 TensorFlow 使用以 LLVM 编译语言编写的外部代码。

  • Enzyme.jl,一个 Julia 包,通过动态高级语言编写的代码,仅使用低层信息获得梯度。

  • 通过链接时优化(LTO)支持了多来源 AD 和静态库支持。

  • 研究表明优化后运行 AD,在标准机器学习基准测试上可获得显著性能提升,并达到 SOTA 水平。

上图为 relu(pow(x,3)) 的梯度合成示例。左侧为 LLVM IR 上的原始计算。左侧注释中展示了将添加到前向传递中的活动变量的影子分配。右侧则是 Enzyme 将生成的反向传递。完整的合成梯度函数将结合使用这些函数(添加影子分配),将 if.end 中的返回替换为 reverse_if.end 的分支。

Enzyme 项目概述

Enzyme 项目是一个用于可静态分析 LLVM IR 的反向模式自动微分(AD)工具。它允许开发者可以自动创建基于源代码的梯度,而无需更多额外工作。

double foo(double);double grad_foo(double x) {
return __enzyme_autodiff(foo, x);
}

通过优化微分后的代码,Enzyme 可以比现有的优化工具提供更快的微分速度:

组件

Enzyme 工具主要由四部分组成:

  • 可选的预处理阶段,该阶段执行对 AD 有用的较小转换。

  • 一种新的过程间类型分析,可推断出内存位置的基础类型。

  • 活动分析,确定哪些指令或值会影响导数计算(在现有 AD 系统中很常见)。

  • 优化遍历可创建任何必需的派生函数,用生成的函数替换对__enzyme_autodiff 的调用。

更多详细介绍,可查看 MIT 研究者们提交的 NeurIPS 2020 论文。

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

MIT开源高性能自动微分框架Enzyme:速度提升4.5倍相关推荐

  1. java 自动微分,MIT开源高性能自动微分框架Enzyme:速度提升4.5倍

    作者|泽南.亚洲 来源|机器之心 麻省理工学院(MIT)提出的自动微分框架 Enzyme 在 NeurIPS 2020 大会上引起过不少人的兴趣,现在人们已经可以尝试使用这套工具了. 当前,PyTor ...

  2. 将sklearn训练速度提升100多倍,美国「返利网」开源sk-dist框架

    点击我爱计算机视觉标星,更快获取CVML新技术 本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载 选自Medium 作者:Evan Harris 机器之心编译 参与: ...

  3. 解码ICN/NDN:可将IPFS检索速度提升数十倍的网络底层技术

    近年来,星际文件系统IPFS(InterPlanetary File System)的数据检索速度一直是去中心化存储及检索领域的一大痛点.不过近期在国际通信网络领域顶会SIGCOMM上发表的一篇论文, ...

  4. 单机训练速度提升高达640倍,快手开发GPU广告模型训练平台

    作者|廉相如(快手FeDA智能决策实验室 ) 如何有效处理大规模用户数据进行广告推荐?对于互联网企业的发展和进步至关重要.这也是为何快手成立西雅图实验室并实现新一代GPU广告模型训练平台的原因之一.快 ...

  5. 中望CAD调用lisp在哪_中望CAD+加载LISP程序速度提升高达8倍

    对于即将推出的全新一代二维CAD平台软件中望CAD+,广州中望数字化设计软件有限责任公司中望CAD+研发总监何祎认为,"Lisp 是CAD 应用发展中使用最普遍的程序语言之一.数以百万计的设 ...

  6. MIT 的新型开源系统 Taco 将数据分析速度提升 100 倍 !(附论文)

    来源:全球人工智能 概要:麻省理工学院(MIT)开发的一种新型计算机系统为涉及"稀疏张量"(sparse     tensor)的计算加快了速度,稀疏张量是主要由0组成的多维数据数 ...

  7. 开源!让图像识别训练速度提升了8.7倍

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:量子位 AI博士笔记系列推荐 周志华<机器学习> ...

  8. 谷歌提出新型卷积网络EfficientNet:推理速度提升5.1倍,参数减少88%(附论文代码)...

    来源:机器之心 本文共1500字,建议阅读8分钟. 谷歌提出了一种新型CNN网络EfficientNet,该网络具备极高的参数效率和速度. [ 导读 ]谷歌提出了一项新型模型缩放方法:利用复合系数统一 ...

  9. AAAI 2020 | 滴滴东北大学提出自动结构化剪枝压缩算法框架,性能提升高达120倍...

    点击上方"视学算法",选择"星标" 快速获得最新干货 2020 年 2 月 7 日-2 月 12 日,AAAI 2020 将于美国纽约举办.不久之前,大会官方公 ...

最新文章

  1. android 多个属性值,android布局属性值fill_parent和match_parent
  2. 查看oracle监听服务状态,(总结)Oracle监听服务lsnrctl参数及查询状态详解
  3. Effective C++ 笔记(1)让自己习惯c++
  4. 用 bmon 实时查看网络流量
  5. 浅谈分辨率对模型影响以及训练方法
  6. 小米6X反复自动重启停不下,取下卡槽、电源音量-,ok了
  7. php smarty 手册下载,smarty教程
  8. 达内 python培训视频教程
  9. 我的世界服务器标记家位置,我的世界:你真的会看藏宝图吗?学会用标记,位置一次就找对...
  10. windows XP虚拟机安装
  11. JavaScript和TypeScript学习总结
  12. Linux源码解析--从开机加电到main函数
  13. 密码学基础(三)密码分析
  14. 2018TLC大会精彩回顾
  15. ASCII码值与字符的转换
  16. 另辟蹊径,独树一帜的写作方法
  17. Lua--棋牌游戏开发(概念性设计二
  18. 如何使用STM32和BLE收集SHT85传感器数据?
  19. 在家,看见弟妹刷电视剧,瞟了两眼
  20. 苹果老板乔布斯在斯坦福大学的演讲

热门文章

  1. php 替换字符串 图片,PHP替换字符串实现图片自适应屏幕实例代码
  2. vscode怎么写qt项目_使用VSCode 编译调试QT程序
  3. python xlrd使用_python使用xlrd 操作Excel读写
  4. python编程*三角形图形创意图片_python循环输出三角形图案的例子
  5. Spring4学习笔记
  6. freemark静态页面中文乱码
  7. NOIP2010排队接水
  8. eclipse 在 Linux中常用命令,持续更新....
  9. val, lazy, def
  10. Jquery对象本质和隐式迭代