Mythenbrecher:
Reduziert Docker die Leistung auf GPU-Servern?
Die Verwendung von Docker-Containern für Deep-Machine-Learning- und Deep-Learning-Zwecke gewinnt in letzter Zeit immer mehr an Popularität, da sich Deep-Machine-Learning-Bibliotheken mit allen Abhängigkeiten damit mühelos installieren lassen und die Bereitstellung und Skalierung einfacher und bequemer ist.
Die Docker Hub Registry (https://hub.docker.com/) enthält vorkonfektionierte Container-Images für alle gängigen Deep-Machine-Learning-Bibliotheken wie Tensorflow™, Caffe2, Torch, CNTK, Theano und andere.
Wir wollten im Rahmen einer Untersuchung herausfinden, ob es einen Leistungsabfall bei der Verwendung von Docker-Containern auf GPU-Servern für Deep-Learning-Aufgaben gibt. Zu Testzwecken wurde das offizielle Docker-Image der TensorFlow™-Bibliothek für tiefes maschinelles Lernen genutzt (https://hub.docker.com/r/tensorflow/tensorflow/).
Die Tests wurden auf dem GPU-Server mit der folgenden Konfiguration durchgeführt (www.leadergpu.de):
- 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
Benchmark-Einstellungen:
- Synthetische Tests von der offiziellen TensorFlow™-Website. Als neuronales Netzmodell wurde Inception V3 verwendet. (https://www.tensorflow.org/lite/performance/measurement)
- Test mit echten Daten. Der verwendete CIFAR-10-Datensatz enthält 32x32 RGB-Bilder. Neuronales Netz – 9 Schichten. Eine vollständige Beschreibung finden Sie hier: https://www.tensorflow.org/tutorials/images/cnn
Testverfahren auf dem lokalen Rechner
Die folgenden Befehle wurden zur Durchführung des Tests verwendet:
Synthetische Tests
# 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
Ergebnis: total images/sec: 126.34
Tests mit echten Daten
# cd ~/Anaconda
# git clone https://github.com/tensorflow/models.git
# cd ~/Anaconda/models/tutorials/image/cifar10
# python cifar10_train.py
Ergebnis: sec/batch 0.009-0.028
Testverfahren auf dem Docker-Container
Die folgenden Befehle wurden zur Durchführung des Tests verwendet:
Synthetische Tests
# 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
Ergebnis: total images/sec: 126.34
Tests mit echten Daten
# cd ~/Anaconda
# git clone https://github.com/tensorflow/models.git
# cd ~/Anaconda/models/tutorials/image/cifar10
# python cifar10_train.py
Ergebnis: sec/batch 0.009-0.028
Testergebnisse
| 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 |
Aus den Ergebnissen der Tests mit synthetischen Daten und echten Daten lässt sich schließen, dass die Verwendung von Docker-Containern die Leistung von GPU-Servern für Deep-Learning-Aufgaben nicht beeinträchtigt.