Лучшие практики реализации драйвера NNAPI

На этой странице описаны лучшие практики внедрения драйверов Neural Networks API (NNAPI), позволяющие разработчикам приложений широко использовать NNAPI.

Сократите время запуска.

Если ваш драйвер преобразует веса модели при первом использовании, убедитесь, что он поддерживает кэширование компиляции, что сокращает время компиляции при запуске приложения. Это важно, поскольку приложения могут избегать использования аппаратного ускорения, если время запуска слишком велико. Например, некоторые приложения содержат более 100 МБ весов, и их преобразование каждый раз при запуске приложения является неэффективным.

Снизьте минимальную задержку.

Чтобы гарантировать использование аппаратного ускорения моделями, важно уменьшить минимальную задержку в драйверах. Многие приложения используют небольшие модели, которые выполняются несколько раз, и если минимальная задержка для выполнения рабочей нагрузки слишком велика, например, несколько миллисекунд, модели могут выполнять рабочую нагрузку на ЦП, что занимает всего одну-две миллисекунды, вместо использования аппаратного ускорения. Следует остерегаться дорогостоящей синхронизации потоков.

Используйте группу NN HAL SchedTune.

Начиная с Android 11 и выше, AOSP включает в себя специальную группу SchedTune для NN HAL, которая позволяет межпроцессным процессам NN HAL использовать большие ядра, аналогично реализации в рамках предопределенной группы cgroup top-app . Использование этой группы SchedTune снижает накладные расходы драйвера, особенно для небольших моделей.

Для использования группы SchedTune добавьте следующую строку в файл init.rc процесса NN HAL:

writepid /dev/stune/nnapi-hal/tasks