前言
对于深度学习项目而言,优秀的模型设计和高效的模型训练是不必可少的,但是模型训练后的部署才是项目的核心,既要在性能上满足高并发、低延迟的要求,又要尽可能地节约成本。OpenVINO就诞生于这样的背景下。
诸如TensorFlow、PyTorch等深度学习框架都是对于通用的CPU和GPU硬件实现网络训练、反向传播等API上的优化,但是没有对特定的硬件并基于硬件特性和架构做更细致的优化。
硬件厂商为了提升市场份额,自然需要为当下如此火热的深度学习提供软件支持,竞争成为性价比更高的深度学习模型部署平台。英伟达有自家的TensorRT,自然是需要有N卡作为硬件支撑,与之类似,英特尔有自家的OpenVINO,同样要求有intel硬件。
作为显卡行业的领军企业,英伟达的显卡市场份额达到80%,在深度学习对显卡需求旺盛时,已经尝到了很多甜头。开发TensorRT更是有利于让用户完成模型训练、部署一条龙。
与GPU相比,CPU在深度学习上就显得黯然失色了。从硬件设计上来看,GPU的高并行度就远远超过CPU,在网络训练上完胜CPU。但是在网络模型的部署上,CPU还是可以与GPU一战的。原因有两点,一是部署后的推理过程不需要反向传播,计算量大大减少,二是部署的网络需要低延迟来保证快速响应,GPU的数据传输速度不及CPU,在单次推理上的优势并不很大。

一句话概括:已训练的网络模型+Intel支持的硬件+OpenVINO环境—>部署高性能的网络模型应用。
OpenVINO支持的平台
操作系统
✔️ Linux
✔️ Windows
✔️ Mac OS
✔️ Raspbian OS
硬件平台
- Intel CPUs (英特尔CPU)
- Intel Processor Graphics (英特尔处理器显卡)
- Intel Neural Compute Stick 2 (英特尔神经计算棒)
- Intel Vision Accelerator Design with Intel Movidius VPUs (英特尔VPU)
OpenVINO关键组件
1. Mode Optimizer—模型优化器
OpenVINO的模型优化器支持多种深度学习框架下的模型作为输入,包括TensorFlow、Caffe、MXNet、Kaldi、ONNX,暂时还不支持PyTorch模型。
模型优化器读取原始神经网络模型,输出优化后的IR模型,见下图中深蓝部分。IR的全称是Intermediate Representation,可以理解为OpenVINO为了统一描述各个框架下的网络模型,提出的一种网络表示方法。

IR包括两个文件,一个.xml文件和一个.bin文件。
- .xml文件:描述网络拓扑结构(包括网络层、数据流的连接)
- .bin文件:存储网络的权重、偏置数据
除了将模型转为IR,模型优化器还会对模型进行优化,比如合并一些网络层,删除无用的层等等。
模型优化器提供的都是Python脚本,使用简单。
2. Inference Engine—推理引擎
推理引擎是OpenVINO的核心组件,是获取网络输入,高速推理出网络输出的一系列C++ API。OpenVINO的推理引擎是一种插件架构,每个插件分别对Intel不同的硬件设备实现推理API,比如CPU plugin、GPU plugin、GNA plugin、MULTI plugin等等。

上图是官方文档介绍的推理流程,可以概括为以下几个步骤,具体内容请参考OpenVINO官方文档。
- 初始化推理引擎Core
- 读取IR模型
- 配置输入输出
- 加载网络模型
- 创建推理请求(同步or异步)
- 分配输入数据
- 开始推理
- 获取推理输出的结果
OpenVINO的优点
- 官方文档十分全面,各个平台从安装到运行Demo一气呵成
- 提供简单易用的部署脚本工具,从模型下载到部署无需过多代码
- 允许跨平台并行推理
- 支持多种深度学习框架的模型部署
转载请注明转自:http://moyubao.net/coder/3305/