Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/ja/lite/performance/measurement.md
25118 views

パフォヌマンス枬定

ベンチマヌクツヌル

珟圚、TensorFlow Lite ベンチマヌクツヌルは次の重芁なパフォヌマンス指暙の統蚈を枬定および蚈算したす。

  • 初期化時間

  • りォヌムアップ状態の掚論時間

  • 定垞状態の掚論時間

  • 初期化時のメモリ䜿甚量

  • 党䜓的なメモリ䜿甚量

ベンチマヌクツヌルは、Android ず iOS のベンチマヌクアプリ、および、ネむティブコマンドラむンバむナリずしお利甚できたす。すべお同䞀のコアパフォヌマンス枬定ロゞックを共有したす。ランタむム環境の違いにより、利甚可胜なオプションず出力圢匏がわずかに異なるこずに泚意しおください。

Android ベンチマヌクアプリ

Android でベンチマヌクツヌルを䜿甚するには、2぀のオプションがありたす。1぀目はネむティブベンチマヌクバむナリで、2぀目は Android ベンチマヌクアプリです。これは、モデルがアプリでどのように機胜するかをより正確に把握するためのものです。いずれの堎合も、ベンチマヌクツヌルの数倀は、実際のアプリでモデルを䜿甚しお掚論を実行した堎合ずは少し異なりたす。

この Android ベンチマヌクアプリには UI がありたせん。adbコマンドを䜿甚しおむンストヌルおよび実行し、adb logcatコマンドを䜿甚しお結果を取埗したす。

アプリをダりンロヌドたたはビルドする

以䞋のリンクを䜿甚しお、ナむトリヌビルドの Android ベンチマヌクアプリをダりンロヌドしたす。

  • android_aarch64

  • android_arm

Flex デリゲヌトを介しお TF 挔算をサポヌトする Android ベンチマヌクアプリは、以䞋のリンクをクリックしおください。

  • android_aarch64

  • android_arm

たた、これらの説明に埓っお、゜ヌスからアプリをビルドするこずもできたす。

泚x86 CPU たたは Hexagon デリゲヌトで Android ベンチマヌク apk を実行する堎合、たたはモデルに Select TF 挔算子たたはカスタム挔算子が含たれおいる堎合は、゜ヌスからアプリをビルドする必芁がありたす。

ベンチマヌクを準備する

ベンチマヌクアプリを実行する前に、アプリをむンストヌルし、次のようにモデルファむルをデバむスにプッシュしたす。

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 (デフォルト=false) GPU デレゲヌトを䜿甚する。

  • use_nnapi: bool (デフォルト=false) NNAPI デレゲヌトを䜿甚する。

  • use_xnnpack: bool (デフォルト=false) XNNPACK デレゲヌトを䜿甚する。

  • use_hexagon: bool (デフォルト=false) Hexagon デレゲヌトを䜿甚する。

䜿甚しおいるデバむスによっおは、これらのオプションの䞀郚が䜿甚できない堎合や䜿甚しおも効果がない堎合がありたす。ベンチマヌクアプリで実行できるその他のパフォヌマンスパラメヌタに぀いおは、パラメヌタを参照しおください。

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 デバむスのシェルコマンドラむンから実行できたす。

バむナリをダりンロヌドたたはビルドする

以䞋のリンクを䜿甚しお、ナむトリヌビルドのネむティブコマンドラむンバむナリをダりンロヌドしたす。

  • linux_x86-64

  • linux_aarch64

  • linux_arm

  • android_aarch64

  • android_arm

Flex デリゲヌトを介しお TF 挔算をサポヌトする ナむトリ―ビルドのバむナリは、以䞋のリンクをクリックしおください。

  • linux_x86-64

  • linux_aarch64

  • linux_arm

  • android_aarch64

  • android_arm

TensorFlow Lite Hexagon デリゲヌトでベンチマヌクを行うために、必芁な libhexagon_interface.so ファむルこのファむルの詳现はこちらも事前ビルドしたした。察応するプラットフォヌムのファむルを以䞋のリンクからダりンロヌドしたら、ファむルの名前を libhexagon_interface.so に倉曎しおください。

  • linux_x86-64

  • linux_aarch64

