Implantando um Modelo TensorFlow Simples

DockerBeginner
Pratique Agora

Introdução

Este projeto foi concebido para guiá-lo através do processo de criação de um modelo TensorFlow simples, exportá-lo e, em seguida, servi-lo usando Docker e TensorFlow Serving. TensorFlow é um framework de machine learning de código aberto, e TensorFlow Serving é um sistema de serviço flexível e de alto desempenho para modelos de machine learning. Contêineres Docker facilitam o empacotamento e a implantação consistente desses modelos. Ao final deste projeto, você entenderá como configurar um modelo básico de machine learning em TensorFlow, exportá-lo para serviço e implantá-lo usando TensorFlow Serving dentro de um contêiner Docker.

👀 Pré-visualização

## Enviar uma solicitação de predição para o contêiner TensorFlow Serving
curl -X POST \
  http://localhost:9501/v1/models/half_plus_two:predict \
  -d '{"signature_name":"serving_default","instances":[[1.0], [2.0], [5.0]]}'

Saída:

{
  "predictions": [[2.5], [3.0], [4.5]
  ]
}

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como instalar as dependências do TensorFlow e TensorFlow Serving
  • Como criar um modelo TensorFlow simples para operações aritméticas básicas
  • Como exportar o modelo em um formato adequado para servir com TensorFlow Serving
  • Como servir o modelo usando Docker e TensorFlow Serving
  • Como enviar solicitações de predição para o modelo implantado e receber predições

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Configurar um modelo básico de machine learning em TensorFlow
  • Exportar um modelo TensorFlow para serviço
  • Implantar um modelo TensorFlow usando Docker e TensorFlow Serving
  • Enviar solicitações de predição para o modelo implantado e observar os resultados

Instalar Dependências

Antes de começar, você precisa instalar o TensorFlow no seu ambiente. Além disso, você puxará a imagem do TensorFlow Serving do Docker Hub para se preparar para servir seu modelo em um ambiente em contêiner. Execute os seguintes comandos no seu terminal.

Instalar TensorFlow:

## Install TensorFlow
pip install tensorflow==2.14.0
## Downgrade numpy to 1.26.4 to avoid compatibility issues with TensorFlow
pip install numpy==1.26.4

Puxar a imagem Docker do TensorFlow Serving:

## Pull TensorFlow Serving image from Docker Hub
docker pull tensorflow/serving

Nesta etapa, você instalou o TensorFlow, uma biblioteca poderosa para computação numérica e machine learning, e então puxou a imagem Docker do TensorFlow Serving.

TensorFlow Serving é projetado especificamente para servir modelos de machine learning em ambientes de produção. Usar o Docker garante que o TensorFlow Serving seja executado em um ambiente isolado com todas as suas dependências atendidas, evitando assim conflitos com outros softwares em sua máquina.

Criar e Exportar Seu Modelo

Nesta etapa, você definirá um modelo TensorFlow simples que realiza uma operação aritmética básica: multiplicar sua entrada por 0,5 e, em seguida, adicionar 2. Após definir o modelo, você o exportará para um formato que o TensorFlow Serving possa usar.

Crie e exporte o modelo em ~/project/half_plus_two.py:

## Import TensorFlow
import tensorflow as tf

## Define a simple Sequential model
model = tf.keras.Sequential([
    tf.keras.layers.Dense(units=1, input_shape=[1], use_bias=True)
])

## Set the weights to achieve the "multiply by 0.5 and add 2" functionality
weights = [tf.constant([[0.5]]), tf.constant([2.0])]
model.set_weights(weights)

## Compile the model (required even if not training)
model.compile(optimizer='sgd', loss='mean_squared_error')

## Export the model to a SavedModel
export_path = './saved_model_half_plus_two/1'
tf.saved_model.save(model, export_path)

