在机器学习中,通常训练完成了模型该如何部署?如果直接将训练环境部署在线上,会和训练平台或者框架相关,所以通常转换为ONNX格式。
1、ONNX简介
开放神经网络交换ONNX(Open Neural Network Exchange)是一套表示深度神经网络模型的开放格式,由微软和Facebook于2017推出,然后迅速得到了各大厂商和框架的支持。ONNX定义了一组与环境和平台无关的标准格式,为AI模型的互操作性提供了基础,使AI模型可以在不同框架和环境下交互使用。硬件和软件厂商可以基于ONNX标准优化模型性能,让所有兼容ONNX标准的框架受益。目前,ONNX主要关注在模型预测方面(inferring),使用不同框架训练的模型,转化为ONNX格式后,可以很容易的部署在兼容ONNX的运行环境中。
2、模型部署工作流程
模型部署工作流程通用如下:
(1)模型训练:使用PyTorch、TensorFlow或其他深度学习框架进行模型训练;(2)导出为ONNX格式:模型训练完成,将模型导出为ONNX格式;(3)模型转换:使用ONNX转换工具,如ONNX Runtime、TensorRT或OpenVINO等,将ONNX模型转换为目标设备和框架所支持的格式;(4)部署和推理:将转换后的模型部署到目标设备上,并使用相应的推理引擎进行推理;
部署流程
3、部署模型
为了更直观的了解ONNX格式内容,以下操作一下完整的流程。
3.1 训练模型
这里为了简单训练LogisticRegression模型,代码如下:
3.2 将训练的模型转换为ONNX格式
这里每个框架不一样,scikit-learn 转换是上述代码,对于PyTorch使用类似如下代码:
通过上述代码获得 logreg_iris.onnx 文件,加载模型并打印模型信息。
3.3 部署预测模型
使用 flask 作为serve部署API服务,加载onnx文件,并处理预测请求,代码如下:
相关的测试 curl 请求如下:
资料
1、https://github.com/aipredict/ai-deployment/blob/master/deploy-ml-dl-using-onnx/README.md