关于部署:推断(Inference)的实际部署有多种可能,可能部署在Data Center(云端数据中心),比如说大家常见的手机上的语音输入,目前都还是云端的,也就是说你的声音是传到云端的,云端处理好之后把数据再返回来;还可能部署在嵌入端,比如说嵌入式的摄像头、无人机、机器人或车载的自动驾驶,当然车载的自动驾驶可能是嵌入式的设备,也可能是一台完整的主机,像这种嵌入式或自动驾驶,它的特点是对实时性要求很高。
https://blog.csdn.net/intflojx/article/details/81778648
一、ONNX(Open Neural Network Exchange)
1、是什么:ONNX是微软和 Facebook 发布的一个深度学习开发工具生态系统,定义了一种和环境、平台均无关的标准的、开放的格式,用于表示深度学习模型。
2、作用:“翻译”
①连接不同深度学习框架,使得不同的模型可以转换;
②采用相同格式存储模型数据并交互,让不同的神经网络开发框架互通互用。
3、常见转换路线:
- Pytorch —— ONNX —— TensorRT
- Pytorch —— ONNX —— TVM
- TensorFlow —— ONNX —— NCNN
二、TensorFlow Serving:TensorFlow提供的部署线上模型推理方案,将训练好的模型直接上线并提供服务。将模型部署到线上,并提供合适的接口给外部调用。
三、NCNN和TensorRT:将从云端完成训练后的算法高效迁移到异构的边缘智能芯片上执行。【边缘、芯片推理】
1、NCNN:腾讯推出的针对移动部署的推理框架,无第三方依赖,在手机端CPU运算速度优于开源框架,可以在PC端进行推理;针对CPU的性能进行部署优化;其推理所需要的网络文件和权重文件分别为(.param、.bin)。
2、TensorRT:NVIDIA打造的cuda神经网络推理库,是一个C++库;将其他框架的模型统一全部转换到TensorRT中,然后在TensorRT中针对Nvidia自家的GPU优化,进行部署加速,针对运行时性能自动优化训练过的神经网络;针对GPU和CPU来优化和加速模型推理,支持INT8量化和FP16量化,只能在GPU设备进行;TensorRT支持.engine格式,关于其他格式文件到该格式文件的转换方式有以下两种:
①开源框架训练的模型——ONNX——.engine
②直接用tensorrt将训练的模型转化为.engine(tensorrt,开源项目,将项目转换和部署集合)