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