天天看點

精度不變,兩行代碼無痛實作推理加速1.34倍,聯合OpenVINO™加速AI開發部署

↑ 點

在AI落地應用的浪潮中,極市平台通過雲平台形式專注賦能開發者,不斷為萬千開發者提供AI開發應用全流程中的各類最新服務,包括資料、算力、訓練環境、模型、部署加速工具等等。

在模型開發和部署方面,極市平台內建了最新版本的OpenVINO™工具,助力開發者在最小化代碼修改的條件下加速AI算法在各類生産環境中規模化部署應用,尤其是在Intel豐富的硬體資源平台上(CPUs、iGPUs、VPUs等等)。

本文重點介紹了極視角與英特爾開發人員共同研發的OpenVINO™最新功能,無縫內建TensorFlow架構,對于熟悉TensorFlow開發的開發者來說,在原有代碼的基礎上隻需要添加幾行簡單代碼就可以無痛實作模型精度不變的前提下推理加速1.34倍以上,避免了顯式地進行OpenVINO™轉換以及推理部分代碼的重新編寫,大大簡化OpenVINO™工具的使用,加速AI算法在生産環境中的應用部署。

無痛實作 1.34 倍加速推理

我們先來看看本文方法在模型推理加速上具體表現:

精度不變,兩行代碼無痛實作推理加速1.34倍,聯合OpenVINO™加速AI開發部署
精度不變,兩行代碼無痛實作推理加速1.34倍,聯合OpenVINO™加速AI開發部署

可以看到,在同一測試環境下,OpenVINO™ 與 TensorFlow 的內建實作了 1.34 的加速幾何平均值,同時,模型的準确性保持不變:

精度不變,兩行代碼無痛實作推理加速1.34倍,聯合OpenVINO™加速AI開發部署

具體實操

OpenVINO™ 與 TensorFlow 的內建專為使用 OpenVINO™ 工具套件的開發人員而設計——通過最少的代碼修改來提高推理應用程式的性能。該內建為提高TensorFlow 相容性提供以 OpenVINO™ 工具套件内聯優化和所需運作時,并加速了各種英特爾晶片上多類AI模型的推理。

通過将以下兩行代碼添加到 Python 代碼或 Jupyter Notebooks 中,就可以極大地加速你的 TensorFlow 模型的推理:

import openvino_tensorflow
openvino_tensorflow.set_backend('<backend_name>')      

OpenVINO™ 與 TensorFlow 的內建通過将 TensorFlow 圖巧妙地劃分為多個子圖,再将這些子圖分派到 TensorFlow 運作時或 OpenVINO™ 運作時,進而實作最佳加速推理。

# 工作流概述

精度不變,兩行代碼無痛實作推理加速1.34倍,聯合OpenVINO™加速AI開發部署

同時,通過 openvino_tensorflow ,我們能夠非常輕松地使用不同硬體:

精度不變,兩行代碼無痛實作推理加速1.34倍,聯合OpenVINO™加速AI開發部署

更多的詳細資訊可以前往 Github:

​​https://github.com/openvinotoolkit/openvino_tensorflow​​

# 在Extreme Vision notebooks中內建

在Extreme Vision IDE中可以直接将OpenVINO™與TensorFlow內建。如下圖所示,你隻需要簡單地導入openvino_tensorflow,即可無縫加速 Jupyter Notebook 中在CPU上推理的所有 TensorFlow模型,同時可以繼續使用标準的TensorFlow API,而無需代碼重構。

精度不變,兩行代碼無痛實作推理加速1.34倍,聯合OpenVINO™加速AI開發部署

對推理加速更深的讨論

從前文對推理加速上的結果展示中,我們可以看到通過添加 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開發人員能夠更好地應用極市平台。

END

關于極視角 (Extreme Vision)

極視角科技有限公司(Extreme Vision)成立于2015年,是專業的人工智能與計算機視覺算法提供商。極視角打造了全球首家計算機視覺算法商城——極視角算法商城,緻力于開拓人工智能在不同行業及領域的開發與應用為産業提供最豐富的人工智能算法與堅實的人工智能基建平台。

關于OpenVINO™

Intel® Distribution of OpenVINO™(Open Visual Inference & Neural Network Optimization)工具包,是英特爾于 2018 年釋出的重要工具包,旨在幫助和賦能 AI/CV 開發人員獲得更好的開發體驗,加速解決方案的開發和部署。

通過 OpenVINO™ 工具包,開發人員可以使用其包含的模型優化器、運作時以及開發工具來優化、調整和運作全面的 AI 推理。一次編寫,随處部署。通過使用 OpenVINO™ 工具包,使用部署到從邊緣到雲的生産環境中的高性能人工智能和計算機視覺推理,獲得更快、更準确的真實世界結果。

繼續閱讀