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:

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.