Ce guide explique comment compiler un package pip TensorFlow à partir de la source et l'installer sous Windows.
Configuration pour Windows
Installez les outils de compilation suivants pour configurer un environnement de développement Windows.
Installer Python et les dépendances de package TensorFlow
Installez une version 64 bits de Python 3.6.x pour Windows.
Sélectionnez la fonctionnalité facultative pip et ajoutez-la à votre variable d'environnement %PATH%
.
Installez les dépendances du package pip TensorFlow :
pip3 install six numpy wheel
pip3 install keras_applications==1.0.6 --no-deps
pip3 install keras_preprocessing==1.0.5 --no-deps
Les dépendances sont répertoriées dans le fichier setup.py
sous REQUIRED_PACKAGES
.
Installer Bazel
Installez Bazel, l'outil de compilation utilisé pour compiler TensorFlow. Pour la version de Bazel requise, consultez la page Configurations de compilation testées pour Windows. Configurez Bazel pour compiler C++.
Ajoutez l'emplacement de l'exécutable Bazel à votre variable d'environnement %PATH%
.
Installer MSYS2
Installez MSYS2 pour disposer des outils binaires nécessaires à la compilation de TensorFlow. Si MSYS2 est installé dans C:\msys64
, ajoutez C:\msys64\usr\bin
à votre variable d'environnement %PATH%
. Ensuite, à l'aide de l'outil cmd.exe
, exécutez la commande suivante :
pacman -S git patch unzip
Installer Visual C++ Build Tools 2019
Installez Visual C++ Build Tools 2019. Ce package est fourni avec Visual Studio 2019, mais il peut également être installé séparément :
- Accédez à la page de téléchargement de Visual Studio.
- Sélectionnez Redistributables et outils de génération.
- Téléchargez et installez les éléments suivants :
- Redistributable Microsoft Visual C++ 2019
- Microsoft Build Tools 2019
Installer la compatibilité avec les GPU (facultatif)
Consultez le guide sur la compatibilité avec les GPU sous Windows pour installer les pilotes et les logiciels supplémentaires requis pour exécuter TensorFlow sur un GPU.
Télécharger le code source de TensorFlow
Utilisez Git pour cloner le dépôt TensorFlow (git
est installé avec MSYS2) :
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
Le dépôt est défini par défaut sur la branche de développement master
. Vous pouvez également effectuer la compilation en vous positionnant sur une branche de publication :
git checkout branch_name # r1.9, r1.10, etc.
Configurer la compilation
Configurez la compilation pour votre système en exécutant la commande suivante à la racine de votre arborescence source TensorFlow :
python ./configure.py
Le script vous invite à indiquer l'emplacement des dépendances TensorFlow et à définir des options de configuration de compilation supplémentaires (indicateurs de compilation, par exemple). Voici un exemple d'exécution de python ./configure.py
(votre session peut se présenter différemment) :
Options de configuration
Pour inclure la compatibilité avec les GPU, spécifiez les versions de CUDA et de cuDNN. Si plusieurs versions de CUDA ou de cuDNN sont installées sur votre système, définissez-la explicitement au lieu d'utiliser la version par défaut. La commande ./configure.py
crée des liens symboliques vers les bibliothèques CUDA de votre système. Ainsi, si vous modifiez les chemins d'accès de votre bibliothèque CUDA, cette étape de configuration doit être exécutée à nouveau avant la compilation.
Créer le package pip
TensorFlow 2.x
Le dépôt tensorflow:master a été mis à jour pour la version 2.x.
Installez Bazel et utilisez bazel build
pour créer le package TensorFlow.
bazel build //tensorflow/tools/pip_package:build_pip_package
TensorFlow 1.x
Pour compiler la version 1.x de TensorFlow à partir de la branche master, utilisez bazel build --config=v1
pour créer un package TensorFlow 1.x.
bazel build --config=v1 //tensorflow/tools/pip_package:build_pip_package
Processeur uniquement
Utilisez bazel
pour préparer le compilateur de packages TensorFlow avec la compatibilité du processeur uniquement :
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
Compatibilité avec les GPU
Pour créer un package TensorFlow avec la compatibilité GPU, procédez comme suit :
bazel build --config=opt --config=cuda --define=no_tensorflow_py_deps=true //tensorflow/tools/pip_package:build_pip_package
Options de compilation Bazel
Utilisez cette option lors de la compilation pour éviter le problème suivant lors de la création du package : tensorflow:issue#22390
--define=no_tensorflow_py_deps=true
Consultez la documentation de référence sur la ligne de commande Bazel pour connaître les options de compilation.
Compiler TensorFlow à partir de la source peut utiliser beaucoup de mémoire RAM. Si votre système dispose d'une mémoire RAM limitée, vous pouvez restreindre l'utilisation qu'en fait Bazel en ajoutant l'argument : --local_ram_resources=2048
.
Si vous effectuer une compilation pour la compatibilité GPU, ajoutez l'argument --copt=-nvcc_options=disable-warnings
pour désactiver les messages d'avertissement nvcc.
Créer le package
La commande bazel build
crée un fichier exécutable intitulé build_pip_package
. Il s'agit du programme qui permet de créer le package pip
. Ainsi, la commande suivante crée un package .whl
dans le répertoire C:/tmp/tensorflow_pkg
:
bazel-bin\tensorflow\tools\pip_package\build_pip_package C:/tmp/tensorflow_pkg
Bien qu'il soit possible de créer des configurations CUDA et non-CUDA sous la même arborescence source, nous vous recommandons d'exécuter bazel clean
lorsque vous passez de l'une à l'autre.
Installer le package
Le nom du fichier .whl
généré dépend de la version de TensorFlow et de votre plate-forme. Utilisez la commande pip3 install
pour installer le package, comme dans l'exemple suivant :
pip3 install C:/tmp/tensorflow_pkg/tensorflow-version-cp36-cp36m-win_amd64.whl
Compiler à l'aide de l'interface système MSYS
TensorFlow peut également être compilé à l'aide de l'interface système MSYS. Pour ce faire, effectuez les modifications ci-dessous, puis suivez les instructions précédentes pour l'outil de ligne de commande natif de Windows (cmd.exe
).
Désactiver la conversion des chemin d'accès de MSYS
MSYS convertit automatiquement les arguments qui ressemblent à des chemins Unix à des chemins Windows, et cette opération n'est pas compatible avec bazel
. (Le libellé //path/to:bin
est considéré comme un chemin absolu Unix, car il commence par une barre oblique.)
export MSYS_NO_PATHCONV=1
export MSYS2_ARG_CONV_EXCL="*"
Définir la variable PATH
Ajoutez les répertoires d'installation de Bazel et de Python à votre variable d'environnement $PATH
. Si Bazel est installé dans C:\tools\bazel.exe
et Python dans C:\Python36\python.exe
, définissez la variable PATH
à l'aide des commandes suivantes :
# Use Unix-style with ':' as separatorexport PATH="/c/tools:$PATH"
export PATH="/c/Python36:$PATH"
Pour inclure la compatibilité avec les GPU, ajoutez les répertoires CUDA et cuDNN à votre variable $PATH
:
export PATH="/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.0/bin:$PATH"
export PATH="/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.0/extras/CUPTI/libx64:$PATH"
export PATH="/c/tools/cuda/bin:$PATH"
Configurations de compilation testées
Processeur
Version | Version Python | Compilateur | Outils de compilation |
---|---|---|---|
tensorflow-2.6.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 |
tensorflow-2.5.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 |
tensorflow-2.4.0 | 3.6-3.8 | MSVC 2019 | Bazel 3.1.0 |
tensorflow-2.3.0 | 3.5-3.8 | MSVC 2019 | Bazel 3.1.0 |
tensorflow-2.2.0 | 3.5-3.8 | MSVC 2019 | Bazel 2.2.0 |
tensorflow-2.1.0 | 3.5-3.7 | MSVC 2019 | Bazel 0.27.1-0.29.1 |
tensorflow-2.0.0 | 3.5-3.7 | MSVE 2017 | Bazel 0.26.1 |
tensorflow-1.15.0 | 3.5-3.7 | MSVE 2017 | Bazel 0.26.1 |
tensorflow-1.14.0 | 3.5-3.7 | MSVE 2017 | Bazel 0.24.1-0.25.2 |
tensorflow-1.13.0 | 3.5-3.7 | MSVC 2015 mise à jour 3 | Bazel 0.19.0-0.21.0 |
tensorflow-1.12.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Bazel 0.15.0 |
tensorflow-1.11.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Bazel 0.15.0 |
tensorflow-1.10.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 |
tensorflow-1.9.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 |
tensorflow-1.8.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 |
tensorflow-1.7.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 |
tensorflow-1.6.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 |
tensorflow-1.5.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 |
tensorflow-1.4.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 |
tensorflow-1.3.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 |
tensorflow-1.2.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 |
tensorflow-1.1.0 | 3.5 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 |
tensorflow-1.0.0 | 3.5 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 |
GPU
Version | Version Python | Compilateur | Outils de compilation | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow_gpu-2.6.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow_gpu-2.5.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow_gpu-2.4.0 | 3.6-3.8 | MSVC 2019 | Bazel 3.1.0 | 8.0 | 11.0 |
tensorflow_gpu-2.3.0 | 3.5-3.8 | MSVC 2019 | Bazel 3.1.0 | 7.6 | 10.1 |
tensorflow_gpu-2.2.0 | 3.5-3.8 | MSVC 2019 | Bazel 2.2.0 | 7.6 | 10.1 |
tensorflow_gpu-2.1.0 | 3.5-3.7 | MSVC 2019 | Bazel 0.27.1-0.29.1 | 7.6 | 10.1 |
tensorflow_gpu-2.0.0 | 3.5-3.7 | MSVE 2017 | Bazel 0.26.1 | 7.4 | 10 |
tensorflow_gpu-1.15.0 | 3.5-3.7 | MSVE 2017 | Bazel 0.26.1 | 7.4 | 10 |
tensorflow_gpu-1.14.0 | 3.5-3.7 | MSVE 2017 | Bazel 0.24.1-0.25.2 | 7.4 | 10 |
tensorflow_gpu-1.13.0 | 3.5-3.7 | MSVC 2015 mise à jour 3 | Bazel 0.19.0-0.21.0 | 7.4 | 10 |
tensorflow_gpu-1.12.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Bazel 0.15.0 | 7.2 | 9.0 |
tensorflow_gpu-1.11.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.10.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 | 7 | 9 |
tensorflow_gpu-1.9.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 | 7 | 9 |
tensorflow_gpu-1.8.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 | 7 | 9 |
tensorflow_gpu-1.7.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 | 7 | 9 |
tensorflow_gpu-1.6.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 | 7 | 9 |
tensorflow_gpu-1.5.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 | 7 | 9 |
tensorflow_gpu-1.4.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 | 6 | 8 |
tensorflow_gpu-1.3.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 | 6 | 8 |
tensorflow_gpu-1.2.0 | 3.5-3.6 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 | 5.1 | 8 |
tensorflow_gpu-1.1.0 | 3.5 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 3.5 | MSVC 2015 mise à jour 3 | Cmake 3.6.3 | 5.1 | 8 |