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

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

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

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

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

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

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

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

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

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

Уменьшение задержки

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

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

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

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

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

Компромиссы

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

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

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

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

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

Квантование

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

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

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

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

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

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

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

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

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

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

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

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

Обрезка

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

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

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

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

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

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

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

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

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