[Aggiornamento 1] Come costruire e installare GPU / CPU TensorFlow per Windows dal codice sorgente usando bazel e Python 3.6

Questo è un aggiornamento per la mia storia precedente. Cosa c'è di nuovo qui:
- TensorFlow v1.11
- CUDA v10.0
- cuDNN v7.3
C'è una guida sul sito ufficiale. Non è molto completo ma utile a volte.
Sommario
- Installa Git per Windows
- Installa Bazel
- Installa MSYS2 x64 e strumenti da riga di comando
- Installa Visual Studio 2017 Build Tools, inclusi Visual Studio 2015 Build Tools
- Installa Python 3.6 a 64 bit
- Installa NVIDIA CUDA 10.0 e cuDNN 7.3 (per accelerazione GPU)
- Configura l'ambiente di compilazione
- Clonare il codice sorgente TensorFlow v1.11 e applicare la patch obbligatoria
- Configura i parametri di compilazione
- Costruisci TensorFlow da fonti
- Crea il file della ruota TensorFlow per Python 3.6
- Installa il file della ruota TensorFlow per Python 3.6 e controlla il risultato
Passaggio 1: installa Git per Windows
Scarica e installa Git per Windows. Lo prendo qui. Assicurarsi che il percorso di git.exe sia aggiunto alla variabile di ambiente% PATH%. Installo Git su
C: \ Bin \ Git
cartella per questo tutorial.
Passaggio 2: installare MSYS2 x64 e gli strumenti da riga di comando
Scarica e installa la distribuzione a 64 bit qui. Bazel usa grep, patch, decomprime altre porte degli strumenti Unix per costruire fonti. Puoi provare a trovare binari autonomi per ognuno di essi, ma preferisco usare il bundle MSYS2. Lo installo su
C: \ msys64 Bin \
cartella per questo tutorial. Devi aggiungere una cartella con gli strumenti alla variabile d'ambiente% PATH%. È "C: \ Bin \ msys64 \ usr \ bin" nel mio caso.
Avviare il collegamento "MSYS2 MinGW 64-bit" dal menu Start. Eseguire il comando seguente per aggiornare (riavviare "MSYS2 MinGW 64-bit" se richiesto):
pacman -Syu
Quindi eseguire:
pacman -Su
Gli strumenti di installazione sono necessari per la compilazione:
decomprimere patch pacman -S
Chiudere la shell "MSYS2 MinGW 64-bit" con il comando "exit". Non ne abbiamo più bisogno.
Passaggio 3: installare gli strumenti di compilazione di Visual Studio 2017, inclusi gli strumenti di compilazione di Visual Studio 2015
Dobbiamo installare "VC ++ 2015.3 v14.00 (v140) set di strumenti per desktop" da Visual Studio 2017 Build Tools per creare TensorFlow v1.11:

Passaggio 4: installare Bazel
Scarica l'ultima Basilea qui. Cerca il file bazel-
Aggiungi la variabile d'ambiente globale BAZEL_SH per la posizione bash. Il mio percorso è
C: \ Bin \ msys64 \ usr \ bin \ bash.exe
Aggiungi la variabile d'ambiente globale BAZEL_VC per il set di strumenti "VC ++ 2015.3 v14.00 (v140) per desktop":
C: \ Programmi (x86) \ Microsoft Visual Studio 14.0 \ VC
Passaggio 5: installare Python 3.6 a 64 bit
TensorFlow non supporta Python 3.7, quindi devi installare la versione 3.6.
Sembra che TensorFlow v1.11 non supporti più Anaconda / Miniconda per la compilazione - Ottengo uno strano errore. Ecco perché uso l'ambiente virtuale Python per la compilazione.
Python 3.6 è disponibile per il download qui. Installalo e aggiungi il percorso a python.exe alla variabile% PATH%.
Passaggio 6: installare NVIDIA CUDA 10.0 e cuDNN 7.3 (per accelerazione GPU)
Questa sezione è effettiva se si dispone di una scheda grafica NVIDIA che supporta CUDA. Altrimenti salta questa sezione.
Vedere l'installazione dettagliata di CUDA qui se hai bisogno di aiuto. Copia-incolla quella guida ma taglio alcuni dettagli.
Vai su https://developer.nvidia.com/cuda-downloads e scarica CUDA 10.0 Installer per Windows [la tua versione]. Per me, la versione è Windows 10.
Installalo nella posizione predefinita con le impostazioni predefinite ma deseleziona l'opzione di integrazione di VisualStudio. Se necessario, aggiornerà il driver della GPU e si riavvierà.
Vai a eseguire (Win + R) digitare cmd
Il seguente comando verificherà la versione di nvcc e assicurerà che sia impostato nella variabile di ambiente del percorso.
nvcc --version
Avanti vai a https://developer.nvidia.com/cudnn (iscrizione obbligatoria).
Dopo l'accesso scarica quanto segue:
cuDNN v7.3.1 Library per Windows [la tua versione] per me Windows 10. Vai alla cartella scaricata ed estrai il file zip.
Vai all'interno della cartella estratta e copia tutti i file e le cartelle dalla cartella cuda (es. Bin, include, lib) e incolla in "C: \ Programmi \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0".
L'ultimo passo qui è aggiungere "C: \ Programmi \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0 \ extras \ CUPTI \ libx64" alla variabile di ambiente% PATH%.
Passaggio 7: configurare l'ambiente di compilazione
Avviare la shell VC ++ 2015 per x64 (collegamento "Prompt dei comandi degli strumenti nativi di VS2015 x64") dal menu Start.
Successivamente devi creare, attivare e configurare l'ambiente Python. Esegui i comandi della shell "VS2015 x64 Native Tools Prompt" di seguito (correggi i percorsi in base alla tua posizione).
installazione pip3 -U virtualenv
virtualenv --system-site-pacchetti C: \ Users \ amsokol \ tensorflow-v1.11
C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ activate.bat
La tua shell dovrebbe apparire così dopo i comandi applicati:

