LiteRT 委派

「委派」可為 LiteRT 模型提供硬體加速功能, 運用 GPU 和數位訊號處理器等裝置內建的加速器 (DSP).

根據預設,liteRT 會使用針對 ARM 最佳化的 CPU 核心 霓虹效果 指令集然而,CPU 是多用途處理器 以達到最佳處理效果 學習模型 (例如與卷積和稠密相關的矩陣數學運算) 層)。

相對地,現代手機大多內建晶片組,效能最高 來處理這些重度作業將其用於類神經網路作業 具備大幅提升延遲時間和電池效率的優勢。例如: GPU 最高可提供 5 倍的頻寬 速度飛快 延遲時間。

每個加速器都有相關聯的 API,可以用來執行自訂運算 例如 OpenCLOpenGL ES,適用於行動裝置 GPU。一般來說 撰寫大量自訂程式碼,透過這些介面執行類神經網路。 您認為每個加速器都有各自的標準時 優點與限制,且無法執行類神經網路中的每個作業。TensorFlow Lite 的 Delegate API 是 TFLite 之間的橋樑,因此能解決這個問題 以及這些較低層級的 API

執行含有委派項目的執行階段

選擇委派代表

LiteRT 支援多個委派代表,每個委派代表都經過最佳化調整 特定平台和特定類型的模型通常, 根據兩項主要條件,不同用途適用的多個委派代表: 您指定的「Platform」(Android 或 iOS?) 平台,以及「Model-type」(型號類型) (浮點或量化),藉此加快速度。

各平台委派代表

跨平台 (Android 和 iOS)

  • GPU 委派:GPU 委派項目可用於 Android 和 iOS。這項服務 已針對 32 位元和 16 位元浮動式模型,其中 GPU 經過最佳化調整 廣告。也支援 8 位元量化模型 可提供與浮動版本相當卓越的效能GPU 詳細資料 如需委派,請參閱 GPU 上的 LiteRT

iOS

  • 新款 iPhone 和 iPad 適用的 Core ML 委派功能 - 適用於較新款的 iPhone 在可以使用 Neural Engine 的 iPad 上 您可以使用 Core ML 委派 加快 32 位元或 16 位元浮點模型的推論速度。Neural 引擎支援搭載 A12 SoC 以上版本的 Apple 行動裝置。對於 Core ML 委派的總覽及逐步操作說明。請參閱 LiteRT Core ML 委派

各模型類型的委派代表

每個加速器在設計時都會考量特定位元寬度的資料。如果發生以下情況: 向委派代表提供浮點模型,僅支援 8 位元量化 就會拒絕所有作業 例如 CPU為避免這類意外情況,下表概略說明 根據模型類型委派支援:

模型類型 GPU CoreML
浮點 (32 位元)
訓練後的 float16 量化
訓練後的動態範圍量化
訓練後的整數量化
量化感知訓練

驗證成效

本章節中的資訊是將 這些委派項目可改善應用程式。不過,請務必注意 每個委派代表都有一組預先定義的作業項目,且可能 表現的方式會因為型號和裝置而異因此通常 建議您執行一些基準測試,以評估委派代表的實用程度 符合您的需求這也有助於證明與 將委派附加至 LiteRT 執行階段。

LiteRT 具備廣泛的效能和準確度評估工具, ,開發人員可放心在應用程式內使用委派代表。 我們將在下一節討論這些工具。

評估工具

延遲時間與記憶體用量

LiteRT 的基準工具可與 適合估算模型成效 (包括平均推論) 的合適參數 延遲時間、初始化負擔、記憶體用量等。這項工具支援 以便找出模型最佳委派設定。適用對象 執行個體,您可以使用 --use_gpu 指定 --gpu_backend=gl,測量 GPU 與 OpenGL 執行支援的委派參數完整清單為 如這份 說明文件

以下舉例說明如何透過 adb 使用 GPU 的量化模型:

adb shell /data/local/tmp/benchmark_model \
  --graph=/data/local/tmp/mobilenet_v1_224_quant.tflite \
  --use_gpu=true

