Construire à partir de la source

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.

Clang est un compilateur C/C++/Objective-C compilé en C++ basé sur LLVM. Il s'agit du compilateur par défaut pour créer TensorFlow à partir de TensorFlow 2.13. La version actuellement prise en charge est LLVM/Clang 16.

Les packages nocturnes LLVM Debian/Ubuntu fournissent un script d'installation automatique et des packages pour une installation manuelle sous Linux. Assurez-vous d'exécuter la commande suivante si vous ajoutez manuellement le référentiel llvm apt à vos sources de package :

sudo apt-get update && sudo apt-get install -y llvm-16 clang-16

Vous pouvez également télécharger et décompresser les fichiers binaires Clang+LLVM-16 préconstruits.

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 Clang 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 :

  1. Facultatif : configurez la génération : cette option invite l'utilisateur à répondre aux questions de configuration de la génération.
  2. Construisez l'outil utilisé pour créer le package pip .
  3. Exécutez l'outil pour créer le package pip .
  4. 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.13.0 3.8-3.11 Clang 16.0.0 Bazel 5.3.0
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.13.0 3.8-3.11 Clang 16.0.0 Bazel 5.3.0 8.6 11.8
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.13.0 3.8-3.11 Clang de xcode 10.15 Bazel 5.3.0
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