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

Это обновление для моей предыдущей истории. Что нового здесь:

  • TensorFlow v1.11
  • CUDA v10.0
  • cuDNN v7.3

На официальном сайте есть руководство. Это не очень полный, но иногда полезный.

Резюме

  1. Установите Git для Windows
  2. Установить Базель
  3. Установите MSYS2 x64 и инструменты командной строки
  4. Установите инструменты сборки Visual Studio 2017, включая инструменты сборки Visual Studio 2015
  5. Установите Python 3.6 64-бит
  6. Установите NVIDIA CUDA 10.0 и cuDNN 7.3 (для ускорения GPU)
  7. Настроить среду сборки
  8. Клонируйте исходный код TensorFlow v1.11 и примените обязательный патч
  9. Настройте параметры сборки
  10. Сборка TensorFlow из источников
  11. Создать файл колеса TensorFlow для Python 3.6
  12. Установите файл колеса 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_ ». Это «_bazel_amsokol» в моем случае. Содержит папку с файлами сборки. Это «lx6zoh4k» в моем случае. Вернуться к снаряжению запустить (исправить в соответствии с именами папок):

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.

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