[Mise à jour 2] Comment compiler et installer le processeur graphique TensorFlow pour Windows à partir du code source à l’aide de bazel et Python 3.6

Ceci est une mise à jour de mon histoire précédente. Quoi de neuf ici:

  • TensorFlow v1.12
  • CUDA v10.0
  • CUDNN v7.4
  • bazel 0.19.0
  • Apache Ignite support

Il y a guide sur le site officiel. Ce n'est pas très complet mais très utile.

Sommaire

  1. Installer Git pour Windows
  2. Installer Bazel
  3. Installer MSYS2 x64 et les outils de ligne de commande
  4. Installer les outils de compilation Visual Studio 2017, y compris les outils de compilation Visual Studio 2015
  5. Installer Python 3.6 64 bits
  6. Installez NVIDIA CUDA 10.0 et cuDNN 7.4 (pour l’accélération GPU)
  7. Configurer l'environnement de construction
  8. Cloner le code source de TensorFlow v1.12 et appliquer le correctif obligatoire
  9. Configurer les paramètres de construction
  10. Construire TensorFlow à partir de sources
  11. Créer un fichier-roue TensorFlow pour Python 3.6
  12. Installer le fichier-roue TensorFlow pour Python 3.6 et vérifier le résultat

Étape 1: Installez Git pour Windows

Téléchargez et installez Git pour Windows. Je le prends ici. Assurez-vous que le chemin d'accès à git.exe est ajouté à la variable d'environnement% PATH%. J'installe Git au

C: \ Bin \ Git

dossier pour ce tutoriel.

Étape 2: Installez MSYS2 x64 et les outils de ligne de commande

Téléchargez et installez la distribution 64 bits ici. Bazel utilise grep, patch, décompresse d'autres ports des outils Unix pour créer des sources. Vous pouvez essayer de trouver des fichiers binaires autonomes pour chacun d’eux, mais je préfère utiliser le bundle MSYS2. Je l'installe au

C: \ Bin \ msys64

dossier pour ce tutoriel. Vous devez ajouter un dossier avec des outils à la variable d’environnement% PATH%. C'est "C: \ Bin \ msys64 \ usr \ bin" dans mon cas.

