[Aktualizacja 1] Jak zbudować i zainstalować TensorFlow GPU / CPU dla Windows z kodu źródłowego przy użyciu bazel i Python 3.6

To aktualizacja mojej poprzedniej historii. Co nowego tutaj:

  • TensorFlow v1.11
  • CUDA v10.0
  • cuDNN 7.3

Na oficjalnej stronie znajduje się przewodnik. Nie jest to zbyt wyczerpujące, ale czasem przydatne.

Podsumowanie

  1. Zainstaluj Git dla Windows
  2. Zainstaluj Bazel
  3. Zainstaluj MSYS2 x64 i narzędzia wiersza poleceń
  4. Zainstaluj narzędzia do tworzenia programu Visual Studio 2017, w tym narzędzia do tworzenia programu Visual Studio 2015
  5. Zainstaluj 64-bitowy Python 3.6
  6. Zainstaluj NVIDIA CUDA 10.0 i cuDNN 7.3 (dla akceleracji GPU)
  7. Skonfiguruj środowisko kompilacji
  8. Sklonuj kod źródłowy TensorFlow v1.11 i zastosuj obowiązkową łatkę
  9. Skonfiguruj parametry kompilacji
  10. Zbuduj TensorFlow ze źródeł
  11. Utwórz plik koła TensorFlow dla Python 3.6
  12. Zainstaluj plik koła TensorFlow dla Pythona 3.6 i sprawdź wynik

Krok 1: Zainstaluj Git dla Windows

Pobierz i zainstaluj Git dla Windows. Biorę to tutaj. Upewnij się, że ścieżka do git.exe została dodana do zmiennej środowiskowej% PATH%. Instaluję Git na

C: \ Bin \ Git

folder tego samouczka.

Krok 2: Zainstaluj MSYS2 x64 i narzędzia wiersza poleceń

Pobierz i zainstaluj tutaj dystrybucję 64-bitową. Bazel używa grep, patch, unzipand innych portów narzędzi uniksowych do budowania źródeł. Możesz spróbować znaleźć autonomiczne pliki binarne dla każdego z nich, ale wolę używać pakietu MSYS2. Instaluję go do

C: \ Bin \ msys64

folder tego samouczka. Musisz dodać folder z narzędziami do zmiennej środowiskowej% PATH%. W moim przypadku jest to „C: \ Bin \ msys64 \ usr \ bin”.

Uruchom skrót „MSYS2 MinGW 64-bit” z menu Start. Uruchom następujące polecenie, aby zaktualizować (uruchom ponownie „MSYS2 MinGW 64-bit”, jeśli zostanie wyświetlony monit):

pacman -Syu

Następnie uruchomić:

pacman -Su

Narzędzia do instalacji są niezbędne do kompilacji:

pacman -S patch unzip

Zamknij powłokę „MSYS2 MinGW 64-bit” za pomocą polecenia „exit”. Już go nie potrzebujemy.

Krok 3: Zainstaluj narzędzia do budowania Visual Studio 2017, w tym narzędzia do budowania Visual Studio 2015

Musimy zainstalować „Zestaw narzędzi VC ++ 2015.3 v14.00 (v140) dla komputerów stacjonarnych” z Visual Studio 2017 Build Tools, aby zbudować TensorFlow v1.11:

Krok 4: Zainstaluj Bazel

Pobierz najnowszą Bazyleę tutaj. Poszukaj pliku bazel- -windows-x86_64.exe. Testowałem ten samouczek z bazelem 0.17.2. Zmień nazwę pliku binarnego na bazel.exe i przenieś go do katalogu na% PATH%, abyś mógł uruchomić Bazel, wpisując bazel w dowolnym katalogu. Zobacz szczegóły instalacji Bazel dla Windows x64 w przypadku problemów.

Dodaj globalną zmienną środowiskową BAZEL_SH dla lokalizacji bash. Moja ścieżka jest

C: \ Bin \ msys64 \ usr \ bin \ bash.exe

Dodaj globalną zmienną środowiskową BAZEL_VC dla lokalizacji łańcucha narzędzi „VC ++ 2015.3 v14.00 (v140) dla komputerów stacjonarnych”:

