首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
1
20 行代码!带你快速构建基础文本搜索引擎 ⛵
2
AI听曲识歌!哼曲、口哨吹,都能秒识! ⛵
3
边缘计算 | 在移动设备上部署深度学习模型的思路与注意点 ⛵
4
推荐系统!基于tensorflow搭建混合神经网络精准推荐! ⛵
5
毫秒级!千万人脸库快速比对,上亿商品图片检索,背后的极速检索用了什么神器? ⛵
6
AI+医疗:使用神经网络进行医学影像识别分析 ⛵
7
AI识万物:从0搭建和部署手语识别系统 ⛵
8
听音识情绪 | 程序员手把手教你搭建神经网络,更快get女朋友情绪,求生欲max!⛵
9
爆肝万字,终于搞定这篇⛵神经网络搭建全全全流程!学不会你来找我~
10
股市预测,销量预测,病毒传播...一个时间序列建模套路搞定全部!⛵
11
Hugging Face发布diffuser模型AI绘画库初尝鲜!
12
你给文字描述,AI艺术作画,精美无比!附源码,快来试试!
13
只能用于文本与图像数据?No!看TabTransformer对结构化业务数据精准建模
14
实际应用效果不佳?来看看提升深度神经网络泛化能力的核心技术(附代码)
15
TensorFlow?PyTorch?Paddle?AI工具库生态之争:ONNX将一统天下
16
从头训练一个神经网络!教它学会莫奈风格作画!⛵
17
2022极端高温!机器学习如何预测森林火灾?⛵ 万物AI
18
TensorFlow深度学习!构建神经网络预测股票价格!⛵
19
AI医疗高精尖!基于AI的新药研发!⛵
20
超精准!AI 结合邮件内容与附件的意图理解与分类!⛵
21
AI绘画提示词创作指南:DALL·E 2、Midjourney和 Stable Diffusion最全大比拼 ⛵
22
图解来啦!机器学习工业部署最佳实践!10分钟上手机器学习部署与大规模扩展 ⛵
23
NLP实践!文本语法纠错模型实战,搭建你的贴身语法修改小助手 ⛵
24
全都会!预测蛋白质标注!创建讲义!解释数学公式!最懂科学的智能NLP模型Galactica尝鲜 ⛵
25
真实世界的人工智能应用落地——OpenAI篇 ⛵

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

💡 作者:韩信子@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

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

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

深度学习框架数量的激增导致整个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生态中最终的桥梁之一,发挥巨大的作用。

参考资料

下一篇
举报
领券