Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Kualitas pelayanan

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 menyiapkan model tertentu, dan jumlah waktu maksimum yang diharapkan untuk eksekusi tertentu untuk diselesaikan. Lebih lanjut, Android 11 memperkenalkan nilai kesalahan NNAPI tambahan yang memungkinkan layanan untuk 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 yang disiapkan lainnya 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 mencegah 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, sebarkan langsung bidang Priority ke akselerator.
  • Gunakan antrean prioritas per aplikasi untuk mendukung berbagai prioritas bahkan sebelum eksekusi mencapai akselerator.
  • Jeda atau batalkan model prioritas rendah yang saat ini sedang dijalankan untuk membebaskan akselerator untuk menjalankan model prioritas tinggi. Lakukan ini dengan memasukkan checkpoint dalam model berprioritas rendah yang, ketika tercapai, meminta sebuah 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 checkpoint atau submodel dalam model yang disiapkan dengan prioritas dapat menyebabkan 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 operan perantara yang relevan. Gunakan konteks eksekusi ini untuk melanjutkan eksekusi di lain waktu.
    • Dukungan preemption penuh tidak diperlukan, jadi 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 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 tenggat waktu OptionalTimePoint . Untuk pengemudi yang dapat memperkirakan berapa lama suatu tugas berlangsung, batas waktu ini memungkinkan pengemudi untuk membatalkan tugas sebelum dimulai jika pengemudi memperkirakan bahwa tugas tersebut tidak dapat diselesaikan sebelum tenggat 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 belum selesai sebelum 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 setiap 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 untuk mengkomunikasikan status dan aplikasi mereka dengan lebih baik untuk 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 bisa 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 sebelum 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 mendatang ke tugas yang sama mungkin berhasil setelah penundaan singkat. Misalnya, kode kesalahan ini harus dikembalikan saat pengemudi sibuk dengan pekerjaan sebelumnya yang berjalan lama atau intensif sumber daya, tetapi tugas baru akan berhasil diselesaikan jika pengemudi tidak sibuk dengan pekerjaan sebelumnya. Versi PERSISTENT dari kedua error tersebut menunjukkan bahwa panggilan mendatang ke tugas yang sama selalu diharapkan untuk gagal. Misalnya, kode kesalahan ini harus dikembalikan saat pengemudi memperkirakan tugas tidak akan selesai sebelum 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 NNAPI VTS ( VtsHalNeuralnetworksV1_3Target ). Ini mencakup serangkaian pengujian untuk validasi ( TestGenerated/ValidationTest#Test/ ) untuk memastikan bahwa driver menolak prioritas yang tidak valid dan serangkaian pengujian yang disebut DeadlineTest ( TestGenerated/DeadlineTest#Test/ ) untuk memastikan bahwa pengemudi menangani tenggat waktu dengan benar.