TensorFlow Serving - End-to-End¶
Projeto exemplo de treinamento, exportação e deploy de um modelo MNIST com TensorFlow 2 e serving via Docker (Bitnami ou oficial).
Estrutura do Projeto¶
.
├── main.py # Script de treinamento e exportação do modelo
├── mnist_model/ # Diretório do modelo exportado (formato SavedModel)
│ └── 1/
│ ├── assets
│ ├── fingerprint.pb
│ ├── saved_model.pb
│ └── variables/
│ ├── variables.data-00000-of-00001
│ └── variables.index
├── teste.py # Script Python para testar a API REST
└── test_inference.ipynb # (Opcional) Notebook de teste via API REST
1. Treinando e exportando o modelo¶
python3 main.py
Isso gera a pasta mnist_model/1/ com o modelo no formato correto para serving.
2. Servindo o modelo com Docker¶
Comando completo:
docker run -d --name tfserving_mnist -p 8501:8501 \
-v "$PWD/mnist_model:/models/mnist" \
tensorflow/serving \
--rest_api_port=8501 \
--model_name=mnist \
--model_base_path=/models/mnist
IMPORTANTE:¶
No Mac M1/M2 (ARM64): se der erro, adicione a flag
--platform=linux/arm64/v8após o docker run.No Windows, Linux, Mac Intel: não precisa dessa flag.
Você pode usar a imagem oficial (tensorflow/serving) ou Bitnami (bitnami/tensorflow-serving:latest). Ambas são compatíveis.
Comando completo para Mac M1/M2:
docker run --platform=linux/arm64/v8 -d --name tfserving_mnist -p 8501:8501 \
-v "$PWD/mnist_model:/bitnami/tensorflow-serving/models/mnist" \
bitnami/tensorflow-serving:latest \
tensorflow_model_server \
--rest_api_port=8501 \
--model_name=mnist \
--model_base_path=/bitnami/tensorflow-serving/models/mnist
Explicação do comando, linha a linha:¶
docker run: Cria e executa um novo container.--platform=linux/arm64/v8: Especifica a arquitetura ARM64 (necessário em Macs M1/M2).-d: Roda em segundo plano (background).--name tfserving_mnist: Dá um nome ao container para facilitar logs, remoção etc.-p 8501:8501: Mapeia a porta 8501 do container para a 8501 do host (API REST).-v "$PWD/mnist_model:/bitnami/tensorflow-serving/models/mnist": Monta o diretório local do modelo dentro do container no local esperado pelo TensorFlow Serving.bitnami/tensorflow-serving:latest: Imagem Docker utilizada.tensorflow_model_server: Comando que roda o servidor do TensorFlow Serving.--rest_api_port=8501: Porta REST da API.--model_name=mnist: Nome lógico do modelo (usado nos endpoints).--model_base_path=/bitnami/tensorflow-serving/models/mnist:Caminho do modelo dentro do container (deve bater com o volume acima).
3. Verificando o status do modelo¶
Após rodar o container, teste no terminal:
curl http://localhost:8501/v1/models/mnist
Deve retornar:
{
"model_version_status": [
{
"version": "1",
"state": "AVAILABLE",
"status": {
"error_code": "OK",
"error_message": ""
}
}
]
}
4. Testando a inferência com Python¶
Use o script teste.py:
python3 teste.py
Saída esperada (exemplo):
Predito: 7 Verdadeiro: 7
5. Teste via notebook¶
Rode o test_inference.ipynb para explorar batch prediction, visualização, análise de erro, etc.
Observações¶
- Para atualizar o modelo, basta exportar uma nova versão na pasta
mnist_model/2/e reiniciar o container. - Se quiser automatizar o deploy, use um script
deploy.sh. - Para projetos maiores, considere Docker Compose e/ou integração com aplicações web.