NNAPI ドライバの実装に関するおすすめの方法

このページでは、アプリ デベロッパーが Neural Networks API(NNAPI)を幅広く導入できるようにするための NNAPI ドライバの実装に関するおすすめの方法について説明します。

起動時間が短縮された状態の保持

ドライバが初回の使用時にモデルの重みを変換する場合は、ドライバがコンパイル キャッシュをサポートしていることを確認します。これにより、アプリの起動時にコンパイルに要する時間を短縮できます。これは、起動時間が長すぎる場合、アプリがハードウェアのアクセラレーションの使用を回避する可能性があるため重要です。たとえば、一部のアプリには 100 MB を超える重みがあり、アプリ起動のたびにそれらを変換することにより時間を浪費することになります。

最小レイテンシの短縮

モデルがハードウェア アクセラレーションを使用できるようにするには、ドライバの最小レイテンシを短縮することが重要です。多くのアプリは何回も実行される小さなモデルを使用しており、ワークロードを実行するための最小レイテンシが高すぎる場合(数ミリ秒など)、モデルは CPU でワークロードを実行する可能性があります。ハードウェア アクセラレーションを使用する場合と異なり、これに要する時間は 1~2 ミリ秒です。高コストのスレッドの同期には注意が必要です。

NN HAL SchedTune グループの使用

Android 11 以降では、AOSP に、中間プロセスの NN HAL プロセスが、事前定義済みの top-app cgroup 内での同じプロセス実装の場合と同様の大きなコアを使用できるようにする専用の NN HAL SchedTune グループが追加されています。この SchedTune グループを使用することで、特に小規模なモデルの場合に、ドライバのオーバーヘッドが削減されます。

SchedTune グループを使用するには、NN HAL プロセスの init.rc ファイルに次の行を追加します。

writepid /dev/stune/nnapi-hal/tasks