Esta página foi traduzida pela API Cloud Translation.
Switch to English

Desenvolvendo com Docker

Puxando uma imagem de desenvolvimento

Para um ambiente de desenvolvimento onde você pode construir o TensorFlow Serving, você pode tentar:

docker pull tensorflow/serving:latest-devel

Para um ambiente de desenvolvimento onde você pode construir o TensorFlow Serving com suporte para GPU, use:

docker pull tensorflow/serving:latest-devel-gpu

Consulte o repositório de tensorflow / servindo do Docker Hub para outras versões de imagens que você pode extrair.

Exemplo de desenvolvimento

Depois de extrair uma das imagens do Docker de desenvolvimento, você pode executá-la enquanto abre a porta gRPC (8500):

docker run -it -p 8500:8500 --gpus all tensorflow/serving:latest-devel

Testando o ambiente de desenvolvimento

Para testar um modelo, de dentro do contêiner, tente:

# train the mnist model
python tensorflow_serving/example/mnist_saved_model.py /tmp/mnist_model
# serve the model
tensorflow_model_server --port=8500 --model_name=mnist --model_base_path=/tmp/mnist_model/ &
# test the client
python tensorflow_serving/example/mnist_client.py --num_tests=1000 --server=localhost:8500

Dockerfiles

Atualmente, mantemos os seguintes Dockerfiles:

  • Dockerfile , que é uma VM mínima com o TensorFlow Serving instalado.

  • Dockerfile.gpu , que é uma VM mínima com TensorFlow Serving com suporte de GPU para ser usado com nvidia-docker .

  • Dockerfile.devel , que é uma VM mínima com todas as dependências necessárias para construir o TensorFlow Serving.

  • Dockerfile.devel-gpu , que é uma VM mínima com todas as dependências necessárias para construir o TensorFlow Serving com suporte de GPU.

Construir um contêiner a partir de um Dockerfile

Se quiser construir sua própria imagem do Docker a partir de um Dockerfile, você pode fazer isso executando o comando de compilação do Docker:

Dockerfile :

docker build --pull -t $USER/tensorflow-serving .

Dockerfile.gpu :

docker build --pull -t $USER/tensorflow-serving-gpu -f Dockerfile.gpu .

Dockerfile.devel :

docker build --pull -t $USER/tensorflow-serving-devel -f Dockerfile.devel .

Dockerfile.devel-gpu :

docker build --pull -t $USER/tensorflow-serving-devel-gpu -f Dockerfile.devel-gpu .

DICA: antes de tentar construir uma imagem, verifique o tensorflow / repositório de serviço do Docker Hub para garantir que ainda não exista uma imagem que atenda às suas necessidades.

Construir a partir de fontes consome muita RAM. Se RAM for um problema em seu sistema, você pode limitar o uso de RAM especificando --local_ram_resources=2048 ao invocar o Bazel. Consulte a documentação do Bazel para obter mais informações. Você pode usar esse mesmo mecanismo para ajustar as otimizações com as quais está construindo o TensorFlow Serving. Por exemplo:

docker build --pull --build-arg TF_SERVING_BUILD_OPTIONS="--copt=-mavx \
  --cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0 --local_ram_resources=2048" -t \
  $USER/tensorflow-serving-devel -f Dockerfile.devel .

Executando um contêiner

Isso pressupõe que você construiu o contêiner Dockerfile.devel .

Para executar o contêiner abrindo a porta gRPC (8500):

docker run -it -p 8500:8500 $USER/tensorflow-serving-devel

DICA: se você estiver executando uma imagem de GPU, certifique-se de executar usando o tempo de execução NVIDIA --runtime=nvidia .

A partir daqui, você pode seguir as instruções para testar um ambiente de desenvolvimento .

Criação de um binário de exibição otimizado

Ao executar o ModelServer do TensorFlow Serving, você pode notar uma mensagem de registro semelhante a esta:

I external/org_tensorflow/tensorflow/core/platform/cpu_feature_guard.cc:141]
Your CPU supports instructions that this TensorFlow binary was not compiled to
use: AVX2 FMA

Isso indica que seu binário ModelServer não está totalmente otimizado para a CPU em que está sendo executado. Dependendo do modelo que você está servindo, otimizações adicionais podem não ser necessárias. No entanto, construir um binário otimizado é simples.

Ao construir uma imagem Docker a partir dos Dockerfile.devel ou Dockerfile.devel-gpu fornecidos, o binário ModelServer será construído com a sinalização -march=native . Isso fará com que o Bazel construa um binário ModelServer com todas as otimizações de CPU suportadas pelo host no qual você está construindo a imagem Docker.

Para criar uma imagem de veiculação totalmente otimizada para seu host, basta:

  1. Clone o projeto TensorFlow Serving

    git clone https://github.com/tensorflow/serving
    cd serving
    
  2. Crie uma imagem com um ModelServer otimizado

    • Para CPU:

      docker build --pull -t $USER/tensorflow-serving-devel \
        -f tensorflow_serving/tools/docker/Dockerfile.devel .
      
    • Para GPU: `

      docker build --pull -t $USER/tensorflow-serving-devel-gpu \
        -f tensorflow_serving/tools/docker/Dockerfile.devel-gpu .
      
  3. Construir uma imagem de serviço com a imagem de desenvolvimento como base

    • Para CPU:

      docker build -t $USER/tensorflow-serving \
        --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel \
        -f tensorflow_serving/tools/docker/Dockerfile .
      

      Sua nova imagem Docker otimizada agora é $USER/tensorflow-serving , que você pode usar da mesma forma que faria com tensorflow/serving:latest imagem tensorflow/serving:latest .

    • Para GPU:

      docker build -t $USER/tensorflow-serving-gpu \
        --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel-gpu \
        -f tensorflow_serving/tools/docker/Dockerfile.gpu .
      

      Sua nova imagem Docker otimizada agora é $USER/tensorflow-serving-gpu , que você pode usar da mesma forma que faria com a imagem tensorflow/serving:latest-gpu padrão.