你可以下載這項工具的預先建構版本 (適用於 Android 64 位元 ARM) 建築 這裡 (個 詳情)。

準確性與正確性

委派項目執行運算的精確度,通常與 CPU 的精確度不同 應用程式因此,在影響 (通常不大) 的情況下, 而委派代表使用委派代表進行硬體加速請注意,此 不一定正確;例如 GPU 使用浮點精確度 執行量化模型時,精確度可能會稍有改善 (例如 ILSVRC 圖片分類排名小於 1% 的前 5 名)。

LiteRT 提供兩種方法來測量委派代表的準確性 指定模型的行為:「以任務為基礎」和「Task-Agnostic」。所有工具 進階委派功能 參數 與上一節的基準化工具互動請注意, 下方的子節將焦點放在委派評估 (委派項目是否會執行 而不是模型評估 (模型本身是否適合 工作?)。

工作型評估

LiteRT 提供工具,可用於評估兩種圖片任務的正確性:

這些工具的預先建構二進位檔 (Android 64 位元 ARM 架構) 以及 說明文件:

以下範例會示範圖片分類 評估 和 GPU 運算:

adb shell /data/local/tmp/run_eval \
  --model_file=/data/local/tmp/mobilenet_quant_v1_224.tflite \
  --ground_truth_images_path=/data/local/tmp/ilsvrc_images \
  --ground_truth_labels=/data/local/tmp/ilsvrc_validation_labels.txt \
  --model_output_labels=/data/local/tmp/model_output_labels.txt \
  --output_file_path=/data/local/tmp/accuracy_output.txt \
  --num_images=0 # Run on all images. \
  --use_gpu=true

預期的輸出內容為介於 1 至 10 之間的「Top-K」指標:

Top-1 Accuracy: 0.733333
Top-2 Accuracy: 0.826667
Top-3 Accuracy: 0.856667
Top-4 Accuracy: 0.87
Top-5 Accuracy: 0.89
Top-6 Accuracy: 0.903333
Top-7 Accuracy: 0.906667
Top-8 Accuracy: 0.913333
Top-9 Accuracy: 0.92
Top-10 Accuracy: 0.923333

各項工作評估評估

適用於尚未建立裝置端評估工具的工作,或是 LiteRT 提供了自訂模型的推論 差異比較 如果偏好在終端機視窗中工作 可使用 Google Cloud CLI gcloud 指令列工具(Android,64 位元 ARM 二進位架構二進位檔 請按這裡)

推論差異會比較 LiteRT 執行作業 (從延遲時間 輸出值),分為以下兩種:

  • 單一執行緒 CPU 推論
  • 使用者定義的推論 - 由這些參數定義

為此,這項工具會產生隨機高斯資料,並傳遞 TFLite 解譯器:一個執行單一執行緒 CPU 核心,以及 參數。

測量的是這兩者的延遲時間,以及 輸出張量 (以個別元素為基礎)。

如果模型只有一個輸出張量,輸出內容可能如下所示:

Num evaluation runs: 50
Reference run latency: avg=84364.2(us), std_dev=12525(us)
Test run latency: avg=7281.64(us), std_dev=2089(us)
OutputDiff[0]: avg_error=1.96277e-05, std_dev=6.95767e-06

這表示針對索引 0 的輸出張量, CPU 輸出內容與委派輸出內容不一致,平均值為 1.96e-05

請注意,如要解讀這些數據,必須更深入瞭解模型。 每個輸出張量所代表的意義如果是簡單的迴歸 差異應該很低 ( 錯誤)。不過,系統會輸出「偵測類別」這類輸出內容CANNOT TRANSLATE SSD 模型則較難解讀。例如,可能會顯示 但這不一定代表有問題 委派:考慮兩個 (假) 類別:「TV (ID: 10)」、「Monitor (ID:20)」- 如果 委派代表略微偏離著黃金真相,並且顯示螢幕而非電視 這個張量的輸出差異可能會高達 20-10 = 10。