[Update 1] Erstellen und Installieren von TensorFlow GPU / CPU für Windows aus dem Quellcode mit Bazel und Python 3.6

Dies ist ein Update für meine vorherige Geschichte. Was ist neu hier:

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

Es gibt Führer auf der offiziellen Seite. Es ist nicht sehr umfassend, aber manchmal nützlich.

Zusammenfassung

  1. Installieren Sie Git für Windows
  2. Installieren Sie Bazel
  3. Installieren Sie MSYS2 x64 und Befehlszeilentools
  4. Installieren Sie Visual Studio 2017 Build Tools, einschließlich Visual Studio 2015 Build Tools
  5. Installieren Sie Python 3.6 64-Bit
  6. Installieren Sie NVIDIA CUDA 10.0 und cuDNN 7.3 (für die GPU-Beschleunigung)
  7. Build-Umgebung konfigurieren
  8. Klonen Sie den TensorFlow v1.11-Quellcode und wenden Sie den obligatorischen Patch an
  9. Konfigurieren Sie die Build-Parameter
  10. Erstellen Sie TensorFlow aus Quellen
  11. Erstellen Sie eine TensorFlow-Raddatei für Python 3.6
  12. Installieren Sie die TensorFlow-Raddatei für Python 3.6 und überprüfen Sie das Ergebnis

Schritt 1: Installieren Sie Git für Windows

Laden Sie Git für Windows herunter und installieren Sie es. Ich nehme es hier. Stellen Sie sicher, dass der Pfad zu git.exe zur Umgebungsvariablen% PATH% hinzugefügt wurde. Ich installiere Git auf die

C: \ Bin \ Git

Ordner für dieses Tutorial.

Schritt 2: Installieren Sie MSYS2 x64 und Befehlszeilentools

Laden Sie hier die 64-Bit-Distribution herunter und installieren Sie sie. Bazel verwendet grep, patch, unzipand und andere Ports von Unix-Tools, um Quellen zu erstellen. Sie können versuchen, eigenständige Binärdateien für jede von ihnen zu finden, aber ich bevorzuge die Verwendung des MSYS2-Bundles. Ich installiere es auf die

C: \ Bin \ msys64

Ordner für dieses Tutorial. Sie müssen der Umgebungsvariablen% PATH% einen Ordner mit Werkzeugen hinzufügen. In meinem Fall ist es "C: \ Bin \ msys64 \ usr \ bin".

Starten Sie die Verknüpfung "MSYS2 MinGW 64-Bit" über das Startmenü. Führen Sie zum Aktualisieren den folgenden Befehl aus (starten Sie MSYS2 MinGW 64-Bit neu, wenn Sie dazu aufgefordert werden):

Pacman-Syu

Dann renne:

Pacman -Su

Installations-Tools sind für den Build erforderlich:

Pacman-Patch entpacken

Schließen Sie die MSYS2 MinGW 64-Bit-Shell mit dem Befehl "exit". Wir brauchen es nicht mehr.

Schritt 3: Installieren Sie Visual Studio 2017 Build Tools, einschließlich Visual Studio 2015 Build Tools

Wir müssen das Toolset "VC ++ 2015.3 v14.00 (v140) für den Desktop" von Visual Studio 2017 Build Tools installieren, um TensorFlow v1.11 zu erstellen:

Schritt 4: Installieren Sie Bazel

Laden Sie hier das neueste Basel herunter. Suchen Sie nach der Datei bazel- -windows-x86_64.exe. Ich habe dieses Tutorial mit Bazel 0.17.2 getestet. Benennen Sie die Binärdatei in bazel.exe um und verschieben Sie sie in ein Verzeichnis auf% PATH%, sodass Sie Bazel ausführen können, indem Sie bazel in ein beliebiges Verzeichnis eingeben. Einzelheiten zur Installation von Bazel für Windows x64 finden Sie bei Problemen.

Fügen Sie die globale Umgebungsvariable BAZEL_SH für die Bash-Position hinzu. Mein Weg ist

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

Fügen Sie die globale Umgebungsvariable BAZEL_VC für das Toolset "VC ++ 2015.3 v14.00 (v140) für Desktop" hinzu:

