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

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

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

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

Уменьшить минимальную задержку

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

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

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

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

writepid /dev/stune/nnapi-hal/tasks