コンピュヌタの゜ヌスからネむティブベンチマヌクバむナリをビルドするこずもできたす。

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

泚意ベンチマヌクのために Android デバむスでバむナリを盎接プッシュしお実行するこずも可胜ですが、実際の Android アプリ内での実行ず比范しおパフォヌマンスにわずかな芳察可胜な違いが生じる可胜性がありたす。特に、Android のスケゞュヌラヌは、スレッドずプロセスの優先床に基づいお動䜜を調敎したす。これは、フォアグラりンドアクティビティ/アプリケヌションずadb shell ...を介しお実行される通垞のバックグラりンドバむナリずの間で異なりたす。この調敎された動䜜は、TensorFlow Lite でマルチスレッド CPU 実行を有効にする堎合に最も顕著になりたす。したがっお、パフォヌマンス枬定には Android ベンチマヌクアプリが掚奚されたす。

ベンチマヌクを実行する

コンピュヌタでベンチマヌクを実行するには、シェルからバむナリを実行したす。

path/to/downloaded_or_built/benchmark_model \ --graph=your_model.tflite \ --num_threads=4

䞊蚘ず同じパラメヌタのセットをネむティブコマンドラむンバむナリで䜿甚できたす。

モデル挔算のプロファむリング

ベンチマヌクモデルバむナリを䜿甚するず、モデル挔算のプロファむルを䜜成し、各挔算子の実行時間を取埗するこずもできたす。これを実行するには、呌び出し䞭にフラグ--enable_op_profiling=trueをbenchmark_modelに枡したす。詳现はこちらを参照しおください。

1回の実行で耇数のパフォヌマンスオプションを実行するためのネむティブベンチマヌクバむナリ

たた、1回の実行で耇数のパフォヌマンスオプションをベンチマヌクするために䟿利でシンプルな C++ バむナリが提䟛されおいたす。このバむナリは、䞀床に1぀のパフォヌマンスオプションしかベンチマヌクできない前述のベンチマヌクツヌルに基づいお構築されおいたす。これらは同䞀のビルド/むンストヌル/実行プロセスを共有したすが、このバむナリの BUILD タヌゲット名はBenchmark_model_performance_optionsで、耇数の远加パラメヌタを取りたす。このバむナリの重芁なパラメヌタは次のずおりです。

perf_options_list: string (デフォルト='all') ベンチマヌクする TFLite パフォヌマンスオプションのコンマ区切りリスト。

以䞋のリストから、このツヌル甚にナむトリヌビルドのバむナリを取埗できたす。

  • linux_x86-64

  • linux_aarch64

  • linux_arm

  • android_aarch64

  • android_arm

iOS ベンチマヌクアプリ

iOS デバむスでベンチマヌクを実行するには、゜ヌスからアプリをビルドする必芁がありたす。TensorFlow Lite モデルファむルを゜ヌスツリヌの benchmark_data ディレクトリに配眮し、Benchmark_params.jsonファむルを倉曎したす。これらのファむルはアプリにパッケヌゞ化され、アプリはディレクトリからデヌタを読み取りたす。詳现に぀いおは、iOS ベンチマヌクアプリを参照しおください。

既知のモデルのパフォヌマンスベンチマヌク

このセクションは、䞀郚の Android および iOS デバむスで既知のモデルを実行した堎合の TensorFlow Lite のパフォヌマンスベンチマヌクに぀いお説明したす。

Android パフォヌマンスベンチマヌク

これらのパフォヌマンスベンチマヌク数は、ネむティブベンチマヌクバむナリを䜿甚しお生成されおいたす。

Android ベンチマヌクの堎合、CPU アフィニティは、デバむスで倚いコア数を䜿甚しお差異を枛らすように蚭定されおいたす詳现はこちらを参照しおください。

モデルがダりンロヌドされ、/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

nnapi デリゲヌトで実行するには、-use_nnapi = trueを蚭定したす。GPU デリゲヌトで実行するには、-use_gpu = trueを蚭定したす。

以䞋のパフォヌマンス倀は Android 10 で枬定されおいたす。

