[Оновлення 1] Як створити та встановити TensorFlow GPU / CPU для Windows з вихідного коду за допомогою bazel та Python 3.6

Це оновлення для моєї попередньої історії. Що нового тут:

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

На офіційному сайті є путівник. Іноді це не дуже всебічно, але корисно.

Підсумок

  1. Встановіть Git для Windows
  2. Встановіть Bazel
  3. Встановіть інструменти MSYS2 x64 та командного рядка
  4. Встановіть інструменти збирання Visual Studio 2017, включаючи засоби збирання Visual Studio 2015
  5. Встановіть 64-розрядну програму Python 3.6
  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, розпаковувати інші порти Unix-інструментів для створення джерел. Ви можете спробувати знайти окремі бінарні файли для кожного з них, але я вважаю за краще використовувати пакет MSYS2. Я встановлюю його на

C: \ Bin \ msys64

папка для цього підручника. Ви повинні додати папку з інструментами до змінної середовища% PATH%. У моєму випадку це "C: \ Bin \ msys64 \ usr \ bin".

Запустіть ярлик "MSYS2 MinGW 64-bit" з меню "Пуск". Виконайте таку команду для оновлення (перезапустіть "MSYS2 MinGW 64-бітний", якщо вона запитує):

pacman -Syu

Потім запустіть:

pacman -Su

Інструменти для встановлення необхідні для складання:

pacman -S patch unzip

Закрийте оболонку “MSYS2 MinGW 64-розрядна” командою “exit”. Нам це вже не потрібно.

Крок 3: Встановіть інструменти збирання Visual Studio 2017, включаючи засоби збирання Visual Studio 2015

Нам потрібно встановити набір інструментів "VC ++ 2015.3 v14.00 (v140) для робочого столу" від Visual Studio 2017 Build Tools, щоб створити TensorFlow v1.11:

Крок 4: Встановіть Bazel

Завантажте останню програму Basel тут. Шукайте файл bazel- -windows-x86_64.exe. Я перевірив цей підручник з базелем 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: \ програмні файли (x86) \ Microsoft Visual Studio 14.0 \ VC

Крок 5: Встановіть Python 3.6 64-біт

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 (для прискорення GPU)

Цей розділ є актуальним, якщо у вас є відеокарта NVIDIA, яка підтримує CUDA. Інакше пропустіть цей розділ.
Дивіться покрокову установку CUDA тут, якщо вам потрібна допомога. Я копіюю та вставляю це керівництво, але вирізаю деякі деталі.

Перейдіть на сторінку https://developer.nvidia.com/cuda-downloads та завантажте програму CUDA 10.0 Installer для Windows [ваша версія]. Для мене версія - це Windows 10.

Встановіть його у стандартному розташуванні із налаштуваннями за замовчуванням, але зніміть прапорець для інтеграції VisualStudio. При необхідності оновиться драйвер GPU та перезавантажиться.

Перейдіть до запуску (Win + R) типу cmd

Наступна команда перевірить наявність версії nvcc і гарантує, що вона встановлена ​​в змінній середовища контуру.

nvcc --вертання

Далі перейдіть на сторінку https://developer.nvidia.com/cudnn (необхідне членство).

Після входу завантажте наступне:

cuDNN v7.3.1 Бібліотека для Windows [ваша версія] для мене Windows 10. Перейдіть до завантаженої папки та витягніть поштовий файл.

