Совместимость операторов TensorFlow Lite и TensorFlow

Операторы машинного обучения (ML), которые вы используете в своей модели, могут повлиять на процесс преобразования модели TensorFlow в формат TensorFlow Lite. Конвертер TensorFlow Lite поддерживает ограниченное количество операций TensorFlow, используемых в распространенных моделях вывода, а это означает, что не каждая модель может быть преобразована напрямую. Инструмент конвертера позволяет включать дополнительные операторы, но преобразование модели таким способом также требует изменения среды выполнения TensorFlow Lite, которую вы используете для выполнения вашей модели, что может ограничить ваши возможности использования стандартных вариантов развертывания среды выполнения, таких как сервисы Google Play .

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

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

Поддерживаемые операторы

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

Операторы TensorFlow

Из этого диапазона операторов моделей ML есть 3 типа моделей, поддерживаемых процессом преобразования:

  1. Модели только со встроенным оператором TensorFlow Lite. ( Рекомендуемые )
  2. Модели со встроенными операторами и избранными основными операторами TensorFlow.
  3. Модели со встроенными операторами, базовыми операторами TensorFlow и/или пользовательскими операторами.

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

Если вам нужно включить выбранные операции TensorFlow из основной библиотеки, вы должны указать это при преобразовании и убедиться, что ваша среда выполнения включает эти операции. Подробные инструкции см. в разделе «Выбор операторов TensorFlow» .

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

Поддерживаемые типы

Большинство операций TensorFlow Lite предназначены как для вывода с плавающей запятой ( float32 ), так и для квантованного вывода ( uint8 , int8 ), но многие операции еще не предназначены для других типов, таких как tf.float16 и строки.

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

Простые преобразования, постоянное свертывание и слияние

TensorFlow Lite может обрабатывать ряд операций TensorFlow, даже если они не имеют прямого эквивалента. Это относится к операциям, которые можно просто удалить из графа ( tf.identity ), заменить тензорами ( tf.placeholder ) или объединить в более сложные операции ( tf.nn.bias_add ). Даже некоторые поддерживаемые операции иногда могут быть удалены с помощью одного из этих процессов.

Вот неисчерпывающий список операций TensorFlow, которые обычно удаляются из графа:

Экспериментальные операции

Следующие операции TensorFlow Lite присутствуют, но не готовы для пользовательских моделей:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF