Rilevamento e assegnazione dei dispositivi

In Android 10, l'API Neural Networks (NNAPI) introduce funzioni che consentono alle librerie e alle app del framework di machine learning di ottenere informazioni sui dispositivi disponibili e specificare su quali dispositivi eseguire un modello. Fornire informazioni sui dispositivi disponibili consente alle app di ottenere la versione esatta dei driver trovati sul dispositivo per evitare incompatibilità note. Consentendo alle app di specificare quali dispositivi devono eseguire diverse sezioni di un modello, le app possono essere ottimizzate per il prodotto su cui vengono implementate.

Il supporto per il rilevamento e l'assegnazione dei dispositivi è necessario per le implementazioni NN HAL 1.2.

Implementazione

Per supportare le funzionalità di rilevamento e assegnazione dei dispositivi in NNAPI, implementa getType e getVersionString in IDevice.hal per consentire al framework di ottenere il tipo di dispositivo e la versione del driver.

Per ogni dispositivo, specifica il tipo come una delle seguenti categorie, come specificato in DeviceType in types.hal.

  • OTHER:un dispositivo che non rientra in nessuna delle altre categorie, inclusa un'interfaccia eterogenea, ovvero una singola interfaccia IDevice che gestisce più dispositivi, possibilmente di tipi diversi. Un driver con un'interfaccia eterogenea deve anche esporre interfacce IDevice separate che corrispondono a singoli dispositivi per consentire a un'applicazione di scegliere tra questi dispositivi.
  • CPU: una CPU single-core o multi-core.
  • GPU: una GPU in grado di eseguire modelli NNAPI e accelerare le API grafiche come OpenGL ES e Vulkan.
  • ACCELERATOR: un'unità di elaborazione neurale (NPU) dedicata.

Implementa getVersionString in IDevice.hal per ottenere la stringa della versione dell'implementazione del dispositivo. Questo metodo deve restituire una stringa leggibile. Il formato della stringa è specifico del fornitore. La stringa di versione deve essere diversa per ogni nuova versione di un driver.

Il nome dell'interfaccia IDevice deve seguire il formato {VENDOR}-{DEVICE_NAME}.