Docker

Docker usa contenedores para crear entornos virtuales que aíslan la instalación de TensorFlow del resto del sistema. Los programas de TensorFlow se ejecutan dentro de este entorno virtual, que puede compartir recursos con su máquina anfitrión (acceder a directorios, usar la GPU, conectarse a Internet, etc.). Las imágenes de Docker de TensorFlow se prueban antes de cada actualización.

Docker es la forma más fácil de habilitar la compatibilidad de TensorFlow con GPU en Linux, ya que solo se requiere el controlador de GPU de NVIDIA® en la máquina anfitrión (no es necesario instalar el kit de herramientas CUDA® de NVIDIA®).

Requisitos de TensorFlow para Docker

  1. Instala Docker en la máquina anfitrión local.
  2. Para obtener compatibilidad con GPU en Linux, instala la compatibilidad con Docker de NVIDIA.
    • Toma nota de tu versión de Docker con docker -v. Las versiones anteriores a 19.03 requieren nvidia-docker2 y la marca --runtime=nvidia. La versión 19.03 inclusive y las posteriores requieren el paquete nvidia-container-toolkit y la marca --gpus all. Puedes consultar los detalles de cada opción en la página del vínculo de más arriba.

Descarga una imagen de Docker de TensorFlow

Las imágenes oficiales de Docker de TensorFlow se encuentran en el repositorio de Docker Hub tensorflow/tensorflow. Las actualizaciones de las imágenes están etiquetadas con el siguiente formato:

Etiqueta Descripción
latest La actualización más reciente de la imagen binaria de CPU de TensorFlow. Predeterminado.
nightly Compilaciones nocturnas de la imagen de TensorFlow. (Inestable).
version Especifica la versión de la imagen binaria de TensorFlow (por ejemplo: 2.1.0)
devel Compilaciones nocturnas de un entorno de desarrollo master de TensorFlow. Incluye el código fuente de TensorFlow.
custom-op Imagen experimental especial para desarrollar operaciones personalizadas de TF. Obtén más información aquí.

Cada etiqueta base tiene variantes que agregan funciones o las cambian:

Variantes de etiquetas Descripción
tag-gpu La actualización de la etiqueta especificada compatible con GPU. (Consulta la información de más abajo)
tag-jupyter La actualización de la etiqueta especificada con Jupyter (incluye notebooks con instructivos sobre TensorFlow)

Puedes usar múltiples variantes a la vez. Por ejemplo, esta variante descarga las imágenes de actualización de TensorFlow en tu máquina:

docker pull tensorflow/tensorflow                     # latest stable release
docker pull tensorflow/tensorflow:devel-gpu           # nightly dev release w/ GPU support
docker pull tensorflow/tensorflow:latest-gpu-jupyter  # latest release w/ GPU support and Jupyter

Inicia un contenedor de Docker para TensorFlow

Para iniciar un contenedor configurado con TensorFlow, usa el siguiente formato de comando:

docker run [-it] [--rm] [-p hostPort:containerPort] tensorflow/tensorflow[:tag] [command]

Para obtener más detalles, consulta la referencia de ejecución de Docker.

Ejemplos con imágenes que son solo de CPU

Verifiquemos la instalación de TensorFlow con la imagen etiquetada latest. Docker descarga una nueva imagen de TensorFlow la primera vez que se ejecuta:

docker run -it --rm tensorflow/tensorflow \
   python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

Veamos algunas recetas más de Docker para TensorFlow. Inicia una sesión de shell bash dentro de un contenedor configurado con TensorFlow:

docker run -it tensorflow/tensorflow bash

Dentro del contenedor, puedes iniciar una sesión python e importar TensorFlow.

Para ejecutar dentro de un contenedor un programa de TensorFlow desarrollado en la máquina anfitrión, monta el directorio del host y cambia el directorio de trabajo del contenedor (-v hostDir:containerDir -w workDir):

docker run -it --rm -v $PWD:/tmp -w /tmp tensorflow/tensorflow python ./script.py

Pueden surgir problemas relacionados con los permisos cuando los archivos creados dentro de un contenedor se exponen al host. Por lo general, es mejor editar los archivos en el sistema host.

Inicia un servidor de Jupyter Notebook con la compilación nocturna de TensorFlow:

docker run -it -p 8888:8888 tensorflow/tensorflow:nightly-jupyter

Sigue las instrucciones y abre la URL en el navegador web del host: http://127.0.0.1:8888/?token=...

Asistencia para GPU

Docker es la forma más fácil de ejecutar TensorFlow en una GPU, ya que la máquina anfitrión solo requiere el controlador de NVIDIA® (el kit de herramientas CUDA® de NVIDIA® no es obligatorio).

Instala el kit de herramientas del contenedor de Nvidia para agregar la compatibilidad con GPU de NVIDIA® a Docker. nvidia-container-runtime solo está disponible para Linux. Para obtener más detalles, consulta las preguntas frecuentes sobre la compatibilidad con la plataforma nvidia-container-runtime.

Comprueba si hay una GPU disponible:

lspci | grep -i nvidia

Verifica tu instalación nvidia-docker:

docker run --gpus all --rm nvidia/cuda nvidia-smi

Ejemplos con imágenes habilitadas para GPU

Descarga y ejecuta una imagen de TensorFlow habilitada para GPU (esto puede tardar unos minutos):

docker run --gpus all -it --rm tensorflow/tensorflow:latest-gpu \
   python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

El proceso de configuración de la imagen habilitada para GPU puede demorar un rato. Si ejecutas secuencias de comandos basadas en GPU repetidas veces, puedes usar docker exec para reutilizar un contenedor.

Usa la última imagen de GPU de TensorFlow para iniciar una sesión de shell bash en el contenedor:

docker run --gpus all -it tensorflow/tensorflow:latest-gpu bash