Démarrez le raccourci «MSYS2 MinGW 64 bits» à partir du menu Démarrer. Exécutez la commande suivante pour mettre à jour (redémarrez «MSYS2 MinGW 64 bits» s'il vous le demande):

pacman -syu

Puis lancez:

pacman -Su

Les outils d'installation sont nécessaires à la construction:

pacman -S patch unzip

Fermez le shell «MSYS2 MinGW 64 bits» par la commande «exit». Nous n’en avons plus besoin.

Étape 3: Installer les outils de compilation Visual Studio 2017, y compris les outils de génération Visual Studio 2015

Nous devons installer le «jeu d'outils pour le bureau VC ++ 2015.3 v14.00 (v140)» à partir de Visual Studio 2017 Construire des outils pour créer TensorFlow v1.11:

Étape 4: Installez Bazel

Téléchargez la dernière version de Bâle ici. Recherchez le fichier bazel- -windows-x86_64.exe. J'ai testé ce tutoriel avec bazel 0.19.0. Renommez le binaire bazel.exe et déplacez-le dans un répertoire de votre% PATH% afin de pouvoir exécuter Bazel en tapant bazel dans n’importe quel répertoire. Voir les détails de l'installation de Bazel pour Windows x64 en cas de problème.

Ajoutez la variable d'environnement global BAZEL_SH pour l'emplacement bash. Mon chemin est

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

Ajoutez la variable d'environnement global BAZEL_VC pour le jeu d'outils «VC ++ 2015.3 v14.00 (v140) pour le bureau»:

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

Étape 5: Installez Python 3.6 64 bits

TensorFlow ne supporte pas Python 3.7, vous devez donc installer la version 3.6.
Anaconda / Minicondais ne soutient pas officiellement la construction à partir de sources. C’est pourquoi j’utilise l’environnement virtuel Python pour la construction.

Python 3.6 est disponible au téléchargement ici. Installez-le et ajoutez l'emplacement à python.exe à la variable% PATH%.

Étape 6: Installez NVIDIA CUDA 10.0 et cuDNN 7.4 (pour l’accélération GPU)

Cette section est réelle si vous avez une carte graphique NVIDIA prenant en charge CUDA. Sinon, ignorez cette section.
Voir l'installation étape par étape de CUDA ici si vous avez besoin d'aide. Je copie-colle ce guide mais coupe certains détails.

Accédez à https://developer.nvidia.com/cuda-downloads et téléchargez le programme d'installation de CUDA 10.0 pour Windows [votre version]. Pour moi, la version est Windows 10.

Installez-le à l'emplacement par défaut avec les paramètres par défaut, mais décochez l'option d'intégration VisualStudio. Il mettra à jour votre pilote GPU si nécessaire et redémarrera.

Aller à courir (Win + R) tapez cmd

La commande suivante vérifiera la version de nvcc et s’assurera qu’elle est définie dans la variable d’environnement path.

nvcc --version

Ensuite, allez à https://developer.nvidia.com/cudnn (abonnement requis).

Après la connexion, téléchargez les éléments suivants:

cuDNN v7.4.1 Library for Windows [votre version] pour moi Windows 10. Allez au dossier téléchargé et extrayez le fichier zip.

Allez dans le dossier extrait et copiez tous les fichiers et le dossier du dossier cuda (par exemple, bin, include, lib) et collez-les dans «C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0».

La dernière étape consiste à ajouter «C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0 \ extras \ CUPTI \ libx64» à la variable d’environnement% PATH%.

Étape 7: Configurez l'environnement de construction

Démarrez le shell VC ++ 2015 pour x64 (raccourci «Invite de commande d'outils natifs VS2015 x64») à partir du menu Démarrer.

Ensuite, vous devez créer, activer et configurer l'environnement Python. Exécutez-vous dans les commandes du shell «Invite de commande d'outils natifs VS2015 x64» ci-dessous (corrigez les chemins en fonction de votre emplacement).

pip3 installe -U virtualenv
virtualenv --system-site-packages C: \ Users \ amsokol \ tensorflow-v1.12
C: \ Utilisateurs \ amsokol \ tensorflow-v1.12 \ Scripts \ activate.bat

Votre shell devrait ressembler à cela après l’application des commandes:

Installez les packages Python obligatoires:

pip3 installe six roue numpy
pip3 install keras_applications == 1.0.5 --no-deps
pip3 installe keras_preprocessing == 1.0.3 --no-deps

Exécutez «liste pip3» pour vous assurer que les packages obligatoires sont installés:

C'est tout pour le moment. Ne fermez pas la coquille.

Étape 8: cloner le code source de TensorFlow et appliquer le correctif obligatoire

Tout d’abord, vous devez choisir le dossier dans lequel cloner le code source TensorFlow. Dans mon cas, il s’agit de «C: \ Utilisateurs \ Amsokol \ Development \ tensorflow-build». Retour à shell et courir:

cd C: \ Utilisateurs \ Amsokol \ Development \ tensorflow-build

Cloner le code source:

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

Dernière commande de la version 1.12:

cd tensorflow
git checkout v1.12.0

Maintenant nous avons des sources.

Il existe un bogue dans une bibliothèque tierce propre. Nous devons le réparer avant de le construire.
  • Téléchargez le correctif ici et enregistrez-le sous le nom de fichier eigen_half.patch dans le dossier third_party.
  • Ajoutez patch_file = clean_dep (“// third_party: eigen_half.patch”), reliez la section à la section eigen_archive dans le fichier tensorflow / workspace.bzl.

Le résultat dans le fichier tensorflow / workspace.bzl devrait ressembler à ceci:

...
tf_http_archive (
    name = "eigen_archive",
    build_file = clean_dep ("// third_party: eigen.BUILD"),
    sha256 = "d956415d784fa4e42b6a2a45c32556d6aec9d0a3d8ef48baee2522ab762556a9",
    strip_prefix = "eigen-eigen-fd6845384b86",
    urls = [
"https://mirror.bazel.build/bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz",
"https://bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz",
    ],
    patch_file = clean_dep ("// third_party: eigen_half.patch"),
)
...

Terminé.

Étape 9: Configurez les paramètres de construction

Assurez-vous que nous sommes dans le dossier racine du code source:

cd C: \ Utilisateurs \ Amsokol \ Développement \ tensorflow-build \ tensorflow

Lancer le configurateur:

python ./configure.py

D'abord, il demande l'emplacement de Python. Appuyez sur Entrée pour laisser la valeur par défaut:

...
Vous avez installé bazel 0.19.0.
S'il vous plaît spécifier l'emplacement de python. [La valeur par défaut est C: \ Users \ amsokol \ tensorflow-v1.12 \ Scripts \ python.exe]:

Ensuite, il demande l'emplacement des chemins de la bibliothèque Python. Appuyez sur Entrée pour laisser la valeur par défaut:

Traceback (dernier appel le plus récent):
  Fichier "", ligne 1, dans 
AttributeError: le module 'site' n'a pas d'attribut 'getsitepackages'
Trouver les chemins de bibliothèque Python possibles:
  C: \ Utilisateurs \ amsokol \ tensorflow-v1.12 \ Lib \ site-packages
Veuillez saisir le chemin de la bibliothèque Python que vous souhaitez utiliser. La valeur par défaut est [C: \ Users \ amsokol \ tensorflow-v1.12 \ Lib \ site-packages]

Ensuite, il pose des questions sur le support Apache Ignite. Appuyez sur «y» si vous en avez besoin:

Souhaitez-vous construire TensorFlow avec le support Apache Ignite? [Y / n]: y

Ensuite, il pose des questions sur le support XLA JIT. Appuyez sur "n":

Souhaitez-vous construire TensorFlow avec le support XLA JIT? [y / N]: n
L'activation de la prise en charge de XLA JIT génère une erreur de compilation «La compilation C ++ de la règle‘ // tensorflow / compilateur / tf2xla: cpu_function_runtime ’a échoué». Je n'ai pas encore trouvé de solution.

Ensuite, il pose des questions sur le support ROCm. Nous n'en avons pas besoin si nous choisissons le support CUDA. Appuyez sur "n":

Souhaitez-vous construire TensorFlow avec le support ROCm? [y / N]: n

Ensuite, il pose des questions sur le soutien de CUDA:

Souhaitez-vous construire TensorFlow avec le support CUDA? [y / N]:

Répondez «y» si vous allez utiliser l'accélération GPU. Sinon, appuyez sur «n».

Si Oui, le configurateur CUDA pose des questions supplémentaires:
Répondez 10.0 en tant que version du SDK CUDA:
Veuillez spécifier la version du SDK CUDA que vous souhaitez utiliser. [Laissez vide pour utiliser CUDA 9.0 par défaut]: 10.0
Appuyez sur Entrée pour quitter l'emplacement par défaut de la boîte à outils CUDA:
Veuillez spécifier l'emplacement d'installation de la boîte à outils CUDA 10.0. Reportez-vous à README.md pour plus de détails. [La valeur par défaut est C: / Programmes / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Appuyez sur Entrée pour laisser la valeur par défaut à CUDNN 7:
Veuillez spécifier la version du nom de fichier que vous souhaitez utiliser. [Laisser vide pour définir par défaut le numéro de nom de domaine 7]:
Appuyez sur Entrée pour quitter l'emplacement par défaut de la bibliothèque cuDNN:
Veuillez spécifier l'emplacement d'installation de la bibliothèque cuDNN 7. Reportez-vous à README.md pour plus de détails. [La valeur par défaut est C: / Programmes / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
La prochaine question concerne les capacités de calcul CUDA à construire avec. Vous pouvez trouver la capacité de calcul de votre appareil à l'adresse: https://developer.nvidia.com/cuda-gpus. J’ai la GTX 1070, c’est pourquoi je réponds 6.1:
Veuillez spécifier une liste des fonctionnalités de calcul Cuda séparées par des virgules que vous souhaitez créer.
Vous pouvez trouver la capacité de calcul de votre appareil à l'adresse: https://developer.nvidia.com/cuda-gpus.
Veuillez noter que chaque capacité de calcul supplémentaire augmente considérablement votre temps de construction et votre taille binaire. [La valeur par défaut est: 3.5,7.0]: 6.1

La prochaine question est de définir des indicateurs d'optimisation. J'ai un processeur Intel de 6e génération qui explique pourquoi je réponds / archis: AVX2:

Veuillez spécifier les indicateurs d'optimisation à utiliser lors de la compilation lorsque l'option bazel "--config = opt" est spécifiée [La valeur par défaut est / arch: AVX]: / arch: AVX2

La dernière question concerne eigen. Répondez «y». Cela réduit considérablement le temps de compilation.

Souhaitez-vous remplacer eigen strong inline pour certaines compilations C ++ afin de réduire le temps de compilation? [Y / n]: y
Eigen fort inline surchargé.

Configuration terminée. Construisons.

Étape 10: Construire TensorFlow à partir de sources

Il y a un bogue dans bazel 0.19.0. Voir ici les détails. Pour résoudre ce problème, nous devons ajouter la chaîne «importer /tensorflow/tools/bazel.rc» sur la première ligne de (masquer le fichier) « /tensorflow/.bazelrc». Dans mon cas, le fichier «C: /Users/amsokol/Development/tensorflow-build/tensorflow/.bazelrc» est:
importer C: /Users/amsokol/Development/tensorflow-build/tensorflow/tools/bazel.rc
importer C: /Users/amsokol/Development/tensorflow-build/tensorflow/.tf_configure.bazelrc

Assurez-vous que nous sommes dans le dossier racine du code source:

cd C: \ Utilisateurs \ Amsokol \ Développement \ tensorflow-build \ tensorflow
La construction prend du temps. Je recommande fortement de désactiver les logiciels antivirus, y compris la protection en temps réel de Windows Defender Antivirus.

Exécuter la construction:

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

Asseyez-vous et détendez-vous pendant un certain temps.

Étape 11: Créer un fichier-roue TensorFlow pour Python 3.6

Exécutez la commande pour créer le fichier de roue Python:

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

Il crée le fichier tensorflow-1.12.0-cp36-cp36m-win_amd64.whl dans le dossier «.. \ out».

Étape 12: Installez le fichier de roue TensorFlow pour Python 3.6 et vérifiez le résultat.

Exécutez la commande pour installer le fichier de roue Python:

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

Quittez le répertoire «tensorflow» (des erreurs se produisent parfois lorsque j'exécute des scripts Python dans le dossier du code source de Tensoflow - je ne connais pas la raison):

cd ..

Pour faire vérifier le script de téléchargement ici ou copier-coller et exécuter:

importer tensorflow en tant que tf
hello = tf.constant ('Bonjour, TensorFlow!')
session = tf.Session ()
print (session.run (hello))

Si le système génère les éléments suivants, tout va bien:

Bonjour TensorFlow!

Ma sortie:

Vous pouvez exécuter ce script Python pour vous assurer que la version de TensorFlow installée est également:

# TensorFlow et tf.keras
importer tensorflow en tant que tf
à partir de keras import tensorflow
print (tf .__ version__)
print (keras .__ version__)

Vous devez obtenir le résultat suivant:

1.12.0
2.1.6-tf

Vous avez maintenant installé avec succès TensorFlow 1.12 sur une machine Windows.

Faites-moi savoir dans les commentaires ci-dessous si cela a fonctionné pour vous. Ou si vous avez des erreurs. Merci!