机器学习-深度学习 部署相关资料文档
这是上班之后的第一个文档,由于项目原因需要去了解一些和模型部署相关的知识,所以就简单了解了一下相应的部署引擎和框架,也是刚刚开始学习,如果有什么写的不对的欢迎大家交流,看见基本就回。
文章目录
- 机器学习-深度学习 部署相关资料文档
- 一.模型部署简介
- 二.模型部署的流程
- 三.模型部署工具
- TensorFlow.js TensorFlow Lite
- 简介
- 评估分析 推荐指数:⭐⭐⭐
- TorchScript
- 简介
- 评估分析 推荐指数:⭐
- ONNX (Open Neural Network Exchange)
- 简介
- 评估分析 推荐指数 ⭐⭐⭐⭐⭐
- 其他框架
- MXNet
- PaddlePaddle
- 总结
- 引用
下文机器学习-深度学习 部署 简称模型部署
一.模型部署简介
机器学习-深度学习跨语言的部署是通过将主要由python
实现的机器学习和深度度学习模型应用于实际的环境中,具体为部署在,手机,网页,PC等各类设备上。主要通过将模型保存成一种格式的文件,然后通过推理引擎进行读取。
机器学习 Machine Learning
:机器学习包括深度学习,但是在研究中,机器学习方法主要代指,SVM,KNN,聚类,决策树,随机森林,等传统机器学习方法。
深度学习 Deep Learning
:深度学习主要指,使用神经网络反向传播技术的,CNN(卷积神经网络),RNN(循环神经网络),GAN(对抗生成网络),DQN(强化学习网络等)
推理引擎 Inference Engine
:推理引擎在机器学习和深度学习领域中,是一个软件库或框架,用于运行经过训练的模型以进行预测或分类。它主要用于模型的部署阶段,即在实际应用环境中执行模型来进行推理的过程。
二.模型部署的流程
下文机器学习-深度学习 部署 简称模型部署
- 流程图补充解释
同语言同平台
:训练模型在PC端使用python,实际应用中也在PC端使用python,如果在Web上那就是不同平台,如果使用C#就是不同语言(在实际应用中几乎不会出现这种情况)将模型转换成通用的中间格式
: 例如将python中使用sklearn的机器学习库,pytroh,TensorFlow的深度学习库写的训练好的模型,转换中间格式文件,该文件类型可以被目标平台上的语言读取调用。各种语言调用中间格式文件
:使用目标平台支持的推理引擎,读取中间格式文件
主流模型部署流程示意图
三.模型部署工具
在目前的机器学习和深度学习任务中,目前最常用,知名度最高的的有三个库,sklearn机器学习库,以及两个深度学习框架Pytorch 和 TensorFlow 框架,下面的分析主要基于对以上三个常用库进行分析,其他值得一提的框架会在该章结尾进行简单盘点。
TensorFlow.js TensorFlow Lite
简介
在三个常用的库当中其中TensorFlow专属的推理引擎最为成熟(只能转换TensorFlow框架的模型),为TensorFlow.js 和 TensorFlow Lite
TensorFlow提供了TensorFlow.js,和TensorFlow Lite 来部署现有模型其中TensorFlow.js用于使用JavaScript在网页上部署模型,TensorFlow Lite(推理引擎)在手机上或者树莓派上部署模型,其中其,最后介绍的TFX为 TensorFlow Extended 是一个谷歌开发的管理平台,包括数据处理,模型训练,验证,部署和监控。
TensorFlow官网地址www.tensorflow.org
TensorFlow部署框架相关文档https://www.tensorflow.org/learn?hl=zh-cn#deploy-models
评估分析 推荐指数:⭐⭐⭐
- 优点
- 可在网页端训练模型:TensorFlow.js 可以在Web 上搭建模型进行训练,可以利用客户端的计算资源(理论上可以让网页上的模型自主训练个更新)
- 缺点
- 性能降低:TensorFlow.js 在网页上部署之后性能往往不如原生服务器
- 设备依赖:TensorFlow Lit 使用不同的设备部署性能可能不一致
- 资源相对偏少:由于TensorFlow在动态计算图和语法简洁易懂的表现上略弱于Pytorch,因此导致Pytorch更受研究者青睐,从而使得大量的开源模型首先都选择Pytoch框架进行编写(例如Yolo目标检测系列代码)因此再研究新的模型结构和训练策略时,找到的资源不如Pytorch丰富。
- 单一框架局限性:当TensorFlow框架无法满足项目需求时候,无法更改为其他框架的好用模型
TorchScript
简介
TorchScript是目前在研究领域最常用的深度学习框架Pytorch的专属推理引擎,可以使用Pytoch的C++ API 进行读取
TorchScript官网文档TorchScriptTorchScript地址https://pytorch.org/docs/stable/jit.html
Pytorh C++部署框架相关文档https://pytorch.org/cppdocs/
评估分析 推荐指数:⭐
- 优点
- 对C++支持较高
- 缺点
- 适配语言单一:目前除了python以外,几乎只能找到使用C++调用的资料,其他语言调用基本停留在理论上
- 教程资源非常少:几乎找不到浏览或收藏量较大的博客,或者GitHub代码,几乎只能靠看文档来调试
- 单一框架局限性:同TensorFlow,当Pytorch框架无法满足项目需求时候,无法更改为其他框架的好用模型
ONNX (Open Neural Network Exchange)
简介
ONNX(Open Neural Network Exchange)是一个用于机器学习模型互操作性的开放格式。它定义了一组通用操作符和文件格式,使不同框架、工具、运行时和编译器之间的模型使用更加便捷。
ONNX官网地址https://onnx.ai/index.html
下面是官网给出的支持的框架的清单
评估分析 推荐指数 ⭐⭐⭐⭐⭐
- 优点
- 运行速度提升:将模型转换为ONNX格式后,会将pytroch模型的性能提升5倍左右(CPU,GPU 都可以提升)
- 实用性极广:包括了市面几乎所有能支持的框架和包,除了Kears,TensorFlow,Pytorh,sklearn之外,甚至还支持Matlab,可以将这些框架或者语言的模型转换为onnx格式
- 兼容的推理引擎丰富:例如 Microsoft 的 ONNX Runtime NVIDIA 的TensorRT (针对NVIDIA GPU进行优化),以及一些其他的推理库
- 资源丰富:由于其出色广泛的适用性和出色的兼容性,其在部署工具的地位超然,由此网络资源非常丰富,易于寻求技术支持
- 行业领先:使用ONNX格式结合推理引擎之后模型的运行速度包括上诉TensorFlow和Pytorch的两种工具中,其性能表现在绝大多数情况下都是最好的
- 缺点
- 不可避免的略微存在大量框架模型之间寻找适配版本的问题
其他框架
MXNet
MXNet官网地址https://mxnet.apache.org/versions/1.9.1/
除了上诉工具,MXNet也是一个由亚马逊公司研发的推理引擎的框架,支持Python,C++,R等语言
其部署的推理引擎也是专属于这个框架的,且其本身也支持被转换成onnx格式,且其不如TensorFlow,以及Pytorch等应用广泛,导致其知名度和使用率略低,放弃Pytorch,和TensorFlow,学习MXNet意义不大,因此不对其进行优缺点分析。
PaddlePaddle
PaddlePaddle百度飞桨,目前中国最知名的国产深度学习框架,其也有自研的推理引擎Paddle Lite
PaddlePaddle官网地址https://www.paddlepaddle.org.cn/
Paddle Lite官网地址https://www.paddlepaddle.org.cn/paddle/paddlelite
在实际使用中,继承了一部分Pytorch的语法和继承了一部分TensorFlow的的语法,调试的方便程度在Pytorch之下,作为一个国产框架,联系技术支持能方便一些,其自己研的Paddle Lite 也无法超过ONNX的兼容性和性能,在性能全面超越ONNX之前详细分析意义不大。
总结
- 综合考虑学习成本和性能以及泛用性应选择ONNX
- 如果选择传统机器学习只能选择ONNX
- 如果考虑最优适配性,在TensorFlow,PaddlePaddle,MXNet三个有自己较为成熟的部署引擎中,选择TensorFlow
- 如需合作国产选择百度飞桨
引用
TensorFlow官网地址www.tensorflow.org
TensorFlow部署框架相关文档https://www.tensorflow.org/learn?hl=zh-cn#deploy-models
TorchScript官网文档TorchScriptTorchScript地址https://pytorch.org/docs/stable/jit.html
ONNX官网地址https://onnx.ai/index.html
MXNet官网地址https://mxnet.apache.org/versions/1.9.1/
PaddlePaddle官网地址https://www.paddlepaddle.org.cn/
Paddle Lite官网地址https://www.paddlepaddle.org.cn/paddle/paddlelite