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 diperkirakan untuk mempersiapkan model tertentu, dan jumlah waktu maksimum yang diharapkan untuk penyelesaian eksekusi tertentu. Selanjutnya, Android 11 memperkenalkan nilai error NNAPI tambahan yang memungkinkan layanan menunjukkan masalah yang terjadi secara lebih akurat saat terjadi kegagalan, sehingga aplikasi klien dapat bereaksi dan memulihkan dengan lebih baik.

Prioritas

Untuk Android 11 atau yang lebih baru, model disiapkan dengan prioritas dalam NN HAL 1.3. Prioritas ini relatif terhadap model siap lainnya yang dimiliki oleh aplikasi yang sama. Eksekusi dengan prioritas lebih tinggi dapat menggunakan lebih banyak resource komputasi daripada eksekusi dengan prioritas lebih rendah, dan dapat mendahului atau kekurangan 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, bergantung pada kemampuan driver dan akselerator. Berikut ini beberapa strateginya:

  • Untuk driver yang memiliki dukungan prioritas bawaan, terapkan kolom Priority secara langsung ke akselerator.
  • Gunakan antrean prioritas per aplikasi untuk mendukung berbagai prioritas bahkan sebelum eksekusi mencapai akselerator.
  • Menjeda atau membatalkan model berprioritas rendah yang sedang dieksekusi agar akselerator dapat mengeksekusi model prioritas tinggi. Lakukan hal ini dengan menyisipkan checkpoint di model prioritas rendah yang, jika tercapai, akan mengkueri tanda untuk menentukan apakah eksekusi saat ini harus dihentikan secara dini atau dengan mempartisi model menjadi submodel dan mengkueri tanda di antara eksekusi submodel. Perlu diperhatikan bahwa penggunaan checkpoint 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 sub-model berikutnya yang akan dieksekusi dan data operand 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 determenistik, eksekusi dapat dimulai ulang dari awal di lain waktu.

Android memungkinkan layanan membedakan berbagai aplikasi panggilan yang berbeda melalui penggunaan AID (UID Android). 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 dari Android 11, persiapan dan eksekusi model dapat diluncurkan dengan argumen batas waktu OptionalTimePoint. Untuk driver yang dapat memperkirakan lamanya waktu yang diperlukan, batas waktu ini memungkinkan pengemudi untuk membatalkan tugas sebelum dimulai jika pengemudi memperkirakan bahwa tugas tidak dapat diselesaikan sebelum batas waktu. Demikian pula, tenggat waktu memungkinkan pengemudi untuk membatalkan tugas yang sedang berlangsung yang diperkirakan tidak akan selesai sebelum batas waktu. Argumen batas waktu tidak memaksa pengemudi untuk membatalkan tugas jika tugas belum selesai pada batas waktu atau jika batas waktu telah berlalu. Argumen batas waktu dapat digunakan untuk mengosongkan resource komputasi dalam driver dan menampilkan kontrol ke aplikasi lebih cepat daripada yang mungkin dilakukan tanpa batas waktu.

Panggilan NN HAL 1.3 yang menyertakan batas 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 batas waktu untuk setiap metode di atas, lihat contoh driver NNAPI di frameworks/ml/nn/driver/sample/SampleDriver.cpp.

Kode error

Android 11 menyertakan empat nilai kode error di NN HAL 1.3 untuk meningkatkan pelaporan error, yang memungkinkan pengemudi mengomunikasikan status dan aplikasi dengan lebih baik agar pemulihan lebih lancar. Berikut adalah nilai kode error dalam ErrorStatus.

  • MISSED_DEADLINE_TRANSIENT
  • MISSED_DEADLINE_PERSISTENT
  • RESOURCE_EXHAUSTED_TRANSIENT
  • RESOURCE_EXHAUSTED_PERSISTENT

Di Android 10 atau yang lebih rendah, driver hanya dapat menunjukkan kegagalan melalui kode error GENERAL_FAILURE. Dari Android 11, dua kode error MISSED_DEADLINE dapat digunakan untuk menunjukkan bahwa workload dibatalkan karena batas waktu tercapai atau karena driver memprediksi beban kerja tidak akan selesai pada batas waktu. Dua kode error RESOURCE_EXHAUSTED dapat digunakan untuk menunjukkan bahwa tugas gagal karena keterbatasan resource dalam driver, seperti driver tidak memiliki cukup memori untuk panggilan.

Versi TRANSIENT dari kedua error ini menunjukkan bahwa masalah tersebut bersifat sementara, dan panggilan selanjutnya ke tugas yang sama mungkin berhasil setelah penundaan singkat. Misalnya, kode error ini harus ditampilkan ketika pengemudi sibuk dengan pekerjaan sebelumnya yang membutuhkan banyak resource atau berjalan lama, tetapi tugas baru akan berhasil diselesaikan jika pengemudi tidak sibuk dengan pekerjaan sebelumnya. Versi PERSISTENT dari kedua error menunjukkan bahwa panggilan mendatang untuk tugas yang sama selalu diperkirakan akan gagal. Misalnya, kode error ini harus ditampilkan saat pengemudi memperkirakan bahwa tugas tidak akan selesai pada batas waktu bahkan dalam kondisi sempurna, atau bahwa model terlalu besar dan melebihi resource driver.

Validasi

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