Rilevamento e assegnazione del dispositivo

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

Per le implementazioni NN HAL 1.2 sono necessarie il supporto per il rilevamento e l'assegnazione dei dispositivi.

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 in 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 un'unica interfaccia IDevice che gestisce più dispositivi, eventualmente di tipi diversi. Un driver con un'interfaccia eterogenea dovrebbe anche esporre interfacce IDevice separate che corrispondono ai singoli dispositivi per consentire a un'applicazione di scegliere tra questi dispositivi.
  • CPU: CPU single-core o multicore.
  • GPU: una GPU in grado di eseguire modelli NNAPI e accelerare API grafiche come OpenGL ES e Vulkan.
  • ACCELERATOR: un'unità di elaborazione neurale dedicata (NPU).

Implementa getVersionString in IDevice.hal per ottenere la stringa di 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 del driver.

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