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

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

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

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

Почему модели должны быть оптимизированы

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

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

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

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

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

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

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

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

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

Некоторые аппаратные ускорители, такие как Edge TPU , могут очень быстро выполнять вывод с правильно оптимизированными моделями.

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

Компромиссы

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

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

Типы оптимизации

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

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

Квантование

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

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

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

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

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

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

Модель Топ-1 по точности (оригинал) Топ-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
Начало_v3 0,78 0,772 0,775 1130 845 543 95,7 23,9
Реснет_v2_101 0,770 0,768 Н/Д 3973 2868 Н/Д 178,3 44,9
Таблица 1 Преимущества квантования модели для некоторых моделей CNN

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

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

ПРИМЕЧАНИЕ. В настоящее время в TFLite доступны только неоптимизированные эталонные реализации ядра для этой схемы квантования, поэтому по умолчанию производительность будет ниже по сравнению с ядрами int8. Все преимущества этого режима в настоящее время доступны через специализированное оборудование или специальное программное обеспечение.

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

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

Обрезка

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

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

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

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

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

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

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

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

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