Distruggiamo un falso mito:
Docker riduce le prestazioni sui server GPU?
I container Docker vengono utilizzati sempre di più nel campo del deep machine learning. Il ricorso ai container semplifica in maniera significativa l'installazione delle librerie di deep machine learning (con tutte le dipendenze) e le attività di distribuzione e ridimensionamento.
Il registro Docker Hub (https://hub.docker.com/) contiene immagini di container preconfigurate per le principali librerie di machine learning come Tensorflow™, Caffe2, Torch, CNTK, Theano, ecc.
Abbiamo condotto uno studio per verificare se il ricorso ai container Docker sui server GPU per le attività di deep learning riduce le prestazioni. Per condurre il test, abbiamo utilizzato l'immagine ufficiale di Docker della libreria di deep machine learning di TensorFlow™ (https://hub.docker.com/r/tensorflow/tensorflow/).
I test sono stati effettuati sul server GPU con la seguente configurazione (www.leadergpu.it):
- 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
Configurazione benchmark:
- test sintetici tratti dal sito web di TensorFlow™. Il modello della rete neurale è Inception v3. (https://www.tensorflow.org/lite/performance/measurement)
- test con dati reali. È stato utilizzato il set di dati di CIFAR-10, che contiene 32x32 immagini RGB. Rete neurale: 9 layer. Descrizione completa disponibile qui: https://www.tensorflow.org/tutorials/images/cnn
Procedura di test sul computer locale
Per il test sono stati utilizzanti i seguenti comandi:
Test sintetici
# 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
Resultato: total images/sec: 126.34
Test con dati reali
# cd ~/Anaconda
# git clone https://github.com/tensorflow/models.git
# cd ~/Anaconda/models/tutorials/image/cifar10
# python cifar10_train.py
Resultato: sec/batch 0.009-0.028
Procedura di test sul container Docker
Per il test sono stati utilizzanti i seguenti comandi:
Test sintetici
# 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
Resultato: total images/sec: 126.34
Test con dati reali
# cd ~/Anaconda
# git clone https://github.com/tensorflow/models.git
# cd ~/Anaconda/models/tutorials/image/cifar10
# python cifar10_train.py
Resultato: sec/batch 0.009-0.028
Risultati dei test
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 |
Dai risultati dei test con dati sintetici e con dati reali, si evince che l'utilizzo dei container Docker non riduce le prestazioni dei server GPU per le attività di deep learning.