Esta etapa envolve a definição de um modelo TensorFlow que realiza uma operação simples em sua entrada: multiplicar por 0,5 e adicionar 2. O modelo é então exportado para um formato adequado para servir.

  • O modelo é definido usando a API Keras do TensorFlow, que é uma API de alto nível para construir e treinar modelos de deep learning. O modelo consiste em uma única camada densa, que é uma camada de rede neural totalmente conectada.
  • Os pesos do modelo são definidos manualmente para alcançar a operação desejada (multiplicar por 0,5 e adicionar 2).
  • Mesmo que este modelo não seja treinado posteriormente, ele é compilado para finalizar sua estrutura, que é uma etapa necessária no TensorFlow.
  • Finalmente, o modelo é salvo no formato TensorFlow SavedModel, que é um diretório contendo um arquivo protobuf e um checkpoint TensorFlow contendo os pesos do modelo. Este formato é exigido pelo TensorFlow Serving para a implantação do modelo.

Para exportar o modelo, execute o script no terminal:

python half_plus_two.py

O modelo é salvo em ~/project/saved_model_half_plus_two, e a estrutura do arquivo é a seguinte:

.
└── saved_model_half_plus_two
└── 1
├── assets
├── fingerprint.pb
├── saved_model.pb
└── variables
├── variables.data-00000-of-00001
└── variables.index

Servir o Modelo Usando Docker e TensorFlow Serving

Após exportar o modelo, a próxima etapa é servi-lo usando o TensorFlow Serving dentro de um contêiner Docker. Isso permite que seu modelo seja acessível através de uma rede e possa responder a solicitações de predição.

Sirva o modelo com Docker no terminal:

## Serve the model using TensorFlow Serving in a Docker container
docker run -t --rm -p 9500:8500 -p 9501:8501 \
  -v "/home/labex/project/saved_model_half_plus_two:/models/half_plus_two" \
  -e MODEL_NAME=half_plus_two \
  tensorflow/serving

Nesta etapa, o modelo exportado é servido usando o TensorFlow Serving dentro de um contêiner Docker. O comando docker run inicia uma instância do TensorFlow Serving e disponibiliza o modelo para solicitações de inferência.

  • As flags -p mapeiam as portas do contêiner Docker para sua máquina host, permitindo que você envie solicitações para o servidor de modelos TensorFlow Serving de sua máquina local.
  • A flag -v monta um volume de sua máquina host para o contêiner Docker, tornando o modelo exportado disponível para o TensorFlow Serving.
  • A variável de ambiente -e MODEL_NAME informa ao TensorFlow Serving o nome do modelo a ser servido.

Esta configuração encapsula o ambiente de serviço do modelo, garantindo que ele seja executado de forma consistente, independentemente de onde for implantado.

Enviar uma Solicitação de Previsão ao Seu Modelo

Finalmente, você testará o modelo implantado enviando uma solicitação de predição. Esta solicitação pedirá ao modelo que aplique sua lógica (multiplicar por 0,5 e adicionar 2) a um conjunto de valores de entrada.

Envie uma solicitação de predição em outro terminal novo:

## Send a prediction request to the TensorFlow Serving container
curl -X POST \
  http://localhost:9501/v1/models/half_plus_two:predict \
  -d '{"signature_name":"serving_default","instances":[[1.0], [2.0], [5.0]]}'

Output:

{
  "predictions": [[2.5], [3.0], [4.5]
  ]
}

Esta etapa final envolve testar o modelo implantado enviando uma solicitação HTTP POST. Esta solicitação inclui uma carga útil JSON com instâncias para as quais as predições são necessárias.

  • O comando curl é usado para enviar uma solicitação POST para o servidor TensorFlow Serving. A URL especifica o modelo e o endpoint da API de predição.
  • A flag -d fornece os dados para a solicitação de predição em formato JSON. A chave signature_name especifica a assinatura de serviço a ser usada, que é uma maneira de informar ao TensorFlow Serving qual grafo computacional executar. A chave instances contém os dados de entrada para a predição.

A resposta do servidor inclui as predições feitas pelo modelo nas instâncias de entrada fornecidas, demonstrando que o modelo foi implantado com sucesso e está servindo predições.

Resumo

Neste projeto, você aprendeu como criar um modelo TensorFlow simples, exportá-lo para servir e implantá-lo usando TensorFlow Serving e Docker. Você começou instalando as dependências necessárias, depois definiu e exportou um modelo básico. Em seguida, você serviu o modelo usando TensorFlow Serving dentro de um contêiner Docker e o testou enviando uma solicitação de predição. Este fluxo de trabalho é uma habilidade fundamental para implantar modelos de aprendizado de máquina de forma escalável e reproduzível.

✨ Verificar Solução e Praticar