C: \ Programme (x86) \ Microsoft Visual Studio 14.0 \ VC

Schritt 5: Installieren Sie Python 3.6 64-Bit

TensorFlow unterstützt Python 3.7 nicht, daher müssen Sie Version 3.6 installieren.
Es sieht so aus, als ob TensorFlow v1.11 Anaconda / Miniconda nicht mehr für Builds unterstützt - ich bekomme einen seltsamen Fehler. Aus diesem Grund verwende ich die virtuelle Python-Umgebung zum Erstellen.

Python 3.6 steht hier zum Download zur Verfügung. Installieren Sie es und fügen Sie der Variablen% PATH% den Speicherort python.exe hinzu.

Schritt 6: Installieren Sie NVIDIA CUDA 10.0 und cuDNN 7.3 (für die GPU-Beschleunigung)

Dieser Abschnitt ist aktuell, wenn Sie eine NVIDIA-Grafikkarte haben, die CUDA unterstützt. Ansonsten überspringen Sie diesen Abschnitt.
Eine schrittweise Installation von CUDA finden Sie hier, wenn Sie Hilfe benötigen. Ich kopiere diese Anleitung, schneide aber einige Details aus.

Gehen Sie zu https://developer.nvidia.com/cuda-downloads und laden Sie das CUDA 10.0-Installationsprogramm für Windows [Ihre Version] herunter. Für mich ist die Version Windows 10.

Installieren Sie es im Standardverzeichnis mit den Standardeinstellungen, deaktivieren Sie jedoch die Integrationsoption VisualStudio. Der GPU-Treiber wird bei Bedarf aktualisiert und neu gestartet.

Führen Sie den Befehl cmd (Win + R) aus

Der folgende Befehl überprüft, ob eine nvcc-Version vorliegt, und stellt sicher, dass diese in der Umgebungsvariablen path festgelegt ist.

nvcc --version

Weiter zu https://developer.nvidia.com/cudnn (Mitgliedschaft erforderlich).

Laden Sie nach dem Login Folgendes herunter:

cuDNN v7.3.1 Library für Windows [Ihre Version] für mich Windows 10. Gehen Sie zum heruntergeladenen Ordner und extrahieren Sie die ZIP-Datei.

Gehen Sie in den extrahierten Ordner und kopieren Sie alle Dateien und Ordner aus dem cuda-Ordner (z. B. bin, include, lib) und fügen Sie sie in "C: \ Programme \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0" ein.

Der letzte Schritt ist das Hinzufügen von "C: \ Programme \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0 \ extras \ CUPTI \ libx64" zur Umgebungsvariablen% PATH%.

Schritt 7: Konfigurieren Sie die Build-Umgebung

Starten Sie die VC ++ 2015-Shell für x64 (Verknüpfung „VS2015 x64 Native Tools-Eingabeaufforderung“) über das Startmenü.

Als nächstes müssen Sie eine Python-Umgebung erstellen, aktivieren und konfigurieren. Führen Sie die folgenden Shell-Befehle in der „VS2015 x64 Native Tools-Eingabeaufforderung“ aus (korrigieren Sie die Pfade entsprechend Ihren Positionen).

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

Ihre Shell sollte nach den angewendeten Befehlen so aussehen:

Installieren Sie die obligatorischen Python-Pakete:

pip3 installieren sechs numpy wheel
pip3 install keras_applications == 1.0.5 --no-deps
pip3 install keras_preprocessing == 1.0.3 --no-deps

Führen Sie "pip3 list" aus, um sicherzustellen, dass die obligatorischen Pakete installiert sind:

Das ist alles für jetzt. Schale nicht schließen.

Schritt 8: Klonen Sie den TensorFlow-Quellcode und wenden Sie den obligatorischen Patch an

Zunächst müssen Sie den Ordner auswählen, in den der TensorFlow-Quellcode geklont werden soll. In meinem Fall ist es "C: \ Users \ amsokol \ Development \ tensorflow-build". Zurück zur Shell und renne:

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

Quellcode klonen:

Git-Klon https://github.com/tensorflow/tensorflow

Kasse neueste Version 1.11:

