周日. 8月 1st, 2021

前言

对于深度学习项目而言,优秀的模型设计和高效的模型训练是不必可少的,但是模型训练后的部署才是项目的核心,既要在性能上满足高并发、低延迟的要求,又要尽可能地节约成本。OpenVINO就诞生于这样的背景下。

诸如TensorFlow、PyTorch等深度学习框架都是对于通用的CPU和GPU硬件实现网络训练、反向传播等API上的优化,但是没有对特定的硬件并基于硬件特性和架构做更细致的优化。

硬件厂商为了提升市场份额,自然需要为当下如此火热的深度学习提供软件支持,竞争成为性价比更高的深度学习模型部署平台。英伟达有自家的TensorRT,自然是需要有N卡作为硬件支撑,与之类似,英特尔有自家的OpenVINO,同样要求有intel硬件。

作为显卡行业的领军企业,英伟达的显卡市场份额达到80%,在深度学习对显卡需求旺盛时,已经尝到了很多甜头。开发TensorRT更是有利于让用户完成模型训练、部署一条龙。

与GPU相比,CPU在深度学习上就显得黯然失色了。从硬件设计上来看,GPU的高并行度就远远超过CPU,在网络训练上完胜CPU。但是在网络模型的部署上,CPU还是可以与GPU一战的。原因有两点,一是部署后的推理过程不需要反向传播,计算量大大减少,二是部署的网络需要低延迟来保证快速响应,GPU的数据传输速度不及CPU,在单次推理上的优势并不很大。

OpenVINO

一句话概括:已训练的网络模型+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为了统一描述各个框架下的网络模型,提出的一种网络表示方法。

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推理具体流程

上图是官方文档介绍的推理流程,可以概括为以下几个步骤,具体内容请参考OpenVINO官方文档

  1. 初始化推理引擎Core
  2. 读取IR模型
  3. 配置输入输出
  4. 加载网络模型
  5. 创建推理请求(同步or异步)
  6. 分配输入数据
  7. 开始推理
  8. 获取推理输出的结果

OpenVINO的优点

  1. 官方文档十分全面,各个平台从安装到运行Demo一气呵成
  2. 提供简单易用的部署脚本工具,从模型下载到部署无需过多代码
  3. 允许跨平台并行推理
  4. 支持多种深度学习框架的模型部署
   
 摸鱼堡版权所有丨如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明转自:http://moyubao.net/coder/3305/

发表评论

邮箱地址不会被公开。