Обнаружение и назначение устройств

В Android 10 Neural Networks API (NNAPI) содержит функции, которые позволяют библиотекам и приложениям на основе машинного обучения получать информацию о доступных устройствах и указывать, на каких из них должна выполняться модель. Информация о доступных устройствах позволяет приложениям получать точную версию драйверов, установленных на устройстве, чтобы избежать известных несовместимостей. Благодаря возможности указывать, на каких устройствах должны выполняться разные разделы модели, приложения можно оптимизировать для продукта, на котором они развернуты.

Для реализаций NN HAL 1.2 требуется поддержка обнаружения и назначения устройств.

Реализация

Чтобы поддерживать функции обнаружения и назначения устройств в NNAPI, реализуйте getType и getVersionString в IDevice.hal, чтобы фреймворк мог получать тип устройства и версию драйвера.

Для каждого устройства укажите тип в соответствии с одной из категорий, перечисленных в DeviceType в types.hal.

  • OTHER. Устройство, которое не относится ни к одной из других категорий, включая гетерогенный интерфейс – единый интерфейс IDevice, который управляет несколькими устройствами, возможно, разных типов. Драйвер с гетерогенным интерфейсом также должен предоставлять отдельные интерфейсы IDevice, соответствующие отдельным устройствам, чтобы приложение могло выбирать из этих устройств.
  • CPU: одноядерный или многоядерный процессор.
  • GPU: графический процессор, который может запускать модели NNAPI и ускорять работу графических API, таких как OpenGL ES и Vulkan.
  • ACCELERATOR – выделенный нейронный процессор (NPU).

Реализуйте getVersionString в IDevice.hal, чтобы получить строку версии реализации устройства. Этот метод должен возвращать удобочитаемую строку. Формат строки зависит от поставщика. Строка версии должна быть уникальной для каждой новой версии драйвера.

Название интерфейса IDevice должно соответствовать формату {VENDOR}-{DEVICE_NAME}.