Mulai dari Android 11, NNAPI menawarkan kualitas layanan (QoS) yang lebih baik dengan memungkinkan aplikasi menunjukkan prioritas relatif dari modelnya, jumlah waktu maksimum yang diharapkan untuk menyiapkan model tertentu, dan jumlah waktu maksimum yang diharapkan untuk eksekusi yang diberikan untuk diselesaikan. Selanjutnya, Android 11 memperkenalkan nilai kesalahan NNAPI tambahan yang memungkinkan layanan untuk secara lebih akurat menunjukkan apa yang salah saat 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 lain yang disiapkan yang dimiliki oleh aplikasi yang sama. Eksekusi dengan prioritas lebih tinggi dapat menggunakan lebih banyak sumber daya komputasi daripada eksekusi dengan prioritas lebih rendah, dan dapat mendahului atau membuat 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 adalah beberapa strategi:
- Untuk pengemudi yang memiliki dukungan prioritas bawaan, langsung propagasi bidang
Priority
ke akselerator. - Gunakan antrean prioritas per aplikasi untuk mendukung prioritas yang berbeda bahkan sebelum eksekusi mencapai akselerator.
Jeda atau batalkan 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, meminta 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 kembali dari awal di lain waktu.
Android memungkinkan layanan untuk membedakan antara aplikasi panggilan yang berbeda melalui penggunaan AID (Android UID). HIDL memiliki mekanisme bawaan untuk mengambil UID aplikasi pemanggil 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 pengemudi yang dapat memperkirakan berapa lama tugas yang dibutuhkan, tenggat 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 tenggat waktu. Argumen tenggat waktu tidak memaksa pengemudi untuk membatalkan tugas jika tugas tidak selesai pada tenggat waktu atau jika tenggat waktu telah berlalu. Argumen tenggat waktu dapat digunakan untuk mengosongkan sumber daya komputasi di dalam driver dan mengembalikan kontrol ke aplikasi lebih cepat daripada yang dimungkinkan 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 setiap metode di atas, lihat driver sampel 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 untuk mengomunikasikan status dan aplikasi mereka dengan lebih baik agar pulih dengan lebih lancar. 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 tercapai atau karena pengemudi memperkirakan beban kerja tidak akan selesai pada tenggat waktu. Dua kode kesalahan RESOURCE_EXHAUSTED
dapat digunakan untuk menunjukkan bahwa tugas gagal karena keterbatasan sumber daya dalam pengandar, seperti pengandar tidak memiliki cukup memori untuk panggilan.
Versi TRANSIENT
dari kedua kesalahan menunjukkan bahwa masalahnya bersifat sementara, dan bahwa panggilan mendatang ke tugas yang sama mungkin berhasil setelah penundaan singkat. Misalnya, kode kesalahan ini harus dikembalikan saat pengemudi sibuk dengan pekerjaan lama atau intensif sumber daya sebelumnya, tetapi tugas baru akan berhasil diselesaikan jika pengemudi tidak sibuk dengan pekerjaan sebelumnya. Versi PERSISTENT
dari kedua kesalahan menunjukkan bahwa panggilan mendatang ke tugas yang sama selalu diharapkan gagal. Misalnya, kode kesalahan ini harus dikembalikan ketika pengemudi memperkirakan tugas tidak akan selesai pada tenggat waktu bahkan dalam kondisi sempurna, atau bahwa model secara inheren terlalu besar dan melebihi sumber daya pengemudi.
Validasi
Kualitas fungsionalitas layanan diuji dalam pengujian VTS NNAPI ( VtsHalNeuralnetworksV1_3Target
). Ini termasuk serangkaian tes untuk validasi ( TestGenerated/ValidationTest#Test/
) untuk memastikan bahwa pengemudi menolak prioritas yang tidak valid dan serangkaian tes yang disebut DeadlineTest
( TestGenerated/DeadlineTest#Test/
) untuk memastikan bahwa pengemudi menangani tenggat waktu dengan benar.