LiteRT Next によるハードウェア アクセラレーション

ハードウェア アクセラレーションは、専用のコンピュータ ハードウェアを使用して AI モデルの実行速度と効率を向上させるものです。LiteRT の場合、これは主に、AI 推論に画像処理装置(GPU)またはニューラル プロセッシング ユニット(NPU)を使用することと、汎用中央処理装置(CPU)ベクトル命令を使用することを意味します。

LiteRT は、TFLite Delegate を使用してハードウェア アクセラレーションをサポートしています。これは、グラフに独自のオペレーションを代入することで、LiteRT グラフの一部を引き継ぎます。LiteRT Next では、次の 2 つのステップでハードウェア アクセラレーションを処理することで、このプロセスを改善しています。

  1. コンパイル: 特定のハードウェアで実行するモデルを準備します。
  2. ディスパッチ: 選択したオペレーションを関連するハードウェアで実行します。

コンパイル フェーズでは、コンパイラ プラグインにより柔軟性を高める新しいインターフェースを使用して LiteRT モデルが変更されます。モデルのコンパイルは、グラフの実行前に事前(AOT)に行われ、デバイスで実行するように特定のグラフを調整します。

アクセラレータの種類

LiteRT には、NPU、GPU、CPU の 3 種類のアクセラレータがあります。

  • NPU アクセラレーションは、単一のインターフェースで統合された専用のハードウェアをサポートします。NPU のサポートは、早期アクセス プログラムを通じて利用できます。
  • GPU アクセラレーションは、WebGL と OpenCL 対応デバイスをサポートしています。
  • CPU アクセラレーションは、XNNPack ライブラリを使用してさまざまなプロセッサをサポートしています。これはデフォルトの加速レベルで、常に使用できます。

これらのアクセラレータを組み合わせて、特定のハードウェアで複雑なオペレーションを使用できない場合に最適なパフォーマンスを得ることができます。アクセラレータがオペレーションを競合する場合、LiteRT は NPU、GPU、CPU の優先順位を使用します。

GPU アクセラレーション

LiteRT Next の GPU アクセラレーションを使用すると、GPU に適した入力バッファと出力バッファを作成できます。また、GPU メモリ内のデータをゼロコピーで処理し、タスクを非同期で実行して並列処理を最大化できます。LiteRT Next は、LiteRT では提供されていない、新しい改良版の GPU デリゲートを使用します。

LiteRT を使用して GPU でモデルを実行するには、明示的なデリゲートの作成、関数呼び出し、グラフの変更が必要です。LiteRT Next では、アクセラレータを指定するだけです。

// Create a compiled model targeting GPU
LITERT_ASSIGN_OR_RETURN(auto compiled_model,
    CompiledModel::Create(env, model, kLiteRtHwAcceleratorGpu));

GPU アクセラレーションの詳細については、LiteRT アクセラレーションによる GPU アクセラレーションをご覧ください。

NPU アクセラレーション

LiteRT Next は、ベンダー固有のコンパイラ、ランタイム、ライブラリの依存関係を個別に操作することなく、NPU を活用するための統合インターフェースを提供します。NPU アクセラレーションに LiteRT Next を使用すると、ベンダー固有やデバイス固有の複雑さを回避し、リアルタイムおよび大規模モデル推論のパフォーマンスを向上させ、ゼロコピー ハードウェア バッファを使用してメモリコピーを最小限に抑えることができます。

LiteRT で NPU を使用するには、Play for On-device AI(PODAI)を使用してモデルを変換してコンパイルし、Play AI Pack と Feature Module を使用してモデルをデプロイします。