[Обновление 1] Как собрать и установить TensorFlow GPU / CPU для Windows из исходного кода, используя bazel и Python 3.6

Это обновление для моей предыдущей истории. Что нового здесь:
- TensorFlow v1.11
- CUDA v10.0
- cuDNN v7.3
На официальном сайте есть руководство. Это не очень полный, но иногда полезный.
Резюме
- Установите Git для Windows
- Установить Базель
- Установите MSYS2 x64 и инструменты командной строки
- Установите инструменты сборки Visual Studio 2017, включая инструменты сборки Visual Studio 2015
- Установите Python 3.6 64-бит
- Установите NVIDIA CUDA 10.0 и cuDNN 7.3 (для ускорения GPU)
- Настроить среду сборки
- Клонируйте исходный код TensorFlow v1.11 и примените обязательный патч
- Настройте параметры сборки
- Сборка TensorFlow из источников
- Создать файл колеса TensorFlow для Python 3.6
- Установите файл колеса TensorFlow для Python 3.6 и проверьте результат
Шаг 1: Установите Git для Windows
Скачайте и установите Git для Windows. Я беру это здесь. Убедитесь, что путь к git.exe добавлен в переменную среды% PATH%. Я устанавливаю Git на
C: \ Bin \ Git
папка для этого урока.
Шаг 2: Установите MSYS2 x64 и инструменты командной строки
Скачайте и установите 64-битный дистрибутив здесь. Bazel использует grep, patch, unzip и другие порты Unix-инструментов для создания исходных кодов. Вы можете попытаться найти автономные двоичные файлы для каждого из них, но я предпочитаю использовать пакет MSYS2. Я устанавливаю его на
C: \ Bin \ msys64
папка для этого урока. Вы должны добавить папку с инструментами в переменную окружения% PATH%. В моем случае это «C: \ Bin \ msys64 \ usr \ bin».
Запустите ярлык «MSYS2 MinGW 64-bit» из меню «Пуск». Для обновления выполните следующую команду (перезапустите «MSYS2 MinGW 64-bit», если появится запрос):
Пакман -Сю
Затем запустите:
Пакман-Су
Установочные инструменты необходимы для сборки:
pacman -S патч распаковать
Закройте оболочку «MSYS2 MinGW 64-bit» командой «exit». Нам это больше не нужно.
Шаг 3. Установите инструменты сборки Visual Studio 2017, включая инструменты сборки Visual Studio 2015
Для сборки TensorFlow v1.11 необходимо установить «VC ++ 2015.3 v14.00 (v140) для рабочего стола» из Инструментов сборки Visual Studio 2017:

