Créez un package pip TensorFlow à partir de la source et installez-le sur Ubuntu Linux et macOS. Bien que les instructions puissent fonctionner pour d'autres systèmes, elles ne sont testées et prises en charge que pour Ubuntu et macOS.
Configuration pour Linux et macOS
Installez les outils de génération suivants pour configurer votre environnement de développement.
Installer Python et les dépendances du package TensorFlow
Ubuntu
sudo apt install python3-dev python3-pip
macOS
Nécessite Xcode 9.2 ou version ultérieure.
Installez à l'aide du gestionnaire de packages Homebrew :
brew install python
Installez les dépendances du package TensorFlow pip (si vous utilisez un environnement virtuel, omettez l'argument --user
) :
pip install -U --user pip numpy wheel packaging requests opt_einsum
pip install -U --user keras_preprocessing --no-deps
Installer Bazel
Pour compiler TensorFlow, vous devrez installer Bazel. Bazelisk est un moyen simple d'installer Bazel et télécharge automatiquement la version correcte de Bazel pour TensorFlow. Pour faciliter l'utilisation, ajoutez Bazelisk en tant qu'exécutable bazel
dans votre PATH
.
Si Bazelisk n'est pas disponible, vous pouvez installer Bazel manuellement. Assurez-vous d'installer la bonne version de Bazel à partir du fichier .bazelversion de TensorFlow.
Installer le support GPU (facultatif, Linux uniquement)
Il n'y a pas de support GPU pour macOS.
Lisez le guide de prise en charge du GPU 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 clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
Le référentiel est par défaut la branche de développement master
. Vous pouvez également consulter une branche de version pour créer :
git checkout branch_name # r2.2, r2.3, etc.
Facultatif : Configurer la compilation
Les builds TensorFlow sont configurés par le fichier .bazelrc
dans le répertoire racine du référentiel. Les scripts ./configure
ou ./configure.py
peuvent être utilisés pour ajuster les paramètres communs.
Si vous devez modifier la configuration, exécutez le script ./configure
à partir du répertoire racine du référentiel. Ce script vous demandera l'emplacement des dépendances TensorFlow et vous demandera des options de configuration de construction supplémentaires (drapeaux de compilateur, par exemple). Reportez-vous à la section Exemple de session pour plus de détails.
./configure
Il existe également une version python de ce script, ./configure.py
. Si vous utilisez un environnement virtuel, python configure.py
donne la priorité aux chemins dans l'environnement, tandis que ./configure
donne la priorité aux chemins en dehors de l'environnement. Dans les deux cas, vous pouvez modifier la valeur par défaut.
Exemple de séance
Ce qui suit montre un exemple d'exécution du script ./configure
(votre session peut différer) :
Possibilités de configuration
Prise en charge du processeur graphique
Pour la prise en charge GPU , définissez cuda=Y
lors de la configuration et spécifiez les versions de CUDA et cuDNN. Si plusieurs versions de CUDA ou cuDNN sont installées sur votre système, définissez explicitement la version au lieu de vous fier à la version par défaut. ./configure
crée des liens symboliques vers les bibliothèques CUDA de votre système. Ainsi, si vous mettez à jour les chemins de vos bibliothèques CUDA, cette étape de configuration doit être exécutée à nouveau avant la construction.
Optimisations
Pour les indicateurs d'optimisation de la compilation, la valeur par défaut ( -march=native
) optimise le code généré pour le type de processeur de votre machine. Toutefois, si vous créez TensorFlow pour un type de processeur différent, envisagez un indicateur d'optimisation plus spécifique. Consultez le manuel de GCC pour des exemples.
Configurations préconfigurées
Certaines configurations de build préconfigurées sont disponibles et peuvent être ajoutées à la commande bazel build
, par exemple :
-
--config=dbg
—Construire avec les informations de débogage. Voir CONTRIBUTING.md pour plus de détails. -
--config=mkl
—Prise en charge d' Intel® MKL-DNN . -
--config=monolithic
—Configuration pour une construction essentiellement statique et monolithique.
Construire et installer le paquet pip
Le package pip est construit en deux étapes. Une commande bazel build
crée un programme "package-builder". Vous exécutez ensuite le package-builder pour créer le package.
Construire le générateur de packages
Utilisez bazel build
pour créer le générateur de packages TensorFlow 2.x avec prise en charge du processeur uniquement :
bazel build [--config=option] //tensorflow/tools/pip_package:build_pip_package
Prise en charge du processeur graphique
Pour créer un outil de création de packages TensorFlow avec prise en charge GPU :
bazel build --config=cuda [--config=option] //tensorflow/tools/pip_package:build_pip_package
Options de construction de Bazel
Reportez-vous à la référence de ligne de commande Bazel pour les options de génération .
Construire TensorFlow à partir de la source peut utiliser beaucoup de RAM. Si votre système est limité en mémoire, limitez l'utilisation de la RAM de Bazel avec : --local_ram_resources=2048
.
Les packages officiels TensorFlow sont construits avec une chaîne d'outils GCC conforme à la norme de package manylinux2014.
Construire le paquet
La commande bazel build
crée un exécutable nommé build_pip_package
— c'est le programme qui construit le paquet pip
. Exécutez l'exécutable comme indiqué ci-dessous pour créer un package .whl
dans le répertoire /tmp/tensorflow_pkg
.
Pour compiler à partir d'une branche de version :
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
Pour compiler à partir de master, utilisez --nightly_flag
pour obtenir les bonnes dépendances :
./bazel-bin/tensorflow/tools/pip_package/build_pip_package --nightly_flag /tmp/tensorflow_pkg
Bien qu'il soit possible de créer des configurations CUDA et non-CUDA sous la même arborescence source, il est recommandé d'exécuter bazel clean
lors du basculement entre ces deux configurations dans la même arborescence source.
Installer le paquet
Le nom de fichier du fichier .whl
généré dépend de la version de TensorFlow et de votre plate-forme. Utilisez pip install
pour installer le package, par exemple :
pip install /tmp/tensorflow_pkg/tensorflow-version-tags.whl
Versions Docker Linux
Les images de développement Docker de TensorFlow sont un moyen simple de configurer un environnement pour créer des packages Linux à partir de la source. Ces images contiennent déjà le code source et les dépendances nécessaires pour créer TensorFlow. Accédez au guide TensorFlow Docker pour obtenir les instructions d'installation et la liste des balises d'image disponibles .
CPU uniquement
L'exemple suivant utilise l'image :devel
pour créer un package CPU uniquement à partir du dernier code source TensorFlow. Consultez le guide Docker pour les balises TensorFlow -devel
disponibles.
Téléchargez la dernière image de développement et démarrez un conteneur Docker que vous utiliserez pour créer le package pip :
docker pull tensorflow/tensorflow:devel
docker run -it -w /tensorflow_src -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \ tensorflow/tensorflow:devel bash
git pull # within the container, download the latest source code
La commande docker run
ci-dessus démarre un shell dans le répertoire /tensorflow_src
, la racine de l'arborescence source. Il monte le répertoire actuel de l'hôte dans le répertoire /mnt
du conteneur et transmet les informations de l'utilisateur hôte au conteneur via une variable d'environnement (utilisée pour définir les autorisations - Docker peut rendre cela délicat).
Sinon, pour créer une copie hôte de TensorFlow dans un conteneur, montez l'arborescence source de l'hôte dans le répertoire /tensorflow
du conteneur :
docker run -it -w /tensorflow -v /path/to/tensorflow:/tensorflow -v $PWD:/mnt \ -e HOST_PERMS="\\((id -u):\\)(id -g)" tensorflow/tensorflow:devel bash
Une fois l'arborescence source configurée, créez le package TensorFlow dans l'environnement virtuel du conteneur :
- Facultatif : configurez la génération : cette option invite l'utilisateur à répondre aux questions de configuration de la génération.
- Construisez l'outil utilisé pour créer le package pip .
- Exécutez l'outil pour créer le package pip .
- Ajustez les autorisations de propriété du fichier pour l'extérieur du conteneur.
./configure # if necessary
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /mnt # create package
chown $HOST_PERMS /mnt/tensorflow-version-tags.whl
Installez et vérifiez le package dans le conteneur :
pip uninstall tensorflow # remove current version
pip install /mnt/tensorflow-version-tags.whl
cd /tmp # don't import from source directory
python -c "import tensorflow as tf; print(tf.__version__)"
Sur votre ordinateur hôte, le package TensorFlow pip se trouve dans le répertoire actuel (avec les autorisations de l'utilisateur hôte) : ./tensorflow- version - tags .whl
Prise en charge du processeur graphique
Docker est le moyen le plus simple de créer une prise en charge GPU pour TensorFlow, car la machine hôte ne nécessite que le pilote NVIDIA® (le kit d'outils NVIDIA® CUDA® n'a pas besoin d'être installé). Reportez-vous au guide de prise en charge du GPU et au guide TensorFlow Docker pour configurer nvidia-docker (Linux uniquement).
L'exemple suivant télécharge l'image TensorFlow :devel-gpu
et utilise nvidia-docker
pour exécuter le conteneur compatible GPU. Cette image de développement est configurée pour créer un package pip avec prise en charge GPU :
docker pull tensorflow/tensorflow:devel-gpu
docker run --gpus all -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \ tensorflow/tensorflow:devel-gpu bash
git pull # within the container, download the latest source code
Ensuite, dans l'environnement virtuel du conteneur, créez le package TensorFlow avec prise en charge GPU :
./configure # if necessary
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /mnt # create package
chown $HOST_PERMS /mnt/tensorflow-version-tags.whl
Installez et vérifiez le package dans le conteneur et recherchez un GPU :
pip uninstall tensorflow # remove current version
pip install /mnt/tensorflow-version-tags.whl
cd /tmp # don't import from source directory
python -c "import tensorflow as tf; print(\"Num GPUs Available: \", len(tf.config.list_physical_devices('GPU')))"
Configurations de construction testées
Linux
CPU
Version | VersionPython | Compilateur | Construire des outils |
---|---|---|---|
tensorflow-2.12.0 | 3.8-3.11 | CCG 9.3.1 | Bazel 5.3.0 |
tensorflow-2.11.0 | 3.7-3.10 | CCG 9.3.1 | Bazel 5.3.0 |
tensorflow-2.10.0 | 3.7-3.10 | CCG 9.3.1 | Bazel 5.1.1 |
tensorflow-2.9.0 | 3.7-3.10 | CCG 9.3.1 | Bazel 5.0.0 |
tensorflow-2.8.0 | 3.7-3.10 | CCG 7.3.1 | Bazel 4.2.1 |
tensorflow-2.7.0 | 3.7-3.9 | CCG 7.3.1 | Bazel 3.7.2 |
tensorflow-2.6.0 | 3.6-3.9 | CCG 7.3.1 | Bazel 3.7.2 |
tensorflow-2.5.0 | 3.6-3.9 | CCG 7.3.1 | Bazel 3.7.2 |
tensorflow-2.4.0 | 3.6-3.8 | CCG 7.3.1 | Bazel 3.1.0 |
tensorflow-2.3.0 | 3.5-3.8 | CCG 7.3.1 | Bazel 3.1.0 |
tensorflow-2.2.0 | 3.5-3.8 | CCG 7.3.1 | Bazel 2.0.0 |
tensorflow-2.1.0 | 2.7, 3.5-3.7 | CCG 7.3.1 | Bazel 0.27.1 |
tensorflow-2.0.0 | 2.7, 3.3-3.7 | CCG 7.3.1 | Bazel 0.26.1 |
tensorflow-1.15.0 | 2.7, 3.3-3.7 | CCG 7.3.1 | Bazel 0.26.1 |
tensorflow-1.14.0 | 2.7, 3.3-3.7 | CCG 4.8 | Bazel 0.24.1 |
tensorflow-1.13.1 | 2.7, 3.3-3.7 | CCG 4.8 | Bazel 0.19.2 |
tensorflow-1.12.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.15.0 |
tensorflow-1.11.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.15.0 |
tensorflow-1.10.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.15.0 |
tensorflow-1.9.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.11.0 |
tensorflow-1.8.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.10.0 |
tensorflow-1.7.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.10.0 |
tensorflow-1.6.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.9.0 |
tensorflow-1.5.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.8.0 |
tensorflow-1.4.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.5.4 |
tensorflow-1.3.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.4.5 |
tensorflow-1.2.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.4.5 |
tensorflow-1.1.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.4.2 |
tensorflow-1.0.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.4.2 |
GPU
Version | VersionPython | Compilateur | Construire des outils | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow-2.12.0 | 3.8-3.11 | CCG 9.3.1 | Bazel 5.3.0 | 8.6 | 11.8 |
tensorflow-2.11.0 | 3.7-3.10 | CCG 9.3.1 | Bazel 5.3.0 | 8.1 | 11.2 |
tensorflow-2.10.0 | 3.7-3.10 | CCG 9.3.1 | Bazel 5.1.1 | 8.1 | 11.2 |
tensorflow-2.9.0 | 3.7-3.10 | CCG 9.3.1 | Bazel 5.0.0 | 8.1 | 11.2 |
tensorflow-2.8.0 | 3.7-3.10 | CCG 7.3.1 | Bazel 4.2.1 | 8.1 | 11.2 |
tensorflow-2.7.0 | 3.7-3.9 | CCG 7.3.1 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow-2.6.0 | 3.6-3.9 | CCG 7.3.1 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow-2.5.0 | 3.6-3.9 | CCG 7.3.1 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow-2.4.0 | 3.6-3.8 | CCG 7.3.1 | Bazel 3.1.0 | 8.0 | 11.0 |
tensorflow-2.3.0 | 3.5-3.8 | CCG 7.3.1 | Bazel 3.1.0 | 7.6 | 10.1 |
tensorflow-2.2.0 | 3.5-3.8 | CCG 7.3.1 | Bazel 2.0.0 | 7.6 | 10.1 |
tensorflow-2.1.0 | 2.7, 3.5-3.7 | CCG 7.3.1 | Bazel 0.27.1 | 7.6 | 10.1 |
tensorflow-2.0.0 | 2.7, 3.3-3.7 | CCG 7.3.1 | Bazel 0.26.1 | 7.4 | 10.0 |
tensorflow_gpu-1.15.0 | 2.7, 3.3-3.7 | CCG 7.3.1 | Bazel 0.26.1 | 7.4 | 10.0 |
tensorflow_gpu-1.14.0 | 2.7, 3.3-3.7 | CCG 4.8 | Bazel 0.24.1 | 7.4 | 10.0 |
tensorflow_gpu-1.13.1 | 2.7, 3.3-3.7 | CCG 4.8 | Bazel 0.19.2 | 7.4 | 10.0 |
tensorflow_gpu-1.12.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.11.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.10.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.9.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.11.0 | 7 | 9 |
tensorflow_gpu-1.8.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.10.0 | 7 | 9 |
tensorflow_gpu-1.7.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.9.0 | 7 | 9 |
tensorflow_gpu-1.6.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.9.0 | 7 | 9 |
tensorflow_gpu-1.5.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.8.0 | 7 | 9 |
tensorflow_gpu-1.4.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.5.4 | 6 | 8 |
tensorflow_gpu-1.3.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.4.5 | 6 | 8 |
tensorflow_gpu-1.2.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.4.5 | 5.1 | 8 |
tensorflow_gpu-1.1.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.4.2 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 2.7, 3.3-3.6 | CCG 4.8 | Bazel 0.4.2 | 5.1 | 8 |
macOS
CPU
Version | VersionPython | Compilateur | Construire des outils |
---|---|---|---|
tensorflow-2.12.0 | 3.8-3.11 | Clang de xcode 10.15 | Bazel 5.3.0 |
tensorflow-2.11.0 | 3.7-3.10 | Clang de xcode 10.14 | Bazel 5.3.0 |
tensorflow-2.10.0 | 3.7-3.10 | Clang de xcode 10.14 | Bazel 5.1.1 |
tensorflow-2.9.0 | 3.7-3.10 | Clang de xcode 10.14 | Bazel 5.0.0 |
tensorflow-2.8.0 | 3.7-3.10 | Clang de xcode 10.14 | Bazel 4.2.1 |
tensorflow-2.7.0 | 3.7-3.9 | Clang de xcode 10.11 | Bazel 3.7.2 |
tensorflow-2.6.0 | 3.6-3.9 | Clang de xcode 10.11 | Bazel 3.7.2 |
tensorflow-2.5.0 | 3.6-3.9 | Clang de xcode 10.11 | Bazel 3.7.2 |
tensorflow-2.4.0 | 3.6-3.8 | Clang de xcode 10.3 | Bazel 3.1.0 |
tensorflow-2.3.0 | 3.5-3.8 | Clang de xcode 10.1 | Bazel 3.1.0 |
tensorflow-2.2.0 | 3.5-3.8 | Clang de xcode 10.1 | Bazel 2.0.0 |
tensorflow-2.1.0 | 2.7, 3.5-3.7 | Clang de xcode 10.1 | Bazel 0.27.1 |
tensorflow-2.0.0 | 2.7, 3.5-3.7 | Clang de xcode 10.1 | Bazel 0.27.1 |
tensorflow-2.0.0 | 2.7, 3.3-3.7 | Clang de xcode 10.1 | Bazel 0.26.1 |
tensorflow-1.15.0 | 2.7, 3.3-3.7 | Clang de xcode 10.1 | Bazel 0.26.1 |
tensorflow-1.14.0 | 2.7, 3.3-3.7 | Clang de xcode | Bazel 0.24.1 |
tensorflow-1.13.1 | 2.7, 3.3-3.7 | Clang de xcode | Bazel 0.19.2 |
tensorflow-1.12.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.15.0 |
tensorflow-1.11.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.15.0 |
tensorflow-1.10.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.15.0 |
tensorflow-1.9.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.11.0 |
tensorflow-1.8.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.10.1 |
tensorflow-1.7.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.10.1 |
tensorflow-1.6.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.8.1 |
tensorflow-1.5.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.8.1 |
tensorflow-1.4.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.5.4 |
tensorflow-1.3.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.4.5 |
tensorflow-1.2.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.4.5 |
tensorflow-1.1.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.4.2 |
tensorflow-1.0.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.4.2 |
GPU
Version | VersionPython | Compilateur | Construire des outils | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow_gpu-1.1.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.4.2 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 2.7, 3.3-3.6 | Clang de xcode | Bazel 0.4.2 | 5.1 | 8 |