[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
- Zainstaluj Git dla Windows
- Zainstaluj Bazel
- Zainstaluj MSYS2 x64 i narzędzia wiersza poleceń
- Zainstaluj narzędzia do tworzenia programu Visual Studio 2017, w tym narzędzia do tworzenia programu Visual Studio 2015
- Zainstaluj 64-bitowy Python 3.6
- Zainstaluj NVIDIA CUDA 10.0 i cuDNN 7.3 (dla akceleracji GPU)
- Skonfiguruj środowisko kompilacji
- Sklonuj kod źródłowy TensorFlow v1.11 i zastosuj obowiązkową łatkę
- Skonfiguruj parametry kompilacji
- Zbuduj TensorFlow ze źródeł
- Utwórz plik koła TensorFlow dla Python 3.6
- 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-
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_
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!