Периферийные устройства часто имеют ограниченную память или вычислительную мощность. К моделям можно применять различные оптимизации, чтобы их можно было запускать в рамках этих ограничений. Кроме того, некоторые оптимизации позволяют использовать специализированное оборудование для ускорения вывода.
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 |
Полное целочисленное квантование с активациями 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) |
Обрезка
Сокращение работает путем удаления параметров из модели, которые оказывают лишь незначительное влияние на ее прогнозы. Урезанные модели имеют одинаковый размер на диске и имеют одинаковую задержку во время выполнения, но их можно сжимать более эффективно. Это делает обрезку полезным методом уменьшения размера загружаемой модели.
В будущем LiteRT обеспечит снижение задержки для обрезанных моделей.
Кластеризация
Кластеризация работает путем группировки весов каждого слоя модели в заранее определенное количество кластеров, а затем совместного использования значений центроидов для весов, принадлежащих каждому отдельному кластеру. Это уменьшает количество уникальных значений веса в модели, тем самым снижая ее сложность.
В результате кластерные модели можно сжимать более эффективно, предоставляя преимущества при развертывании, аналогичные сокращению.
Рабочий процесс разработки
В качестве отправной точки проверьте, могут ли модели в размещенных моделях работать для вашего приложения. Если нет, мы рекомендуем пользователям начать с инструмента квантования после обучения, поскольку он широко применим и не требует обучающих данных.
В случаях, когда целевые показатели точности и задержки не достигаются или важна поддержка аппаратного ускорителя, обучение с учетом квантования является лучшим вариантом. Дополнительные методы оптимизации см. в наборе инструментов оптимизации модели TensorFlow .
Если вы хотите еще больше уменьшить размер модели, вы можете попробовать выполнить обрезку и/или кластеризацию перед квантованием моделей.