作者:韩信子@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 有着不同水平的反对。这就便于了咱们的算法及模型在不同的框架之间的迁徙。
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
机器学习/深度学习的呈现和蓬勃发展的背景下,深度学习/机器学习模型训练与执行的框架/库的数量呈指数级增长。有两大起因促成这个增长:
- 硬件供应商开发了本人的框架以实现垂直集成并使其更容易为他们的硬件开发模型
- 开发本人的框架以针对特定用例实现最佳性能的软件供应商
深度学习框架数量的激增导致整个AI生态系统碎片化,也使跨框架或硬件生态系统的工作变得艰难。ONNX 的诞生是为了打消框架之间以及不同硬件生态系统之间互操作性的阻碍。
什么是ONNX
ONNX 是一个凋谢标准,蕴含以下定义:
计算图模型存储文件格式
模型:是一个保留版本信息和元数据的非循环计算数据流图。
图:蕴含模型中数据流图的名称、造成图的计算节点列表、图的输出和输入。
计算节点:图中的每个计算节点都承受零个或多个 定义类型、一个或多个定义类型的输入以及特定节点对其输出执行的操作类型。
规范数据类型
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 的外围设计理念是:
- 互操作性
- 可移植性
如上图所示,ONNX 心愿通过提供一个高效的接口将模型从一个框架转换到另一个框架,从而成为不同框架之间的中介。
下表中列出了将模型从一些最常见的AI框架转换为 ONNX 格局的工具。
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