Рекомендации по повышению эффективности

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

Выберите лучшую модель для поставленной задачи

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

Graph of model size vs accuracy

Graph of accuracy vs latency

Одним из примеров моделей, оптимизированных для мобильных устройств, являются MobileNets , оптимизированные для мобильных приложений машинного зрения. TensorFlow Hub перечисляет несколько других моделей, оптимизированных специально для мобильных и встраиваемых устройств.

Вы можете переобучить перечисленные модели на своем собственном наборе данных с помощью трансферного обучения. Ознакомьтесь с учебными пособиями по трансферному обучению с помощью TensorFlow Lite Model Maker .

Профилируйте свою модель

После того как вы выбрали модель-кандидат, которая подходит для вашей задачи, рекомендуется профилировать и сравнивать вашу модель. Инструмент сравнительного анализа TensorFlow Lite имеет встроенный профилировщик, который показывает статистику профилирования каждого оператора. Это может помочь понять узкие места производительности и понять, какие операторы доминируют во времени вычислений.

Вы также можете использовать трассировку TensorFlow Lite для профилирования модели в вашем приложении Android, используя стандартную трассировку системы Android, а также для визуализации вызовов операторов по времени с помощью инструментов профилирования на основе графического пользовательского интерфейса.

Профилируйте и оптимизируйте операторов на графике

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

Оптимизируйте свою модель

Оптимизация моделей направлена ​​на создание моделей меньшего размера, которые обычно работают быстрее и более энергоэффективны, чтобы их можно было развернуть на мобильных устройствах. TensorFlow Lite поддерживает несколько методов оптимизации, таких как квантование.

Подробности можно найти в документации по оптимизации модели .

Настройте количество потоков

TensorFlow Lite поддерживает многопоточные ядра для многих операторов. Вы можете увеличить количество потоков и ускорить выполнение операторов. Однако увеличение количества потоков заставит вашу модель использовать больше ресурсов и мощности.

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

Устраните лишние копии

Если ваше приложение не разработано тщательно, при подаче входных данных и чтении выходных данных модели могут возникнуть избыточные копии. Обязательно удалите лишние копии. Если вы используете API более высокого уровня, например Java, обязательно внимательно проверьте документацию на предмет проблем с производительностью. Например, Java API работает намного быстрее, если в качестве входных данных используются ByteBuffers .

Профилируйте свое приложение с помощью инструментов, специфичных для платформы.

Инструменты, специфичные для платформы, такие как профилировщик Android и инструменты, предоставляют обширную информацию о профилировании, которую можно использовать для отладки вашего приложения. Иногда ошибка производительности может быть не в модели, а в частях кода приложения, которые взаимодействуют с моделью. Обязательно ознакомьтесь с инструментами профилирования для конкретной платформы и лучшими практиками для вашей платформы.

Оцените, выигрывает ли ваша модель от использования аппаратных ускорителей, доступных на устройстве.

В TensorFlow Lite добавлены новые способы ускорения моделей с помощью более быстрого оборудования, такого как графические процессоры, DSP и нейронные ускорители. Обычно эти ускорители предоставляются через подмодули делегатов , которые берут на себя часть выполнения интерпретатора. TensorFlow Lite может использовать делегаты следующим образом:

  • Использование API нейронных сетей Android. Вы можете использовать эти аппаратные ускорители для повышения скорости и эффективности вашей модели. Чтобы включить API нейронных сетей, ознакомьтесь с руководством для делегатов NNAPI .
  • Делегат графического процессора доступен на Android и iOS с использованием OpenGL/OpenCL и Metal соответственно. Чтобы опробовать их, см. руководство и документацию по делегатам графического процессора .
  • Делегат Hexagon доступен на Android. Он использует Qualcomm Hexagon DSP, если он доступен на устройстве. Дополнительную информацию см. в руководстве по делегатам Hexagon .
  • Возможно создание собственного делегата, если у вас есть доступ к нестандартному оборудованию. Дополнительную информацию см. в разделе «Делегаты TensorFlow Lite» .

Имейте в виду, что некоторые ускорители лучше работают для разных типов моделей. Некоторые делегаты поддерживают только модели с плавающей запятой или модели, оптимизированные определенным образом. Важно протестировать каждый делегат, чтобы убедиться, что он подходит для вашего приложения. Например, если у вас очень маленькая модель, возможно, не стоит делегировать ее ни NN API, ни графическому процессору. И наоборот, ускорители — отличный выбор для больших моделей с высокой арифметической интенсивностью.

Нужна дополнительная помощь

Команда TensorFlow рада помочь диагностировать и устранить конкретные проблемы с производительностью, с которыми вы можете столкнуться. Пожалуйста, сообщите о проблеме на GitHub с подробным описанием проблемы.