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 menyiapkan model tertentu, dan jumlah waktu maksimum yang diperkirakan untuk menyelesaikan eksekusi tertentu. Selain itu, Android 11 memperkenalkan nilai error NNAPI tambahan yang memungkinkan layanan menunjukkan masalah yang terjadi saat kegagalan terjadi dengan lebih akurat sehingga aplikasi klien dapat bereaksi dan pulih dengan lebih baik.

Prioritas

Untuk Android 11 atau yang lebih tinggi, model disiapkan dengan prioritas di NN HAL 1.3. Prioritas ini relatif terhadap model lain yang disiapkan dan dimiliki oleh aplikasi yang sama. Eksekusi dengan prioritas lebih tinggi dapat menggunakan lebih banyak resource komputasi daripada eksekusi dengan prioritas lebih rendah, dan dapat mengambil alih 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, 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 prioritas yang berbeda bahkan sebelum eksekusi mencapai akselerator.
  • Jeda atau batalkan model berprioritas rendah yang sedang dijalankan untuk membebaskan akselerator guna menjalankan model berprioritas 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 flag 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 preemptif, pertahankan konteks eksekusi termasuk operasi atau submodel berikutnya yang akan dieksekusi dan data operand perantara yang relevan. Gunakan konteks eksekusi ini untuk melanjutkan eksekusi di lain waktu.
    • Dukungan preemptif penuh tidak diperlukan, sehingga konteks eksekusi tidak perlu dipertahankan. Karena eksekusi model NNAPI deterministik, eksekusi dapat dimulai ulang dari awal di lain waktu.

Android memungkinkan layanan membedakan antara 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.

Batas waktu

Mulai dari Android 11, persiapan dan eksekusi model dapat diluncurkan dengan argumen batas waktu OptionalTimePoint. Untuk driver yang dapat memperkirakan berapa lama tugas berlangsung, batas waktu ini memungkinkan driver membatalkan tugas sebelum dimulai jika driver memperkirakan bahwa tugas tidak dapat selesai 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 driver untuk membatalkan tugas jika tugas tidak selesai sebelum batas waktu atau jika batas waktu telah berlalu. Argumen batas waktu dapat digunakan untuk mengosongkan resource komputasi dalam driver dan mengembalikan kontrol ke aplikasi lebih cepat daripada yang memungkinkan 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, sehingga driver dapat mengomunikasikan statusnya dan aplikasi dapat pulih dengan lebih baik. Ini adalah nilai kode error di 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 batasan resource dalam driver, seperti driver yang tidak memiliki cukup memori untuk panggilan.

Versi TRANSIENT dari kedua error tersebut menunjukkan bahwa masalahnya bersifat sementara, dan panggilan mendatang ke tugas yang sama mungkin berhasil setelah penundaan singkat. Misalnya, kode error ini akan ditampilkan saat driver sibuk dengan pekerjaan sebelumnya yang berjalan lama atau membutuhkan banyak resource, tetapi tugas baru akan berhasil selesai jika driver tidak sibuk dengan pekerjaan sebelumnya. Versi PERSISTENT dari kedua error tersebut menunjukkan bahwa panggilan mendatang ke tugas yang sama selalu diharapkan 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

Fungsi kualitas layanan diuji dalam pengujian VTS NNAPI (VtsHalNeuralnetworksV1_3Target). Hal ini mencakup serangkaian pengujian untuk validasi (TestGenerated/ValidationTest#Test/) guna memastikan bahwa driver menolak prioritas yang tidak valid dan serangkaian pengujian yang disebut DeadlineTest (TestGenerated/DeadlineTest#Test/) untuk memastikan bahwa driver menangani batas waktu dengan benar.