基準工具
LiteRT 基準工具目前會測量與計算以下項目的統計資料: 下列重要成效指標:
- 初始化時間
- 暖機狀態的推論時間
- 推論時間穩定
- 初始化期間的記憶體用量
- 整體記憶體用量
我們提供 Android 和 iOS 的基準應用程式,以及 都具有相同的核心效能 評估邏輯請注意,系統提供的選項和輸出格式如下 但因執行階段環境差異而稍有不同
Android 基準應用程式
搭配 Android 使用基準測試工具的方法有兩種。第一是 原生基準二進位檔和 Android 應用程式 對應用程式進行基準測試,則更適合用來評估模型在應用程式中的表現。兩者皆可 但基準工具的數據仍有些微差異 並在實際應用程式中以模型進行推論
這個 Android 基準應用程式沒有 UI。使用 adb
安裝及執行
並使用 adb logcat
指令擷取結果。
下載或建構應用程式
請透過以下連結下載夜間預先建構的 Android 基準應用程式:
適用於支援 TF 作業的 Android 基準應用程式 透過 Flex 委派功能, 請使用下方連結:
您也可以按照這些 操作說明。
準備基準測試
執行基準應用程式前,請先安裝應用程式並將模型檔案推送至 方法如下:
adb install -r -d -g android_aarch64_benchmark_model.apk
adb push your_model.tflite /data/local/tmp
執行基準測試
adb shell am start -S \
-n org.tensorflow.lite.benchmark/.BenchmarkModelActivity \
--es args '"--graph=/data/local/tmp/your_model.tflite \
--num_threads=4"'
graph
是必要參數,
graph
:string
TFLite 模型檔案的路徑。
您可以指定更多選用參數來執行基準測試。
num_threads
:int
(預設值=1)
用於執行 TFLite 翻譯的執行緒數量。use_gpu
:bool
(default=false)
使用 GPU 委派。use_xnnpack
:bool
(預設值=false
)
使用 XNNPACK 委派。
視您使用的裝置而定,以下部分選項可能無法顯示 可能沒有任何影響詳情請參閱 參數 ,取得更多可與基準應用程式搭配使用的效能參數。
使用 logcat
指令查看結果:
adb logcat | grep "Inference timings"
基準測試結果會顯示為:
... tflite : Inference timings in us: Init: 5685, First inference: 18535, Warmup (avg): 14462.3, Inference (avg): 14575.2
原生基準測試二進位檔
基準工具也可以原生二進位檔 benchmark_model
的形式提供。你可以
可以在 Linux、Mac、嵌入式裝置以及
Android 裝置。
下載或建構二進位檔
請按照以下程式碼,下載夜間預先建立的原生指令列二進位檔 連結:
適用於支援 TF 作業的夜間預先建構二進位檔 透過 Flex 委派功能, 請使用下方連結:
您也可以從這裡建構原生基準測試二進位檔 資料來源 電腦中。
bazel build -c opt //tensorflow/lite/tools/benchmark:benchmark_model
如要使用 Android NDK 工具鍊進行建構,必須設定建構環境 請先追蹤這個 指南,或使用 使用 Docker 映像檔 指南。
bazel build -c opt --config=android_arm64 \
//tensorflow/lite/tools/benchmark:benchmark_model
執行基準測試
如要在電腦上執行基準測試,請透過殼層執行二進位檔。
path/to/downloaded_or_built/benchmark_model \
--graph=your_model.tflite \
--num_threads=4
您可以使用同一組 參數 ,使用原生指令列二進位檔。
剖析模型作業
基準模型二進位檔也可讓您剖析模型作業,並取得
每個運算子的執行時間。如要這麼做,請將
在叫用期間將 --enable_op_profiling=true
變更為 benchmark_model
。詳情請參閱
解釋
請按這裡。
在單一執行作業中為多種效能選項提供原生基準基準二進位檔
系統也會提供便利又簡單的 C++ 二進位檔
針對多個效能選項進行基準測試
執行任務這個二進位檔是根據上述基準工具建構而成
一次只能針對一個成效選項進行基準測試。他們會
相同的建構/安裝/執行程序,但此二進位檔的 BUILD 目標名稱是
benchmark_model_performance_options
且需要一些其他參數。
這個二進位檔的重要參數如下:
perf_options_list
:string
(default='all')
要進行基準的 TFLite 效能選項清單 (以半形逗號分隔)。
您可以取得這項工具的夜間預先建構二進位檔,如下所示:
iOS 基準應用程式
如要在 iOS 裝置上執行基準測試,您必須從
source。
將 LiteRT 模型檔案放入
benchmark_data
並修改 benchmark_params.json
檔案。這些
檔案封裝到應用程式中,而應用程式會從目錄讀取資料。前往
這個
iOS 基準應用程式
。
已知模型的效能基準
本章節會在運作狀態良好時,列出 LiteRT 效能基準 部分 Android 和 iOS 裝置上的已知模型
Android 效能基準
這些成效基準數據是經由 原生基準測試二進位檔。
針對 Android 基準,CPU 相依性設定為使用裝置上的大型核心 即可減少變異數 (請參閱 details)。
此範例假設模型已下載並解壓縮至
/data/local/tmp/tflite_models
目錄內。基準二進位檔是以
此處的操作說明
並假設位於 /data/local/tmp
目錄中
如何執行基準測試:
adb shell /data/local/tmp/benchmark_model \
--num_threads=4 \
--graph=/data/local/tmp/tflite_models/${GRAPH} \
--warmup_runs=1 \
--num_runs=50
如要透過 GPU 委派功能執行,請設定 --use_gpu=true
。
下列效能值是在 Android 10 上測量的。
模型名稱 | 裝置 | CPU,4 個執行緒 | GPU |
---|---|---|---|
Mobilenet_1.0_224(float) | Pixel 3 | 23.9 毫秒 | 6.45 毫秒 |
Pixel 4 | 14.0 毫秒 | 9.0 毫秒 | |
Mobilenet_1.0_224 (量化) | Pixel 3 | 13.4 毫秒 | --- |
Pixel 4 | 5.0 毫秒 | --- | |
NASNet 行動裝置 | Pixel 3 | 56 毫秒 | --- |
Pixel 4 | 34.5 毫秒 | --- | |
SqueezeNet | Pixel 3 | 35.8 毫秒 | 9.5 毫秒 |
Pixel 4 | 23.9 毫秒 | 11.1 毫秒 | |
Inception_ResNet_V2 | Pixel 3 | 422 毫秒 | 99.8 毫秒 |
Pixel 4 | 272.6 毫秒 | 87.2 毫秒 | |
Inception_V4 | Pixel 3 | 486 毫秒 | 93 毫秒 |
Pixel 4 | 324.1 毫秒 | 97.6 毫秒 |
iOS 成效基準
這些成效基準數據是經由 iOS 基準應用程式。
如要執行 iOS 基準測試,系統已修改基準應用程式,納入適合的
模型和 benchmark_params.json
已修改為 num_threads
設為 2。使用條件
GPU 委派、"use_gpu" : "1"
和 "gpu_wait_type" : "aggressive"
選項
也加入了 benchmark_params.json
。
模型名稱 | 裝置 | CPU,2 個執行緒 | GPU |
---|---|---|---|
Mobilenet_1.0_224(float) | iPhone XS | 14.8 毫秒 | 3.4 毫秒 |
Mobilenet_1.0_224 (量化) | iPhone XS | 11 毫秒 | --- |
NASNet 行動裝置 | iPhone XS | 30.4 毫秒 | --- |
SqueezeNet | iPhone XS | 21.1 毫秒 | 15.5 毫秒 |
Inception_ResNet_V2 | iPhone XS | 261.1 毫秒 | 45.7 毫秒 |
Inception_V4 | iPhone XS | 309 毫秒 | 54.4 毫秒 |
追蹤 LiteRT 內部
在 Android 中追蹤 LiteRT 內部
Android 應用程式 LiteRT 翻譯程式的內部事件可能如下所示 擷取者 Android 追蹤工具。 在 Android 系統中,這兩個事件是相同的 Trace API,因此 從 Java/Kotlin 程式碼擷取的事件會與 LiteRT 一併顯示 內部事件。
事件範例如下:
- 運算子叫用
- 委派代表修改圖表
- 張量分配
本指南將介紹多種擷取追蹤記錄的方式, Studio CPU 分析器和「系統追蹤」應用程式詳情請參閱 Perfetto 指令列工具 或 Systrace 指令列工具 一文。
在 Java 程式碼中加入追蹤事件
這是 Google 新聞倡議計畫的
圖片分類
範例 app。LiteRT 直譯器的
recognizeImage/runInference
專區。這是選擇性步驟,但可協助您
顯示推論呼叫的目的地。
Trace.beginSection("recognizeImage");
...
// Runs the inference call.
Trace.beginSection("runInference");
tflite.run(inputImageBuffer.getBuffer(), outputProbabilityBuffer.getBuffer().rewind());
Trace.endSection();
...
Trace.endSection();
啟用 LiteRT 追蹤功能
如要啟用 LiteRT 追蹤功能,請設定 Android 系統屬性
請 debug.tflite.trace
到 1,再啟動 Android 應用程式。
adb shell setprop debug.tflite.trace 1
如果在 LiteRT 翻譯模式初始化時已設定這項屬性, 解譯器的按鍵事件 (例如運算子叫用)。
擷取所有追蹤記錄後,請設定屬性值來停用追蹤功能 設為 0。
adb shell setprop debug.tflite.trace 0
Android Studio CPU 分析器
使用 Android Studio CPU 分析器 步驟如下:
選取 執行 >。
顯示 Profiler 視窗時,按一下 CPU 時間軸中的任一處。
選取 [追蹤系統呼叫]在 CPU 剖析模式之間進行切換
按下「錄製」按鈕。
按下「停止」按鈕。
調查追蹤記錄結果。
在本例中,您可以在執行緒中查看事件階層和統計資料 也可以查看每個操作員時間的整個應用程式資料流向 。
「系統追蹤」應用程式
請按照以下詳細步驟,在不使用 Android Studio 的情況下擷取追蹤記錄: 「系統追蹤」應用程式。
在此範例中,系統擷取相同的 TFLite 事件,並將其儲存至 Perfetto。 或是 Systrace 格式擷取 您可以在 Perfetto UI 中開啟追蹤檔。
在 iOS 中追蹤 LiteRT 內部
以下為 iOS 應用程式 LiteRT 解譯器的內部事件: 擷取者 樂器 Xcode 隨附的工具這些是 iOS 系統 signpost 事件,因此從 Swift/Objective-C 程式碼擷取的事件會全部一起顯示 稱為 LiteRT 內部事件
事件範例如下:
- 運算子叫用
- 委派代表修改圖表
- 張量分配
啟用 LiteRT 追蹤功能
請按照下列步驟設定環境變數 debug.tflite.trace
:
選取產品 >配置 >編輯配置...從 Xcode 的頂端功能表。
按一下「個人資料」左側面板
取消選取「使用執行動作的引數和環境變數」 核取方塊。
在「Environment Variables」下方新增
debug.tflite.trace
專區。
如要在分析 iOS 應用程式時排除 LiteRT 事件, 透過移除環境變數來停用追蹤功能
XCode 檢測
按照下列步驟擷取追蹤記錄:
選取產品 >設定檔
檢測工具啟動時,按一下剖析範本中的「記錄」。
按下「開始」按鈕。
按下「停止」按鈕。
按一下「os_signpost」展開 OS Logging 子系統項目。
按一下「org.tensorflow.lite」OS 記錄子系統。
調查追蹤記錄結果。
在這個範例中,您會看到事件的階層結構,以及每個 運算子時間。
使用追蹤資料
追蹤資料可讓您找出效能瓶頸。
以下列舉幾個從分析器可以取得的洞察資料範例 可能有助於改善成效的解決方案:
- 如果可用的 CPU 核心數量少於推論數量 那麼 CPU 排程負擔可能會導致效能不彰。 您可以在應用程式中重新安排其他會耗用大量 CPU 的工作,避免發生這類工作。 與模型推論的重疊或微調數量 。
- 如果運算子尚未完全委派,則模型圖表的某些部分 是在 CPU 上執行,而不是預期的硬體加速器。個人中心 可以使用類似的支援運算子替換不支援的運算子。