Сборка библиотеки нейронных сетей tensorflow в среде Windows
Разработка и тестирование сверточных нейронных сетей (CNN) в среде Python, в настоящее время не вызывает каких либо трудностей. Доступно много готовых фреймвоков для реализации CNN какой угодно структуры. Сложности обычно возникают, когда нужно реализовать CNN за пределами Python, например в С++, в какой либо программе для выполнения в среде Windows. Обычно нужно реализовать функционал предсказания по уже обученной модели.
Итак, мы создали модель tensorflow или keras, обучили и сохранили ее (обычно в формате hdf5). Дальше мы хотим написать на языке C++ функцию predict в среде Windows 7 x64 или выше, загрузить модель, какие то данные и получить отклик сети. Подобных примеров на C++ достаточно много, но для сборки любого из них потребуются библиотеки tensorflow. В данной статье описны шаги для сборки библиотек tensorflow версии 1.10.0 используая CMake.
Итак, мы создали модель 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"
Несколько замечаний по конфигурации:
- tensorflow_ENABLE_GRPC_SUPPORT по факту нам не нужен, но без него у меня проект собираться не хотел.
- tensorflow_BUILD_SHARED_LIB нужно включить потому, что наша цель получить билиотеку DLL
- tensorflow_ENABLE_GPU - если включить, тогда нужно установить пакет CUDA Development Tools ( я собирал с версией 9.0 ) и собираться проект будет в два раза дольше.
- tensorflow_WIN_CPU_SIMD_OPTIONS - флаг использования новых наборов иструкций. Этот флаг нужно выставлять осторожно. Если вы установите AVX2, сборка не будет работать на процессорах где этого набора инструкций нет.
- Было несколько попыток использовать библиотеки 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
Скрипт для сборки
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.
После запуска скрипта начинается процесс сборки и можно смело идти гулять на пару часов. Если вы планируете собирать библиотеки с использованием CUDA, гулять можно четыре часа.
После окончания процесса сборки появится вот такой каталог C:\src\tensorflow\v1.10.0.cpu\tensorflow\contrib\cmake\build\Release в котором можно найти наши собранные библиотеки tensorflow.dll, tensorflow.lib, tensorflow.def
В заключении хочу добавить, что все выше описанные действия, разработчики tensorflow считают не оффициальными и в будущем, вероятно, возможность сборки через CMake будет не возможна. Тем не менее, на текущий момент, это единственный способ собрать свою библиотеку tensorflow.
Комментарии
Отправить комментарий