День сообщества ML - 9 ноября! Присоединяйтесь к нам для обновления от TensorFlow, JAX, и многое другое Подробнее

Оптимизация модели

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

TensorFlow Lite и TensorFlow Модель оптимизации Toolkit предоставляет инструменты , чтобы минимизировать сложность оптимизации вывода.

Рекомендуется рассмотреть возможность оптимизации модели в процессе разработки приложения. В этом документе описаны некоторые передовые методы оптимизации моделей TensorFlow для развертывания на периферийном оборудовании.

Почему модели следует оптимизировать

Есть несколько основных способов, которыми оптимизация модели может помочь в разработке приложений.

Уменьшение размера

Некоторые формы оптимизации можно использовать для уменьшения размера модели. Меньшие модели имеют следующие преимущества:

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

Квантование может уменьшить размер модели во всех этих случаях, потенциально за счет некоторой точности. Сокращение и кластеризация могут уменьшить размер модели для загрузки, сделав ее более легко сжимаемой.

Снижение задержки

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

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

Совместимость с ускорителем

Некоторые аппаратные ускорители, такие как Эдж ТП , могут работать умозаключение очень быстро с моделями , которые были правильно оптимизированы.

Как правило, для этих типов устройств требуется определенное квантование моделей. См. Документацию по каждому аппаратному ускорителю, чтобы узнать больше об их требованиях.

Компромиссы

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

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

Виды оптимизации

В настоящее время TensorFlow Lite поддерживает оптимизацию посредством квантования, сокращения и кластеризации.

Они являются частью TensorFlow модели оптимизации Toolkit , который предоставляет ресурсы для модели оптимизации методов, которые совместимы с TensorFlow Lite.

Квантование

Квантование работает путем уменьшения точности чисел , используемых для представления параметров а модель, которые по умолчанию являются числами с плавающей точкой 32-разрядными. Это приводит к меньшему размеру модели и более быстрому вычислению.

В TensorFlow Lite доступны следующие типы квантования:

Техника Требования к данным Уменьшение размера Точность Поддерживаемое оборудование
Посттренировочное квантование float16 Нет данных До 50% Незначительная потеря точности CPU, GPU
Квантование динамического диапазона после тренировки Нет данных До 75% Наименьшая потеря точности ЦП, графический процессор (Android)
Целочисленное квантование после обучения Репрезентативный образец без маркировки До 75% Небольшая потеря точности ЦП, графический процессор (Android), EdgeTPU, Hexagon DSP
Обучение с учетом квантования Помеченные данные обучения До 75% Наименьшая потеря точности ЦП, графический процессор (Android), EdgeTPU, Hexagon DSP

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

дерево решений квантования

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

Модель Топ-1 по точности (оригинал) ТОП-1 Точность (после тренировки, квантованная) Наивысшая точность (обучение с учетом квантования) Задержка (исходная) (мс) Задержка (квантованная после обучения) (мс) Задержка (обучение с учетом квантования) (мс) Размер (исходный) (МБ) Размер (оптимизированный) (МБ)
Mobilenet-v1-1-224 0,709 0,657 0,70 124 112 64 16,9 4.3
Mobilenet-v2-1-224 0,719 0,637 0,709 89 98 54 14 3,6
Inception_v3 0,78 0,772 0,775 1130 845 543 95,7 23,9
Resnet_v2_101 0,770 0,768 N / A 3973 2868 N / A 178,3 44,9
Таблица 1 Преимущества модели квантования для некоторых моделей CNN

Полное целочисленное квантование с активациями int16 и весами int8

Квантование с int16 активациями является полным числом схемы квантования с активациями в int16 и весах в int8. Этот режим может повысить точность квантованной модели по сравнению со схемой полного целочисленного квантования с активациями и весами в int8, сохраняя аналогичный размер модели. Рекомендуется, когда активации чувствительны к квантованию.

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

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

Модель Тип метрики точности Точность (активации float32) Точность (int8 активаций) Точность (int16 активаций)
Wav2letter WER 6,7% 7,7% 7,2%
DeepSpeech 0.5.1 (в развернутом виде) CER 6,13% 43,67% 6,52%
YoloV3 MAP (долговая расписка = 0,5) 0,577 0,563 0,574
MobileNetV1 Топ-1 по точности 0,7062 0,694 0,6936
MobileNetV2 Топ-1 по точности 0,718 0,7126 0,7137
MobileBert F1 (точное совпадение) 88,81 (81,23) 2,08 (0) 88,73 (81,15)
Таблица 2 Преимущества модели квантования с int16 активаций

Обрезка

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

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

Кластеризация

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

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

Рабочий процесс разработки

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

В тех случаях , когда точность и латентные цели не будут достигнуты, или поддержка аппаратного ускорителя имеет важное значение, квантование-курсе обучения является лучшим вариантом. Смотрите дополнительные методы оптимизации под TensorFlow модели оптимизации Toolkit .

Если вы хотите еще больше уменьшить размер модели, вы можете попробовать подрезать и / или кластеризацию до квантования моделей.