在模型開發和部署方面,極市平臺集成了最新版本的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 tf
from tensorflow import keras
from tensorflow.keras.applications.densenet import DenseNet121
# Add two lines of code to enable OpenVINO integration with TensorFlow
import openvino_tensorflow
openvino_tensorflow.set_backend("CPU")
model = DenseNet121(weights='imagenet')
# Run the inference using Keras API
model.predict(input_data)
下面是凍結和運行 Keras 模型的一個示例代碼,通過這種方式,我們能夠優化使用 OpenVINO 與 TensorFlow 的集成實現的最佳性能。
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.applications.densenet import DenseNet121
from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2
# Add two lines of code to enable OpenVINO integration with TensorFlow
import openvino_tensorflow
openvino_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 model
session.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開發人員能夠更好地應用極市平臺。
編輯:jq
-
API
+關注
關注
2文章
1511瀏覽量
62408 -
SSD
+關注
關注
21文章
2891瀏覽量
117872 -
AI
+關注
關注
87文章
31559瀏覽量
270367 -
代碼
+關注
關注
30文章
4828瀏覽量
69066
原文標題:英特爾OpenVINO? 助力極視角AI推理加速
文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論