cd tensorflow
git checkout v1.11.0

Jetzt haben wir Quellen.

Es gibt einen BUG in der eigenen Drittanbieter-Bibliothek. Wir müssen es vor dem Bau reparieren.
  • Laden Sie den Patch hier herunter und speichern Sie ihn mit dem Dateinamen eigen_half.patch im Ordner third_party
  • Fügen Sie patch_file = clean_dep ("// third_party: eigen_half.patch"), Zeile zum Abschnitt "eigen_archive" zur Datei tensorflow / workspace.bzl hinzu.

Das Ergebnis in der Datei tensorflow / workspace.bzl sollte folgendermaßen aussehen:

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

Getan.

Schritt 9: Konfigurieren Sie die Build-Parameter

Stellen Sie sicher, dass wir uns im Quellcode-Stammordner befinden:

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

Führen Sie den Konfigurator aus:

python ./configure.py

Zuerst wird nach dem Speicherort von Python gefragt. Drücken Sie die Eingabetaste, um den Standardwert beizubehalten:

...
Du hast bazel 0.17.2 installiert.
Bitte geben Sie den Speicherort von Python an. [Standard ist C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ python.exe]:

Anschließend werden Sie nach dem Pfad der Python-Bibliothek gefragt. Drücken Sie die Eingabetaste, um den Standardwert beizubehalten:

Rückverfolgung (letzter Anruf zuletzt):
  Datei "", Zeile 1, in 
AttributeError: Modul 'Site' hat kein Attribut 'getsitepackages'
Mögliche Python-Bibliothekspfade gefunden:
  C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages
Bitte geben Sie den gewünschten Python-Bibliothekspfad ein. Standard ist [C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages]

Dann wird nach der Unterstützung von nGraph gefragt. Wir brauchen es nicht. Drücken Sie "n":

Möchten Sie TensorFlow mit nGraph-Unterstützung erstellen? [J / N]: n
Für TensorFlow wird keine nGraph-Unterstützung aktiviert.

Dann fragt es nach CUDA-Unterstützung:

Möchten Sie TensorFlow mit CUDA-Unterstützung erstellen? [J / N]:

Antworten Sie mit "y", wenn Sie die GPU-Beschleunigung verwenden möchten. Andernfalls drücken Sie "n".

