11 月 28 日在上海,我们与 28w+ 线上观众、1300+ 线下开发者、工程师,以及行业重磅嘉宾一起,尽享一场技术盛宴!感谢现场来此应约的小伙伴们!
本次 DevFest 2021的主题是:
Explore in Change / 应变唯新
何为变 (Change),何为新?又如何应(Explore)?嘉宾们从其专业领域切入分析,为观众们带来独到的经验与见解。DevFest 2021 主会场的分享涵盖
技术创业
数字化产品
机器学习的开发运维
谷歌云
TensorFlow 推理 → 本文!
物联网
Flutter 延迟加载
…
以及两桌对谈和三场分会场
生命科学多云架构需求、选型和应用
吐槽机器学习那些事
数字化专场
职场规划
代码人生
本篇回顾(首篇)将带大家回顾:
intel OpenVINOTM 应用工程师杨亦诚老师分享:《如何提升 TensorFlow 后端推理能力 – TensorFlow 与 OpenVINOTM 的开发者之旅》
本讲核心
如何基于 intel OpenVINOTM 提升 TensorFlow 在 CPU 上的推理性能
什么是 TensorFlow + OpenVINOTM ?
杨老师开场先展示了一个预录制的 demo。Demo 展示了在使用 YOLOv3 进行人体目标检测的场景下,集成 OpenVINOTM 的 TensorFlow (下称 OVTF) 推理相比于常规 TensorFlow 推理,在时间、吞吐量上有显著的性能提升。
分析:为什么 OVTF 有性能的提升?
图1左图:常规 TensorFlow 推理调用 intel CPU 的推理资源,右图:OVTF 不仅利用 intel CPU 推理,还可激活 intel 的 iGPU,VPU 等原本集成在CPU但是被闲置的资源,这样便充分实现异构加速的推理。
什么是 OpenVINOTM ?
OpenVINOTM (Visual Inference and Neural Network Optimization) 是 intel 公司在 2018 年发布的深度学习推理框架,旨在提升 intel 平台上的深度学习网络推理性能。
OpenVINOTM 现已支持主流的深度学习训练框架,如 TensorFlow, PyTorch, Keras 等,可直接导入 OpenVINOTM 的推理引擎中。OpenVINOTM 支持 intel 的主流 CPU,GPU 和 VPU 资源,比如 Core, Xeon, 和 Atom 芯片平台。你不必担心你的应用无法移植到 OpenVINOTM ,因为OpenVINOTM 已广泛支持大部分的操作系统,包括 Windows, Linux 和 maxOS,甚至兼容 Linux 中的 Ubuntu,CentOS 和 Raspberry Pi 等操作系统。(图2)
Why OpenVINOTM ?
OpenVINOTM 主要在模型的 1)构建,2)优化 和 3)部署上起到关键作用。
1)构建
OpenVINOTM 免费提供 300+ 预训练的模型,欢迎大家下载、使用和部署到自己的项目。Intel 的工程师优化这些模型,保证了模型的精度和最佳性能。你还可以使用增量训练(Training Extensions)工具来用自己的数据集训练模型,这样既保证模型拓扑结构的优化,又保证应用场景能覆盖到自定义的需求。
2)优化 – Model Optimizer 工具 图3
此工具是一个基于 Python 开发的工具,用于导入训练好的模型并将其转换为中间表达式(Intermediate Representation, IR)。中间表达式由两个文件构成:描述网络拓扑结构的 .xml 和描述二进制数据的权重与偏置信息的 .bin
杨老师针对模型图优化使用的方法举了两个例子:线性操作融合、分组卷积融合
a) 线性操作融合的目的是将简单的线性操作算子融合到卷积算子里,从而减少多个算子对内存数据的反复读取,进而减少消耗、提升性能。例如,将 Batch Normalization 这样的归一化算子拆分成多个乘加运算,再将这些乘加运算加入到卷积算子去。
b) 分组卷积融合的目的是把多个 channels 拆分成多个更小 channels 的卷积,从而实现分布式训练。由于此网络结构对 CPU 不友好,在推理时会将多组卷积合并到一个大卷积中。
官方开发指南:
https://docs.openvinotoolkit.org/latest/openvino_docs_MO_DG_Deep_Learning_Model_Optimizer_DevGuide.html
3)部署
高层及推理:因为编写基于Python, C++ 或 C,底层的优化已封装好,程序员只需要定义好参数、配置好接口便可激活Intel 底层的算力资源,实现异构设备的灵活调度。举一个多设备支持的例子:假设一套推理平台需要同时接入两个摄像头 channels, 那么你可以将一个摄像头的推理放到CPU 上做,另一个推理放到集成显卡上做,这样便最大激活了原有的硬件资源,增加网络吞吐量。
如图下方,什么是插件式架构?即针对每一种 OpenVINOTM 底层的硬件资源分别实现此平台的性能算子,这种实现基于他们自己的高性能数学加速库(比如 CPU 的 MKL-DNN),实现过程中可能采用内存重排、并行优化等措施,以保证网络的拓扑结构能在 CPU 上显著提速,进而保证推理提速。(图4)

