На этой странице описываются лучшие практики внедрения драйверов 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