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 :
- Tests synthétiques sur le site web officiel de TensorFlow. Le modèle de réseau neuronal est Inception v3. (https://www.tensorflow.org/lite/performance/measurement)
- Test avec des données réelles. Utilisation du jeu de données CIFAR-10, qui contient des images RVB 32x32. Réseau neuronal - 9 couches. Descriptif complet ici : https://www.tensorflow.org/tutorials/images/cnn
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.