Шаг 4: Установите Bazel
Загрузите последнюю версию Базеля здесь. Найдите файл bazel- <версия> -windows-x86_64.exe. Я протестировал этот урок с Bazel 0.17.2. Переименуйте двоичный файл в bazel.exe и переместите его в каталог на вашем% PATH%, чтобы вы могли запустить Bazel, набрав bazel в любом каталоге. Смотрите подробности установки Bazel для Windows x64 в случае проблем.
Добавьте глобальную переменную среды BAZEL_SH для местоположения bash. Мой путь
C: \ Bin \ msys64 \ USR \ Bin \ bash.exe
Добавьте переменную глобальной среды BAZEL_VC для цепочки инструментов «VC ++ 2015.3 v14.00 (v140) для настольных ПК»:
C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC
Шаг 5: Установите Python 3.6 64-bit
TensorFlow не поддерживает Python 3.7, поэтому вам нужно установить версию 3.6.
Похоже, что TensorFlow v1.11 больше не поддерживает Anaconda / Miniconda для сборки - я получаю странную ошибку. Вот почему я использую виртуальную среду Python для сборки.
Python 3.6 доступен для скачивания здесь. Установите его и добавьте местоположение к python.exe в переменную% PATH%.
Шаг 6: Установите NVIDIA CUDA 10.0 и cuDNN 7.3 (для ускорения графического процессора)
Этот раздел актуален, если у вас есть видеокарта NVIDIA, которая поддерживает CUDA. В противном случае пропустите этот раздел.
Смотрите пошаговую установку CUDA здесь, если вам нужна помощь. Я скопировал и вставил это руководство, но вырезал некоторые детали.
Перейдите на https://developer.nvidia.com/cuda-downloads и загрузите установщик CUDA 10.0 для Windows [ваша версия]. Для меня версия Windows 10.
Установите его в папку по умолчанию с настройками по умолчанию, но снимите флажок опции интеграции VisualStudio. Он обновит ваш драйвер GPU, если потребуется, и перезагрузится.
Перейти к запуску (Win + R) типа CMD
Следующая команда проверит версию nvcc и убедится, что она установлена в переменной окружения path.
nvcc - версия
Далее перейдите по ссылке https://developer.nvidia.com/cudnn (требуется членство).
После входа в систему загрузите следующее:
cuDNN v7.3.1 Библиотека для Windows [ваша версия] для меня Windows 10. Перейдите в загруженную папку и распакуйте zip-файл.
Перейдите в извлеченную папку и скопируйте все файлы и папки из папки cuda (например, bin, include, lib) и вставьте в «C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0».
Завершающим этапом здесь является добавление «C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0 \ extras \ CUPTI \ libx64» в переменную среды% PATH%.
Шаг 7. Настройка среды сборки
Запустите оболочку VC ++ 2015 для x64 (ярлык «Командная строка собственных инструментов VS2015 x64») из меню «Пуск».
Далее необходимо создать, активировать и настроить среду Python. Запустите внутри команд оболочки «VS2015 x64 Native Tools Command Prompt» ниже (исправьте пути в соответствии с вашим местоположением).
pip3 установить -U virtualenv
virtualenv --system-site-packages C: \ Users \ amsokol \ensorflow-v1.11
C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ activate.bat
Ваша оболочка должна выглядеть так после применения команд:

Установите обязательные пакеты Python:
pip3 установить шесть колесиков
pip3 install keras_applications == 1.0.5 --no-deps
pip3 install keras_preprocessing == 1.0.3 --no-deps
Запустите «pip3 list», чтобы убедиться, что установлены обязательные пакеты:

