假设一个场景:现在某组织因为主要开发用TensorFlow为基础的框架,现在有一个深度算法,需要将其部署在移动设备上,以观测变现。传统地我们需要用caffe2重新将模型写好,然后再训练参数;试想下这将是一个多么耗时耗力的过程。
此时,ONNX便应运而生,Caffe2,PyTorch,Microsoft Cognitive Toolkit,Apache MXNet等主流框架都对ONNX有着不同程度的支持。这就便于了我们的算法及模型在不同的框架之间的迁移。无论你使用什么样的训练框架来训练模型(比如TensorFlow/Pytorch/OneFlow/Paddle),你都可以在训练后将这些框架的模型统一转为ONNX存储。 ONNX文件不仅存储了神经网络模型的权重,还存储了模型的结构信息、网络中各层的输入输出等一些信息。 然后将转换后的ONNX模型,转换成我们需要使用不同框架部署的类型,通俗来说ONNX 相当于一个翻译,一个框架与框架之间的标准中转站。
Open Neural Network Exchange(ONNX,开放神经网络交换)格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移。
它是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如Pytorch, MXNet)可以采用相同格式存储模型数据并交互。ONNX的规范及代码主要由微软,亚马逊,Facebook和IBM等公司共同开发,以开放源代码的方式托管在Github上。目前官方支持加载ONNX模型并进行推理的深度学习框架有:Caffe2, PyTorch, MXNet,ML.NET,TensorRT和Microsoft CNTK,并且TensorFlow也非官方的支持ONNX。
开放式神经网络交换(ONNX)是迈向开放式生态系统的第一步,它使AI开发人员能够随着项目的发展选择合适的工具。ONNX为AI模型提供开源格式。它定义了可扩展的计算图模型,以及内置运算符和标准数据类型的定义。最初的ONNX专注于推理(评估)所需的功能。ONNX解释计算图的可移植,它使用graph的序列化格式。它不一定是框架选择在内部使用和操作计算的形式。例如,如果在优化过程中操作更有效,则实现可以在存储器中以不同方式表示模型。
ONNX是一个开放式规范,由以下组件组成:
可扩展计算图模型的定义。
标准数据类型的定义。
内置运算符的定义。
深度学习算法大多通过计算数据流图来完成神经网络的深度学习过程。一些框架(例如CNTK,Caffe2,Theano和TensorFlow)使用静态图形,而其他框架(例如PyTorch和Chainer)使用动态图形。但是这些框架都提供了接口,使开发人员可以轻松构建计算图和运行时,以优化的方式处理图。这些图用作中间表示(IR),捕获开发人员源代码的特定意图,有助于优化和转换在特定设备(CPU,GPU,FPGA, npu等)上运行。
以下工作需要在深度学习环境搭建之后才能继续。
使用以下命令激活:
source activate myenv
安装必要的依赖库。可以使用以下命令安装:
conda install -c conda-forge protobuf=3.19
安装 onnx。可以使用以下命令安装最新版本的 onnx:
conda install -c conda-forge onnx
如果要安装特定版本的 onnx,可以使用以下命令:
conda install -c conda-forge onnx=1.12.0
安装完成后,可以使用以下命令验证是否安装成功:
import onnx
print(onnx.__version__)
如果输出了 onnx 的版本号,则说明安装成功。
使用以下命令激活:
source activate myenv
卸载 onnx。可以使用以下命令卸载:
conda remove onnx
如果在安装 onnx 时,安装了依赖库 protobuf,也可以一并卸载:
conda remove protobuf
卸载完成后,可以使用以下命令验证是否卸载成功:
import onnx
如果此时再运行程序,应该会出现 ImportError 或 ModuleNotFoundError 的错误,表明 onnx 已经被卸载。
使用以下命令:
conda install -c conda-forge onnxruntime
这将会安装最新版本的ONNX Runtime。如果需要安装特定版本的ONNX Runtime,可以使用以下命令:
conda install -c conda-forge onnxruntime=1.6
或者conda安装不了时也可以使用pip安装:
pip install onnx onnxruntime==1.6
其中,1.6指定所需的ONNX Runtime的版本号。
需要注意的是,anaconda环境中安装的ONNX Runtime要求Python版本在3.5至3.8之间。如果你的Python版本不在这个范围内,可能会导致安装失败或不兼容。如果需要使用其他版本的Python或者其他操作系统,请查看官方文档中的安装要求。