C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC

Krok 5: Zainstaluj 64-bitowy język Python 3.6

TensorFlow nie obsługuje Pythona 3.7, dlatego musisz zainstalować wersję 3.6.
Wygląda na to, że TensorFlow v1.11 nie obsługuje już Anaconda / Miniconda przy kompilacji - pojawia się dziwny błąd. Dlatego używam środowiska wirtualnego Python do kompilacji.

Python 3.6 jest dostępny do pobrania tutaj. Zainstaluj i dodaj lokalizację do python.exe do zmiennej% PATH%.

Krok 6: Zainstaluj NVIDIA CUDA 10.0 i cuDNN 7.3 (dla akceleracji GPU)

Ta sekcja jest aktualna, jeśli masz kartę graficzną NVIDIA obsługującą CUDA. W przeciwnym razie pomiń tę sekcję.
Jeśli potrzebujesz pomocy, zobacz krok po kroku instalację CUDA. Kopiuję i wklejam ten przewodnik, ale wycinam kilka szczegółów.

Wejdź na https://developer.nvidia.com/cuda-downloads i pobierz CUDA 10.0 Installer dla Windows [twoja wersja]. Dla mnie wersja to Windows 10.

Zainstaluj go w domyślnej lokalizacji z ustawieniami domyślnymi, ale odznacz opcję integracji VisualStudio. W razie potrzeby zaktualizuje sterownik karty graficznej i uruchomi się ponownie.

Idź do uruchomienia (Win + R) wpisz cmd

Następujące polecenie sprawdzi wersję nvcc i upewni się, że jest ustawiona w zmiennej środowiskowej ścieżki.

nvcc --version

Następnie przejdź do https://developer.nvidia.com/cudnn (wymagane członkostwo).

Po zalogowaniu pobierz następujące pliki:

cuDNN v7.3.1 Biblioteka dla Windows [twoja wersja] dla mnie Windows 10. Przejdź do pobranego folderu i rozpakuj plik zip.

Wejdź do wyodrębnionego folderu i skopiuj wszystkie pliki i folder z folderu cuda (np. Bin, include, lib) i wklej do „C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0”.

Ostatnim krokiem jest dodanie „C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0 \ extras \ CUPTI \ libx64” do zmiennej środowiskowej% PATH%.

Krok 7: Skonfiguruj środowisko kompilacji

Uruchom powłokę VC ++ 2015 dla x64 (skrót „Wiersz polecenia natywnych narzędzi VS2015 x64”) z menu Start.

Następnie musisz utworzyć, aktywować i skonfigurować środowisko Python. Uruchom poniżej poleceń powłoki „Wiersz polecenia natywnych narzędzi VS2015 x64” (popraw ścieżki zgodnie z twoimi lokalizacjami).

pip3 install -U virtualenv
virtualenv --system-site-packages C: \ Users \ amsokol \ tensorflow-v1.11
C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ Activ.bat

Powłoka powinna wyglądać tak po zastosowaniu poleceń:

Zainstaluj obowiązkowe pakiety Pythona:

pip3 zainstaluj sześć kół numpy
pip3 install keras_applications == 1.0.5 --no-deps
pip3 install keras_preprocessing == 1.0.3 - no-deps

Uruchom „listę pip3”, aby upewnić się, że pakiety obowiązkowe zostały zainstalowane:

To wszystko na teraz. Nie zamykaj muszli.

Krok 8: Sklonuj kod źródłowy TensorFlow i zastosuj obowiązkową łatkę

Przede wszystkim musisz wybrać folder, w którym chcesz sklonować kod źródłowy TensorFlow. W moim przypadku jest to „C: \ Users \ amsokol \ Development \ tensorflow-build”. Wróć do powłoki i uruchom:

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

Sklonuj kod źródłowy:

klon git https://github.com/tensorflow/tensorflow

Kasa najnowsza wersja 1.11:

tensorflow cd
git checkout v1.11.0

Teraz mamy źródła.