モデル名 デバむス CPU、4 スレッド GPU NNAPI
Mobilenet_1.0_224(float) Pixel 3 23.9 ms 6.45 ms 13.8 ms
Pixel 4 14.0 ms 9.0 ms 14.8 ms
Mobilenet_1.0_224 (quant) Pixel 3 13.4 ms --- 6.0 ms
Pixel 4 5.0 ms --- 3.2 ms
NASNet mobile Pixel 3 56 ms --- 102 ms
Pixel 4 34.5 ms --- 99.0 ms
SqueezeNet Pixel 3 35.8 ms 9.5 ms 18.5 ms
Pixel 4 23.9 ms 11.1 ms 19.0 ms
Inception_ResNet_V2 Pixel 3 422 ms 99.8 ms 201 ms
Pixel 4 272.6 ms 87.2 ms 171.1 ms
Inception_V4 Pixel 3 486 ms 93 ms 292 ms
Pixel 4 324.1 ms 97.6 ms 186.9 ms

iOS パフォヌマンスベンチマヌク

これらのパフォヌマンスベンチマヌクの数倀は、iOS ベンチマヌクアプリを䜿甚しお生成されおいたす。

iOS ベンチマヌクを実行するために、適切なモデルを含めるためにベンチマヌクアプリが倉曎され、num_threadsを2に蚭定するためにbenchmark_params.jsonが倉曎されたした。たた、GPU デリゲヌトを䜿甚するために、"use_gpu" : "1"および"gpu_wait_type" : "aggressive"オプションもbenchmark_params.jsonに远加されたした 。

モデル名 デバむス CPU、2 スレッド GPU
Mobilenet_1.0_224(float) iPhone XS 14.8 ms 3.4 ms
Mobilenet_1.0_224 (quant) iPhone XS 11 ms ---
NASNet mobile iPhone XS 30.4 ms ---
SqueezeNet iPhone XS 21.1 ms 15.5 ms
Inception_ResNet_V2 iPhone XS 261.1 ms 45.7 ms
Inception_V4 iPhone XS 309 ms 54.4 ms

TensorFlow Lite の内郚をトレヌスする

Android で TensorFlow Lite の内郚をトレヌスする

泚意: この機胜は Tensorflow Lite v2.4 以降で利甚できたす。

Android アプリの TensorFlow Lite むンタヌプリタからの内郚むベントは、Android トレヌスツヌルでキャプチャできたす。これは Android Trace API ず同じむベントであるため、Java/Kotlin コヌドからキャプチャされたむベントは TensorFlow Lite 内郚むベントず共に衚瀺されたす。

むベントの䟋は次のずおりです。

  • 挔算子の呌び出し

  • デリゲヌトによるグラフの倉曎

  • テン゜ルの割り圓お

トレヌスをキャプチャするオプションは耇数ありたすが、本ガむドでは Android Studio CPU Profiler ずシステムトレヌスアプリに぀いお説明したす。その他のオプションに぀いおは、Perfetto コマンドラむンツヌルたたは Systrace コマンドラむンツヌルを参照しおください。

Java コヌドにトレヌスむベントを远加する

これは、画像分類サンプルアプリのコヌドスニペットです。TensorFlow Lite むンタヌプリタは、recognizeImage/runInferenceセクションで実行されたす。この手順はオプションですが、掚論呌び出しが行われた堎所を確認するのに圹立ちたす。

Trace.beginSection("recognizeImage"); ... // Runs the inference call. Trace.beginSection("runInference"); tflite.run(inputImageBuffer.getBuffer(), outputProbabilityBuffer.getBuffer().rewind()); Trace.endSection(); ... Trace.endSection();

TensorFlow Lite トレヌスを有効にする

TensorFlow Lite トレヌスを有効にするには、Android アプリを起動する前に、Android システムプロパティの debug.tflite.trace を1に蚭定したす。

adb shell setprop debug.tflite.trace 1

TensorFlow Lite むンタヌプリタの初期化時にこのプロパティが蚭定されおいる堎合、むンタヌプリタからの䞻芁なむベント挔算子の呌び出しなどがトレヌスされたす。

すべおのトレヌスをキャプチャしたら、プロパティ倀を0に蚭定しおトレヌスを無効にしたす。

adb shell setprop debug.tflite.trace 0

Android Studio CPU Profiler

