英特尔OpenVINO™将全力助力极视角AI推理加速

在模型开发和部署方面,极市平台集成了最新版本的openvino工具,助力开发者在最小化代码修改的条件下加速ai算法在各类生产环境中规模化部署应用,尤其是在intel丰富的硬件资源平台上(cpus、igpus、vpus等等)。
本文重点介绍了极视角与英特尔开发人员共同研发的openvino最新功能,无缝集成tensorflow框架,对于熟悉tensorflow开发的开发者来说,在原有代码的基础上只需要添加几行简单代码就可以无痛实现模型精度不变的前提下推理加速1.34倍以上,避免了显式地进行openvino转换以及推理部分代码的重新编写,大大简化openvino工具的使用,加速ai算法在生产环境中的应用部署。
无痛实现 1.34 倍加速推理
我们先来看看本文方法在模型推理加速上具体表现:
可以看到,在同一测试环境下,openvino 与 tensorflow 的集成实现了 1.34 的加速几何平均值,同时,模型的准确性保持不变:
具体实操
openvino 与 tensorflow 的集成专为使用 openvino 工具套件的开发人员而设计——通过最少的代码修改来提高推理应用程序的性能。该集成为提高tensorflow 兼容性提供以 openvino 工具套件内联优化和所需运行时,并加速了各种英特尔芯片上多类ai模型的推理。
通过将以下两行代码添加到 python 代码或 jupyter notebooks 中,就可以极大地加速你的 tensorflow 模型的推理:
import openvino_tensorflowopenvino_tensorflow.set_backend(‘《backend_name》’)
openvino 与 tensorflow 的集成通过将 tensorflow 图巧妙地划分为多个子图,再将这些子图分派到 tensorflow 运行时或 openvino 运行时,从而实现最佳加速推理。
# 工作流概述
同时,通过 openvino_tensorflow ,我们能够非常轻松地使用不同硬件:
更多的详细信息可以前往 github:
https://github.com/openvinotoolkit/openvino_tensorflow
# 在extreme vision notebooks中集成
在extreme vision ide中可以直接将openvino与tensorflow集成。如下图所示,你只需要简单地导入openvino_tensorflow,即可无缝加速 jupyter notebook 中在cpu上推理的所有 tensorflow模型,同时可以继续使用标准的tensorflow api,而无需代码重构。
对推理加速更深的讨论
从前文对推理加速上的结果展示中,我们可以看到通过添加 2 行代码激活openvino与 tensorflow 的集成后,可以获得最高达 10 倍的推理加速。但也有个别模型出现了异常情况,如mask rcnn atrous 和 ssd mobilenet v2,因此我们对如何获得最佳性能进行了讨论:
#01
openvino_tf_min_nontrivial_nodes 变量
该变量设置了聚类中可以存在的最小操作数。如果操作数小于指定的数量,则聚类将回退到 tensorflow。默认情况是根据总图大小计算的,但除非手动设置,否则不能小于 6。另外,我们将此变量设置为 15 和 22 来观察模型进一步的性能增强,并以此得到了最终的最佳推理性能。因此,在具体的开发应用中应通过默认值或实验来确定能够为模型提供最佳性能的变量最佳值。
#02
冻结 keras 模型以获得最佳性能
一些 keras 模型可能包含训练操作,这会导致 tensorflow 产生控制流。由于 openvino 工具套件不支持这些操作,因此图形可能会被划分为较小的聚类。因此,在使用 openvino 与 tensorflow 的集成时,冻结模型可以避免这些操作并提高整体性能。
使用 keras api 的 densenet121 推理应用代码示例:
                              import tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras.applications.densenet import densenet121# add two lines of code to enable openvino integration with tensorflowimport openvino_tensorflowopenvino_tensorflow.set_backend(cpu)model = densenet121(weights='imagenet')# run the inference using keras api    model.predict(input_data) 下面是冻结和运行 keras 模型的一个示例代码,通过这种方式,我们能够优化使用 openvino 与 tensorflow 的集成实现的最佳性能。
                                                          import tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras.applications.densenet import densenet121from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2# add two lines of code to enable openvino integration with tensorflowimport openvino_tensorflowopenvino_tensorflow.set_backend(cpu)model = densenet121(weights='imagenet')# freeze the model first to achieve the best performance# using openvino integration with tensorflow full_model = tf.function(lambda x: self.model(x))full_model = full_model.get_concrete_function(tf.tensorspec(model.inputs[0].shape,model.inputs[0].dtype, name=model.inputs[0].name))frozen_func = convert_variables_to_constants_v2(full_model)frozen_func.graph.as_graph_def()session = tf.compat.v1.session(graph=frozen_func.graph)prob_tensor = frozen_func.graph.get_tensor_by_name(full_model.outputs[0].name)# run the inference on the frozen modelsession.run(prob_tensor, feed_dict={full_model.inputs[0].name : input_data})
#03
mask rcnn atrous和ssd mobilenet
如上文的结果所示,openvino与tensorflow的集成可以加速大多数tensorflow模型,但由于一些模型具有openvino与tensorflow集成尚不完全支持的工作组件(例如运算符、层等),如mask rcnn atrous和ssd mobilenet v2等一些模型仍在开发完善中。
为了扩大模型覆盖范围以及进一步提升性能,极视角技术团队将会继续测试和完善openvino与tensorflow的集成,以帮助更多使用tensorflow开发人员能够更好地应用极市平台。


荣耀X40系列将于9月15日发布
使用SPLL来生成双电极ECG放大中共模电力线干扰的同步
移动电源保护电路的设计与产品的选择技巧
根据手机传感器数据来识别用户运动模式
思科1亿激活设备成就全球最大物联网平台
英特尔OpenVINO™将全力助力极视角AI推理加速
Tizen或成三星秘密武器:降低对Android依赖
Imagination与SaberTek和Mymo Wireless合作提供LTE CAT1/0端到端可授权IP
详解负载均衡的类型与原理图
人体触电时脱离电源的方法是什么
一个sc-积分器如何分析噪声
四维图新的轮胎压力监控系统发明专利揭秘
HMC903低噪声放大器
realme正在准备进入非洲以及中东市场
在时代的浪尖,做好电子工程师的“眼睛”
微软智能织物曝光,融合了现代基于计算机的技术
LED+彩色粘土竟然可以这么玩?
产品+业务双管齐下助力移动云飞跃式提升,全新技术内核升级发布
iPhone新增迁移功能
诺基亚9什么时候上市?诺基亚9宣传视频曝光:双面玻璃材质机身+铝合金中框的设计,诺基亚9即将发布?