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
- Instala Docker en la máquina anfitrión local.
- 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 paquetenvidia-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.
- Toma nota de tu versión de Docker con
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