Docker

O Docker usa contêineres para criar ambientes virtuais que isolam uma instalação do TensorFlow do restante do sistema. Os programas do TensorFlow são executados dentro desse ambiente virtual, que pode compartilhar recursos com a máquina host (diretórios de acesso, usar a GPU, conectar-se à Internet etc.). As imagens do Docker do TensorFlow são testadas para cada versão.

O Docker é a maneira mais fácil de ativar o suporte a GPUs do TensorFlow no Linux, já que somente o driver de GPU da NVIDIA® é obrigatório na máquina host. O NVIDIA® CUDA® Toolkit não precisa ser instalado.

Requisitos do Docker do TensorFlow

  1. Instale o Docker na máquina host local.
  2. Para suporte a GPUs no Linux, instale o suporte a Docker da NVIDIA.
    • Anote a versão do Docker com docker -v. As versões mais antigas que a 19.03 exigem nvidia-docker2 e a sinalização --runtime=nvidia. Nas versões a partir da 19.03, você usará o pacote nvidia-container-toolkit e a sinalização --gpus all. Ambas as opções estão documentadas na página vinculada acima.

Fazer o download de uma imagem do Docker do TensorFlow

As imagens do Docker do TensorFlow oficiais estão localizadas no repositório tensorflow/tensorflow do Docker Hub. As versões de imagem são marcadas usando o seguinte formato:

Tag Descrição
latest É a versão mais recente da imagem binária da CPU do TensorFlow. Padrão.
nightly Tem os builds noturnos da imagem do TensorFlow. Instável.
version Especifique a versão da imagem binária do TensorFlow, por exemplo: 2.1.0.
devel Tem os builds noturnos de um ambiente para desenvolvedores master do TensorFlow. Inclui o código-fonte do TensorFlow.
custom-op Imagem experimental especial para desenvolver operações personalizadas do TF. Mais informações aqui.

Cada tag básica tem variantes que adicionam ou mudam a funcionalidade:

Variantes de tag Descrição
tag-gpu É a versão de tag especificada com suporte a GPUs. Veja abaixo.
tag-jupyter É a versão de tag especificada com o Jupyter (incluindo notebooks de tutorial do TensorFlow).

Você pode usar várias variantes de uma só vez. Por exemplo, a seguinte faz o download de imagens da versão do TensorFlow para sua 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

Iniciar um contêiner do Docker do TensorFlow

Para iniciar um contêiner configurado pelo TensorFlow, use o seguinte formato de comando:

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

Para detalhes, consulte a referência de execução do Docker.

Exemplos que usam imagens somente de CPU

Vamos verificar a instalação do TensorFlow usando a imagem marcada com latest. O Docker faz o download de uma nova imagem do TensorFlow na primeira execução.

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

Vamos demonstrar mais alguns roteiros do Docker do TensorFlow. Inicie uma sessão de shell bash em um contêiner configurado pelo TensorFlow:

docker run -it tensorflow/tensorflow bash

No contêiner, você pode iniciar uma sessão python e importar o TensorFlow.

Para executar um programa do TensorFlow desenvolvido na máquina host em um contêiner, monte o diretório do host e altere o diretório de trabalho do contêiner (-v hostDir:containerDir -w workDir):

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

Problemas de permissão podem surgir quando os arquivos criados em um contêiner são expostos ao host. Geralmente, é melhor editar arquivos no sistema host.

Inicie um servidor de notebook do Jupyter usando a versão noturna do TensorFlow:

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

Siga as instruções e abra o URL no navegador da Web do host: http://127.0.0.1:8888/?token=...

Suporte a GPUs

O Docker é a maneira mais fácil de executar o TensorFlow em uma GPU, já que a máquina host exige apenas o driver NVIDIA® (o NVIDIA® CUDA® Toolkit não é obrigatório).

Instale o kit de ferramentas do contêiner da Nvidia para adicionar suporte a GPUs NVIDIA® ao Docker. nvidia-container-runtime está disponível apenas para Linux. Consulte as nvidia-container-runtime Perguntas frequentes de suporte da plataforma para mais detalhes.

Verifique se uma GPU está disponível:

lspci | grep -i nvidia

Verifique a instalação do nvidia-docker:

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

Exemplos usando imagens ativadas para GPU

Faça o download e execute uma imagem do TensorFlow ativada para GPU. Pode levar alguns 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])))"

Pode levar algum tempo para configurar a imagem ativada para GPU. Ao executar scripts baseados em GPU repetitivamente, você pode usar docker exec para reutilizar um contêiner.

Use a imagem mais recente da GPU do TensorFlow para iniciar uma sessão de shell bash no contêiner:

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