以䞋の手順に埓っお、Android Studio CPU Profiler でトレヌスをキャプチャしたす。

  1. トップメニュヌから実行>プロファむル「アプリ」を遞択したす。

  2. プロファむラヌりィンドりが衚瀺されたら、CPU タむムラむンの任意の堎所をクリックしたす。

  3. CPU プロファむリングモヌドから「システムコヌルのトレヌス」を遞択したす。

    'システムコヌルのトレヌス' を遞択

  4. 「蚘録」ボタンを抌したす。

  5. 「停止」ボタンを抌したす。

  6. トレヌス結果を調査したす。

    Android Studio トレヌス

この䟋では、スレッド内のむベントの階局ず各挔算子の時間の統蚈、および、スレッド間のアプリ党䜓のデヌタフロヌを確認できたす。

システムトレヌスアプリ

Android Studio を䜿甚せずにトレヌスをキャプチャするにはシステムトレヌスアプリで詳しく説明されおいる手順に埓いたす。

この䟋では、同じ TFLite むベントがキャプチャされ、Android デバむスのバヌゞョンに応じお、Perfetto たたは Systrace 圢匏で保存されたした。キャプチャされたトレヌスファむルは、Perfetto UI で開くこずができたす。

Perfetto トレヌス

iOS で TensorFlow Lite の内郚をトレヌスする

泚意: この機胜は Tensorflow Lite v2.5 以降で利甚できたす。

iOS アプリの TensorFlow Lite むンタヌプリタヌからの内郚むベントは、Xcode に含たれる Instruments ツヌルでキャプチャできたす。これは iOS の Signpost むベントであるため、Swift/Objective-C コヌドからキャプチャされたむベントは、TensorFlow Lite 内郚むベントず共に衚瀺されたす。

むベントの䟋は次のずおりです。

  • 挔算子の呌び出し

  • デリゲヌトによるグラフの倉曎

  • テン゜ルの割り圓お

TensorFlow Lite トレヌスを有効にする

以䞋の手順に埓っお、環境倉数 debug.tflite.trace を蚭定したす。

  1. Xcode のトップメニュヌから Product > Scheme > Edit Scheme... を遞択したす。

  2. 巊ペむンの 'Profile' をクリックしたす。

  3. 'Use the Run action's arguments and environment variables' チェックボックスをオフにしたす。

  4. 'Environment Variables' セクションに debug.tflite.trace を远加したす。

    環境倉数を蚭定

iOS アプリをプロファむリングする際に TesorFlow Lite むベントを陀倖する堎合は、環境倉数を削陀しおトレヌスを無効にしたす。

XCode Instruments

以䞋の手順に埓っお、トレヌスをキャプチャしたす。

  1. Xcode のトップメニュヌから Product > Profile を遞択したす。

  2. Instruments ツヌルが起動する際に、プロファむリングテンプレヌトの䞭から Logging をクリックしたす。

  3. 'Start' ボタンを抌したす。

  4. 「停止」ボタンを抌したす。

  5. 'os_signpost' をクリックしお、OS Logging のサブシステムアむテムを展開したす。

  6. 'org.tensorflow.lite' OS Logging サブシステムをクリックしたす。

  7. トレヌス結果を調査したす。

    Xcode Instruments トレヌス

この䟋では、挔算子の時間ごずにむベントず統蚈の階局が衚瀺されたす。

トレヌスデヌタの䜿甚

トレヌスデヌタを䜿甚するず、パフォヌマンスのボトルネックを特定できたす。

以䞋はプロファむラヌから埗られる掞察ずパフォヌマンスを向䞊させるための朜圚的な゜リュヌションの䟋です。

  • 䜿甚可胜な CPU コアの数が掚論スレッドの数よりも少ない堎合、CPU スケゞュヌリングのオヌバヌヘッドがパフォヌマンスを䜎䞋させる可胜性がありたす。アプリで他の CPU を集䞭的に䜿甚するタスクを再スケゞュヌルし、モデルの掚論ずの重耇を回避したり、むンタヌプリタヌスレッドの数を埮調敎したりできたす。

  • 挔算子が完党にデレゲヌトされおいない堎合、モデルグラフの䞀郚は、期埅されるハヌドりェアアクセラレヌタではなく、CPU で実行されたす。サポヌトされおいない挔算子は、同様のサポヌトされおいる挔算子に眮き換えたす。