Мобильные и встраиваемые устройства обладают ограниченными вычислительными ресурсами, поэтому важно поддерживать эффективное использование ресурсов вашего приложения. Мы составили список рекомендаций и стратегий, которые вы можете использовать для повышения производительности модели TensorFlow Lite.
Выберите лучшую модель для задачи
В зависимости от задачи вам потребуется найти компромисс между сложностью и размером модели. Если ваша задача требует высокой точности, вам может понадобиться большая и сложная модель. Для задач, требующих меньшей точности, лучше использовать модель меньшего размера, поскольку она не только занимает меньше места на диске и памяти, но и, как правило, работает быстрее и энергоэффективнее. Например, на графиках ниже показаны компромиссы между точностью и задержкой для некоторых распространённых моделей классификации изображений.


Одним из примеров моделей, оптимизированных для мобильных устройств, является MobileNets , оптимизированный для приложений мобильного зрения. На сайте Kaggle Models представлено несколько других моделей, оптимизированных специально для мобильных и встраиваемых устройств.
Вы можете переобучить перечисленные модели на собственном наборе данных, используя трансферное обучение.
Профилируйте свою модель
Выбрав подходящую для вашей задачи модель, рекомендуется провести её профилирование и бенчмаркинг. Инструмент бенчмаркинга LiteRT имеет встроенный профилировщик, который отображает статистику профилирования по каждому оператору. Это может помочь выявить узкие места производительности и определить, какие операторы занимают больше всего времени вычислений.
Вы также можете использовать трассировку LiteRT для профилирования модели в вашем приложении Android, используя стандартную трассировку системы Android, а также для визуализации вызовов операторов по времени с помощью инструментов профилирования на основе графического интерфейса.
Профилирование и оптимизация операторов в графе
Если какой-либо оператор часто встречается в модели и, основываясь на профилировании, вы обнаруживаете, что он занимает больше всего времени, можно рассмотреть возможность его оптимизации. Такая ситуация должна встречаться редко, поскольку в TensorFlow Lite есть оптимизированные версии для большинства операторов. Однако вы можете написать более быструю версию пользовательского оператора, если знаете ограничения, в которых он выполняется. См. руководство по пользовательским операторам .
Оптимизируйте свою модель
Оптимизация моделей направлена на создание моделей меньшего размера, которые, как правило, быстрее и энергоэффективнее, чтобы их можно было развёртывать на мобильных устройствах. LiteRT поддерживает множество методов оптимизации, таких как квантизация.
Подробную информацию можно найти в документации по оптимизации модели .
Изменить количество потоков
LiteRT поддерживает многопоточные ядра для многих операторов. Вы можете увеличить количество потоков и ускорить выполнение операторов. Однако увеличение количества потоков увеличит потребление ресурсов и производительности вашей модели.
Для некоторых приложений задержка может быть важнее энергоэффективности. Вы можете увеличить количество потоков, установив количество потоков интерпретатора. Однако многопоточное выполнение приводит к увеличению вариабельности производительности в зависимости от того, какие ещё процессы выполняются одновременно. Это особенно актуально для мобильных приложений. Например, изолированные тесты могут показывать двукратное ускорение по сравнению с однопоточными, но если одновременно выполняется другое приложение, это может привести к снижению производительности по сравнению с однопоточными.
Устраните лишние копии
Если ваше приложение не разработано тщательно, при передаче входных данных в модель и чтении выходных данных из неё могут возникать избыточные копии. Обязательно удалите лишние копии. Если вы используете API более высокого уровня, например, Java, внимательно изучите документацию на предмет проблем с производительностью. Например, API Java работает намного быстрее, если в качестве входных данных используются ByteBuffers .
Профилируйте свое приложение с помощью инструментов, специфичных для платформы
Инструменты профилирования, специфичные для конкретной платформы, такие как Android Profiler и Instruments, предоставляют обширную информацию о профилировании, которую можно использовать для отладки вашего приложения. Иногда проблема с производительностью может быть связана не с моделью, а с частями кода приложения, взаимодействующими с ней. Обязательно ознакомьтесь с инструментами профилирования, специфичными для вашей платформы, и рекомендациями по её использованию.
Оцените, выигрывает ли ваша модель от использования аппаратных ускорителей, доступных на устройстве.
LiteRT добавил новые способы ускорения моделей с помощью более быстрого оборудования, такого как графические процессоры, цифровые сигнальные процессоры и нейронные ускорители. Обычно эти ускорители доступны через подмодули делегатов , которые берут на себя часть функций интерпретатора. LiteRT может использовать делегаты следующим образом:
- GPU-делегат доступен на Android и iOS с использованием OpenGL/OpenCL и Metal соответственно. Чтобы попробовать их, ознакомьтесь с GPU-делегатом .
- При наличии доступа к нестандартному оборудованию можно создать собственный делегат. Подробнее см. в разделе «Делегаты LiteRT» .
Имейте в виду, что некоторые ускорители лучше работают с разными типами моделей. Некоторые делегаты поддерживают только модели с плавающей точкой или модели, оптимизированные определённым образом. Важно протестировать каждый делегат, чтобы понять, подходит ли он для вашего приложения. Например, если у вас очень маленькая модель, делегирование её на графический процессор может быть нецелесообразным. И наоборот, ускорители — отличный выбор для больших моделей с высокой интенсивностью арифметических вычислений.