概览¶

深度学习通过对数据流图进行计算来实现神经网络。一些框架(例如 CNTK、Caffe2、Theano 和 TensorFlow)使用静态图,而其他框架(例如 PyTorch 和 Chainer)使用动态图。然而,它们都提供了简单的接口供开发者构建计算图,以及以优化方式处理图的运行时。图作为中间表示 (IR),捕获开发者源代码的具体意图,并有利于优化和转换为在特定设备(CPU、GPU、FPGA 等)上运行。

为什么需要一个通用的 IR?¶

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

为了普及人工智能,我们希望赋予开发者权力,让他们能够在开发或部署的任何阶段选择最适合其项目的框架。开放神经网络交换 (ONNX) 格式是一种通用 IR,有助于建立这个强大的生态系统。

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

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

为什么是两个变体?¶

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