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

选自Facebook

作者:Joaquin Quinonero Candela

机器之心编译

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

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

Facebook联合微软推出神经网络交换格式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/)

相关推荐