Kualitas layanan

Mulai dari Android 11, NNAPI menawarkan kualitas layanan (QoS) yang lebih baik dengan memungkinkan aplikasi menunjukkan prioritas relatif modelnya, jumlah waktu maksimum yang diharapkan untuk persiapan model tertentu, dan jumlah waktu maksimum yang diharapkan untuk persiapan model tertentu. eksekusi tertentu yang harus diselesaikan. Lebih lanjut, Android 11 memperkenalkan nilai kesalahan NNAPI tambahan yang memungkinkan layanan menunjukkan secara lebih akurat apa yang salah ketika terjadi kegagalan sehingga aplikasi klien dapat bereaksi dan memulihkan dengan lebih baik.

Prioritas

Untuk Android 11 atau lebih tinggi, model disiapkan dengan prioritas di NN HAL 1.3. Prioritas ini relatif terhadap model siap pakai lainnya yang dimiliki oleh aplikasi yang sama. Eksekusi dengan prioritas lebih tinggi dapat menggunakan lebih banyak sumber daya komputasi dibandingkan eksekusi dengan prioritas lebih rendah, dan dapat mendahului atau menghentikan eksekusi dengan prioritas lebih rendah.

Panggilan NN HAL 1.3 yang menyertakan Priority sebagai argumen eksplisit adalah IDevice::prepareModel_1_3 . Perhatikan bahwa IDevice::prepareModelFromCache_1_3 secara implisit menyertakan Priority dalam argumen cache.

Ada banyak kemungkinan strategi untuk mendukung prioritas tergantung pada kemampuan pengemudi dan akselerator. Berikut beberapa strateginya:

  • Untuk pengemudi yang memiliki dukungan prioritas bawaan, langsung sebarkan bidang Priority ke akselerator.
  • Gunakan antrean prioritas per aplikasi untuk mendukung berbagai prioritas bahkan sebelum eksekusi mencapai akselerator.
  • Menjeda atau membatalkan model berprioritas rendah yang sedang dijalankan untuk membebaskan akselerator untuk menjalankan model berprioritas tinggi. Lakukan ini dengan menyisipkan pos pemeriksaan dalam model berprioritas rendah yang, ketika tercapai, akan menanyakan tanda untuk menentukan apakah eksekusi saat ini harus dihentikan sebelum waktunya atau dengan mempartisi model ke dalam submodel dan menanyakan tanda di antara eksekusi submodel. Perhatikan bahwa penggunaan pos pemeriksaan atau submodel dalam model yang disiapkan dengan prioritas dapat menimbulkan overhead tambahan yang tidak ada untuk model tanpa prioritas dalam versi yang lebih rendah dari NN HAL 1.3.

    • Untuk mendukung preemption, pertahankan konteks eksekusi termasuk operasi atau submodel berikutnya yang akan dieksekusi dan data operan perantara yang relevan. Gunakan konteks eksekusi ini untuk melanjutkan eksekusi di lain waktu.
    • Dukungan preemption penuh tidak diperlukan, sehingga konteks eksekusi tidak perlu dipertahankan. Karena eksekusi model NNAPI bersifat deterministik, eksekusi dapat dimulai ulang dari awal di lain waktu.

Android memungkinkan layanan untuk membedakan berbagai aplikasi panggilan melalui penggunaan AID (Android UID). HIDL memiliki mekanisme bawaan untuk mengambil UID aplikasi panggilan melalui metode ::android::hardware::IPCThreadState::getCallingUid . Daftar AID dapat ditemukan di libcutils/include/cutils/android_filesystem_config.h .

Tenggat waktu