Installa i pacchetti Python obbligatori:
pip3 installa sei ruote intorpidite
pip3 install keras_applications == 1.0.5 --no-deps
pip3 install keras_preprocessing == 1.0.3 --no-deps
Eseguire "elenco pip3" per assicurarsi che siano installati i pacchetti obbligatori:

È tutto per ora. Non chiudere il guscio.
Passaggio 8: clonare il codice sorgente TensorFlow e applicare la patch obbligatoria
Prima di tutto devi scegliere la cartella in cui clonare il codice sorgente TensorFlow. Nel mio caso è "C: \ Users \ amsokol \ Development \ tensorflow-build". Torna alla shell ed esegui:
cd C: \ Users \ amsokol \ Development \ tensorflow-build
Codice sorgente clone:
git clone https://github.com/tensorflow/tensorflow
Acquista l'ultima versione 1.11:
cd tensorflow
git checkout v1.11.0
Ora abbiamo fonti.
C'è un ERRORE nella libreria di terze parti di Eigen. Dobbiamo risolverlo prima di compilare.
- Scarica qui la patch e salva con il nome del file eigen_half.patch nella cartella third_party
- Aggiungi patch_file = clean_dep (“// third_party: eigen_half.patch”), riga alla sezione eigen_archive al file tensorflow / workspace.bzl.
Il risultato nel file tensorflow / workspace.bzl dovrebbe essere così:
... 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"), ) ...
Fatto.
Passaggio 9: configura i parametri di compilazione
Assicurati di trovarci nella cartella principale del codice sorgente:
cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
Esegui configuratore:
python ./configure.py
Innanzitutto chiede la posizione di Python. Premi Invio per lasciare il valore predefinito:
... Hai installato bazel 0.17.2.
Si prega di specificare la posizione di Python. [L'impostazione predefinita è C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ python.exe]:
Quindi chiede la posizione dei percorsi della libreria Python. Premi Invio per lasciare il valore predefinito:
Traceback (ultima chiamata più recente): File "", riga 1, in AttributeError: il modulo 'site' non ha alcun attributo 'getsitepackages' Trovati possibili percorsi della libreria Python: C: \ Users \ \ amsokol tensorflow-v1.11 \ lib \ site-packages Inserisci il percorso della libreria Python desiderato da utilizzare. L'impostazione predefinita è [C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-pacchetti]
Quindi chiede il supporto di nGraph. Non ne abbiamo bisogno. Premere "n":
Desideri costruire TensorFlow con il supporto di nGraph? [y / N]: n Nessun supporto nGraph sarà abilitato per TensorFlow.
Quindi chiede informazioni sul supporto CUDA:
Desideri creare TensorFlow con il supporto CUDA? [Y / N]:
Rispondi "y" se intendi utilizzare l'accelerazione GPU. Altrimenti premere "n".
Nel caso in cui Sì per il configuratore CUDA pone ulteriori domande:
Risposta 10.0 come versione CUDA SDK:
Specifica la versione dell'SDK CUDA che desideri utilizzare. [Lascia vuoto per impostazione predefinita a CUDA 9.0]: 10.0
Premi Invio per lasciare la posizione predefinita del toolkit CUDA:
Specificare la posizione in cui è installato CUDA 10.0 toolkit. Fare riferimento a README.md per maggiori dettagli. [L'impostazione predefinita è C: / Programmi / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Con risposta 7.3.1 come versione cuDNN:
Specificare la versione cuDNN che si desidera utilizzare. [Lascia vuoto per impostazione predefinita su cuDNN 7.0]: 7.3.1
Premere Invio per lasciare la posizione predefinita della libreria cuDNN:
Specificare la posizione in cui è installata la libreria cuDNN 7. Fare riferimento a README.md per maggiori dettagli. [L'impostazione predefinita è C: / Programmi / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
La prossima domanda riguarda le capacità di calcolo di CUDA con cui costruire. Puoi trovare la capacità di calcolo del tuo dispositivo su: https://developer.nvidia.com/cuda-gpus. Ho GTX 1070 per questo rispondo 6.1:
Specificare un elenco di funzionalità di calcolo Cuda separate da virgola con cui si desidera creare. Puoi trovare la capacità di calcolo del tuo dispositivo su: https://developer.nvidia.com/cuda-gpus. Si noti che ogni ulteriore capacità di calcolo aumenta significativamente il tempo di costruzione e la dimensione binaria. [L'impostazione predefinita è: 3.5,7.0]: 6.1
La prossima domanda è impostare i flag di ottimizzazione. Ho una CPU Intel di sesta generazione per questo rispondo / arco: AVX2:
Specificare i flag di ottimizzazione da utilizzare durante la compilazione quando viene specificata l'opzione bazel "--config = opt" [L'impostazione predefinita è / arch: AVX]: / arch: AVX2
L'ultima domanda riguarda eigen. Rispondi "y". Riduce drasticamente i tempi di compilazione.
Vorresti sovrascrivere eigen strong inline per alcune compilation C ++ per ridurre i tempi di compilazione? [S / n]: y Eigen strong inline override.
Configurazione completata. Costruiamo.
Passaggio 10: costruire TensorFlow da fonti
Assicurati di trovarci nella cartella principale del codice sorgente:
cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
La costruzione richiede molto tempo. Consiglio vivamente di disattivare il software antivirus inclusa la protezione in tempo reale di Windows Defender Antivirus.
Esegui build:
bazel build --config = opt // tensorflow / tools / pip_package: build_pip_package
Siediti e rilassati per qualche tempo.
Passaggio 11: creare il file della ruota TensorFlow per Python 3.6
Esegui il comando per creare il file della ruota Python:
mkdir .. \ out
bazel-bin \ tensorflow \ tools \ pip_package \ build_pip_package .. \ out
Non riesce:

C'è un problema noto. Guarda la cartella "bazel-bin \ tensorflow \ tools \ pip_package". Contiene file "simple_console_for_windows.zip" di lunghezza zero. Questo è il problema. Bazel contiene utility zip a 32 bit che non riesce per file di dimensioni superiori a 2 GB. Vedi i link per dettagli e soluzioni alternative:
- 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
Ci sono passaggi per risolvere il problema:
cd. \ bazel-bin \ tensorflow \ tools \ pip_package
Aprire il file "simple_console_for_windows.zip-0.params" e rimuovere la riga contiene "mnist.zip":
...
runfiles / org_tensorflow / tensorflow / contrib / ansioso / python / examples / gan / mnist.zip = Bazel-out / x64_windows-opt / bin / tensorflow / contrib / ansioso / python / examples / gan / mnist.zip
...
Mi aiuta. Nel caso in cui non ti aiuti a rimuovere altre righe con i file zip (vedi i dettagli qui). Lo scopo di questa attività è di ridurre la lunghezza di "simple_console_for_windows.zip" a meno di 2 GB.
Elimina il file "simple_console_for_windows.zip" vuoto.
Quindi guarda la tua cartella home. Devi vedere la cartella con un nome come "_bazel_
cd C: \ Users \ amsokol \ _bazel_amsokol \ lx6zoh4k \ execroot \ org_tensorflow
Crea manualmente il file "simple_console_for_windows.zip":
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
Esegui il comando per creare il file della ruota Python:
cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
bazel-bin \ tensorflow \ tools \ pip_package \ build_pip_package .. \ out
Crea il file tensorflow-1.11.0-cp36-cp36m-win_amd64.whl nella cartella “.. \ out”.
Passaggio 12: installare il file della ruota TensorFlow per Python 3.6 e verificare il risultato
Esegui il comando per installare il file della ruota Python:
pip3 install .. \ out \ tensorflow-1.11.0-cp36-cp36m-win_amd64.whl
Lasciare la directory "tensorflow" (a volte si verificano errori quando eseguo gli script Python nella cartella del codice sorgente di Tensoflow - non conosco il motivo):
cd ..
Per controllare lo script di download qui o copia-incolla ed esegui:
import tensorflow come tf hello = tf.constant ('Hello, TensorFlow!') session = tf.Session () stampa (session.run (ciao))
Se il sistema genera quanto segue, allora tutto va bene:
Ciao, TensorFlow!
La mia uscita:

TensorFlow è ora installato correttamente sul computer Windows.
Fammi sapere nei commenti qui sotto se ha funzionato per te. O se hai qualche errore. Grazie!