业界 | Facebook联合微软推出神经网络交换格式ONNX:实现不同框架间模型迁移

选自Facebook

作者:Joaquin Quinonero Candela

机器之心编译

近日,Facebook 与微软联合推出了开放式神经网络交换(ONNX)格式,它是一个表征深度学习模型的标准,可实现模型在不同框架之间的迁移。ONNX 是构建开源生态环境的第一步,供人工智能开发者轻松选择并组合最先进的工具。

开发学习模型时,工程师和研究者有很多框架可以选择。在一个项目开始时,开发者必须筛选特征、选定框架。很多时候,在研究和开发实验时所选择的特征与投入生产所需特征并不相同。很多组织缺乏弥补操作模式之间鸿沟的良好方式,不得不采取一些变通方式来应对,比如要求研究者在生产系统中工作或者手动翻译模型。

我们与微软一起开发了 ONNX,希望弥补这一鸿沟,帮助开发者选择适合其项目当前阶段的框架,并随着项目的进展在框架之间轻松转换。Caffe2、PyTorch 和 CNTK 9 月即将支持 ONNX,这允许模型在上述框架之一中进行训练,并转移到另一个框架进行推断。我们诚邀人工智能社区一起支持 ONNX。实现不同框架之间的互通以及简化从研究到生产的流程将会进一步加速人工智能社区的创新。

Facebook ONNX

ONNX 是 Facebook 深度学习方法中的重要组成部分。Facebook 的 AI 研究团队(FAIR 和 AML)致力于扩展 AI 研究的边界,开发更好的学习算法。每当我们有了突破,我们会尽快使使用我们应用程序的人们获取更好的技术。有了 ONNX,我们可以让全世界的 AI 研究和产品汇聚一堂,加快创新和部署。

研究者在实验新模型,特别是模型还在研究中的时候,写神经网络时需要最大程度的灵活性和可表达性,从动态神经网络到支持梯度渐变,同时还要保持基本的卷积神经网络高效性。研究者还想要快速迭代,因此他们需要有优秀的交互开发和调试工具。PyTorch 的构建旨在扩展研究框架的极限,将研究者从单一平台的束缚中解放出来,能够更加轻松地表达自己的想法。

与此相反,产品管道在保证模型大体稳定的情况下,每天通过大量新数据运行训练和推断。通过一些精细的技巧比如分层,手动调整代码以节省计算资源。Caffe2 在构建时就考虑了产品、移动端与表现。Caffe2 的内部构件非常灵活并经过了高度优化,因此我们可以在动力不足的硬件中驾驭更大更好用的模型,施展所有的技巧。

使用 ONNX,我们可以充分利用两个世界。现在,我们可以从 PyTorch 中输出很多常用神经网络模型,并将其部署在 Caffe2 中。这是我们快速将最新研究成果投入生产的第一步。接下来几个月,我们将改进 ONNX、Caffe2 和 PyTorch,使它们能够更深度地进行互通。

工作原理

为了实现 ONNX 支持,我们必须改写 PyTorch 和 Caffe2,统一框架之间的算子。在 Caffe2 中,该过程与添加翻译器类似,因为 Caffe2 已经具备内置静态图表示。在 PyTorch 中,神经网络被指定为程序,而不是清晰的图,这带来了巨大挑战。为了从程序中抽取图表示,我们开发了一个跟踪器,用来」跟踪」(记录)程序运行过程。跟踪程序可以消除复杂性,使转换图表示更加容易。

以下代码展示了其工作原理:

x = y * 2if someComplicatedFunction():

z = x + yelse:

z = x * y

为了直接输出代码,ONNX 必须支持条件句(conditional)和 someComplicatedFunction();实际上,它就变成了一个通用的编程语言。但是,在很多深度学习模型中,someComplicatedFunction() 的结果在推断中总是相同。例如,在 PyTorch 中,条件句通常是对输入张量的大小或维度上的计算。在这些情况下,跟踪代码要简单得多,也更容易在 ONNX 中得到表示:

#someComplicatedFunction() == True

x = y * 2

z = x + y

目前,我们的追踪器用于很多常见神经网络,但是不包括 PyTorch 中的一些较为高级的程序,如带有动态流控制的程序。我们将不断改进 ONNX 和跟踪器来支持这些程序,这样开发者就可以同时利用 PyTorch 的灵活性和 Caffe2 的高性能鲁棒部署能力。

