Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る
このページは Cloud Translation API によって翻訳されました。
Switch to English

サービスの質

Android 11以降、NNAPIは、アプリがモデルの相対的な優先順位、特定のモデルの準備に予想される最大時間、および完了すべき特定の実行。さらに、Android 11では追加のNNAPIエラー値が導入されているため、サービスは障害が発生したときに何が問題だったかをより正確に示し、クライアントアプリがより適切に対応して回復できるようにします。

優先度

Android 11以降の場合、モデルはNN HAL1.3で優先的に準備されます。この優先度は、同じアプリが所有する他の準備済みモデルと比較しています。優先度の高い実行は、優先度の低い実行よりも多くのコンピューティングリソースを使用でき、優先度の低い実行をプリエンプトまたは枯渇させる可能性があります。

明示的な引数としてPriorityを含むIDevice::prepareModel_1_3 1.3呼び出しは、 IDevice::prepareModel_1_3です。 IDevice::prepareModelFromCache_1_3は、キャッシュ引数にPriorityを暗黙的に含めることに注意してください。

ドライバーとアクセラレーターの機能に応じて、優先順位をサポートするための多くの可能な戦略があります。ここにいくつかの戦略があります:

  • 優先サポートが組み込まれているドライバーの場合は、[ Priorityフィールドをアクセラレーターに直接伝達します。
  • アプリごとの優先度キューを使用して、実行がアクセラレータに到達する前でも、さまざまな優先度をサポートします。
  • 現在実行中の優先度の低いモデルを一時停止またはキャンセルして、アクセラレータを解放して優先度の高いモデルを実行します。これを行うには、優先度の低いモデルにチェックポイントを挿入し、到達するとフラグをクエリして現在の実行を途中で停止するかどうかを判断するか、モデルをサブモデルに分割してサブモデルの実行間でフラグをクエリします。優先度を付けて準備されたモデルでチェックポイントまたはサブモデルを使用すると、NN HAL1.3より前のバージョンでは優先度のないモデルには存在しない追加のオーバーヘッドが発生する可能性があることに注意してください。

    • プリエンプションをサポートするには、実行される次の操作またはサブモデル、および関連する中間オペランドデータを含む実行コンテキストを保持します。この実行コンテキストを使用して、後で実行を再開します。
    • 完全なプリエンプションのサポートは必要ないため、実行コンテキストを保持する必要はありません。 NNAPIモデルの実行は決定論的であるため、実行は後で最初から再開できます。

Androidを使用すると、サービスはAID(Android UID)を使用して、さまざまな通話アプリを区別できます。 HIDLには、メソッド::android::hardware::IPCThreadState::getCallingUid介して呼び出し元アプリのUIDを取得するメカニズムが組み込まれています。 AIDのリストは、 libcutils/include/cutils/android_filesystem_config.hます。

締め切り

Android 11以降、モデルの準備と実行は、 OptionalTimePoint期限引数を使用して起動できます。タスクにかかる時間を見積もることができるドライバーの場合、この期限により、ドライバーは、期限前にタスクを完了できないと見積もった場合に、タスクを開始する前にタスクを中止できます。同様に、期限により、ドライバーは、期限前に完了しないと推定される進行中のタスクを中止できます。期限引数は、タスクが期限までに完了していない場合、または期限が過ぎている場合に、ドライバーにタスクの中止を強制しません。 deadline引数を使用すると、ドライバー内のコンピューティングリソースを解放し、期限なしで可能な場合よりも速く制御をアプリに戻すことができます。

引数としてOptionalTimePoint期限を含むNNHAL1.3呼び出しは次のとおりです。

  • IDevice::prepareModel_1_3
  • IDevice::prepareModelFromCache_1_3
  • IPreparedModel::execute_1_3
  • IPreparedModel::executeSynchronously_1_3
  • IPreparedModel::executeFenced

上記の各メソッドの期限機能のリファレンス実装を確認するには、 frameworks/ml/nn/driver/sample/SampleDriver.cpp /SampleDriver.cppにあるNNAPIサンプルドライバーを参照してください。

エラーコード

Android11にはNNHAL 1.3に4つのエラーコード値が含まれており、エラーレポートが改善され、ドライバーが状態をより適切に伝達し、アプリがより適切に回復できるようになります。これらは、 ErrorStatusエラーコード値ErrorStatus

  • MISSED_DEADLINE_TRANSIENT
  • MISSED_DEADLINE_PERSISTENT
  • RESOURCE_EXHAUSTED_TRANSIENT
  • RESOURCE_EXHAUSTED_PERSISTENT

Android 10以下では、ドライバーはGENERAL_FAILUREエラーコードを介してのみ失敗を示すことができました。 Android 11以降、2つのMISSED_DEADLINEエラーコードを使用して、期限に達したため、またはドライバーがワークロードが期限までに完了しないと予測したためにワークロードが中止されたことを示すことができます。 2つのRESOURCE_EXHAUSTEDエラーコードを使用して、ドライバーに呼び出し用の十分なメモリがないなど、ドライバー内のリソース制限が原因でタスクが失敗したことを示すことができます。

両方のエラーのTRANSIENTバージョンは、問題が一時的なものであり、同じタスクへの今後の呼び出しが少し遅れて成功する可能性があることを示しています。たとえば、このエラーコードは、ドライバーが以前の長時間実行またはリソースを大量に消費する作業でビジーである場合に返されますが、ドライバーが以前の作業でビジーでない場合、新しいタスクは正常に完了します。両方のエラーのPERSISTENTバージョンは、同じタスクへの今後の呼び出しが常に失敗すると予想されることを示しています。たとえば、このエラーコードは、完全な条件下でもタスクが期限までに完了しないとドライバーが推定した場合、またはモデルが本質的に大きすぎてドライバーのリソースを超えている場合に返されます。

検証

サービス品質機能は、NNAPI VTSテスト( VtsHalNeuralnetworksV1_3Target )でテストされます。これには、ドライバーが無効な優先順位を拒否することを確認するためのTestGenerated/ValidationTest#Test/検証( TestGenerated/ValidationTest#Test/ )と、ドライバーが期限を正しく処理することを確認するためのDeadlineTestTestGenerated/DeadlineTest#Test/ )と呼ばれる一連のテストが含まれます。