[Update 1] Hoe TensorFlow GPU / CPU voor Windows te bouwen en installeren vanaf broncode met behulp van bazel en Python 3.6

Dit is een update voor mijn vorige verhaal. Wat is hier nieuw:

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

Er is een gids op de officiële site. Het is niet erg uitgebreid maar soms handig.

Overzicht

  1. Installeer Git voor Windows
  2. Installeer Bazel
  3. Installeer MSYS2 x64 en opdrachtregelprogramma's
  4. Installeer Visual Studio 2017 Build Tools inclusief Visual Studio 2015 Build Tools
  5. Installeer Python 3.6 64-bits
  6. NVIDIA CUDA 10.0 en cuDNN 7.3 installeren (voor GPU-versnelling)
  7. Configureer de bouwomgeving
  8. Kloon TensorFlow v1.11 broncode en pas verplichte patch toe
  9. Configureer bouwparameters
  10. Bouw TensorFlow van bronnen
  11. Maak een TensorFlow-wielbestand voor Python 3.6
  12. Installeer het TensorFlow-wielbestand voor Python 3.6 en controleer het resultaat

Stap 1: Installeer Git voor Windows

Download en installeer Git voor Windows. Ik neem het hier. Zorg ervoor dat het pad naar git.exe is toegevoegd aan de omgevingsvariabele% PATH%. Ik installeer Git op de

C: \ Bin \ Git

map voor deze zelfstudie.

Stap 2: Installeer MSYS2 x64 en opdrachtregelprogramma's

Download en installeer 64-bits distributie hier. Bazel gebruikt grep, patch, unzipand andere poorten van Unix-tools om bronnen te bouwen. Je kunt proberen voor elk van hen zelfstandige binaries te vinden, maar ik gebruik liever de MSYS2-bundel. Ik installeer het op de

C: \ Bin \ msys64

map voor deze zelfstudie. U moet een map met hulpmiddelen toevoegen aan de omgevingsvariabele% PATH%. In mijn geval is het "C: \ Bin \ msys64 \ usr \ bin".

Start de "MSYS2 MinGW 64-bit" snelkoppeling vanuit het Start Menu. Voer de volgende opdracht uit om bij te werken (start “MSYS2 MinGW 64-bit” opnieuw op als daarom wordt gevraagd):

pacman -Syu

Voer vervolgens uit:

pacman -Su

Installatietools zijn nodig voor het bouwen:

pacman -S patch unzip

Sluit de "MSYS2 MinGW 64-bit" shell door de opdracht "exit". We hebben het niet meer nodig.

Stap 3: Installeer Visual Studio 2017 Build Tools inclusief Visual Studio 2015 Build Tools

We moeten "VC ++ 2015.3 v14.00 (v140) toolset voor desktop" van Visual Studio 2017 Build Tools installeren om TensorFlow v1.11 te bouwen:

Stap 4: Installeer Bazel

Download hier de nieuwste Basel. Zoek naar bazel- -windows-x86_64.exe-bestand. Ik heb deze tutorial getest met Bazel 0.17.2. Wijzig de naam van het binaire bestand in bazel.exe en verplaats het naar een map op uw% PATH%, zodat u Bazel kunt uitvoeren door bazel in een willekeurige map te typen. Bekijk details van de Bazel-installatie voor Windows x64 in geval van problemen.

BAZEL_SH globale omgevingsvariabele voor bash-locatie toevoegen. Mijn pad is

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

BAZEL_VC globale omgevingsvariabele toevoegen voor 'VC ++ 2015.3 v14.00 (v140) toolset voor desktop' locatie van gereedschapsketen:

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

Stap 5: Installeer Python 3.6 64-bits

TensorFlow ondersteunt Python 3.7 niet, dus u moet de 3.6-versie installeren.
Het lijkt erop dat TensorFlow v1.11 Anaconda / Miniconda niet meer ondersteunt voor build - ik krijg een vreemde foutmelding. Daarom gebruik ik de virtuele Python-omgeving om te bouwen.

Python 3.6 kan hier worden gedownload. Installeer het en voeg locatie toe aan python.exe aan de% PATH% variabele.

Stap 6: Installeer NVIDIA CUDA 10.0 en cuDNN 7.3 (voor GPU-versnelling)

Deze sectie is actueel als u een NVIDIA grafische kaart hebt die CUDA ondersteunt. Sla anders dit gedeelte over.
Zie stap voor stap installatie van CUDA hier als u hulp nodig hebt. Ik kopieer en plak die gids maar knip wat details.

Ga naar https://developer.nvidia.com/cuda-downloads en download CUDA 10.0 Installer voor Windows [uw versie]. Voor mij is versie Windows 10.

Installeer het op de standaardlocatie met standaardinstellingen, maar schakel de integratieoptie VisualStudio uit. Het zal indien nodig uw GPU-stuurprogramma bijwerken en opnieuw opstarten.