后续

今天,我们发布了 ONNX 支持的最新版 Caffe2 和 PyTorch,希望大家对新特征感兴趣!由于其还处在初级阶段,我们希望你在使用时能提供反馈和建议。我们将持续改进 ONNX、PyTorch 和 Caffe2,确保开发者获取 AI 研究的最新工具。

开始使用 ONNX

  • ONNX(https://github.com/onnx)
  • Caffe2(https://caffe2.ai/)
  • PyTorch(http://pytorch.org/)
  • 高分辨率教程(http://pytorch.org/tutorials/advanced/super_resolution_with_caffe2.html)
  • 微软博客(https://www.microsoft.com/en-us/cognitive-toolkit/blog/2017/09/microsoft-facebook-create-open-ecosystem-ai-model-interoperability/)

原文链接:https://research.fb.com/facebook-and-microsoft-introduce-new-open-ecosystem-for-interchangeable-ai-frameworks/

本文为机器之心编译,转载请联系本公众号获得授权。

原文发布于微信公众号 - 机器之心(almosthuman2014)

原文发表时间:2017-09-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技评论

动态 | 从零开始快速入门深度强化学习,OpenAI 发布学习资源 Spinning Up

AI 科技评论编者按:日前,OpenAI 发布了深度强化学习教育资源 Spinning Up,内容包括易懂的深度强化学习代码示例、习题、文档和教程。据 Open...

852
来自专栏PHP在线

谈谈新浪微博背后的那些算法

本文对微博中常见的问题的对应算法进行了简单的介绍,在实际应用中的算法比介绍的要复杂的多。当然,本文覆盖的主题并不全,比如好友推荐、热点跟踪等就没有涉及到。但古人...

37012
来自专栏DT数据侠

海量游戏、影视究竟哪部才是你的菜?交给这个推荐系统帮你选

在我们生活的这个时代,每周都有大量的新游戏、电影和剧集问世,追剧、追游戏并不容易,往往需要花费好几个小时浏览各种博客、媒体上的评价才能决定一部作品是否是你的菜。...

930
来自专栏数据派THU

独家 | 一文读懂LinkedIn个性化推荐模型及建模原理

原文标题:HowLinkedIn Makes Personalized Recommendations via Photon-ML Machine Learni...

32810
来自专栏华章科技

独家 | 一文读懂推荐系统知识体系(附学习资料)

推荐系统就是根据用户的历史行为、社交关系、兴趣点、所处上下文环境等信息去判断用户当前需要或感兴趣的物品/服务的一类应用。

5696
来自专栏智能算法

关于车牌识别过程中的工作流程框架分析

车辆检测跟踪模块   车辆检测跟踪模块主要对视频流进行分析,判断其中车辆的位置,对图像中的车辆进行跟踪,并在车辆位置最佳时刻,记录该车辆的特写图片,由于加入了跟...

3907
来自专栏PPV课数据科学社区

【聚焦】微博背后的那些算法

引言 微博是一个很多人都在用的社交应用。天天刷微博的人每天都会进行着这样几个操作:原创、转发、回复、阅读、关注、@等。其中,前四个是针对短博文,最后的关注和@则...

3098
来自专栏PPV课数据科学社区

英伟达深度学习专家路川详解“如何升级GPU深度学习系统”

GPU 成为在构建深度学习系统时必不可少的需要关注的方向,但是诸如如何选择一款 GPU 来搭建深度学习平台,如何升级自己的 GPU 之类的问题一直困扰着开发者。...

4256
来自专栏AI科技评论

开发丨谷歌机器学习白皮书全解析 43 条黄金法则(四)

AI 科技评论按:此白皮书为谷歌总结的机器学习(ML)最优实践方法,浓缩了其多年技术积累与经验,尤其是 YouTube、Google Play 和 Google...

3835
来自专栏一名叫大蕉的程序员

Machine Learning最小可迭代产品No.75

报告各位首长,我参与的第二个项目顺利上线啦~ 棒棒,又一次感觉自己做的东西是有价值的,这个项目是一个平台类产品,专注于提高线下零售的实施效率,希望后面的迭代会越...

2088

扫码关注云+社区

领取腾讯云代金券