概述

深度学习通过神经网络在数据流图上进行计算来实现。一些框架(如 CNTK、Caffe2、Theano 和 TensorFlow)使用静态图,而另一些框架(如 PyTorch 和 Chainer)使用动态图。但是,它们都提供了接口,使开发人员可以轻松构建计算图,并提供运行时以优化方式处理这些图。该图充当中间表示 (IR),它捕获了开发人员源代码的特定意图,并且有利于优化和转换为在特定设备(CPU、GPU、FPGA 等)上运行。

为什么需要通用 IR?

如今,每个框架都有自己的专有图表示,尽管它们都提供类似的功能——这意味着每个框架都是一个孤立的 API、图和运行时堆栈。此外,框架通常针对某些特性进行了优化,例如快速训练、支持复杂的网络架构、移动设备上的推理等。开发人员需要选择一个针对这些特性之一进行了优化的框架。此外,这些优化可能更适合开发的特定阶段。由于需要转换,这会导致研究与生产之间出现重大延误。

为了使 AI 民主化,我们设想赋予开发人员在开发或部署的任何阶段选择最适合其项目的框架的能力。开放神经网络交换 (ONNX) 格式是一种通用 IR,有助于建立这个强大的生态系统。

通过提供计算图的通用表示,ONNX 有助于开发人员为其任务选择合适的框架,允许作者专注于创新增强,并使硬件供应商能够简化针对其平台的优化。

ONNX 被设计为开放格式。我们欢迎来自社区的贡献,并鼓励每个人在其生态系统中采用 ONNX。

为什么有两个变体?

ONNX 的基本定义包括基于神经网络技术的机器学习算法的必要支持。ONNX-ML 包括经典机器学习算法中常用的附加类型和标准运算符。创建这两个变体是为了明确承认某些框架希望以标准化的方式超越神经网络算法,同时允许其他框架仅支持神经网络。