W własnej bibliotece zewnętrznej jest błąd. Musimy to naprawić przed kompilacją.
  • Pobierz łatkę tutaj i zapisz z nazwą pliku eigen_half.patch w folderze Third_party
  • Dodaj plik_poprawek = clean_dep („// Third_party: eigen_half.patch”), przejdź do sekcji eigen_archive do pliku tensorflow / workspace.bzl.

Wynik w pliku tensorflow / workspace.bzl powinien wyglądać tak:

...
tf_http_archive (
  name = "eigen_archive",
  adresy 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"),
)
...

Gotowy.

Krok 9: Skonfiguruj parametry kompilacji

Upewnij się, że znajdujemy się w folderze głównym kodu źródłowego:

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

Uruchom konfigurator:

python ./configure.py

Najpierw pyta o lokalizację Pythona. Naciśnij Enter, aby pozostawić wartość domyślną:

...
Masz zainstalowany bazel 0.17.2.
Podaj lokalizację Pythona. [Domyślnie jest to C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ python.exe]:

Następnie pyta o lokalizację ścieżek biblioteki Pythona. Naciśnij Enter, aby pozostawić wartość domyślną:

Traceback (ostatnie połączenie ostatnio):
  Plik „”, wiersz 1, w 
AttributeError: moduł „site” nie ma atrybutu „getsitepackages”
Znaleziono możliwe ścieżki biblioteki Python:
  C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages
Wprowadź żądaną ścieżkę biblioteki Pythona do użycia. Domyślnie jest to [C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages]

Następnie pyta o obsługę nGraph. Nie potrzebujemy tego. Naciśnij „n”:

Czy chcesz zbudować TensorFlow z obsługą nGraph? [t / n]: n
Dla TensorFlow nie zostanie włączona obsługa nGraph.

Następnie pyta o wsparcie dla CUDA:

Czy chcesz zbudować TensorFlow z obsługą CUDA? [t / n]:

Odpowiedz „y”, jeśli zamierzasz korzystać z akceleracji GPU. W przeciwnym razie naciśnij „n”.

W przypadku, gdy w Tak dla konfiguratora CUDA zadane zostaną dodatkowe pytania:
Odpowiedz 10.0 jako wersja CUDA SDK:
Podaj wersję CUDA SDK, której chcesz użyć. [Pozostaw puste, domyślnie CUDA 9.0]: 10.0
Naciśnij Enter, aby opuścić domyślną lokalizację zestawu narzędzi CUDA:
Podaj lokalizację, w której jest zainstalowany zestaw narzędzi CUDA 10.0. Więcej informacji znajduje się na README.md. [Domyślnie jest to C: / Program Files / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Odpowiedz 7.3.1 jako wersja cuDNN:
Podaj wersję cuDNN, której chcesz użyć. [Pozostaw puste, aby domyślnie ustawić cuDNN 7.0]: 7.3.1
Naciśnij Enter, aby opuścić domyślną lokalizację biblioteki cuDNN:
Podaj lokalizację, w której zainstalowana jest biblioteka cuDNN 7. Więcej informacji znajduje się na README.md. [Domyślnie jest to C: / Program Files / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Następne pytanie dotyczy możliwości obliczeniowych CUDA. Możliwości obliczeniowe urządzenia można znaleźć na stronie: https://developer.nvidia.com/cuda-gpus. Mam GTX 1070, dlatego odpowiadam 6.1:
Podaj listę rozdzielonych przecinkami możliwości obliczeniowych Cuda, które chcesz budować.
Możliwości obliczeniowe urządzenia można znaleźć na stronie: https://developer.nvidia.com/cuda-gpus.
Pamiętaj, że każda dodatkowa funkcja obliczeniowa znacznie wydłuża czas kompilacji i rozmiar pliku binarnego. [Domyślnie: 3,5,7,0]: 6,1

Kolejnym pytaniem jest ustawienie flag optymalizacji. Mam procesor Intel 6. generacji, dlatego odpowiadam / arch: AVX2:

Podaj flagi optymalizacji do użycia podczas kompilacji, gdy określono opcję bazel „--config = opt” [Domyślnie jest / arch: AVX]: / arch: AVX2

Ostatnie pytanie dotyczy własnego. Odpowiedz „y”. Znacząco skraca czas kompilacji.

Czy chcesz przesłonić eigen strong inline dla niektórych kompilacji C ++, aby skrócić czas kompilacji? [T / n]: y
Zastępowanie własnego silnego inline.

Konfiguracja zakończona. Zbudujmy.

Krok 10: Zbuduj TensorFlow ze źródeł

Upewnij się, że znajdujemy się w folderze głównym kodu źródłowego:

cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
Kompilacja zajmuje dużo czasu. Zdecydowanie zalecam wyłączenie oprogramowania antywirusowego, w tym programu Windows Defender Antivirus w czasie rzeczywistym.

Uruchom kompilację:

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

Usiądź i zrelaksuj się przez jakiś czas.

Krok 11: Utwórz plik koła TensorFlow dla Python 3.6

Uruchom polecenie, aby utworzyć plik koła Python:

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

To nie wyszło:

Istnieje znany problem. Spójrz na folder „bazel-bin \ tensorflow \ tools \ pip_package”. Zawiera plik „simple_console_for_windows.zip” o zerowej długości. To jest problem. Bazel zawiera 32-bitowe narzędzie zip, które nie działa w przypadku pliku 2 GB większego. Zobacz łącza, aby uzyskać szczegółowe informacje i obejście:

  • 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

Istnieją kroki, aby rozwiązać problem:

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

Otwórz plik „simple_console_for_windows.zip-0.params” i usuń wiersz zawierający „mnist.zip”:

...
pliki runfiles / org_tensorflow / tensorflow / contrib / eager / python / Examples / gan / mnist.zip = bazel-out / x64_windows-opt / bin / tensorflow / contrib / eager / python / Examples / gan / mnist.zip
...
To pomaga mi. W przypadku, gdy nie pomaga to po prostu usunąć inne linie z plikami zip (zobacz szczegóły tutaj). Celem tego działania jest zmniejszenie długości „simple_console_for_windows.zip” do 2 GB.

Usuń pusty plik „simple_console_for_windows.zip”.

Następnie spójrz na folder domowy. Musisz zobaczyć folder o nazwie takiej jak „_bazel_ ”. W moim przypadku jest to „_bazel_amsokol”. Zawiera folder z plikami kompilacji. W moim przypadku jest to „lx6zoh4k”. Powrót do wykonania powłoki (popraw według nazw folderów):

cd C: \ Users \ amsokol \ _bazel_amsokol \ lx6zoh4k \ execroot \ org_tensorflow

Utwórz plik „simple_console_for_windows.zip” ręcznie:

external \ 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_package / simple_console_for_windows.zip-0.params

Uruchom polecenie, aby utworzyć plik koła Python:

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

Tworzy plik tensorflow-1.11.0-cp36-cp36m-win_amd64.whl w folderze „.. \ out”.

Krok 12: Zainstaluj plik koła TensorFlow dla Pythona 3.6 i sprawdź wynik

Uruchom polecenie, aby zainstalować plik koła Python:

instalacja pip3 .. \ out \ tensorflow-1.11.0-cp36-cp36m-win_amd64.whl

Opuść katalog „tensorflow” (czasami zdarzają się błędy, gdy uruchamiam skrypty Pythona w folderze kodu źródłowego Tensoflow - nie znam powodu):

Płyta CD ..

Aby zrobić skrypt pobierania czeku tutaj lub skopiuj-wklej i uruchom:

importuj tensorflow jako tf
hello = tf.constant („Witaj, TensorFlow!”)
session = tf.Session ()
print (session.run (hello))

Jeśli system wyświetla następujące informacje, wszystko jest w porządku:

Witaj, TensorFlow!

Moja produkcja:

Pomyślnie zainstalowałeś TensorFlow na komputerze z systemem Windows.

Daj mi znać w komentarzach poniżej, jeśli to zadziałało. Lub jeśli masz jakieś błędy. Dzięki!