编辑|陈思
Facebook 与微软双方今天正式公布 ONNX 格式——即开放神经网络交换机制。这种交换格式允许机器学习开发人员轻松在 PyTorch 与 Caffe2 之间进行模型转换,从而显著加快研究与产品化工作的实施速度。
Facebook + Microsoft = ONNX
微软与 Facebook 公司日前一道公布新的开放神经网络交换( Open Neural Network Exchange 简称 ONNX)格式。这是新型深度学习模型标准将使得不同模型能够在各类框架之间往来转移。ONNX 堪称迈向深度学习开放生态系统的重要一步,允许 AI 开发人员轻松在多种先进工具之间随意切换,并根据需求选择最适合自身的方案组合。
如今,Cognitive Toolkit(CNTK)、Caffe2 以及 PyTorch 将全面支持 ONNX。微软与 Facebook 共同开发出 ONNX 这一开源项目,双方都希望 AI 技术社区能够帮助他们进一步完善这一研究成果。
为什么要做 ONNX?
过去,深度学习框架的选择一直属于一种重要的意识形态取向。Facebook AI 研究(简称 FAIR)习惯于采用 PyTorch——这是一套专门为了实现最先进研究成果而进行优化的深度学习框架,因此对于资源拥有极为旺盛的需求。
遗憾的是,在真实世界当中,大多数用户都会因智能手机及其它处理设备的计算能力限制而无法承担如此可观的资源需求。因此在着手构建、部署及扩展具体产品时,应用机器学习(简称 AML)小组更倾向于选择 Caffe2。Caffe2 同样属于一套深度学习框架,但其主要针对资源效率作出优化——因此特别适用于配置相对较低的移动设备,能够立足其上凭借 Caffe2Go 运行经过优化的各类机器学习模型。
Facebook 与微软双方此次发布的协作成果将帮助人们轻松在 Caffe2 与 PyTorch 之间实现模型转换。通过降低这两套框架间的迁移障碍,两家公司将能够在本质上改善整个 AI 商业化进程的发展方式。
而对于大多数开发者来说,在开发学习模型时,工程师与研究人员们拥有众多 AI 框架方案可以选择。在项目的起始阶段,开发人员必须认真考量框架的特性与功能定位。在多数情况下,研究与开发阶段内选定的特性往往并不真正适合实际生产环境下的具体需求。这直接导致不少企业很难找到良好的动作模式差距对接途径,并因此被迫自行探索创造性方法加以解决——例如要求研究人员在生产系统当中进行实验或者手动翻译模型。
Facebook 与微软公司一同开发的 ONNX 正是为了弥合这一鸿沟——其允许 AI 开发人员要卖项目的当前阶段选择最匹配的框架,并随着项目的发展而轻松切换至其它框架选项。Caffe2、PyTorch 以及 Cognitive Toolkit 将在 9 月推出对 ONNX 的支持,这意味着由其中某一框架生成的模型将可被导出为 ONNX 格式,以供其它框架完成进一步推理。实现不同框架间的互操作性,简化由研究到生产的具体流程,这将极大提升 AI 社区的创新速度。
ONNX 在 Facebook 的实际表现
ONNX 是 Facebook 公司在深度学习方法层面作出的一项重要尝试。Facebook 公司的 AI 团队(包括 FAIR 与 AML)不断开拓 AI 前沿并开发更出色的学习算法。每当实现一项突破,研发团队都希望对相关成果加以应用以尽快服务于他人。通过 ONNX,他们希望专注于将全球范围内的各类研究与产品紧密结合起来,从而提升创新与部署工作的实现速度。
人们在研究并实验各类新模型时,都希望能够以最大的灵活性与表达空间编写神经网络——包括动态神经网络乃至梯度渐变支持,同时保持最基本的 ConvNet 成效。研究人员们还需要进行快速迭代,这意味着他们需要卓越的工具以进行交互式开发与调试。PyTorch 的诞生正是为了解决上述研究框架中常见的局限,包括帮助研究人员摆脱平台自身的束缚,以远超以往的便捷性方式探索自己的灵感与思路。
在另一方面,产品管道则持续对大规模新数据进行训练与引用,同时保证模型的总体架构不受影响。通过对经过精心调优的代码进行量化与编写,研究人员们能够借此节约资源,同时对特定于产品内某种模型的代码作出微优化。[GG1]Caffe2 在设计当中充分考虑到了各类产品、移动以及终极性能需求。Caffe2 自身具备卓越的灵活性且经过极致优化,因此能够充分遵循科学理论在低性能硬件之上发布规模更大且实际表现更出色的模型。
利用 ONNX,研发人员将能够把这两大生态系统的优点汇聚于一处。现在,他们能够从 PyTorch 当中导出多种常见神经网络模型,并将其部署在 Caffe2 之上。作为重要的第一步,这将支持研究者快速启动自己的新型生产研究与开发工作。在未来几个月当中,Facebook 还将陆续发布针对 Caffe2 与 PyTorch 的 ONNX 改进成果,以确保二者能够更为深入地实现互操作性。
ONNX 在微软的实际表现
微软承诺为每个人提供更具实际意义的有价值技术成果。作为一套用于构建深层神经网络的开源框架,微软发布的 Cognitive Toolkit 正是众多遵循这一价值取向的平台与工具方案中的典型代表。Cognitive Toolkit 与其它框架选项提供各类界面,允许开发人员更为轻松地借此构建并运行用于表达神经网络的计算图形。尽管此类框架拥有类似的功能,但不同框架所采取的图形表达格式却各有差别。ONNX 这一表达格式拥有以下主要优点:
框架互操作性
开发者们能够更为轻松地不同框架之间往来迁移,确保利用最佳工具处理手头的任务。每套框架都针对不同的诉求作出针对性优化,具体包括快速训练、支持灵活性网络架构、在移动设备上实现推理等等。在多数情况下,研究与开发工作中最重要的诉求往往与实际生产环境存在很大不同。正因为如此,开发人员往往被迫使用并不适合当前需求的框架选项并导致效率受到严重影响。而 ONNX 表达机制能够简化这一流程,确保开发人员以敏捷性方式使用多种多样的框架方案。
共享式优化
通过优化方式提升神经网络性能表现的各硬件供应商及其它参与方能够将 ONNX 设定为表达目标,从而一次性对多套框架进行调优。过去,对每一套框架进行频繁的针对性优化往往需要耗费大量时间。但 ONNX 表达则允许各类企业确保自己的开发人员更为轻松地完成这项任务。
ONNX 工作原理概述
ONNX 提供可扩展计算图模型定义,同时内置有运算符与标准数据类型定义。作为初期目标,将专注于推理(评估)所需要的相关能力。
每份计算数据流图都采用节点列表结构,并以此形成非循环图。各节点拥有一条或者多条输入内容以及一条或多条输出内容。每个节点皆属于指定某一运算符的一项调用。另外,该图还提供元数据以帮助记录其目的及作者等信息。
运算符在该图之外实现,但内置的运算符集则可跨越不同框架实现移植。每套支持 ONNX 的框架皆能够在适应数据类型之上提供运算符实现能力。
为了实现 ONNX 支持能力,研发团队需要对 PyTorch 以及 Caffe2 进行调整,同时统一这两套框架中的运算符。在 Caffe2 当中,这一流程类似于添加翻译器——这是因为 Caffe2 已经内置有一套静态图形表达机制。而在 PyTorch 当中,神经网络被指定为程序而非明确图形,因此也给研究人员带来更大挑战。为了从该程序中提取图形,研发团队开发出一款追踪器,其能够“追踪”(即记录)该程序的全部执行操作。通过这种执行追踪方法,可以消除 PyTorch 中的复杂性因素,确保结果可轻松被转换为图形表达。
为了说明其工作原理,首先请大家参考以下代码片段:
x = y * 2 if someComplicatedFunction():  z = x + y else:  z = x * y
为了直接导出此代码,ONNX 需要支持各项条件以及 someComplicatedFunction();,从而将其转换为通用型编程语言。然而在多种深度学习模型当中,someComplicatedFunction(); 的结果在推理过程中始终不变。举例来说,PyTorch 中的条件通常是对输入张量的大小或者维度进行某种计算。在这种情况下,通过代码进行单一追踪往往更为简单,也更易在 ONNX 中进行表达:
#someComplicatedFunction() == True x = y * 2 z = x + y
目前,该追踪器已经能够与多种常见神经网络协同运作,但尚无法支持动态流量控制程序等 PyTorch 当中部分更为先进的程序。随着时间推移,研发团队将持续改进 ONNX 与追踪器以支持此类程序,确保开发人员能够充分利用 PyTorch 的灵活性与 Caffe2 强大的高性能部署能力。
合作是否意味着一帆风顺?
微软表示将积极推动 ONNX 发展,并在未来的 Cognitive Toolkit 发行版中纳入对 ONNX 的支持,Facebook 表示也将继续推动 ONNX、PyTorch 与 Caffe2 的发展,确保开发人员能够获得最为尖端的 AI 工具。双方还将计划通过合作,建立参考实现、示例、工具以及模型资源库。
ONNX 表达格式代表着新型开放生态系统的实现基础,而这一生态系统将真正使 AI 拥有可访问性与价值实现能力。开发者们可以为自己的任务选择正确的框架选项,框架制作者们可专注于创新增强,硬件供应商们则能够借此简化自己的优化流程。微软方面表示,希望得到整个技术社区的支持,从而帮助 ONNX 真正实现这一令人振奋的发展愿景。
但必须承认,相当一部分研究工作仍然围绕 TensorFlow 乃至其它关键性框架。而在研究领域之外,也有其他人在努力简化针对不同设备的机器学习模型格式的优化转换途径。
具体来说,苹果公司的 CoreML 只能帮助开发人员转换极为有限的模型数量。截至目前,CoreML 甚至尚不支持 TensorFlow,而且创建定制化转换器的流程似乎相当复杂——这些都不禁令人感到失望。而由于谷歌与苹果等厂商在定制硬件之上掌握着更多机器学习框架优化控制权,因此保障此类框架间的互操作性就变得非常重要。
ONNX 的初版代码及说明文档目前已经在 GitHub 正式发布
GitHub
https://github.com/onnx/onnx
参考文章
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/
https://techcrunch.com/2017/09/07/facebook-and-microsoft-collaborate-to-simplify-conversions-from-pytorch-to-caffe2/

AI 前线微信社群
入群方法
关注 AI 前线公众账号(直接识别下图二维码),点击自动回复中的链接,按照提示进行就可以啦!还可以在公众号主页点击下方菜单“加入社群”获得入群方法~AI 前线,期待你的加入!

继续阅读
阅读原文