Despliegue de un modelo simple de TensorFlow

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Este proyecto está diseñado para guiarte a través del proceso de creación de un modelo simple de TensorFlow, su exportación y luego su puesta en servicio utilizando Docker y TensorFlow Serving. TensorFlow es un marco de aprendizaje automático de código abierto, y TensorFlow Serving es un sistema de puesta en servicio flexible y de alto rendimiento para modelos de aprendizaje automático. Los contenedores de Docker facilitan el empaquetado y la implementación consistente de estos modelos. Al final de este proyecto, entenderás cómo configurar un modelo básico de aprendizaje automático en TensorFlow, exportarlo para su puesta en servicio y desplegarlo utilizando TensorFlow Serving dentro de un contenedor de Docker.

👀 Vista previa

## 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]]}'

Salida:

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

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo instalar las dependencias de TensorFlow y TensorFlow Serving
  • Cómo crear un modelo simple de TensorFlow para operaciones aritméticas básicas
  • Cómo exportar el modelo en un formato adecuado para su puesta en servicio con TensorFlow Serving
  • Cómo poner en servicio el modelo utilizando Docker y TensorFlow Serving
  • Cómo enviar solicitudes de predicción al modelo desplegado y recibir predicciones

🏆 Logros

Después de completar este proyecto, podrás:

  • Configurar un modelo básico de aprendizaje automático en TensorFlow
  • Exportar un modelo de TensorFlow para su puesta en servicio
  • Desplegar un modelo de TensorFlow utilizando Docker y TensorFlow Serving
  • Enviar solicitudes de predicción al modelo desplegado y observar los resultados

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/save("Save Image") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/run -.-> lab-298840{{"Despliegue de un modelo simple de TensorFlow"}} docker/ps -.-> lab-298840{{"Despliegue de un modelo simple de TensorFlow"}} docker/exec -.-> lab-298840{{"Despliegue de un modelo simple de TensorFlow"}} docker/pull -.-> lab-298840{{"Despliegue de un modelo simple de TensorFlow"}} docker/save -.-> lab-298840{{"Despliegue de un modelo simple de TensorFlow"}} docker/volume -.-> lab-298840{{"Despliegue de un modelo simple de TensorFlow"}} docker/build -.-> lab-298840{{"Despliegue de un modelo simple de TensorFlow"}} end

Instalar dependencias

Antes de comenzar, debes instalar TensorFlow en tu entorno. Además, debes descargar la imagen de TensorFlow Serving desde Docker Hub para prepararte para poner en servicio tu modelo en un entorno contenerizado. Ejecuta los siguientes comandos en tu 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

Descargar la imagen de Docker de TensorFlow Serving:

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

En este paso, instalaste TensorFlow, una poderosa biblioteca para el cálculo numérico y el aprendizaje automático, y luego descargaste la imagen de Docker de TensorFlow Serving.

TensorFlow Serving está diseñado específicamente para poner en servicio modelos de aprendizaje automático en entornos de producción. El uso de Docker garantiza que TensorFlow Serving se ejecute en un entorno aislado con todas sus dependencias satisfechas, evitando así conflictos con otros software en tu máquina.

Crear y exportar tu modelo

En este paso, definirás un modelo simple de TensorFlow que realiza una operación aritmética básica: multiplicar su entrada por 0,5 y luego sumar 2. Después de definir el modelo, lo exportarás a un formato que TensorFlow Serving pueda utilizar.

Crea y exporta el modelo en ~/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)

