Благодарим за настройку Google I/O. Посмотреть все сеансы по запросу Смотреть по запросу

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

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

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