Cómo detectar y asignar dispositivos

En Android 10, la API de Neural Networks (NNAPI) introduce funciones que permiten que las bibliotecas y las apps del framework de aprendizaje automático obtengan información sobre los dispositivos disponibles y especifiquen en qué dispositivos se debe ejecutar un modelo. Proporcionar información sobre los dispositivos disponibles permite a las apps obtener la versión exacta de los controladores que se encuentran en el dispositivo para evitar incompatibilidades conocidas. Al otorgar a las apps la capacidad de especificar cuáles dispositivos ejecutarán diferentes secciones de un modelo, las apps se pueden optimizar para el producto en el que se implementarán.

Se requiere compatibilidad con la detección y asignación de dispositivos para las implementaciones de la HAL de NN 1.2.

Implementación

Para admitir las funciones de detección y asignación de dispositivos en la NNAPI, implementa getType y getVersionString en IDevice.hal para permitir que el framework obtenga el tipo de dispositivo y la versión del controlador.

Para cada dispositivo, especifica el tipo como una de las siguientes categorías, tal como se indica en DeviceType en types.hal.

  • OTHER: Es un dispositivo que no pertenece a ninguna de las otras categorías, incluida una interfaz heterogénea, que es una sola interfaz IDevice que administra varios dispositivos, posiblemente de diferentes tipos. Un controlador con una interfaz heterogénea también debe exponer interfaces IDevice separadas que correspondan a dispositivos individuales para permitir que una aplicación elija entre esos dispositivos.
  • CPU: Una CPU de un solo núcleo o de varios núcleos.
  • GPU: Una GPU que puede ejecutar modelos de NNAPI y acelerar APIs de gráficos, como OpenGL ES y Vulkan.
  • ACCELERATOR: Una unidad de procesamiento neuronal (NPU) dedicada.

Implementa getVersionString en IDevice.hal para obtener la cadena de versión de la implementación del dispositivo. Este método debe devolver una cadena legible. El formato de la cadena es específico del proveedor. La cadena de versión debe ser diferente para cada versión nueva de un controlador.

El nombre de la interfaz IDevice debe seguir el formato {VENDOR}-{DEVICE_NAME}.