How OpenVINOTM + TensorFlow?
第一步:命令行 pip install 两件事情:TensorFlow 和 OVTF
第二步:写 TensorFlow 原始 API 应用程序,不需要太多修改,充分利用兼容的模型
图5展示 OVTF 的内部逻辑结构。
第一步:对导入的 TF 模型遍历,检查 OpenVINOTM 是否支持全部的算子(OP)
第二步:如果全部算子被 OpenVINOTM 支持,那么创建IR模型,导入推理引擎,正常激活异构资源的推理性能。如果有若干算子不被支持,那么切图:将导入的 TensorFlow 模型切成原生 TensorFlow 子图和 OpenVINOTM 子图。切出的 OpenVINOTM 子图正常并入推理引擎。切出的原生 TF 子图则放入 TF Runtime。这样切图的好处:1)最大激活 OpenVINOTM 的加速性能,2)保证原生 TF 模型能被 OpenVINOTM 框架运行时不会发生兼容性错误。
系统架构
原生 TF(黄,上) – OVTF (蓝,中) – OpenVINOTM 推理引擎(绿,下),可见 OVTF 如同桥梁一样连接两头。这座桥梁分为四个模块:
模块一:Operator Compatibility Manager
作用:遍历(上述逻辑结构的第一步)
我们知道模型可被看作由不同的节点(即算子)组成的有向无环图(Directed Acrylic Graph, DAG)。比如 Select 算子不被 OpenVINOTM 或者 CPU Runtime 支持,那么标记该算子,进入下一模块。
模块二:Graph Partitioner
作用:切图:将筛出来的不支持算子切出原生 TensorFlow 子图。
模块三:TensorFlow Importer
作用:转化:将 TF 算子转化为 OpenVINOTM nGraph 算子、图优化
模块四:Backend Manager
作用:定义底层平台,创建推理任务请求
如何上手?
开源社区 repo:
https://github.com/openvinotoolkit
https://gitee.com/openvinotoolkit
我们不止有 OVTF,我们还开发了…

比如 Model Downloader, Benchmark APP, NNCF 压缩工具…(相应链接都在 ppt 中)
杨老师诚意推荐两个强大的工具:
1)Computer Vision Annotation Tool (CVAT) 图像标注工具
https://github.com/openvinotoolkit/cvat
可以导出不同格式的图像文件
可以智能标记视频:只需标注第一帧和最后一帧
2)OpenVINOTM Model Server (OVMS)
https://github.com/openvinotoolkit/model_server
当我们需要将模型部署在云平台或远程机房时,我们要保证模型的安全性和数据的成功访问,大家可以调取接口来检查模型结果。
以及工程级的深度学习实例:面向真实的行业(见官网)
感谢杨亦诚老师的精彩分享!小编一边啃源文档一边看看手里这块酷睿 CPU,对有着领先智慧的 intel 工程师们的敬佩之意油然而生…
本期的 b 站回放请戳下方小程序领取:
本期嘉宾 PPT请在本公众号后台回复 “Devfest2021” 领取网盘链接;
