Android 10 では、ニューラル ネットワーク API(NNAPI)に、機械学習フレームワーク ライブラリとアプリが使用可能なデバイスに関する情報を取得し、モデルを実行するデバイスを指定できるようにする機能が導入されました。アプリは、使用可能なデバイスに関する情報を得ることにより、デバイスで見つかったドライバの正確なバージョンから、既知の非互換性の問題を回避できるようになります。実行するデバイスをモデルのセクションごとに指定できるようになるため、デプロイする製品に合わせてアプリを最適化できます。
NN HAL 1.2 の実装には、デバイスの検出と割り当てのサポートが必要です。
実装
NNAPI でデバイスの検出と割り当ての機能をサポートするには、IDevice.hal の getType と getVersionString を実装して、フレームワークがデバイスのタイプとドライバのバージョンを取得できるようにします。
types.hal の DeviceType で指定されているとおり、デバイスごとに、次のいずれかのカテゴリとしてタイプを指定します。
OTHER: 他のいずれのカテゴリにも属さないデバイス。(場合によってはタイプが異なる)複数のデバイスを管理する単一のIDeviceインターフェースである異種インターフェースを含みます。異種インターフェースのドライバは、個々のデバイスに対応する個別のIDeviceインターフェースを公開し、アプリがこれらのデバイスから選択できるようにする必要もあります。CPU: シングルコアまたはマルチコア CPU。GPU: NNAPI モデルを実行し、OpenGL ES や Vulkan などのグラフィック API を高速化できる GPU。ACCELERATOR: 専用ニューラル プロセッシング ユニット(NPU)。
IDevice.hal で getVersionString を実装して、デバイス実装のバージョン文字列を取得します。このメソッドは、人間が読める文字列を返す必要があります。文字列の形式はベンダー固有です。バージョン文字列は、ドライバの新しいバージョンごとに異なる必要があります。
IDevice インターフェースの名前は、{VENDOR}-{DEVICE_NAME} 形式に従う必要があります。