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

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

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

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

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

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

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

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

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

writepid /dev/stune/nnapi-hal/tasks
,

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

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

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

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

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

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

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

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

writepid /dev/stune/nnapi-hal/tasks