Este paso implica definir un modelo de TensorFlow que realiza una operación simple en su entrada: multiplicar por 0,5 y sumar 2. Luego, el modelo se exporta a un formato adecuado para su puesta en servicio.

  • El modelo se define utilizando la API Keras de TensorFlow, que es una API de alto nivel para construir y entrenar modelos de aprendizaje profundo. El modelo consta de una sola capa densa, que es una capa de red neuronal completamente conectada.
  • Los pesos del modelo se establecen manualmente para lograr la operación deseada (multiplicar por 0,5 y sumar 2).
  • Aunque este modelo no se entrenará más, se compila para finalizar su estructura, lo cual es un paso necesario en TensorFlow.
  • Finalmente, el modelo se guarda en el formato TensorFlow SavedModel, que es un directorio que contiene un archivo protobuf y un punto de control de TensorFlow con los pesos del modelo. Este formato es necesario para la implementación del modelo en TensorFlow Serving.

Para exportar el modelo, ejecuta el script en la terminal:

python half_plus_two.py

El modelo se guarda en ~/project/saved_model_half_plus_two, y la estructura de archivos es la siguiente:

.
└── saved_model_half_plus_two
└── 1
├── assets
├── fingerprint.pb
├── saved_model.pb
└── variables
├── variables.data-00000-of-00001
└── variables.index
✨ Revisar Solución y Practicar

Poner en servicio el modelo utilizando Docker y TensorFlow Serving

Después de exportar el modelo, el siguiente paso es ponerlo en servicio utilizando TensorFlow Serving dentro de un contenedor de Docker. Esto permite que tu modelo sea accesible a través de una red y pueda responder a solicitudes de predicción.

Poner en servicio el modelo con Docker en la 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

En este paso, el modelo exportado se pone en servicio utilizando TensorFlow Serving dentro de un contenedor de Docker. El comando docker run inicia una instancia de TensorFlow Serving y hace que el modelo esté disponible para solicitudes de inferencia.

  • Las opciones -p mapean los puertos del contenedor de Docker a tu máquina host, lo que te permite enviar solicitudes al servidor de modelos de TensorFlow Serving desde tu máquina local.
  • La opción -v monta un volumen desde tu máquina host al contenedor de Docker, lo que hace que el modelo exportado esté disponible para TensorFlow Serving.
  • La variable de entorno -e MODEL_NAME le dice a TensorFlow Serving el nombre del modelo a poner en servicio.

Esta configuración encapsula el entorno de puesta en servicio del modelo, asegurando que se ejecute de manera consistente independientemente de donde se implemente.

Enviar una solicitud de predicción a tu modelo

Finalmente, probarás el modelo desplegado enviando una solicitud de predicción. Esta solicitud pedirá al modelo que aplique su lógica (multiplicar por 0,5 y sumar 2) a un conjunto de valores de entrada.

Envía una solicitud de predicción en otra terminal nueva:

## 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]]}'

Salida:

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

Este último paso implica probar el modelo desplegado enviando una solicitud HTTP POST. Esta solicitud incluye una carga útil JSON con instancias para las cuales se necesitan predicciones.

  • El comando curl se utiliza para enviar una solicitud POST al servidor de TensorFlow Serving. La URL especifica el modelo y el punto final de la API de predicción.
  • La opción -d proporciona los datos para la solicitud de predicción en formato JSON. La clave signature_name especifica la firma de servicio a utilizar, que es una forma de decirle a TensorFlow Serving qué gráfico computacional ejecutar. La clave instances contiene los datos de entrada para la predicción.

La respuesta del servidor incluye las predicciones realizadas por el modelo en las instancias de entrada proporcionadas, lo que demuestra que el modelo se ha desplegado correctamente y está sirviendo predicciones.

Resumen

En este proyecto, has aprendido cómo crear un modelo simple de TensorFlow, exportarlo para su puesta en servicio y desplegarlo utilizando TensorFlow Serving y Docker. Comenzaste instalando las dependencias necesarias, luego definiste y exportaste un modelo básico. Después, pusiste en servicio el modelo utilizando TensorFlow Serving dentro de un contenedor de Docker y lo probaste enviando una solicitud de predicción. Este flujo de trabajo es una habilidad fundamental para desplegar modelos de aprendizaje automático de manera escalable y reproducible.