一、深度学习的部署流程
步骤1:确定部署环境ü有没有GPU?具体GPU型号是什么?ü具体什么操作系统?可以联网部署么?ü具体CPU和内存是多大?ü具体部署方法是什么?编程环境是什么?
步骤2:确定部署要求ü最长响应时间多少?ü平均响应时间多少?ü最大并发量多少?ü模型最大权重多少?
步骤3:实施模型部署,包括安装、打包和验证;
GPU部署:利用CUDA加速;
CPU部署:利用CPU完成计算;
服务部署:把模型调用过程封装为HTTP或GRPC服务;
本地部署:将模型部署到设备本地,直接进行调用;
Python语言部署:p C++语言部署
---------------------------------
部署方法1:基于Python的本地部署,将模型权重导出,并使用Python加载进行预测。
适用场景:简单的Demo,或者桌面GUI应用;
p 部署方法2:基于服务器的GPU部署,需要利用服务器GPU进行加速,并完成远程调用;
适用场景:大多数API调用场景;
p 部署方法3:基于服务器的CPU部署,并完成远程调用;
适用场景:大多数API调用场景;
p 部署方法4:基于移动端/嵌入式设备,在移动端完成本地模型调用;
适用场景:现有的智能手机设备等场景;
---------------------------------
模型参数量:模型权重大小;
模型计算量:FLOPs(浮点运算数)
模型精度:
模型环境:所依赖的环境
二、深度学习模型加速和压缩方法
权重冗余:裁剪、分解、蒸馏;
数值冗余:量化;
------------------------------
裁剪(Pruning):去掉不重要的参数
方法1:在参数loss中加入L1,让权重稀疏化;
方法2:考虑参数对loss的影响,根据导数衡量重要性;
方法3:考虑到参数对后续层的影响;
方法4:计算参数相关性;
------------------------------
分解(Low-rank factorization):施加低秩约束的方式稀疏化卷积核矩阵
方法1:将参数矩阵进行SVD分解;
方法2:通过聚类方法压缩矩阵;
优点:适合模型压缩;
缺点:计算成本很高,现在已经很少使用;
------------------------------
量化(quantization):用较低位宽表示典型的 32 位浮点网络参数
方法1:二值量化,将权值矩阵中的单精度浮点数用两个值来表示;
方法2:多值量化,使用8big或16bit定点数来表示;
------------------------------
蒸馏(Knowledge distillation):将深度和宽度网络压缩成较浅的网络,其中压缩模型模拟了
复杂模型所学习的函数。
三、GPU/CPU部署方法
GPU环境:如何充分利用GPU完成加速;
步骤1:导出深度学习为ONNX格式;
步骤2:模型参数裁剪;
步骤3:TensorRT参数量化,转换;
------------------------------
CPU环境:如何充分利用多核CPU完成加速;
步骤1:模型参数裁剪;
步骤2:利用MKL-DNN或OpenVINO完成加速;
MKL/MKL-DNN
Intel MKL(Intel Math Kernel Library),英特尔数学核心函数库,是一套高度优化、线程安全
的数学例程、函数,面向高性能的工程、科学与财务应用。提供了线性代数、快速傅立叶转换、
矢量数学与随机号码生成器支持。
OpenVINO
OpenVINO是英特尔推出的一款全面的工具套件,可以兼容各种开源框架训练好的模型,拥有算法模
型上线部署的各种能力。
------------------------------
TFLite:TensorFlow Lite 是一种用于设备端推断的开源深度学习框架。
------------------------------
TensorFlow Serving
是一个适用于机器学习模型的灵活、高性能应用系统,专为生产环境而设计。
模型的端到端转换包含tensorflow版本和pytorch版本的实践
load & save补充:
opencv也是可以来进行模型的部署的
gRPC 是可以在任何环境中运行的现代开源高性能 RPC 框架。它可以通过可插拔的支持来有效地连接数据中心内和跨数据中心的服务,以实现负载平衡,跟踪,运行状况检查和身份验证。它也适用于分布式计算的最后一英里,以将设备,移动应用程序和浏览器连接到后端服务。
参考文章:
https://zhuanlan.zhihu.com/p/46591057
https://zhuanlan.zhihu.com/p/58182172 Int8量化
https://github.com/tensorflow/tensorrt TensorRT的代码TF版本
https://github.com/NVIDIA-AI-IOT/torch2trt pytorch版本
https://www.tensorflow.org/lite/examples/bert_qa/overview?hl=zh-cn CV&NLP的常见任务执行TensorFlow Lite
https://github.com/tensorflow/serving 生产环境的serving部署
https://pytorch.org/tutorials/intermediate/pruning_tutorial.html pruning_tutorial
https://www.tensorflow.org/model_optimization/guide/quantization/post_training 量化
https://docs.opencv.org/4.5.2/dc/d70/pytorch_cls_tutorial_dnn_conversion.html opencv进行模型的部署
https://software.intel.com/content/www/us/en/develop/articles/intel-optimization-for-tensorflow-installation-guide.html intel
http://doc.oschina.net/grpc 开源中国组织翻译的《gRPC 官方文档中文版》
网友评论