概述¶
通过神经网络进行深度学习是通过数据流图的计算来实现的。一些框架(如CNTK、Caffe2、Theano和TensorFlow)使用静态图,而其他框架(如PyTorch和Chainer)使用动态图。然而,它们都提供了接口,使开发者能够轻松构建计算图,并以优化的方式处理这些图的运行时。该图作为中间表示(IR),捕捉开发者源代码的具体意图,并有利于优化和翻译以在特定设备(CPU、GPU、FPGA等)上运行。
为什么需要一个通用的IR?¶
今天,每个框架都有其专有的图表示,尽管它们都提供类似的功能——这意味着每个框架都是API、图和运行时的孤立堆栈。此外,框架通常针对某些特性进行优化,例如快速训练、支持复杂的网络架构、在移动设备上进行推理等。开发者需要选择一个针对这些特性之一进行优化的框架。此外,这些优化可能更适合开发的特定阶段。由于转换的必要性,这导致了研究和生产之间的显著延迟。
我们的目标是普及人工智能,我们设想让开发者能够在开发或部署的任何阶段选择最适合他们项目的框架。开放神经网络交换(ONNX)格式是一种通用的中间表示(IR),有助于建立这个强大的生态系统。
通过提供计算图的通用表示,ONNX帮助开发者为他们的任务选择合适的框架,允许作者专注于创新增强,并使硬件供应商能够为其平台简化优化。
ONNX 被设计为一个开放格式。我们欢迎社区的贡献,并鼓励每个人在他们的生态系统中采用 ONNX。
为什么有两个变体?¶
ONNX 的基础定义包括对基于神经网络技术的机器学习算法的必要支持。ONNX-ML 包括经典机器学习算法中常用的额外类型和标准运算符。创建这两个变体是为了明确认识到一些框架希望以标准化的方式超越神经网络算法,同时允许其他框架仅支持神经网络。