Как создать TensorFlow lite с выбранными опциями TensorFlow для систем x86_64? - PullRequest
3 голосов
/ 30 октября 2019

Чтобы иметь возможность запускать модель TensorFlow lite, которая поддерживает собственные операции TensorFlow, статическая библиотека libtensorflow-lite должна быть перекомпилирована. Инструкции для этого в C++ можно найти ЗДЕСЬ .

В нем говорится, что

При построении библиотек TensorFlow Lite с использованием конвейера Bazel, дополнительная библиотека TensorFlow ops может быть включена и включена следующим образом:

  • Включить монолитные сборки, если необходимо, добавив флаг --config = monolithic build.

  • Добавить зависимость библиотеки делегатов ops TensorFlow к зависимостям сборки: tenorflow / lite / Delegates / Flex: Delegate.

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

Дело в том, что стандартный способ создания статической библиотеки заключается в сценарии оболочки / make (см. документы ЗДЕСЬ ; это для arm64, но есть сценарии, которые можно использовать и для x86_64). У меня нет очевидного способа собрать tensorflow-lite с помощью bazel и изменить там команды сборки.

Кто-нибудь успешно создавал это при попытке построить модели для arm64/x86_64 архитектур и может поделиться этим? Я новичок в bazel и не могу найти подробное пошаговое руководство.

РЕДАКТИРОВАТЬ

После шагов по устранению неполадок, предложенных @jdehesa, я смог собрать libtensorflowlite.so, но столкнулся с другой проблемой. Мое приложение успешно собрано, но при запуске приложения файл .so не может быть найден:

./myapp: error while loading shared libraries: libtensorflowlite.so: cannot open shared object file: No such file or directory

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

Чтобы воспроизвести проблему, я использовал образ сборки докера tensorflow/tensorflow:devel-gpu-py3 (инструкции найдены здесь ).

Я выполнил скрипт configure с настройками по умолчанию и использовал команду

bazel build --config=monolithic --define=with_select_tf_ops=true -c opt //tensorflow/lite:libtensorflowlite.so

для создания библиотеки. Я загрузил встроенную библиотеку в мой личный репозиторий (https://github.com/DocDriven/debug-lite).

1 Ответ

1 голос
/ 04 ноября 2019

Похоже, что libtensorflow-lite.a построен с Makefiles из Bazel, поэтому я не уверен, что вы действительно можете использовать эту опцию для этой библиотеки. Тем не менее, существует экспериментальная цель для общей библиотеки libtensorflowlite.so, которая, как мне кажется, может вам подойти. Вы можете задать экспериментальную опцию with_select_tf_ops для включения в нее ядер TensorFlow. Поэтому я думаю, что команда build будет выглядеть примерно так:

bazel build --config=monolithic --define=with_select_tf_ops=true -c opt //tensorflow/lite:libtensorflowlite.so
...