Google I/O — это обертка! Наверстать упущенное в сеансах TensorFlow Просмотреть сеансы

Рекомендации по повышению производительности

Мобильные и встроенные устройства имеют ограниченные вычислительные ресурсы, поэтому важно поддерживать эффективность ресурсов приложения. Мы составили список лучших практик и стратегий, которые вы можете использовать для повышения производительности модели 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 может использовать делегатов:

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

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

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

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