Mulai Android 11, persiapan dan eksekusi model dapat diluncurkan dengan argumen tenggat waktu OptionalTimePoint . Bagi pengemudi yang dapat memperkirakan berapa lama waktu yang dibutuhkan suatu tugas, tenggat waktu ini memungkinkan pengemudi untuk membatalkan tugas sebelum dimulai jika pengemudi memperkirakan bahwa tugas tersebut tidak dapat diselesaikan sebelum tenggat waktu tersebut. Demikian pula, tenggat waktu memungkinkan pengemudi untuk membatalkan tugas yang sedang berjalan yang diperkirakan tidak akan selesai sebelum tenggat waktu. Argumen tenggat waktu tidak memaksa pengemudi untuk membatalkan tugas jika tugas tersebut tidak selesai sesuai tenggat waktu atau jika tenggat waktu telah berlalu. Argumen tenggat waktu dapat digunakan untuk mengosongkan sumber daya komputasi dalam driver dan mengembalikan kontrol ke aplikasi lebih cepat daripada yang mungkin dilakukan tanpa tenggat waktu.

Panggilan NN HAL 1.3 yang menyertakan tenggat waktu OptionalTimePoint sebagai argumen adalah:

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

Untuk melihat implementasi referensi fitur tenggat waktu untuk masing-masing metode di atas, lihat contoh driver NNAPI di frameworks/ml/nn/driver/sample/SampleDriver.cpp .

Kode kesalahan

Android 11 menyertakan empat nilai kode kesalahan di NN HAL 1.3 untuk meningkatkan pelaporan kesalahan, memungkinkan pengemudi mengomunikasikan statusnya dengan lebih baik dan aplikasi dapat pulih dengan lebih baik. Ini adalah nilai kode kesalahan di ErrorStatus .

  • MISSED_DEADLINE_TRANSIENT
  • MISSED_DEADLINE_PERSISTENT
  • RESOURCE_EXHAUSTED_TRANSIENT
  • RESOURCE_EXHAUSTED_PERSISTENT

Di Android 10 atau lebih rendah, driver hanya dapat menunjukkan kegagalan melalui kode kesalahan GENERAL_FAILURE . Dari Android 11, dua kode kesalahan MISSED_DEADLINE dapat digunakan untuk menunjukkan bahwa beban kerja dibatalkan karena tenggat waktu telah tercapai atau karena pengemudi memperkirakan beban kerja tidak akan selesai sesuai tenggat waktu. Kedua kode kesalahan RESOURCE_EXHAUSTED dapat digunakan untuk menunjukkan bahwa tugas gagal karena keterbatasan sumber daya dalam driver, seperti driver tidak memiliki cukup memori untuk panggilan tersebut.

Versi TRANSIENT dari kedua kesalahan menunjukkan bahwa masalah tersebut bersifat sementara, dan panggilan di masa mendatang ke tugas yang sama mungkin berhasil setelah penundaan singkat. Misalnya, kode kesalahan ini harus dikembalikan ketika pengemudi sibuk dengan pekerjaan sebelumnya yang memakan waktu lama atau membutuhkan banyak sumber daya, namun tugas baru akan berhasil diselesaikan jika pengemudi tidak sibuk dengan pekerjaan sebelumnya. Versi PERSISTENT dari kedua kesalahan menunjukkan bahwa panggilan di masa mendatang ke tugas yang sama diperkirakan selalu gagal. Misalnya, kode kesalahan ini harus dikembalikan ketika pengemudi memperkirakan tugas tidak akan selesai sesuai tenggat waktu bahkan dalam kondisi sempurna, atau model pada dasarnya terlalu besar dan melebihi sumber daya pengemudi.

Validasi

Kualitas fungsionalitas layanan diuji dalam tes NNAPI VTS ( VtsHalNeuralnetworksV1_3Target ). Ini mencakup serangkaian pengujian untuk validasi ( TestGenerated/ValidationTest#Test/ ) untuk memastikan bahwa pengemudi menolak prioritas yang tidak valid dan serangkaian pengujian yang disebut DeadlineTest ( TestGenerated/DeadlineTest#Test/ ) untuk memastikan bahwa pengemudi menangani tenggat waktu dengan benar.