Acabe con el mito:
¿reduce Docker el rendimiento de los servidores de GPU?
El uso de contenedores Docker para fines de aprendizaje automático profundo y de aprendizaje profundo está ganando mucha popularidad últimamente. El uso de contenedores hace que sea muy fácil instalar bibliotecas de aprendizaje automático profundo con todas las dependencias y hace que el despliegue y la ampliación sean más sencillos y cómodos.
El Docker Hub Registry (https://hub.docker.com/) contiene imágenes de contenedores preensamblados para todas las bibliotecas populares de aprendizaje automático profundo, como Tensorflow™, Caffe2, Torch, CNTK, Theano y otras.
Hemos decidido llevar a cabo un estudio para examinar si el rendimiento disminuye cuando se utilizan contenedores Docker en servidores de GPU para tareas de aprendizaje profundo. Para la prueba, se utilizaron las imágenes oficiales Docker de la biblioteca de aprendizaje automático profundo de TensorFlow™ (https://hub.docker.com/r/tensorflow/tensorflow/).
Las pruebas se realizaron en el servidor de GPU con la siguiente configuración (www.leadergpu.es):
- 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
Ajustes del índice de referencia:
- pruebas sintéticas del sitio web oficial de TensorFlow™. El modelo de red neuronal es Inception v3. (https://www.tensorflow.org/lite/performance/measurement)
- pruebas con datos reales. Se utilizó el conjunto de datos CIFAR-10, que contiene imágenes 32x32 RGB. Red neuronal de 9 capas. La descripción completa puede consultarse aquí: https://www.tensorflow.org/tutorials/images/cnn
Procedimiento de prueba en la máquina local
Se utilizaron los siguientes comandos para ejecutar las pruebas:
Pruebas sintéticas
# 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
Resultado: total images/sec: 126.34
Pruebas con datos reales
# cd ~/Anaconda
# git clone https://github.com/tensorflow/models.git
# cd ~/Anaconda/models/tutorials/image/cifar10
# python cifar10_train.py
Resultado: sec/batch 0.009-0.028
Procedimiento de prueba en el contenedor Docker
Se utilizaron los siguientes comandos para ejecutar las pruebas:
Pruebas sintéticas
# 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
Resultado: total images/sec: 126.34
Pruebas con datos reales
# cd ~/Anaconda
# git clone https://github.com/tensorflow/models.git
# cd ~/Anaconda/models/tutorials/image/cifar10
# python cifar10_train.py
Resultado: sec/batch 0.009-0.028
Resultados de las pruebas
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 |
A partir de los resultados de las pruebas basadas en datos sintéticos y datos reales, cabe concluir que el uso de contenedores Docker no reduce el rendimiento de los servidores de GPU para tareas de aprendizaje profundo.