TensorFlow Lite發布重大更新!支持移動GPU、推斷速度提升4-6倍

2021-01-07 量子位

乾明 發自 凹非寺量子位 出品 | 公眾號 QbitAI

TensorFlow用於行動裝置的框架TensorFlow Lite發布重大更新,支持開發者使用手機等行動裝置的GPU來提高模型推斷速度。

在進行人臉輪廓檢測的推斷速度上,與之前使用CPU相比,使用新的GPU後端有不小的提升。在Pixel 3和三星S9上,提升程度大概為4倍,在iPhone 7上有大約有6倍。

為什麼要支持GPU?

眾所周知,使用計算密集的機器學習模型進行推斷需要大量的資源。

但是行動裝置的處理能力和功率都有限。雖然TensorFlow Lite提供了不少的加速途徑,比如將機器學習模型轉換成定點模型,但總是會在模型的性能或精度上做出讓步。

而將GPU作為加速原始浮點模型的一種選擇,不會增加量化的額外複雜性和潛在的精度損失。

在谷歌內部,幾個月來一直在產品中使用GPU後端做測試。結果證明,的確可以加快複雜網絡的推斷速度。

在Pixel 3的人像模式(Portrait mode)中,與使用CPU相比,使用GPU的Tensorflow Lite,用於摳圖/背景虛化的前景-背景分隔模型加速了4倍以上。新深度估計(depth estimation)模型加速了10倍以上。

在能夠為視頻增加文字、濾鏡等特效的YouTube Stories和谷歌的相機AR功能Playground Stickers中,實時視頻分割模型在各種手機上的速度提高了5-10倍。

對於不同的深度神經網絡模型,使用新GPU後端,通常比浮點CPU快2-7倍。對4個公開模型和2個谷歌內部模型進行基準測試的效果如下:

使用GPU加速,對於更複雜的神經網絡模型最為重要,比如密集的預測/分割或分類任務。

在相對較小的模型上,加速的效果就沒有那麼明顯了,使用CPU反而有利於避免內存傳輸中固有的延遲成本。

如何使用?

安卓設備(用Java)中,谷歌已經發布了完整的Android Archive (AAR) ,其中包括帶有GPU後端的TensorFlow Lite。

你可以編輯Gradle文件,用AAR替代當前的版本,並將下面的代碼片段,添加到Java初始化代碼中。

// Initialize interpreter with GPU delegate.GpuDelegate delegate = new GpuDelegate();Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);Interpreter interpreter = new Interpreter(model, options);// Run inference.while (true) {writeToInputTensor(inputTensor); interpreter.run(inputTensor, outputTensor); readFromOutputTensor(outputTensor);}// Clean up.delegate.close();

在iOS設備(用C++)中,要先下載二進位版本的TensorFlow Lite。

然後更改代碼,在創建模型後調用ModifyGraphWithDelegate ( )。

// Initialize interpreter with GPU delegate.std::unique_ptr<Interpreter> interpreter;InterpreterBuilder(model, op_resolver)(&interpreter);auto* delegate = NewGpuDelegate(nullptr); // default configif (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;// Run inference.while (true) {WriteToInputTensor(interpreter->typed_input_tensor<float>(0)); if (interpreter->Invoke() != kTfLiteOk) return false; ReadFromOutputTensor(interpreter->typed_output_tensor<float>(0));}// Clean up.interpreter = nullptr;DeleteGpuDelegate(delegate);

(更多的使用教程,可以參見TensorFlow的官方教程)

還在發展中

當前發布的,只是TensorFlow Lite的開發者預覽版。

新的GPU後端,在安卓設備上利用的是OpenGL ES 3.1 Compute Shaders,在iOS上利用的是Metal Compute Shaders。

能夠支持的GPU操作並不多。有:

ADD v1、AVERAGE_POOL_2D v1、CONCATENATION v1、CONV_2D v1、DEPTHWISE_CONV_2D v1-2、FULLY_CONNECTED v1、LOGISTIC v1MAX_POOL_2D v1、MUL v1、PAD v1、PRELU v1、RELU v1、RELU6 v1、RESHAPE v1、RESIZE_BILINEAR v1、SOFTMAX v1、STRIDED_SLICE v1、SUB v1、TRANSPOSE_CONV v1

