パフォーマンスに関するベスト プラクティス

モバイル デバイスや組み込みデバイスではコンピューティング リソースが限られているため、アプリリソースの効率性を維持することが重要です。TensorFlow Lite モデルのパフォーマンスを向上させるために使用できるベスト プラクティスと戦略の一覧をご覧ください。

タスクに最適なモデルを選択する

タスクによっては、モデルの複雑さとサイズとの間でトレードオフを行う必要があります。高い精度が求められるタスクの場合は、大規模で複雑なモデルが必要になることがあります。精度が求められるタスクでは、使用するディスク容量とメモリが少ないだけでなく、一般的に高速かつエネルギー効率が高いため、小さなモデルを使用する方が適切です。たとえば、以下のグラフは、一般的な画像分類モデルの精度とレイテンシのトレードオフを示しています。

モデルサイズと精度のグラフ

精度とレイテンシのグラフ

モバイル デバイス向けに最適化されたモデルの一例として、モバイル ビジョン アプリケーション向けに最適化された MobileNets があります。TensorFlow Hub には、モバイル デバイスや組み込みデバイス向けに最適化された他のモデルがいくつかリストされています。

転移学習を使用すると、リストされたモデルを独自のデータセットで再トレーニングできます。

モデルをプロファイリングする

タスクに適したモデル候補を選択したら、モデルのプロファイリングとベンチマークを行うことをおすすめします。TensorFlow Lite ベンチマーク ツールには、オペレーターごとのプロファイリング統計情報を表示する組み込みのプロファイラがあります。これは、パフォーマンスのボトルネックと、どの演算子が計算時間の大半を占めているかを理解するのに役立ちます。

また、TensorFlow Lite トレースを使用すると、標準の Android システム トレースを使用して Android アプリ内でモデルをプロファイリングできます。また、GUI ベースのプロファイリング ツールを使用して、オペレータ呼び出しを時系列で可視化することもできます。

グラフで演算子をプロファイリングして最適化する

特定の演算子がモデルに頻繁に出現し、プロファイリングに基づいて、演算子が最も長い時間を消費していることが判明した場合は、その演算子の最適化を検討できます。TensorFlow Lite はほとんどの演算子に対して最適化されたバージョンを備えているため、このような状況はまれです。ただし、演算子が実行される制約がわかっている場合は、カスタム演算のより高速なバージョンを作成できる可能性があります。カスタム オペレータ ガイドをご覧ください。

モデルを最適化する

モデルの最適化の目的は、モバイル デバイスにデプロイできるように、一般的に高速かつエネルギー効率に優れた、より小さなモデルを作成することです。TensorFlow Lite は、量子化などの複数の最適化手法をサポートしています。

詳細については、モデル最適化のドキュメントをご覧ください。

スレッド数を調整する

TensorFlow Lite は、多くのオペレーターのマルチスレッド カーネルをサポートしています。スレッド数を増やし、演算子の実行を高速化できます。ただし、スレッド数を増やすと、モデルが使用するリソースと処理能力が増えます。

アプリケーションによっては、エネルギー効率よりもレイテンシの方が重要となる場合があります。インタープリタのスレッド数を設定することで、スレッド数を増やすことができます。ただし、マルチスレッド実行では、他に同時に実行されるものによってパフォーマンスのばらつきが大きくなります。これは特にモバイルアプリの場合に当てはまります。たとえば、個別のテストではシングル スレッドに比べて 2 倍の高速化が認められることもありますが、別のアプリが同時に実行されている場合は、シングル スレッドよりもパフォーマンスが低下する可能性があります。

冗長なコピーを排除する

アプリケーションが慎重に設計されていない場合は、モデルに入力をフィードし、モデルから出力を読み取るときに、冗長なコピーが存在する可能性があります。冗長なコピーは必ず排除してください。Java などの上位レベルの API を使用している場合は、パフォーマンスの注意事項についてドキュメントで慎重に確認してください。たとえば、ByteBuffers入力として使用すると、Java API のほうがはるかに高速になります。

プラットフォーム固有のツールを使用してアプリケーションをプロファイリングする

Android ProfilerInstruments などのプラットフォーム固有のツールは、アプリのデバッグに使用できる豊富なプロファイリング情報を提供します。場合によっては、パフォーマンスのバグが、モデルではなく、モデルとやり取りするアプリケーション コードの一部に存在することもあります。プラットフォーム固有のプロファイリング ツールと、プラットフォームのベスト プラクティスについて十分に理解してください。

デバイスで利用可能なハードウェア アクセラレータを使用することがモデルにメリットをもたらすかどうかを評価する

TensorFlow Lite には、GPU、DSP、ニューラル アクセラレータなどのより高速なハードウェアでモデルを高速化する新しい方法が追加されています。通常、これらのアクセラレータは、インタープリタの実行の一部を引き継ぐデリゲート サブモジュールを介して公開されます。TensorFlow Lite では、次の方法でデリゲートを使用できます。

  • GPU デリゲートは、Android と iOS で利用できます。それぞれ OpenGL/OpenCL と Metal を使用します。これらを試すには、GPU デリゲートをご覧ください。
  • 標準以外のハードウェアにアクセスできる場合は、独自のデリゲートを作成できます。詳細については、TensorFlow Lite デリゲートをご覧ください。

一部のアクセラレータは、モデルのタイプに応じて適切に機能します。一部の委任は、浮動小数点モデルまたは特定の方法で最適化されたモデルのみをサポートします。各デリゲートのベンチマークを行い、それがアプリケーションに適しているかどうかを確認することが重要です。たとえば、モデルが非常に小さい場合、モデルを GPU に委任する意味がないことがあります。逆に、演算強度が高い大規模なモデルにはアクセラレータが適しています。