Ga naar run (Win + R) type cmd

De volgende opdracht controleert op de nvcc-versie en zorgt ervoor dat deze is ingesteld in de padomgevingsvariabele.

nvcc --versie

Ga naar https://developer.nvidia.com/cudnn (lidmaatschap vereist).

Na inloggen downloadt u het volgende:

cuDNN v7.3.1 Bibliotheek voor Windows [uw versie] voor mij Windows 10. Ga naar de gedownloade map en pak het zipbestand uit.

Ga naar de uitgepakte map en kopieer alle bestanden en mappen uit de cuda-map (bijv. Bin, include, lib) en plak deze in "C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0".

De laatste stap hier is om “C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0 \ extras \ CUPTI \ libx64” toe te voegen aan omgevingsvariabele% PATH%.

Stap 7: Configureer de buildomgeving

Start VC ++ 2015 shell voor x64 ("VS2015 x64 Native Tools Command Prompt" snelkoppeling) vanuit het Start Menu.

Vervolgens moet u een Python-omgeving maken, activeren en configureren. Voer de shellopdrachten 'VS2015 x64 Native Tools Command Prompt' hieronder uit (corrigeer paden volgens uw locaties).

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

Je shell moet er zo uitzien nadat de opdrachten zijn toegepast:

Installeer verplichte Python-pakketten:

pip3 installeert zes numpy wiel
pip3 install keras_applications == 1.0.5 --no-deps
pip3 install keras_preprocessing == 1.0.3 --no-deps

Voer "pip3 list" uit om te zorgen dat de verplichte pakketten zijn geïnstalleerd:

Dat is het voor nu. Sluit de schaal niet.

Stap 8: Clone TensorFlow-broncode en pas een verplichte patch toe

Allereerst moet u de map kiezen waar u de TensorFlow-broncode wilt klonen. Het is in mijn geval "C: \ Users \ amsokol \ Development \ tensorflow-build". Terug naar shell en ren:

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

Broncode kloon:

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

Laatste versie van 1.11-versie:

cd tensorflow
git afrekenen v1.11.0

Nu hebben we bronnen.

Er is een BUG in de eigen bibliotheek van derden. We moeten het oplossen voordat we het bouwen.
  • Download patch hier en sla met bestandsnaam eigen_half.patch op naar de map third_party
  • Voeg patch_file = clean_dep (“// third_party: eigen_half.patch”) toe, regel naar eigen_archive sectie naar tensorflow / workspace.bzl bestand.

Het resultaat in het bestand tensorflow / workspace.bzl moet er als volgt uitzien:

...
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"),
)
...

Gedaan.

Stap 9: Configureer buildparameters

Zorg dat we ons in de bronmap van de broncode bevinden:

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

Configurator uitvoeren:

python ./configure.py

Eerst wordt de locatie van Python gevraagd. Druk op Enter om de standaardwaarde te verlaten:

...
U hebt bazel 0.17.2 geïnstalleerd.
Geef de locatie van python op. [Standaard is C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ python.exe]:

Vervolgens wordt de locatie van Python-bibliotheekpaden gevraagd. Druk op Enter om de standaardwaarde te verlaten:

Hertraceren (meest recente oproep als laatste)
  Bestand "", regel 1, in 
AttributeError: module 'site' heeft geen attribuut 'getsitepackages'
Mogelijke Python-bibliotheekpaden gevonden:
  C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ website-pakketten
Voer het gewenste Python-bibliotheekpad in om te gebruiken. Standaard is [C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages]

Vervolgens vraagt ​​het naar ondersteuning voor nGraph. We hebben het niet nodig. Druk op "n":

Wilt u TensorFlow bouwen met nGraph-ondersteuning? [j / N]: n
Er is geen nGraph-ondersteuning ingeschakeld voor TensorFlow.

Vervolgens vraagt ​​het naar CUDA-ondersteuning:

Wilt u TensorFlow bouwen met CUDA-ondersteuning? [Y / N]:

Antwoord "y" als u GPU-versnelling gaat gebruiken. Druk anders op "n".

