TensorFlow?PyTorch?Paddle?AI工具库生态之争:ONNX将一统天下


TensorFlow?PyTorch?Paddle?AI工具库生态之争:ONNX将一统天下

文章插图
作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 本文地址:https://www.showmeai.tech/article-detail/319 声明:版权所有,转载请联系平台与作者并注明出处 收藏ShowMeAI查看更多精彩内容

TensorFlow?PyTorch?Paddle?AI工具库生态之争:ONNX将一统天下

文章插图
当今的很多AI算法落地,我们都需要依赖特定的机器学习框架,现在比较热门的 AI 工具库如 TensorFlow 和 PyTorch 都出自大厂 , 并且有很好的生态和资源,借助它们我们可以很快速完成典型的一些任务,如图像分类或自然语言处理 。
然而 , 工具库和工具库之间的相互切换 , 是一件很麻烦的事情 , 比如某公司团队开发主要使用TensorFlow,然而现在有一个深度算法,需要使用 caffe2 部署在移动设备上,那我们需要用 caffe2 重写模型重新训练,这是一个非常耗时耗力的过程 。
ONNX 便应运而生,TensorFlow、Caffe2、PyTorch、paddlepaddle、Microsoft Cognitive Toolkit、Apache MXNet 等主流框架都对 ONNX 有着不同程度的支持 。这就便于了我们的算法及模型在不同的框架之间的迁移 。
TensorFlow?PyTorch?Paddle?AI工具库生态之争:ONNX将一统天下

文章插图
ONNX(Open Neural Network Exchange)是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型 。它使得不同的人工智能框架(如PyTorch,TensorRT,MXNet)可以采用相同格式存储模型数据并交互 。ONNX的规范及代码主要由微软,亚马逊,Facebook 和 IBM 等公司共同开发,以开放源代码的方式托管在Github上 。
ONNX 官方资源
  • ONNX 官方网站:https://onnx.ai/

TensorFlow?PyTorch?Paddle?AI工具库生态之争:ONNX将一统天下

文章插图
  • ONNX 官方Github地址:https://github.com/onnx/onnx

TensorFlow?PyTorch?Paddle?AI工具库生态之争:ONNX将一统天下

文章插图
  • 支持的工具库:

TensorFlow?PyTorch?Paddle?AI工具库生态之争:ONNX将一统天下

文章插图
为什么需要ONNX机器学习/深度学习的出现和蓬勃发展的背景下 , 深度学习/机器学习模型训练与执行的框架/库的数量呈指数级增长 。有两大原因促成这个增长:
  • 硬件供应商开发了自己的框架以实现垂直集成并使其更容易为他们的硬件开发模型
  • 开发自己的框架以针对特定用例实现最佳性能的软件供应商

TensorFlow?PyTorch?Paddle?AI工具库生态之争:ONNX将一统天下

文章插图
深度学习框架数量的激增导致整个AI生态系统碎片化 , 也使跨框架或硬件生态系统的工作变得困难 。ONNX 的诞生是为了消除框架之间以及不同硬件生态系统之间互操作性的障碍 。
什么是ONNXONNX 是一个开放规范,包含以下定义:
计算图模型存储文件格式模型:是一个保存版本信息和元数据的非循环计算数据流图 。
图:包含模型中数据流图的名称、形成图的计算节点列表、图的输入和输出 。
计算节点:图中的每个计算节点都接受零个或多个 定义类型、一个或多个定义类型的输出以及特定节点对其输入执行的操作类型 。
TensorFlow?PyTorch?Paddle?AI工具库生态之争:ONNX将一统天下

文章插图
标准数据类型ONNX 作为标准支持以下数据类型列表:
【TensorFlow?PyTorch?Paddle?AI工具库生态之争:ONNX将一统天下】张量类型:
  • Int8、Int16、Int32、Int64
  • Quantized Int
  • uint8, uint16, uint32, uint64
  • Float16, float, double
  • Bool
  • String
  • Complex64, complex128
非张量类型:
  • Sequence
  • Map
  • Operators (Built-in/ Custom)
算子/运算符ONNX Graph 中的每个计算节点都执行特定的操作并产生一个或多个输出 。ONNX 标准定义了 运算符,ONNX图支持的运算符列表也在不断拓展,并通过 ONNX Opsets 保持最新状态 。每次 ONNX Opset 更新都可能新增算子支持或改进现有算子 。
ONNX的目标ONNX 的核心设计理念是:
  • 互操作性
  • 可移植性

TensorFlow?PyTorch?Paddle?AI工具库生态之争:ONNX将一统天下

文章插图
如上图所示,ONNX 希望通过提供一个高效的接口将模型从一个框架转换到另一个框架,从而成为不同框架之间的中介 。
下表中列出了将模型从一些最常见的AI框架转换为 ONNX 格式的工具 。
TensorFlow?PyTorch?Paddle?AI工具库生态之争:ONNX将一统天下

推荐阅读