Это все на данный момент. Не закрывайте раковину.
Шаг 8: клонировать исходный код TensorFlow и применить обязательный патч
Прежде всего, вы должны выбрать папку, в которой будет клонирован исходный код TensorFlow В моем случае это «C: \ Users \ amsokol \ Development \ tenorflow-build». Вернуться к оболочке и запустить:
cd C: \ Users \ amsokol \ Development \ tenorflow-build
Клонировать исходный код:
git clone https://github.com/tensorflow/tensorflow
Оформить заказ последней версии 1.11:
cd тензорный поток
git checkout v1.11.0
Теперь у нас есть источники.
В собственной сторонней библиотеке есть ошибка. Мы должны исправить это перед сборкой.
- Загрузите патч здесь и сохраните его с именем файла eigen_half.patch в папке third_party
- Добавьте patch_file = clean_dep («// third_party: eigen_half.patch»), добавьте строку в раздел eigen_archive в файл tenorflow / workspace.bzl.
Результат в файле tennsflow / workspace.bzl должен выглядеть следующим образом:
... tf_http_archive ( name = "eigen_archive", URL = [ "Https://mirror.bazel.build/bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz", "Https://bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz", ], sha256 = "d956415d784fa4e42b6a2a45c32556d6aec9d0a3d8ef48baee2522ab762556a9", strip_prefix = "eigen-eigen-fd6845384b86", build_file = clean_dep ("// third_party: eigen.BUILD"), patch_file = clean_dep ("// third_party: eigen_half.patch"), ) ...
Выполнено.
Шаг 9: Настройте параметры сборки
Убедитесь, что мы находимся в корневой папке исходного кода:
cd C: \ Users \ amsokol \ Development \ tennorflow-build \ tenorsflow
Запустите конфигуратор:
python ./configure.py
Сначала он спрашивает местоположение Python. Нажмите Enter, чтобы оставить значение по умолчанию:
... У вас установлен базель 0.17.2.
Пожалуйста, укажите местоположение питона. [По умолчанию используется C: \ Users \ amsokol \ tenorflow-v1.11 \ Scripts \ python.exe]:
Затем он спрашивает местоположение путей библиотеки Python. Нажмите Enter, чтобы оставить значение по умолчанию:
Traceback (последний вызов был последним): Файл "<строка>", строка 1, в <модуле> AttributeError: модуль 'site' не имеет атрибута 'getsitepackages' Найдены возможные пути к библиотекам Python: C: \ Users \ amsokol \ tensorflow-V1.11 \ Lib \ сайт-пакеты Пожалуйста, введите желаемый путь к библиотеке Python для использования. По умолчанию используется [C: \ Users \ amsokol \ tenorflow-v1.11 \ Lib \ site-packages].
Затем он спрашивает о поддержке nGraph. Нам это не нужно. Нажмите «n»:
Вы хотите собрать TensorFlow с поддержкой nGraph? [y / N]: n Для TensorFlow поддержка nGraph не будет включена.
Затем он спрашивает о поддержке CUDA:
Вы хотите собрать TensorFlow с поддержкой CUDA? [Y / N]:
Ответьте «y», если вы собираетесь использовать ускорение GPU. В противном случае нажмите «n».
В случае «Да для CUDA» конфигуратор задает дополнительные вопросы:
Ответьте 10.0 как версию CUDA SDK:
Пожалуйста, укажите версию CUDA SDK, которую вы хотите использовать. [Оставить пустым по умолчанию для CUDA 9.0]: 10.0
Нажмите Enter, чтобы оставить расположение набора инструментов CUDA по умолчанию:
Пожалуйста, укажите место, где установлен инструментарий CUDA 10.0. Обратитесь к README.md для более подробной информации. [По умолчанию используется C: / Program Files / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Ответьте 7.3.1 как версию cuDNN:
Пожалуйста, укажите версию cuDNN, которую вы хотите использовать. [Оставьте пустым по умолчанию для cuDNN 7.0]: 7.3.1
Нажмите Enter, чтобы оставить расположение библиотеки cuDNN по умолчанию:
Пожалуйста, укажите место, где установлена библиотека cuDNN 7. Обратитесь к README.md для более подробной информации. [По умолчанию используется C: / Program Files / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Следующий вопрос о вычислительных возможностях CUDA для сборки. Вы можете найти вычислительные возможности вашего устройства по адресу: https://developer.nvidia.com/cuda-gpus. У меня GTX 1070, поэтому я отвечаю 6.1:
Пожалуйста, укажите список возможностей Cuda Compute, которые вы хотите создать. Вы можете найти вычислительные возможности вашего устройства по адресу: https://developer.nvidia.com/cuda-gpus. Обратите внимание, что каждая дополнительная вычислительная возможность значительно увеличивает время сборки и размер двоичного файла. [По умолчанию: 3.5,7.0]: 6.1
Следующий вопрос - установить флаги оптимизации. У меня процессор Intel 6-го поколения, поэтому я отвечаю / arch: AVX2:
Пожалуйста, укажите флаги оптимизации для использования во время компиляции, когда задана базовая опция "--config = opt" [По умолчанию / arch: AVX]: / arch: AVX2
Последний вопрос о собственном. Ответьте «у». Это значительно сокращает время компиляции.
Хотели бы вы переопределить собственные сильные inline для некоторой компиляции C ++, чтобы уменьшить время компиляции? [Да / Нет]: у Собственная сильная встроенная переопределена.
Конфигурация завершена. Давайте строить.
Шаг 10: Сборка TensorFlow из источников
Убедитесь, что мы находимся в корневой папке исходного кода:
cd C: \ Users \ amsokol \ Development \ tennorflow-build \ tenorsflow
Сборка занимает много времени. Я настоятельно рекомендую отключить антивирусное программное обеспечение, включая антивирусную защиту Windows, защиту в режиме реального времени.
Запустите build:
bazel build --config = opt // tenenflow / tools / pip_package: build_pip_package
Расслабьтесь и отдохните некоторое время.
Шаг 11: Создайте файл колеса TensorFlow для Python 3.6
Запустите команду для создания файла колеса Python:
mkdir .. \ out
bazel-bin \ tenorflow \ tools \ pip_package \ build_pip_package .. \ out
Не удается:

Существует известная проблема. Посмотрите на папку «bazel-bin \ tenorflow \ tools \ pip_package». Он содержит файл «simple_console_for_windows.zip» нулевой длины. Это проблема. Bazel содержит 32-битную zip-утилиту, которая не работает для файла размером более 2 ГБ. Смотрите ссылки для деталей и обходного пути:
- https://github.com/tensorflow/tensorflow/issues/20332
- https://stackoverflow.com/questions/52394305/creating-pip-package-for-tensorflow-with-gpu-support-results-in-0-byte-simple-co
Есть шаги, чтобы решить проблему:
cd. \ bazel-bin \ tenorflow \ tools \ pip_package
Откройте файл «simple_console_for_windows.zip-0.params» и удалите строку, содержащую «mnist.zip»:
...
runfiles / org_tensorflow / tensorflow / вно / готов / Python / примеры / GaN / mnist.zip = Базэл выход / x64_windows-неавтоматического / бен / tensorflow / вно / готов / Python / примеры / GaN / mnist.zip
...
Это помогает мне. В случае, если это не поможет вам просто удалить другие строки с zip-файлами (подробности см. Здесь). Цель этого действия - сделать длину файла simple_console_for_windows.zip не более 2 ГБ.
Удалите пустой файл «simple_console_for_windows.zip».
Далее посмотрите на вашу домашнюю папку. Вы должны увидеть папку с именем вроде «_bazel_
cd C: \ Users \ amsokol \ _bazel_amsokol \ lx6zoh4k \ execroot \ org_tensorflow
Создайте файл simple_console_for_windows.zip вручную:
external \ bazel_tools \ tools \ zip \ zipper \ zipper.exe vcC bazel-out / x64_windows-opt / bin / тензор потока / tools / pip_package / simple_console_for_windows.zip @ bazel-out / x64_windows-opt / bin / tenorflow / tools / pip_package / simple_console_for_windows.zip-0.params
Запустите команду для создания файла колеса Python:
cd C: \ Users \ amsokol \ Development \ tennorflow-build \ tenorsflow
bazel-bin \ tenorflow \ tools \ pip_package \ build_pip_package .. \ out
Он создает файл tenorflow-1.11.0-cp36-cp36m-win_amd64.whl в папке «.. \ out».
Шаг 12: Установите файл колеса TensorFlow для Python 3.6 и проверьте результат
Запустите команду для установки файла колеса Python:
pip3 install .. \ out \ tenorflow-1.11.0-cp36-cp36m-win_amd64.whl
Оставьте директорию tenensflow (иногда возникают ошибки, когда я запускаю скрипты Python внутри папки с исходным кодом Tensoflow - причина не знаю):
CD ..
Чтобы проверить, скачайте скрипт здесь или скопируйте и вставьте и запустите:
импортировать тензор потока как тф hello = tf.constant ('Привет, TensorFlow!') session = tf.Session () печать (session.run (привет))
Если система выводит следующее, то все в порядке:
Привет, TensorFlow!
Мой вывод:

Вы успешно установили TensorFlow на компьютере с Windows.
Дайте мне знать в комментариях ниже, если это сработало для вас. Или если у вас есть какие-либо ошибки. Благодарность!