2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
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
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-26 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-26 UTC。"],[],[],null,["# NNAPI driver implementation best practices\n\n| **Deprecated:** Starting in Android 15, the\n| [NNAPI (NDK API)](https://developer.android.com/ndk/guides/neuralnetworks) is deprecated. The Neural Networks HAL interface\n| continues to be supported.\n|\n| For more information, see the\n| [NNAPI Migration Guide](https://developer.android.com/ndk/guides/neuralnetworks/migration-guide).\n\nThis page describes best practices for implementing Neural Networks API (NNAPI)\ndrivers to allow for broad adoption of the NNAPI by app developers.\n\nKeep startup times short\n------------------------\n\nIf your driver transforms the weights of a model on first use, make sure the\ndriver supports compilation caching, which reduces the time used for compilation\nwhen an app starts. This is important as apps might avoid using hardware\nacceleration if start-up times are too long. For example, some apps have\nmore than 100 MB of weights and transforming these each time the app\nlaunches is wasteful.\n\nReduce minimal latency\n----------------------\n\nTo ensure that models use hardware acceleration, it's important to reduce the\nminimal latency in drivers. Many apps use small models that are executed\nmultiple times and if the minimal latency to execute a workload is too high,\nsuch as a few milliseconds, models might run the workload on the CPU, which only\ntakes one or two milliseconds, instead of\nusing hardware accelerations. Be careful of costly thread synchronization.\n\nUse the NN HAL SchedTune group\n------------------------------\n\nFrom Android 11 or higher, AOSP includes a dedicated\nNN HAL\n[SchedTune](https://android.googlesource.com/kernel/msm/+/android-msm-marlin-3.18-nougat-dr1/Documentation/scheduler/sched-tune.txt)\ngroup that allows interprocess NN HAL processes to use big\ncores, similar to same-process implementation within the predefined\n`top-app` [cgroup](/docs/core/perf/cgroups). Using this\nSchedTune group reduces driver overhead, especially for small models.\n\nTo use the SchedTune group, add the following line to the `init.rc` file of\nthe NN HAL process: \n\n writepid /dev/stune/nnapi-hal/tasks"]]