Docker

Docker utilise des conteneurs pour créer des environnements virtuels qui isolent une installation de TensorFlow du reste du système. Les programmes TensorFlow sont exécutés dans cet environnement virtuel qui peut partager des ressources avec la machine hôte (accès aux répertoires, utilisation du GPU, connexion à Internet, etc.). Les images Docker de TensorFlow sont testées pour chaque version.

Docker est le moyen le plus simple d'activer la compatibilité GPU de TensorFlow sous Linux, puisque la machine hôte nécessite uniquement le pilote de GPU NVIDIA® (le NVIDIA® CUDA® Toolkit n'a pas besoin d'être installé).

Configuration requise pour Docker TensorFlow

  1. Installez Docker sur votre machine hôte local.
  2. Pour ajouter la compatibilité GPU sous Linux, installez la compatibilité NVIDIA avec Docker.
    • Vérifiez la version de Docker avec la commande docker -v. Les versions antérieures à 19.03 nécessitent nvidia-docker2 et l'indicateur --runtime=nvidia. Pour Docker 19.03 et les versions ultérieures, vous devez utiliser le package nvidia-container-toolkit et l'indicateur --gpus all. Les deux options sont documentées dans la page indiquée ci-dessus.

Télécharger une image Docker TensorFlow

Les images Docker TensorFlow officielles se trouvent dans le dépôt Docker Hub tensorflow/tensorflow. Les versions d'images comportent des tags selon le format suivant :

Tag Description
latest Dernière version de l'image binaire TensorFlow pour processeur (version par défaut).
nightly Builds automatiques d'images TensorFlow (version instable).
version Version spécifique de l'image binaire TensorFlow (par exemple, 2.1.0)
devel Builds automatiques de l'environnement de développement de TensorFlow (branche master). Inclut le code source TensorFlow.
custom-op Image expérimentale spéciale pour le développement d'opérations personnalisées TensorFlow. Plus d'infos

Chaque tag de base peut comporter des variantes qui permettent d'ajouter ou de modifier des fonctionnalités :

Variantes de tags Description
tag-gpu La version spécifiée par le tag compatible GPU (voir ci-dessous).
tag-jupyter La version spécifiée par le tag avec Jupyter (comprend les notebooks de tutoriels TensorFlow).

Vous pouvez utiliser plusieurs variantes à la fois. Par exemple, les commandes ci-dessous permettent de télécharger les versions d'image suivantes sur votre machine :

docker pull tensorflow/tensorflow                     # latest stable release
docker pull tensorflow/tensorflow:devel-gpu           # nightly dev release w/ GPU support
docker pull tensorflow/tensorflow:latest-gpu-jupyter  # latest release w/ GPU support and Jupyter

Démarrer un conteneur Docker TensorFlow

Pour démarrer un conteneur configuré pour TensorFlow, utilisez la forme de commande suivante :

docker run [-it] [--rm] [-p hostPort:containerPort] tensorflow/tensorflow[:tag] [command]

Pour plus d'informations, consultez le document de référence sur l'exécution de Docker.

Exemples utilisant des images pour processeur uniquement

Voici comment vérifier l'installation de TensorFlow en utilisant l'image avec le tag latest. Lors de sa première exécution, Docker télécharge une nouvelle image TensorFlow :

docker run -it --rm tensorflow/tensorflow \
   python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

Voici quelques autres exemples de recettes Docker TensorFlow. Démarrez une session d'interface système bash dans un conteneur configuré pour TensorFlow :

docker run -it tensorflow/tensorflow bash

Dans le conteneur, vous pouvez démarrer une session python et importer TensorFlow.

Pour exécuter un programme TensorFlow développé sur la machine hôte dans un conteneur, installez le répertoire hôte et modifiez le répertoire de travail du conteneur (-v hostDir:containerDir -w workDir) :

docker run -it --rm -v $PWD:/tmp -w /tmp tensorflow/tensorflow python ./script.py

Des problèmes d'autorisation peuvent se produire lorsque les fichiers créés dans un conteneur sont exposés à l'hôte. Il est généralement préférable de modifier les fichiers sur le système hôte.

Démarrez un serveur Jupyter Notebook à l'aide du build automatique de TensorFlow :

docker run -it -p 8888:8888 tensorflow/tensorflow:nightly-jupyter

Suivez les instructions et ouvrez l'URL dans le navigateur Web hôte : http://127.0.0.1:8888/?token=...

Compatibilité avec les GPU

Docker est le moyen le plus simple d'ajouter la compatibilité avec les GPU pour TensorFlow, puisque la machine hôte nécessite uniquement le pilote NVIDIA® (le NVIDIA® CUDA® Toolkit n'a pas besoin d'être installé).

Installez le Nvidia Container Toolkit pour ajouter la compatibilité avec les GPU NVIDIA® à Docker. nvidia-container-runtime n'est disponible que pour Linux. Pour plus d'informations, consultez les questions fréquentes sur les plates-formes compatibles nvidia-container-runtime.

Vérifiez si un GPU est disponible :

lspci | grep -i nvidia

Vérifiez votre installation nvidia-docker :

docker run --gpus all --rm nvidia/cuda nvidia-smi

Exemples utilisant des images compatibles GPU

Téléchargez et exécutez une image TensorFlow compatible GPU (cette opération peut prendre quelques minutes) :

docker run --gpus all -it --rm tensorflow/tensorflow:latest-gpu \
   python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

La configuration de l'image compatible GPU peut prendre un certain temps. Si vous exécutez de manière répétée des scripts basés sur le GPU, vous pouvez réutiliser un conteneur à l'aide de la commande docker exec.

Utilisez la dernière image GPU TensorFlow pour démarrer une session d'interface système bash dans le conteneur :

docker run --gpus all -it tensorflow/tensorflow:latest-gpu bash