英特尔OpenVINO将全面帮助加速极致视角下的人工智能推理

2021-09-22 17:36 来源:电子说

在模型开发部署方面,平台集成了最新版本的OpenVINO工具,帮助开发者在最大限度减少代码修改的同时,加速AI算法在各种生产环境中的大规模部署和应用,尤其是在英特尔丰富的硬件资源平台(CPU、iGPUs、vpu等)上。).

本文重点介绍了Extreme Perspective和英特尔开发人员开发的OpenVINO的最新功能,并无缝集成TensorFlow框架。对于熟悉TensorFlow开发的开发人员来说,只需要在原代码的基础上增加几行简单的代码,就可以在不改变模型精度的情况下加速推理1.34倍以上,从而避免了显式的OpenVINO转换和重写部分推理代码,大大简化了OpenVINO工具的使用,加快了AI算法在生产环境中的应用部署。

实现了无痛1.34倍加速推理。

我们先来看看这个方法在加速模型推理中的具体表现:

可以看出,在相同的测试环境下,OpenVINO和TensorFlow的集成实现了1.34的加速几何均值,而模型的精度保持不变:

实际操作。

Openo与TensorFlow的集成是为使用OpenVINO工具包的开发人员设计的。——以最少的代码修改提高了推理应用程序的性能。这种集成利用OpenVINO工具套件提供了内联优化和所需的运行时,以提高TensorFlow兼容性,并加速各种英特尔芯片上各种AI模型的推理。

通过在Python代码或Jupyter笔记本中添加以下两行代码,您可以大大加快TensorFlow模型的推理速度:

导入open vino _ tensorflowsopenvino _ tensorflow . set _后端(' 《backend_name》 ')

Vino和TensorFlow的集成巧妙地将TensorFlow图划分为若干个子图,然后将这些子图分派给TensorFlow运行时或OpenVINO运行时,从而达到最佳的加速推理。

#工作流概述

同时,通过openvino_tensorflow,我们可以非常轻松地使用不同的硬件:

更多详情可在Github上找到:

https://github.com/openvinotoolkit/openvino_tensorflow

#集成在极限视觉笔记本中。

OpenVINO可以直接与TensorFlow在极致视觉IDE中集成。如下图所示,只需要简单导入openvino_tensorflow,就可以无缝加速Jupyter Notebook中CPU上推理的所有tensorflow模型。同时,您可以继续使用标准的TensorFlow API,而无需代码重构。

对推理加速的深入探讨。

从前面推理加速的结果可以看出,通过增加2行代码激活OpenVINO和TensorFlow的集成,我们可以获得高达10倍的推理加速。但是有些机型出现了一些异常情况,比如Mask RCNN阿特鲁和SSD Mobilenet V2,所以我们讨论了如何获得最佳性能:

#01

Openo _ TF _ min _非平凡_ 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开发人员能够更好地应用极市平台。

延伸 · 阅读