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.