东方日出 发表于 2023-7-23 19:46:02

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

AI诸多东西库东西库之间的切换,是一件耗时耗力的麻烦事。ONNX 即应运而生,使分歧人工智能框架(如PyTorch、TensorRT、MXNet)可以采用不异格式存储模

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

当今的很多AI算法落地,我们都需要依赖特定的机器学习框架,此刻斗劲热门的 AI 东西库如 TensorFlow 和 PyTorch 都出自大厂,而且有很好的生态和资源,借助它们我们可以很快速完成典型的一些任务,如图像分类或自然语言措置。
然而,东西库和东西库之间的彼此切换,是一件很麻烦的事情,比如某公司团队开发主要使用TensorFlow,然而此刻有一个深度算法,需要使用 caffe2 部署在移动设备上,那我们需要用 caffe2 重写模型从头训练,这是一个非常耗时耗力的过程。
ONNX 便应运而生,TensorFlow、Caffe2、PyTorch、paddlepaddle、Microsoft Cognitive Toolkit、Apache MXNet 等主流框架都对 ONNX 有着分歧程度的撑持。这就便于了我们的算法及模型在分歧的框架之间的迁移。

http://pic4.zhimg.com/v2-7209a2209f4f60acf3d848f334facb07_r.jpg
ONNX(Open Neural Network Exchange)是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得分歧的人工智能框架(如PyTorch,TensorRT,MXNet)可以采用不异格式存储模型数据并交互。 ONNX的规范及代码主要由微软,亚马逊 ,Facebook 和 IBM 等公司共同开发,以开放源代码的方式托管在Github上。

ONNX 官方资源


[*] ONNX 官方网站:https://onnx.ai/



[*] ONNX 官方Github地址:https://github.com/onnx/onnx



[*]撑持的东西库:



为什么需要ONNX

机器学习/深度学习的呈现和蓬勃成长的布景下,深度学习/机器学习模型训练与执行的框架/库的数量呈指数级增长。有两大原因促成这个增长:

[*]硬件供应商开发了本身的框架以实现垂直集成并使其更容易为他们的硬件开发模型
[*]开发本身的框架以针对特定用例实现最佳性能的软件供应商

http://pic2.zhimg.com/v2-571b57d5bf8bf7b24d0e60d721e97fa1_r.jpg
深度学习框架数量的激增导致整个AI生态系统碎片化,也使跨框架或硬件生态系统的工作变得困难。ONNX 的诞生是为了消除框架之间以及分歧硬件生态系统之间互操作性的障碍。

什么是ONNX

ONNX 是一个开放规范,包含以下定义:
计算图模型存储文件格式

模型:是一个保留版本信息和元数据的非循环计算数据流图。
图:包含模型中数据流图的名称、形成图的计算节点列表、图的输入和输出。
计算节点:图中的每个计算节点都接受零个或多个定义类型、一个或多个定义类型的输出以及特定节点对其输入执行的操作类型。

http://pic4.zhimg.com/v2-5eb3116fc303f57760a65163f42f8317_r.jpg

尺度数据类型

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 的核心设计理念是:

[*]互操作性
[*]可移植性

http://pic2.zhimg.com/v2-185469aaddda609c727fb0cfda3f7fd5_r.jpg
如上图所示,ONNX 但愿通过提供一个高效的接口将模型从一个框架转换到另一个框架,从而成为分歧框架之间的中介。
下表中列出了将模型从一些最常见的AI框架转换为 ONNX 格式的东西。

http://pic2.zhimg.com/v2-3eddc7f946848ec6bb2810723e7362dd_r.jpg

ONNX实现与现状

实际上,要满足将模型从任何其他AI框架转换为ONNX一直是一个挑战。主要障碍之一是这些AI框架生态的高速成长与每次版本迭代带来的新撑持(例如算子等)。
模型从一个框架到另一个框架的转换归结为能够暗示原始模型的基础数学运算。下图显示了每个框架中定义的运算符数量。实际上,目前ONNX仅撑持PyTorch所有算子的约13% ,一些使用低频 PyTorch 运算符构建的模型在转换时还是有困难。


不外像PyTorch这样的东西库里,包含的很多运算符有这一样或者类似的功能,是否需要完全同步撑持也是一个问题。但ONNX开放了自定义运算符的功能,使得用户可以按照需要添加本身的功能。
即使目前 ONNX 还做不到完全撑持和自由衔接所有AI东西框架,但凭借丰硕的运算符集,ONNX已经可以描述来自各种框架的大大都 DNN 和 ML 模型。它的『函数』功能,使得用户可以把暂时不撑持的复杂的操作符用更原始的操作符来表达 。
它带来了AI生态的自由畅通,随着生态和社区的高速成长,相信在未来ONNX会成为AI生态中最终的桥梁之一,阐扬巨大的感化。
参考资料


[*]ONNX 官方网站:https://onnx.ai/
[*]ONNX 官方Github地址:https://github.com/onnx/onnx

http://pic2.zhimg.com/v2-b24fe6fd0bf7dd42bdf4e62f78fc93b5_r.jpg
页: [1]
查看完整版本: TensorFlow?PyTorch?Paddle?AI东西库生态之争:ONNX将一统天下