モバイル デバイスや組み込みデバイスではコンピューティング リソースが限られているため、 アプリケーション リソースの効率性を維持するうえで重要です。リストにまとめられています TensorFlow を改善するために使用できるベスト プラクティスと戦略 ライトモデルのパフォーマンス。
タスクに最適なモデルを選択する
タスクによっては、モデルの複雑さとトレードオフのバランスを取る必要がある 決定します高い精度が求められるタスクの場合は、大容量かつ高精度の 複雑なモデルです必要な精度が低いタスクの場合は、 ディスク容量とメモリの使用量が少ないだけでなく、 一般的には高速かつエネルギー効率も向上します。たとえば 下のグラフは 精度とレイテンシのトレードオフが 考慮されています
モバイル デバイス向けに最適化されたモデルの一例 MobileNets: モバイル向けに最適化されています。 ビジョンアプリケーションを開発できます。Kaggle Models には、そのほかにいくつかの モバイル デバイスや組み込みデバイス向けに特別に最適化されたモデルが用意されています。
転送を使用して、リストされたモデルを独自のデータセットで再トレーニングできます。 学びます。
モデルをプロファイリングする
タスクに適したモデルの候補を選択すると、 モデルのプロファイリングとベンチマークを行うことをおすすめします。LiteRT ベンチマーク ツール には、オペレーターごとのプロファイリング統計情報を表示する組み込みのプロファイラがあります。これにより、 パフォーマンスのボトルネックや 影響を及ぼしている演算子を把握できます 大幅に短縮されます。
LiteRT も使用できます。 プロファイルにトレース 標準の Android システム トレースを使用して、Android アプリでモデルを GUI ベースのプロファイリングにより、オペレータの呼び出しを時系列で可視化できます。 できます。
グラフで演算子をプロファイリングして最適化する
特定の演算子がモデルに頻繁に出現する場合、 オペレーターが最も多くの時間を消費していることがわかった場合、 最適化を検討してくださいTensorFlow では、このシナリオはまれです。 Lite には、ほとんどのオペレーター向けに最適化されたバージョンが用意されています。ただし、 カスタム演算の制約がわかっている場合は、より高速なバージョンのカスタム演算を記述してください。 演算子が実行されます。カスタム オペレータ ガイドをご覧ください。
モデルを最適化する
モデルの最適化の目的は、より小規模で、一般的に高速かつ モバイル デバイスにデプロイできるよう、エネルギー効率が向上しています。 LiteRT は、量子化などの複数の最適化手法をサポートしています。
詳細については、モデル最適化のドキュメントをご覧ください。
スレッド数を調整する
LiteRT は、多くのオペレーターのマルチスレッド カーネルをサポートしています。Google Chat では スレッド数を増やし、演算子の実行を高速化します。上昇: ただし、スレッド数によってモデルがより多くのリソースを使用し、 あります。
アプリケーションによっては、エネルギー効率よりもレイテンシの方が重要となる場合があります。マイページ インタープリタの数を設定してスレッド数を増やす スレッド。 ただし、マルチスレッドの実行ではパフォーマンスが高くなります。 同時に実行されるものに依存して変動します。これは、 特にモバイルアプリの場合ですたとえば、単独のテストでは 2 倍の シングルスレッドよりも高速になりますが、 別のアプリが同時に実行されている場合は シングルスレッドよりもパフォーマンスが低下する可能性があります。
冗長なコピーを排除する
アプリケーションが入念に設計されていない場合、冗長なコピーが存在する可能性がある
モデルから出力を読み取るときに
大きな負担となります必ず
冗長なコピーを排除しますJava などの上位レベルの API を使用する場合は、
ドキュメントでパフォーマンスの注意点を
よく確認してくださいたとえば
次のように ByteBuffers
を使用すると、Java API が大幅に高速化されます。
inputs。
プラットフォーム固有のツールを使用してアプリケーションをプロファイリングする
Android などのプラットフォーム固有のツール Profiler と 楽器は富をもたらす アプリのデバッグに使用できるプロファイリング情報。場合によっては、 パフォーマンスのバグはモデルではなく、アプリケーション コードの一部に モデルとやり取りしますプラットフォームについて プロファイリングツールと ベストプラクティスを確認します
デバイスで利用可能なハードウェア アクセラレータを使用することがモデルにメリットをもたらすかどうかを評価する
LiteRT に、より高速なハードウェアでモデルを高速化する新しい方法を追加 ニューラルアクセラレータなどの さまざまなコンポーネントを取り上げています通常 これらのアクセラレータは delegate サブモジュールを介して公開されています。 いくつかあります。LiteRT は次の方法でデリゲートを使用できます。
- GPU デリゲートは、OpenGL/OpenCL と Metal を使用する Android と iOS で利用できます。 できます。これらを試すには、GPU デリゲートをご覧ください。
- アクセス権がある場合は、独自の委任を作成できます。 非標準のハードウェアで行われます。詳しくは、LiteRT 代理人をご覧ください。
一部のアクセラレータは、モデルのタイプに応じて適切に機能します。一部 デリゲートは、浮動小数点モデルまたは特定の方法で最適化されたモデルのみをサポートします。内容 各デリゲートのベンチマークを行い、デリゲートが適切かどうかを確認することが重要 選択できます。たとえば、非常に小さなモデルの場合、 GPU にモデルを任せる必要はありません。逆に、アクセラレータは 演算強度が高い大規模モデルに最適です。