Зайдіть у витягнуту папку і скопіюйте всі файли та папки з папки cuda (наприклад, бін, включення, 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 командний рядок Native Tools" у меню "Пуск").

Далі потрібно створити, активувати та налаштувати середовище Python. Виконайте всередині команд оболонки "VS2015 x64 Native Tools Command Prompt" (правильні шляхи у відповідності з вашими місцями).

pip3 встановити -U virtualenv
virtualenv --система-сайт-пакети C: \ Users \ amsokol \ tensorflow-v1.11
C: \ Користувачі \ amsokol \ tensorflow-v1.11 \ Сценарії \ activate.bat

Ваша оболонка повинна виглядати так після команд:

Встановіть обов'язкові пакети Python:

pip3 встановити шість шумних колес
pip3 встановити keras_applications == 1.0.5 --no-deps
pip3 встановити keras_preprocessing == 1.0.3 --no-deps

Запустіть "список pip3", щоб переконатися, що встановлені обов'язкові пакети:

Це все, що на даний момент. Не закривайте оболонку.

Крок 8: Клон TensorFlow вихідного коду та застосуйте обов'язковий патч

Перш за все, потрібно вибрати папку, куди можна клонувати вихідний код TensorFlow. У моєму випадку це "C: \ Users \ amsokol \ Development \ tensorflow-build". Назад до оболонки та запустіть:

cd C: \ Users \ amsokol \ Development \ tensorflow-build

Клонічний вихідний код:

клон git https://github.com/tensorflow/tensorflow

Оплата останньої версії 1.11:

cd tensorflow
git checkout v1.11.0

Зараз у нас є джерела.

У власній сторонній бібліотеці є БУГ. Ми повинні виправити це перед тим, як будувати.
  • Завантажте патч тут і збережіть з ім'ям файлу eigen_half.patch у папку Third_party
  • Додайте patch_file = clean_dep (“// Third_party: eigen_half.patch”), рядок до розділу eigen_archive до файлу tensorflow / workspace.bzl.

Результат у файлі tensorflow / 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 \ tensorflow-build \ tensorflow

Запустити конфігуратор:

python ./configure.py

Спочатку він запитує місце розташування Python. Натисніть Enter, щоб залишити значення за замовчуванням:

...
У вас встановлено базель 0.17.2.
Вкажіть, будь ласка, місце розташування пітона. [За замовчуванням C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ python.exe]:

Потім запитує місце розташування шляхів бібліотеки Python. Натисніть Enter, щоб залишити значення за замовчуванням:

Відстеження (останній останній дзвінок):
  Файл "", рядок 1, в 
AttributeError: модуль 'site' не має атрибута 'getitepackages'
Знайдені можливі шляхи до бібліотеки Python:
  C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-пакети
Введіть потрібний шлях бібліотеки Python для використання. За замовчуванням є [C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-пакети]

Потім він запитує про підтримку nGraph. Нам це не потрібно. Натисніть «n»:

Ви хочете створити TensorFlow із підтримкою nGraph? [y / N]: n
Підтримка nGraph не буде ввімкнено для TensorFlow.

Потім він запитує про підтримку CUDA:

Ви хочете створити TensorFlow за допомогою підтримки CUDA? [y / N]:

Відповідь "у", якщо ви збираєтесь використовувати прискорення GPU. В іншому випадку натисніть «n».

У разі "Так" для конфігуратора CUDA задає додаткові запитання:
Відповідь 10.0 як версія CUDA SDK:
Вкажіть версію SDK CUDA, яку ви хочете використовувати. [Залиште порожнє значення за замовчуванням у 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 для обчислення, розділених комами, з якими ви хочете побудувати.
Ви можете знайти можливості обчислення свого пристрою за посиланням: https://developer.nvidia.com/cuda-gpus.
Зауважте, що кожна додаткова можливість обчислення значно збільшує час збирання та бінарний розмір. [За замовчуванням: 3,5,7,0]: 6.1

Наступне питання - встановити прапори оптимізації. У мене процесор Intel Intel 6-го покоління, тому я відповідаю / арка: AVX2:

Будь ласка, вкажіть прапори оптимізації для використання під час компіляції, коли вказано параметр "--config = opt" [За замовчуванням є / arch: AVX]: / arch: AVX2

Останнє питання стосується власного. Відповідь «у». Це значно скорочує час компіляції.

Чи хочете ви замінити власний сильний інлайнер для деякої компіляції C ++, щоб скоротити час компіляції? [Y / n]: у
Ейген сильний інлайн перекривлений.

Конфігурація завершена. Давайте будувати.

Крок 10: Створіть TensorFlow з джерел

Переконайтеся, що ми знаходимося в кореневій папці вихідного коду:

cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
Побудова займає багато часу. Настійно рекомендую вимкнути антивірусне програмне забезпечення, включаючи захист у режимі реального часу Windows Defender Antivirus.

Виконати збірку:

bazel build --config = opt // tensorflow / tools / pip_package: build_pip_package

Сядьте і розслабтеся на якийсь час.

Крок 11: Створіть файл колеса TensorFlow для Python 3.6

Запустіть команду для створення файлу колеса Python:

mkdir .. \ out
bazel-bin \ tensorflow \ tools \ pip_package \ build_pip_package .. \ out

Це не вдається:

Існує відома проблема. Подивіться на папку "bzel-bin \ tensorflow \ tools \ pip_package". Він містить файл нульової довжини «simple_console_for_windows.zip». У цьому проблема. Bazel містить 32-бітну утиліту zip, яка не може отримати файл на 2 Гб більше. Деталі та вирішення див. За посиланнями:

  • https://github.com/tensorflow/tensorflow/isissue/20332
  • https://stackoverflow.com/questions/52394305/creating-pip-package-for-tensorflow-with-gpu-support-results-in-0-byte-simple-co

Для усунення проблеми є кроки:

cd. \ bazel-bin \ tensorflow \ tools \ pip_package

Відкрийте файл "simple_console_for_windows.zip-0.params" і видаліть рядок "mnist.zip":

...
runfiles / org_tensorflow / tensorflow / contrib / eager / python / example / gan / mnist.zip = bazel-out / x64_windows-opt / bin / tensorflow / contrib / eager / python / primjeri / 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" вручну:

зовнішній \ bazel_tools \ tools \ zip \ zipper \ zipper.exe vcC bazel-out / x64_windows-opt / bin / tensorflow / tools / pip_package / simple_console_for_windows.zip @ bazel-out / x64_windows-opt / bin / tensorflow / tools / pip_pac simple_console_for_windows.zip-0.params

Запустіть команду для створення файлу колеса Python:

cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
bazel-bin \ tensorflow \ tools \ pip_package \ build_pip_package .. \ out

Він створює файл tensorflow-1.11.0-cp36-cp36m-win_amd64.whl у папці ".. \ out".

Крок 12: Встановіть колесо з файлом TensorFlow для Python 3.6 і перевірте результат

Запустіть команду для встановлення файлу колеса Python:

встановити pip3 .. \ out \ tensorflow-1.11.0-cp36-cp36m-win_amd64.whl

Залиште каталог «tensorflow» (помилки трапляються іноді, коли я запускаю сценарії Python у папці вихідного коду Tensoflow - я не знаю причини):

cd ..

Щоб перевірити скачати скрипт тут, скопіюйте та вставте та запустіть:

імпортувати тензорфлоу як тф
hello = tf.constant ("Привіт, TensorFlow!")
сесія = tf. сесія ()
друк (session.run (привіт))

Якщо система видає наступне, то все добре:

Привіт, TensorFlow!

Мій вихід:

Зараз ви успішно встановили TensorFlow на машині Windows.

Повідомте мене в коментарях нижче, якщо це працювало для вас. Або якщо у вас виникли помилки. Спасибі!