「委派」可為 LiteRT 模型提供硬體加速功能, 運用 GPU 和數位訊號處理器等裝置內建的加速器 (DSP).
根據預設,liteRT 會使用針對 ARM 最佳化的 CPU 核心 霓虹效果 指令集然而,CPU 是多用途處理器 以達到最佳處理效果 學習模型 (例如與卷積和稠密相關的矩陣數學運算) 層)。
相對地,現代手機大多內建晶片組,效能最高 來處理這些重度作業將其用於類神經網路作業 具備大幅提升延遲時間和電池效率的優勢。例如: GPU 最高可提供 5 倍的頻寬 速度飛快 延遲時間。
每個加速器都有相關聯的 API,可以用來執行自訂運算 例如 OpenCL 或 OpenGL 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 提供工具,可用於評估兩種圖片任務的正確性:
ILSVRC 2012 (圖片) 分類) 和 top-K 準確度
這些工具的預先建構二進位檔 (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。