ONNX一个沟通各大AI框架的桥梁

ONNX(Open Neural Network Exchange)是微软设计的开放标准,旨在促进不同深度学习框架之间的模型互操作性。它定义了一个计算图模型的序列化格式,包括数据类型和操作集,允许模型在验证后导出为ONNX格式,以便在各种优化的推理引擎中使用。ONNX还包含了ONNX-ML,支持传统机器学习操作。
摘要由CSDN通过智能技术生成

概述

ONNX全称Open Neural Network Exchange,是微软设计的一个开放式深度学习神经网络模型的格式。旨在通过一个统一的模型格式标准,建立一个强大的人工智能生态。
深度神经网络的实现是通过数据流图实现的,数据(张量等)从输入,流过一个个集选节点,最终在输出结点得到推理结果。不同的框架实现数据流图的的方式不尽相同,有的使用静态图,有的在运行的过程中动态创建。但是不管哪种方式,最终都会得到一个神经网络模型的结构图以及权重。通常,神经网络模型的结构、权重等信息不会一直在内存里,通常需要将它们保存到文件中,用于部署、转换等。而每一种框架都有他们自己的一套专有的模型表示方法,拥有自己的一套标准去操作、运行他们自己的模型。由于AI 研究正在迅猛发展当中,每种框架都有自己的侧重点,比如有的框架特别适合于做研究,能够快速的搭建验证模型;而有的框架则最特定硬件做了大量性能优化,特别适合生产部署。
这时候,一个通用的模型格式标准应运而生,它就是ONNX。有了这样一个统一的模型格式标准,你就可以使用能够快速的框架去验证你的模型,然后将模型导出到ONNX格式,再用有特殊优化的推理引擎进行推理或者转换到可以在移动端进行推理的特殊格式。
ONNX还有另一个变种,ONNX-ML,它额外增加了一些传统的标准机器学习操作。

组成

ONNX是一个开放的标准,这个标准主要有以下三部分组成:

  1. 一个可扩展的计算图模型的定义,它主要确定了一套用于序列化模型的格式标准。这个序列化后的模型可以不遵循原有框架在内存中的表示,序列化或者使用ONNX模型的框架可以处于效率等的目的使用不同的内存布局;
  2. 一个标准数据类型的定义,它主要定义了模型中的数据如权重、计算中间结果等的表示方法;
  3. ONNX自带的操作,它定义了一套原子操作和函数。

版本号表示

版本号有两种表示方法:简单数字表示和语义表示,用8个字节存储版本信息。
简单数字表示全部字节用于表示一个数,表现形式为XXX,如0x0000000000000001 表示数字1;语义表示则将这八个字节分开,最高位两个字节表示主版本号,次高位两个字节表示此版本好,剩下四个字节表示补丁、编译等版本号,最终的表现形式为MAJOR.MINOR.PATCH,例如0x0001000200000003表示主版本号为1,此版本号为2,补丁版本号等为3。两种表示方法的区分方法是查看最高四个字节内容,如果最高四个字节为0,则使用的是简单数字表示;如果最高四个字节不为零,则使用的是语义表示。例如0x0000000000000001 最高四个字节为0,所以表示这个版本号是用简单数字表示;而0x000000010000000 最高四个字节不为0,则表示这是语义版本号。
值得注意的是,ONNX标准中规定,IR和OP的版本号必须用简单数字来表示,版本数值单调递增,而对于模型版本,并未作出规定,可以随意二选一。

模型结构

<
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值