TensorFlow官方表示,未來將會擴大操作範圍、進一步優化性能、發展並最終確定API。

完整的開源版本,將會在2019年晚些時候發布。

相關焦點

  • 如何使用TensorFlow Hub的ESRGAN模型來在安卓app中生成超分圖片
    /ESRGAN.tflite' TFHub https://hub.tensorflow.google.cn/ TFHub(轉化後模型) https://hub.tensorflow.google.cn/captain-pool/lite-model/esrgan-tf2/1 現在 TFLite 已經支持動態大小的輸入,所以你也可以在模型轉化的時候不指定輸入圖片的大小
  • 步履不停:TensorFlow 2.4新功能一覽!
    TensorFlow 2.4 正式發布!隨著對分布式訓練和混合精度提供更多支持,加入新的 Numpy 前端及用於監控和診斷性能瓶頸的工具,這個版本的亮點在於推出新功能,以及對性能和擴展方面的增強。
  • 分享TensorFlow Lite應用案例
    TF Lite 對於 CNN 類的應用支持較好,目前對於 RNN 的支持尚存在 op 支持不足的缺點。但是考慮到內存消耗和性能方面的提升,Kika 仍然建議投入一部分的研發力量,在移動端考慮採用 TF Lite 做為基於 RNN 深度學習模型的 inference 部署方案。   2.
  • 谷歌正式發布TensorFlow 1.5,究竟提升了哪些功能?
    昨天,谷歌在 GitHub 上正式發布了 TensorFlow 的最新版本 1.5.0,並開源了其代碼。支持 CUDA 9 和 cuDNN 7 被認為是本次更新的最重要部分。機器之心對這次更新的重大改變以及主要功能和提升進行了編譯介紹,原文請見文中連結。
  • 深度解讀TensorFlow,了解它的最新發展!
    Tensorboard是tensorflow內置的一個可視化工具,它通過將tensorflow程序輸出的日誌文件的信息可視化,使得tensorflow程序的理解、調試和優化更加簡單高效。Tensorboard的可視化依賴於tensorflow程序運行輸出的日誌文件,因而tensorboard和tensorflow程序在不同的進程中運行。
  • 基於RTX2060構建TensorFlow-gpu(keras)學習平臺
    建立虛擬環境:conda create --name tf36gpu python=3.6 anaconda2. 激活虛擬環境:activate tf36gpu3.開始菜單運行anaconda navigator檢查是否安裝了notebook(默認有安裝)三、安裝tensorflow/keras在激活的環境中安裝:1. 如果機器上有gpu,則安裝gpu版本,沒有GPU就安裝cpu版。
  • TensorFlow官方發布消息稱將引入一個新的優化工具包
    TensorFlow官方發布消息稱將引入一個新的優化工具包 李倩 發表於 2018-09-21 08:53:44 編者按:幾個月前,Tensorflow發布了一份名為《Quantizing deep convolutional
  • TensorFlow2.1正式版上線:最後一次支持Python2,進一步支持TPU
    去年 10 月,谷歌才發布了 TensorFlow 2.0 正式版。時隔三個月後,昨日官方發布了 TensorFlow 2.1,本次版本更新帶了了多項新特性、功能改進和 bug 修復。從本次更新的日誌來看,TensorFlow 2.1 將成為最後一個支持 Python2 的版本了。同時,本次更新的重點是增加了對 TPU 的多項支持,而 tf.keras 和 tf.data 這兩個常用的 API 也得到了很多新的更新。
  • TensorFlow 攜手 NVIDIA,使用 TensorRT 優化 TensorFlow Serving...
    目前,TensorFlow Serving 1.13 已實現對 TF-TRT 的支持,而不久後  TensorFlow 2.0 也將支持 TF-TRT 的實現。 TensorFlow 在官方博客中對這項成果進行了發布,雷鋒網 AI 科技評論編譯如下。
  • 終於來了,TensorFlow 新增官方 Windows 支持
    儘管 Windows 的用戶們已經可以在 Docker 容器中運行 TensorFlow 了,我們仍然希望提供更加完整的原生體驗,包括對於 GPU 的支持。」隨著 TensorFlow r0.12 版的發布,這一開源軟體庫現已支持 Windows7、10 和 Server 2016。同時,這一新版本可以讓用戶在 TensorFlow 訓練中得到 CUDA 8 的 GPU 加速。
  • 機器學習庫 TensorFlow 1.9.0 發布,大量修復和改進
    機器學習庫 TensorFlow 1.9.0 已發布,更新內容如下:主要特點和改進1、tf.keras 文件升級: 新的基於 Keras
  • 教程| 如何用TensorFlow在安卓設備上實現深度學習推斷
    >詳細教程和實現:https://github.com/chiachunfu/speech 第一步:模型壓縮為了將深度學習模型部署到移動/嵌入式設備上,我們應該致力於減少模型的內存佔用,縮短推斷時間,減少耗電。
  • TensorFlow極速入門
    最後給出了在 tensorflow 中建立一個機器學習模型步驟,並用一個手寫數字識別的例子進行演示。1、tensorflow是什麼?tensorflow 是 google 開源的機器學習工具,在2015年11月其實現正式開源,開源協議Apache 2.0。
  • 在TensorFlow裡模擬宇宙!提升模擬計算速度,成本降低1000倍
    大數據文摘出品來源:tensorflowblog編譯:睡不著的iris、劉俊寰去年6月,俄羅斯天文學家兼碼農小哥開發了一款名叫Space Engine的宇宙模擬遊戲但是,若是提升模擬計算速度,將其與機器學習組件整合到統一框架內,會有什麼不同呢?這便是新的N體宇宙模擬代碼FlowPM在做的。
  • TensorFlow 2.4來了:上線對分布式訓練和混合精度的新功能支持
    選自TensorFlow Blog機器之心編譯編輯:小舟、蛋醬今天,谷歌正式發布了 TensorFlow 2.4,帶來了多項新特性和功能改進。TensorFlow 2.4 的更新包括對於分布式訓練和混合精度的新功能支持,對 NumPy API 子集的試驗性支持以及一些用於監測性能瓶頸的新工具。
  • 谷歌發布 TensorFlow 1.5,全面支持動態圖機制和 TensorFlow Lite
    谷歌發布 TensorFlow 1.5,TensorFlow 又一次迎來更新。而在這次的更新中,谷歌宣布 TensorFlow 將全面支持 Eager execution 動態圖機制和 TensorFlow Lite,除此之外,還將支持 CUDA 9 和 cuDNN 7。
  • 基於TensorFlow2.0的中文深度學習開源書來了!GitHub趨勢日榜第一
    CPU安裝pip install tensorflow -UGPU安裝先自己安裝CUDA 10.0和cudnn,然後設置LD_LIBRARY_PATH。pip install tensorflow-gpu -U測試安裝In [2]: import tensorflow as tfIn [3]: tf.
  • TensorFlow 2.0 新鮮出爐!新版本,新架構,新特性
    易用至上,TensorFlow 2.0 Alpha發布這次TensorFlow的一些列更新,重點就在於:讓你使用得更加簡單。TensorFlow 2.0發布以後,訓練的流程將變得十分簡潔:主要流程就是:數據集成和轉換→模型構建→訓練→保存模型。
  • 【強化學習實戰】基於gym和tensorflow的強化學習算法實現
    1新智元推薦【新智元導讀】知乎專欄強化學習大講堂作者郭憲博士開講《強化學習從入門到進階》,我們為您節選了其中的第二節《基於gym和tensorflow的強化學習算法實現》,希望對您有所幫助。同時,由郭憲博士等擔任授課教師的深度強化學習國慶集訓營也將於 10 月 2 日— 6 日在北京舉辦。
  • 玩轉TensorFlow?你需要知道這30功能
    https://www.tensorflow.org/tfx/data_validation/?hl=zh-cn4)TFX -TensorFlow 變換同樣地,你可能希望用於重新訓練的數據也能被自動進行預處理:對特定特性進行歸一化、將字符串轉換為數值等。Transform 不僅可以對單個樣本進行這些操作,還能批處理數據。