Bei Ja für CUDA Konfigurator werden zusätzliche Fragen gestellt:
Antwort 10.0 als CUDA SDK-Version:
Bitte geben Sie die CUDA SDK-Version an, die Sie verwenden möchten. [Leer lassen, um standardmäßig CUDA 9.0 zu verwenden]: 10.0
Drücken Sie die Eingabetaste, um den Standardspeicherort des CUDA-Toolkits zu verlassen:
Bitte geben Sie den Speicherort an, an dem das CUDA 10.0-Toolkit installiert ist. Weitere Informationen finden Sie in README.md. [Standard ist C: / Programme / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Antwort 7.3.1 als cuDNN-Version:
Bitte geben Sie die gewünschte cuDNN-Version an. [Leer lassen, um standardmäßig cuDNN 7.0 zu verwenden]: 7.3.1
Drücken Sie die Eingabetaste, um den Standardspeicherort der cuDNN-Bibliothek zu verlassen:
Bitte geben Sie den Speicherort an, an dem die cuDNN 7-Bibliothek installiert ist. Weitere Informationen finden Sie in README.md. [Standard ist C: / Programme / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Die nächste Frage betrifft die CUDA-Rechenfunktionen, mit denen gebaut werden kann. Sie finden die Rechenkapazität Ihres Geräts unter: https://developer.nvidia.com/cuda-gpus. Ich habe GTX 1070, deshalb antworte ich 6.1:
Geben Sie eine Liste der durch Kommas getrennten Cuda-Rechenfunktionen an, mit denen Sie erstellen möchten.
Sie finden die Rechenkapazität Ihres Geräts unter: https://developer.nvidia.com/cuda-gpus.
Bitte beachten Sie, dass jede zusätzliche Rechenfunktion die Erstellungszeit und die Binärgröße erheblich erhöht. [Standard ist: 3.5.7.0]: 6.1

Die nächste Frage ist, Optimierungsflags zu setzen. Ich habe eine Intel-CPU der 6. Generation, deshalb antworte ich / arch: AVX2:

Bitte geben Sie Optimierungsflags an, die während der Kompilierung verwendet werden sollen, wenn die Basel-Option "--config = opt" angegeben ist. [Standard ist / arch: AVX]: / arch: AVX2

Die letzte Frage handelt von Eigen. Antworten Sie mit "y". Es reduziert die Kompilierzeit drastisch.

Möchten Sie eigen strong inline für einige C ++ - Kompilierungen überschreiben, um die Kompilierungszeit zu verkürzen? [J / n]: J
Eigen stark inline überschrieben.

Konfiguration abgeschlossen. Lass uns bauen.

Schritt 10: Erstellen Sie TensorFlow aus Quellen

Stellen Sie sicher, dass wir uns im Quellcode-Stammordner befinden:

cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
Das Erstellen dauert lange. Ich empfehle dringend, Antivirensoftware einschließlich Windows Defender Antivirus-Echtzeitschutz zu deaktivieren.

Build ausführen:

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

Lehnen Sie sich zurück und entspannen Sie sich für einige Zeit.

Schritt 11: Erstellen Sie eine TensorFlow-Raddatei für Python 3.6

Führen Sie den Befehl aus, um eine Python Wheel-Datei zu erstellen:

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

Es schlägt fehl:

Es ist ein Problem bekannt. Sehen Sie sich den Ordner "bazel-bin \ tensorflow \ tools \ pip_package" an. Es enthält die Datei "simple_console_for_windows.zip" mit der Länge Null. Das ist das Problem. Bazel enthält ein 32-Bit-Zip-Dienstprogramm, das bei einer um 2 GB größeren Datei fehlschlägt. Siehe Links für Details und Problemumgehung:

  • 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

Es gibt Schritte, um das Problem zu beheben:

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

Öffnen Sie die Datei "simple_console_for_windows.zip-0.params" und entfernen Sie die Zeile mit "mnist.zip":

...
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
...
Es hilft mir. Falls es Ihnen nicht hilft, einfach andere Zeilen mit zip-Dateien zu entfernen (siehe Details hier). Der Zweck dieser Aktivität besteht darin, "simple_console_for_windows.zip" auf eine Länge von weniger als 2 GB zu beschränken.

Löschen Sie die leere Datei "simple_console_for_windows.zip".

Schauen Sie sich als nächstes Ihren Home-Ordner an. Sie müssen den Ordner mit dem Namen "_bazel_ " sehen. In meinem Fall ist es "_bazel_amsokol". Es enthält Ordner mit Build-Dateien. In meinem Fall ist es "lx6zoh4k". Zurück zur Shell eines Laufs (entsprechend Ihren Ordnernamen korrekt):

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

Erstellen Sie die Datei "simple_console_for_windows.zip" manuell:

external \ bazel_tools \ tools \ zip \ reißverschluss \ reißverschluss.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

Führen Sie den Befehl aus, um eine Python Wheel-Datei zu erstellen:

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

Es erstellt die Datei tensorflow-1.11.0-cp36-cp36m-win_amd64.whl im Ordner „.. \ out“.

Schritt 12: Installieren Sie die TensorFlow-Raddatei für Python 3.6 und überprüfen Sie das Ergebnis

Führen Sie den Befehl aus, um die Python Wheel-Datei zu installieren:

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

Verlasse das Tensorflow-Verzeichnis

cd ..

Um das Download-Skript hier zu überprüfen oder es durch Kopieren und Einfügen auszuführen:

Tensorflow als tf importieren
hello = tf.constant ('Hallo, TensorFlow!')
session = tf.Session ()
print (session.run (hallo))

Wenn das System Folgendes ausgibt, ist alles in Ordnung:

Hallo, TensorFlow!

Meine Ausgabe:

Sie haben TensorFlow jetzt erfolgreich auf einem Windows-Computer installiert.

Lassen Sie mich in den Kommentaren unten wissen, ob es für Sie funktioniert hat. Oder wenn du irgendwelche Fehler hast. Vielen Dank!