Сборка библиотеки нейронных сетей tensorflow в среде Windows

Разработка и тестирование сверточных нейронных сетей (CNN) в среде Python, в настоящее время не вызывает каких либо трудностей. Доступно много готовых фреймвоков для реализации CNN какой угодно структуры. Сложности обычно возникают, когда нужно реализовать CNN за пределами Python, например в С++, в какой либо программе для выполнения в среде Windows. Обычно нужно реализовать функционал предсказания по уже обученной модели.

Итак, мы создали модель tensorflow или keras, обучили и сохранили ее (обычно в формате hdf5). Дальше мы хотим написать на языке C++ функцию predict в среде Windows 7 x64 или выше, загрузить модель, какие то данные и получить отклик сети. Подобных примеров на C++ достаточно много, но для сборки любого из них потребуются библиотеки tensorflow. В данной статье описны шаги для сборки библиотек tensorflow версии 1.10.0 используая CMake.

Системные требования

Windows 7 x64 или выше, 16Gb RAM, 128Gb SSD ( HDD конечно тоже подойдет, но собираться будет медленней )

Шаги установки

Visual Studio
Устанавливаем Microsoft Visual Studio Community 2017, выбираем только вариант Desktop development with c++ и в нем добавляем компонент VC++ 2015.3 v14.00 (v140) toolset for desktop
 
Окружение Python
Скачиваем и устанавливаем пакет Anaconda. Это полностью настроенный Python вместе с предустановленным комплектом самых популярных модулей. В процессе установки, не забываем поставить галочку для добавления пакета в системную переменную PATH.

CMake, Git, SWIG
Скачиваем и устанавливаем CMake for Windows. Добавляем путь установки в PATH.
Скачиваем и устанавливаем Git for Windows. Добавляем путь установки в PATH.
Скачиваем и устанавливаем SWIG. Это пакет обеспечивающий возможности вызова функций, написанных на одних языках, из кода на других языках

CUDA
Опционально. Была протестированна версия 9.0

Запускаем скрипт подготовки окружения C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat

Tensorflow
Создаем каталог для сборки и скачиваем репозиторий TensorFlow

mkdir C:\src
cd C:\src
git clone https://github.com/tensorflow/tensorflow.git
cd C:\src\tensorflow
git checkout r1.10
ren C:\src\tensorflow C:\src\tensorflow.1.10.0.cpu
cd C:\src\tensorflow.1.10.0.cpu\tensorflow\contrib\cmake
mkdir build
cd build


Создаем скрипт конфигурации configure.bat и помещаем туда следующие строки

cmake .. -A x64 -T host=x64 ^
-DCMAKE_BUILD_TYPE=Release ^
-DSWIG_EXECUTABLE=PATH\TO\SWIG\swig.exe ^
-DPYTHON_EXECUTABLE=PATH\TO\ANACONDA\python.exe ^
-DPYTHON_LIBRARIES=PATH\TO\ANACONDA\libs\python35.lib ^
-DPYTHON_INCLUDE_DIR=PATH\TO\ANACONDA\include ^
-Dtensorflow_BUILD_PYTHON_BINDINGS=OFF ^
-Dtensorflow_ENABLE_GRPC_SUPPORT=ON ^
-Dtensorflow_BUILD_SHARED_LIB=ON ^
-Dtensorflow_ENABLE_GPU=OFF ^
-Dtensorflow_WIN_CPU_SIMD_OPTIONS=/arch:AVX


Если нужна поддержка CUDA добавляем:

-DCUDNN_HOME="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0" ^
-DCUDA_HOST_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/cl.exe"

Несколько замечаний по конфигурации:
  1. tensorflow_ENABLE_GRPC_SUPPORT по факту нам не нужен, но без него у меня проект собираться не хотел.
  2. tensorflow_BUILD_SHARED_LIB нужно включить потому, что наша цель получить билиотеку DLL
  3. tensorflow_ENABLE_GPU - если включить, тогда нужно установить пакет CUDA Development Tools ( я собирал с версией 9.0 ) и собираться проект будет в два раза дольше.
  4. tensorflow_WIN_CPU_SIMD_OPTIONS - флаг использования новых наборов иструкций. Этот флаг нужно выставлять осторожно. Если вы установите AVX2, сборка не будет работать на процессорах где этого набора инструкций нет.
  5. Было несколько попыток использовать библиотеки Intel MKL - это оптимизированные алгоритмы для сверточных сетей. Как ни странно, включение этих библиотек замедляло работу моделей почти в два раза. Очень может быть я, что то упустил, но решил убрать их из конфигурации.
После запуска этого файла конфигурации будут созданы все файлы для сборки.

Скрипт для сборки

cd C:\src\tensorflow.1.10.0.cpu\tensorflow\contrib\cmake\build
Создаем скрипт конфигурации build.bat и помещаем туда следующие строки

“C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin \MSBuild.exe” ^
/m:1 ^
/p:CL_MPCount=1 ^
/p:Configuration=Release ^
/p:Platform=x64 ^
/p:PreferredToolArchitecture=x64 ALL_BUILD.vcxproj ^
/filelogger


Если у вас многоядерный процессор можно установить параметр /m:3 и /p:CL_MPCount=3 это ускорит процесс сборки.

После запуска скрипта начинается процесс сборки и можно смело идти гулять на пару часов. Если вы планируете собирать библиотеки с использованием CUDA, гулять можно четыре часа.

После окончания процесса сборки появится вот такой каталог C:\src\tensorflow\v1.10.0.cpu\tensorflow\contrib\cmake\build\Release  в котором можно найти наши собранные библиотеки tensorflow.dll, tensorflow.lib, tensorflow.def

В заключении хочу добавить, что все выше описанные действия, разработчики tensorflow считают не оффициальными и в будущем, вероятно, возможность сборки через CMake будет не возможна. Тем не менее, на текущий момент, это единственный способ собрать свою библиотеку tensorflow.

Комментарии

Популярные сообщения из этого блога

Подготовка данных для алгоритмов машинного обучения

Выбор метрики в машинном обучении

Обзор библиотеки PyQtGraph на языке python для интерактивной визуализации графиков