Обучение с учетом квантования

Поддерживается оптимизацией модели TensorFlow.

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

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

Обзор

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

Развертывание с квантованием

Квантование приносит улучшения за счет сжатия модели и уменьшения задержки. При использовании настроек API по умолчанию размер модели уменьшается в 4 раза, и мы обычно видим улучшение задержки ЦП в 1,5–4 раза в тестируемых бэкэндах. В конечном итоге улучшение задержки можно увидеть на совместимых ускорителях машинного обучения, таких как EdgeTPU и NNAPI.

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

Экспериментируйте с квантованием и связанным с ним оборудованием.

Пользователи могут настраивать параметры квантования (например, количество битов) и, в некоторой степени, базовые алгоритмы. Обратите внимание, что с учетом этих изменений по сравнению с настройками API по умолчанию в настоящее время не существует поддерживаемого пути для развертывания на серверной части. Например, преобразования TFLite и реализации ядра поддерживают только 8-битное квантование.

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

Совместимость API

Пользователи могут применять квантование с помощью следующих API:

  • Построение модели: keras только с последовательными и функциональными моделями.
  • Версии TensorFlow: TF 2.x для tf-nightly.
    • tf.compat.v1 с пакетом TF 2.X не поддерживается.
  • Режим выполнения TensorFlow: активное выполнение

В наших планах добавить поддержку в следующих областях:

  • Построение модели: поясните, почему модели подклассов ограничены отсутствием поддержки.
  • Распределенное обучение: tf.distribute

Общая матрица поддержки

Поддержка доступна по следующим направлениям:

  • Покрытие модели: модели, использующие слои из разрешенных списков , BatchNormalization, если она следует за слоями Conv2D и DepthwiseConv2D, и в ограниченных случаях Concat .
  • Аппаратное ускорение: наши настройки API по умолчанию совместимы с ускорением на бэкэндах EdgeTPU, NNAPI и TFLite, среди других. См. предостережение в дорожной карте.
  • Развертывание с квантованием: в настоящее время поддерживается только поосевое квантование для сверточных слоев, а не потензорное квантование.

В наших планах добавить поддержку в следующих областях:

  • Охват модели: расширен за счет включения RNN/LSTM и общей поддержки Concat.
  • Аппаратное ускорение: убедитесь, что конвертер TFLite может создавать целочисленные модели. Подробности смотрите в этом выпуске .
  • Поэкспериментируйте со вариантами использования квантования:
    • Поэкспериментируйте с алгоритмами квантования, которые охватывают слои Keras или требуют этапа обучения.
    • Стабилизировать API.

Полученные результаты

Классификация изображений с помощью инструментов

Модель Неквантованная точность Top-1 8-битная квантованная точность
МобилнетВ1 224 71,03% 71,06%
Реснет v1 50 76,3% 76,1%
МобилнетВ2 224 70,77% 70,01%

Модели были протестированы на Imagenet и оценены как в TensorFlow, так и в TFLite.

Классификация изображений по технике

Модель Неквантованная точность Top-1 8-битная квантованная точность
Наснет-Мобайл 74% 73%
Реснет-v2 50 75,6% 75%

Модели были протестированы на Imagenet и оценены как в TensorFlow, так и в TFLite.

Примеры

В дополнение к примеру обучения с учетом квантования см. следующие примеры:

  • Модель CNN в задаче классификации рукописных цифр MNIST с квантованием: код

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