Brisez le mythe :
Docker réduit-il les performances sur les serveurs GPU ?

L’utilisation de conteneurs Docker à de deep machine learning gagne en popularité ces derniers temps. L’utilisation de conteneurs permet d’installer presque sans effort des bibliothèques de deep machine learning avec toutes les dépendances et rend le déploiement et la mise à l’échelle plus simples et plus pratiques.

Le Docker Hub Registry (https://hub.docker.com/) contient des images de conteneur préassemblées pour toutes les bibliothèques de deep machine learning populaires telles que Tensorflow™, Caffe2, Torch, CNTK, Theano et autres.

Nous avons décidé de mener une étude pour voir s’il y a une baisse des performances lors de l’utilisation de conteneurs Docker sur des serveurs GPU pour des tâches de deep learning. À des fins de test, l’image Docker officielle de la bibliothèque de deep machine learning TensorFlow™ a été citée (https://hub.docker.com/r/tensorflow/tensorflow/).

Les tests ont été effectués sur le serveur GPU avec la configuration suivante (www.leadergpu.fr) :

  • GPU: NVIDIA® Tesla® P100 (16 GB)
  • CPU: 2 x Intel® Xeon® E5-2630v4 2.2 GHz
  • RAM: 128 GB
  • SSD: 960 GB
  • Ports: 40 Gbps
  • OS: CentOS 7
  • Python 2.7
  • TensorFlow™ 1.3

Paramètres de test :

Procédure de test sur la machine locale

Les commandes suivantes ont été utilisées pour exécuter les tests :

Tests synthétiques

# mkdir ~/Anaconda
# cd ~/Anaconda
# git clone https://github.com/tensorflow/benchmarks.git
# cd ~/Anaconda/benchmarks/scripts/tf_cnn_benchmarks
# python tf_cnn_benchmarks.py --num_gpus=1 --model inception3 --batch_size 32

Résultat : total images/sec: 126.34

Tests sur données réelles

# cd ~/Anaconda
# git clone https://github.com/tensorflow/models.git
# cd ~/Anaconda/models/tutorials/image/cifar10
# python cifar10_train.py

Résultat : sec/batch 0.009-0.028

Procédure de test sur le conteneur Docker

Les commandes suivantes ont été utilisées pour exécuter les tests :

Tests synthétiques

# docker pull tensorflow/tensorflow:latest-devel-gpu
# nvidia-docker run -it --rm -v ~/Anaconda:/root/Anaconda -p 8880:8888 -p 6000:6006 tensorflow/tensorflow:latest-devel-gpu
# cd ~/Anaconda/benchmarks/scripts/tf_cnn_benchmarks
# python tf_cnn_benchmarks.py --num_gpus=1 --model inception3 --batch_size 32

Résultat : total images/sec: 126.34

Tests sur données réelles

# cd ~/Anaconda
# git clone https://github.com/tensorflow/models.git
# cd ~/Anaconda/models/tutorials/image/cifar10
# python cifar10_train.py

Résultat : sec/batch 0.009-0.028

Résultats des tests

Local Docker
Synthetic data images/sec: 126.34 images/sec: 126.34
Real data sec/batch: 0.009-0.028 sec/batch: 0.009-0.028

On peut conclure des résultats des tests basés sur des données synthétiques et sur des données réelles que l’utilisation des conteneurs Docker ne réduit pas les performances sur les serveurs GPU pour les tâches de deep learning.