In het geval dat Ja voor CUDA-configurator aanvullende vragen stelt:
Antwoord 10.0 als CUDA SDK-versie:
Geef de CUDA SDK-versie op die u wilt gebruiken. [Standaard leeg laten voor CUDA 9.0]: 10.0
Druk op Enter om de standaardlocatie van de CUDA-toolkit te verlaten:
Geef de locatie op waar de CUDA 10.0-toolkit is geïnstalleerd. Raadpleeg README.md voor meer informatie. [Standaard is C: / Program Files / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Antwoord 7.3.1 als cuDNN-versie:
Geef de cuDNN-versie op die u wilt gebruiken. [Standaard leeg laten voor cuDNN 7.0]: 7.3.1
Druk op Enter om de standaard cuDNN-bibliotheeklocatie te verlaten:
Geef de locatie op waar de cuDNN 7-bibliotheek is geïnstalleerd. Raadpleeg README.md voor meer informatie. [Standaard is C: / Program Files / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
De volgende vraag gaat over de rekenmogelijkheden van CUDA om mee te bouwen. U kunt de berekeningsmogelijkheden van uw apparaat vinden op: https://developer.nvidia.com/cuda-gpus. Ik heb GTX 1070, daarom beantwoord ik 6.1:
Geef een lijst op met door komma's gescheiden Cuda-rekenmogelijkheden waarmee u wilt bouwen.
U kunt de berekeningsmogelijkheden van uw apparaat vinden op: https://developer.nvidia.com/cuda-gpus.
Houd er rekening mee dat elke extra rekencapaciteit uw bouwtijd en binaire grootte aanzienlijk verhoogt. [Standaard is: 3.5,7.0]: 6.1

De volgende vraag is om optimalisatievlaggen in te stellen. Ik heb een Intel CPU van de 6e generatie, daarom antwoord / arch: AVX2:

Geef optimalisatievlaggen op om te gebruiken tijdens de compilatie wanneer de bazeloptie "--config = opt" is opgegeven [Standaard is / arch: AVX]: / arch: AVX2

Laatste vraag gaat over eigen. Antwoord "y". Het vermindert de compilatietijd aanzienlijk.

Wilt u de eigen sterke inline voor sommige C ++ -compilatie overschrijven om de compilatietijd te verkorten? [Y / n]: y
Eigen sterke inline opgeheven.

Configuratie voltooid. Laten we bouwen.

Stap 10: Bouw TensorFlow van bronnen

Zorg dat we ons in de bronmap van de broncode bevinden:

cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
Bouwen duurt lang. Ik raad ten zeerste aan om antivirussoftware, inclusief Windows Defender Antivirus, realtime bescherming uit te schakelen.

Run build:

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

Leun achterover en ontspan je een tijdje.

Stap 11: Maak een TensorFlow-wielbestand voor Python 3.6

Voer opdracht uit om een ​​Python-wielbestand te maken:

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

Het faalt:

Er is een bekend probleem. Bekijk de map "bazel-bin \ tensorflow \ tools \ pip_package". Het bevat het bestand "simple_console_for_windows.zip" van nul lengte. Dit is het probleem. Bazel bevat een 32-bits zip-hulpprogramma dat mislukt voor een bestand van 2 GB groter. Zie links voor details en oplossingen:

  • 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

Er zijn stappen om het probleem op te lossen:

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

Open het bestand "simple_console_for_windows.zip-0.params" en verwijder de regel "mnist.zip":

...
runfiles / org_tensorflow / tensorflow / contrib / enthousiast / python / examples / gan / mnist.zip = Bazel-out / x64_windows-opt / bin / tensorflow / contrib / enthousiast / python / examples / gan / mnist.zip
...
Het helpt me. In het geval dat het u niet helpt, verwijdert u gewoon andere regels met zip-bestanden (zie details hier). Het doel van deze activiteit is om de lengte van "simple_console_for_windows.zip" minder dan 2 GB te maken.

Verwijder het lege "simple_console_for_windows.zip" -bestand.

Kijk vervolgens in je thuismap. U moet de map zien met de naam "_bazel_ ". Het is in mijn geval "_bazel_amsokol". Het bevat een map met buildbestanden. Het is in mijn geval "lx6zoh4k". Terug naar shell een run (corrigeer volgens uw mapnamen):

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

Maak het bestand "simple_console_for_windows.zip" handmatig:

external \ bazel_tools \ tools \ zip \ ripper \ 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

Voer opdracht uit om een ​​Python-wielbestand te maken:

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

Het maakt het bestand tensorflow-1.11.0-cp36-cp36m-win_amd64.whl in de map ".. \ out".

Stap 12: Installeer het TensorFlow-wielbestand voor Python 3.6 en controleer het resultaat

Voer de opdracht uit om het Python-wielbestand te installeren:

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

Verlaat de map "tensorflow" (fouten treden soms op wanneer ik Python-scripts in de broncodemap van Tensoflow voer - ik weet de reden niet):

cd ..

Om het downloadscript hier te controleren of te kopiëren en plakken en uit te voeren:

tensorflow importeren als tf
hallo = tf.constant ('Hallo, TensorFlow!')
sessie = tf.Sessie ()
afdrukken (session.run (hallo))

Als het systeem het volgende uitvoert, is alles in orde:

Hallo, TensorFlow!

Mijn output:

U hebt TensorFlow nu met succes op een Windows-computer geïnstalleerd.

Laat het me in de reacties hieronder weten als het voor u heeft gewerkt. Of als je fouten hebt. Bedankt!