概述

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

为什么需要通用 IR?

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

为了实现人工智能民主化的目标,我们设想让开发人员能够根据项目需求,在开发或部署的任何阶段选择最适合的框架。开放神经网络交换 (ONNX) 格式是一种通用 IR,有助于建立这个强大的生态系统。

通过提供计算图的通用表示,ONNX 帮助开发人员为其任务选择合适的框架,使作者能够专注于创新改进,并使硬件供应商能够为其平台优化提供便利。

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

为什么有两种变体?

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