Можно ли использовать TensorFlow С++ API для Windows?

Мне интересно включить TensorFlow в серверное приложение на С++, встроенное в Visual Studio в Windows 10, и мне нужно знать, возможно ли это. Недавно Google анонсировала поддержку Windows для TensorFlow: https://developers.googleblog.com/2016/11/tensorflow-0-12-adds-support-for-windows.html но из того, что я могу сказать, это просто установка pip для более часто используемого пакета Python, и для использования С++ API вам необходимо самостоятельно создать репо из исходного кода: Как создавать и используйте Google TensorFlow С++ api Я попытался создать проект самостоятельно, используя bazel, но столкнулся с проблемами, пытающимися настроить сборку.

Есть ли способ заставить TensorFlow С++ работать в родной Windows (не используя Docker или новую подсистему Windows 10 Linux, как я уже видел другие)?

Спасибо,

Ян

Ответ 1

Конечно, можно использовать TensorFlow С++ API для Windows, но в настоящее время это не очень просто. Прямо сейчас самый простой способ построить против С++ API в Windows - это построить с помощью CMake и адаптировать Правила CMake для проекта tf_tutorials_example_trainer (см. исходный код здесь). Создание с помощью CMake даст вам проект Visual Studio, в котором вы можете реализовать свою программу С++ TensorFlow.

Обратите внимание, что проект tf_tutorials_example_trainer создает консольное приложение, которое статически связывает всю среду исполнения TensorFlow в вашей программе. В настоящее время мы не написали необходимые правила для создания многоразовой библиотеки TensorFlow, хотя это было бы технически возможно: например, расширение Python представляет собой DLL, которая включает в себя среду выполнения, но не экспортирует необходимые символы для использования TensorFlow C или С++ API напрямую.

Ответ 2

Существует подробный справочник Joe Antognini и аналогичный TensorFlow ReadMe в GitHub, объясняющий создание источника TensorFlow через CMake. Вам также необходимо иметь SWIG, который позволяет подключить источник C/С++ к языку сценариев Python. Я использовал Visual CMAKE (cmake-gui) с захватом экрана, показанным ниже.

cmake-gui setup (с SWIG) для создания источника TensorFlow С++ с Visual Studio

В конфигурации CMake я использовал компилятор Visual Studio 15 2017. Как только этот этап будет успешно завершен, вы можете нажать кнопку "Создать", чтобы продолжить процесс сборки.

Тем не менее, на Visual Studio 2015, когда я попытался построить проект "ALL_BUILD", установка дала мне ошибку "средства сборки для v141 не удалось найти". Это не исчезло, даже когда я попытался перенаправить мое решение. Наконец, решение было успешно построено с помощью Visual Studio 2017. Вам также необходимо вручную установить путь SWIG_EXECUTABLE в CMake до его успешного конфигурирования.

Как указано в ссылке Antognini, для меня сборка заняла около получаса на 16 ГБ оперативной памяти Core i7. После этого вы можете проверить свою сборку, пытаясь запустить файл tf_tutorials_example_trainer.exe.

Надеюсь, это поможет!

Ответ 3

Мне пришлось использовать версию Visual Studio 2017 с пониженной версией (с 15.7.5 до 15.4), добавив "VC++ 2017 версия 15.4 v14.11 набор инструментов" через установщик (вкладка "Отдельные компоненты").

Команда cmake, которая работала для меня, была:

cmake .. -A x64 -DCMAKE_BUILD_TYPE=Release ^
-T "v141,version=14.11" ^
-DSWIG_EXECUTABLE="C:/Program Files/swigwin-3.0.12/swig.exe" ^
-DPYTHON_EXECUTABLE="C:/Program Files/Python/python.exe" ^
-DPYTHON_LIBRARIES="C:/Program Files/Python/libs/python27.lib" ^
-Dtensorflow_ENABLE_GPU=ON ^
-DCUDNN_HOME="C:/Program Files/cudnn-9.2-windows10-x64-v7.1/cuda"  ^
-DCUDA_TOOLKIT_ROOT_DIR="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0"

После сборки откройте tennsflow.sln в Visual Studio и соберите ALL_BUILD.

Если вы хотите включить вычисление на GPU, проверьте свою видеокарту здесь (Compute Capability> 3.5). Не забудьте установить все пакеты (Cuda Toolkit 9.0, cuDNN, Python 3.7, SWIG, Git, CMake...) и добавить пути к переменной среды в начале.

Ответ 4

Для нашей последней работы по созданию API TensorFlow C++ для Windows, пожалуйста, посмотрите на эту страницу github. Это работает на Windows 10, в настоящее время без поддержки CUDA (только CPU).

PS: работает только метод сборки Bazel, потому что CMake не поддерживается и больше не поддерживается, что приводит к ошибкам конфигурации CMake.

Ответ 5

Я сделал README с подробным описанием того, как создать файл DLL и .lib Tensorflow для API C++ в Windows с поддержкой графического процессора из исходного кода с помощью Bazel. Версия Tensorflow 1.14

Учебное пособие пошагово и начинается в самом начале, поэтому вам, возможно, придется прокрутить предыдущие шаги, которые вы уже выполнили, такие как проверка оборудования, установка Bazel и т.д. Вот URL: https://github.com/sitting-duck/stuff/tree/master/ai/tensorflow/build_tensorflow_1.14_source_for_Windows

Возможно, вы захотите прокрутить весь путь до этой части: https://github.com/sitting-duck/stuff/tree/master/ai/tensorflow/build_tensorflow_1.14_source_for_Windows#step-7-build-the-dll

Он показывает, как передать команду для создания .lib и .dll.

Затем, чтобы проверить ваш .lib, вы должны связать его с вашим проектом C++,

Затем он покажет вам, как определить и исправить недостающие символы с помощью макроса TF_EXPORT

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