Usa un contenedor personalizado

Para personalizar el modo en que AI Platform Prediction entrega predicciones en línea desde tu modelo de aprendizaje automático entrenado (AA), puedes especificar un contenedor personalizado en lugar de una versión del entorno de ejecución cuando creas una versión del modelo. Cuando usas un contenedor personalizado, AI Platform Prediction ejecuta un contenedor de Docker de tu elección en cada nodo de predicción, en lugar de ejecutar el código de versión estándar del entorno de ejecución para entregar predicciones desde artefactos del modelo compatibles.

Se recomienda usar un contenedor personalizado por las siguientes razones:

  • entregar predicciones de un modelo de AA entrenado mediante un framework que no sea TensorFlow, scikit-learn o XGBoost
  • procesar con anterioridad las solicitudes de predicción o procesar con posterioridad las predicciones que genera el modelo
  • ejecutar un servidor de predicción escrito en el lenguaje de programación que quieras
  • instalar las dependencias que deseas usar para personalizar la predicción

En esta guía, se describe cómo crear una versión del modelo que usa un contenedor personalizado. No proporciona instrucciones detalladas sobre cómo diseñar y crear una imagen de contenedor de Docker. Para ver un ejemplo de cómo crear una imagen de contenedor y usarla con AI Platform Prediction, lee Comienza: entrega predicciones de PyTorch con un contenedor personalizado.

Si deseas usar un contenedor personalizado, debes usar un extremo regional y un tipo de máquina de Compute Engine (N1) para la versión del modelo.

Prepara una imagen de contenedor

Para crear una versión del modelo que usa un contenedor personalizado, debes proporcionar una imagen de contenedor de Docker como base del contenedor. Esta imagen del contenedor debe cumplir con los requisitos descritos en los requisitos personalizados para contenedores.

Si planeas usar una imagen de contenedor existente creada por un tercero de confianza, es posible que puedas omitir una o ambas de las siguientes secciones.

Crea una imagen de contenedor

Diseña y compila una imagen de contenedor de Docker que cumpla con los requisitos de imagen de contenedor.

Para conocer los conceptos básicos del diseño y la compilación de una imagen de contenedor de Docker, consulta la guía de inicio rápido de la documentación de Docker.

Envía la imagen del contenedor a Artifact Registry

Envía la imagen de contenedor a un repositorio de Artifact Registry que cumpla con los requisitos de publicación de imágenes de contenedor.

Obtén información para enviar una imagen de contenedor a Artifact Registry.

Crea un modelo y la versión del modelo

Especifica varias opciones de configuración cuando creas un modelo para asegurarte de que las versiones del modelo que crees más adelante sean compatibles con el contenedor personalizado.

Luego, especifica la mayor parte de la configuración del contenedor cuando crees una versión del modelo.

Crea un modelo

A fin de crear un modelo, sigue las instrucciones para crear un recurso de modelo. Debes crear el modelo en un extremo regional que coincida con la región del repositorio de Artifact Registry en la que se almacena la imagen de contenedor. Para obtener más información, lee los requisitos de publicación de imágenes de contenedor.

Cómo crear una versión del modelo

Cuando creas una versión del modelo que usa un contenedor personalizado, debes configurar los siguientes campos de API específicos de contenedores, además de los otros campos que especifiques para una versión del modelo:

En las siguientes secciones, se describe cómo configurar estos campos.

Además, ten en cuenta las siguientes diferencias específicas de contenedores en la forma en que configuras otros campos de la API:

Configurar Version.container

Debes especificar un mensaje ContainerSpec en el campo Version.container. En este mensaje, puedes especificar los siguientes subcampos. Si usas el comando gcloud beta ai-platform versions create con el fin de crear la versión del modelo, puedes usar una marca de línea de comandos para especificar cada subcampo.

image (obligatorio)

El URI de Artifact Registry de la imagen de contenedor.

Marca de la CLI de gcloud: --image

command (opcional)

Es un arreglo de un ejecutable y argumentos para anular el ENTRYPOINT del contenedor. Para obtener más información sobre cómo dar formato a este campo y cómo interactúa con el campo args, lee la referencia de la API para ContainerSpec.

Marca de la CLI de gcloud: --command

args (opcional)

Es un arreglo de un ejecutable y argumentos para anular el CMD del contenedor. Si deseas obtener más información sobre cómo dar formato a este campo y cómo interactúa con el campo command, lee la referencia de la API para ContainerSpec.

Marca de la CLI de gcloud: --args

ports (opcional)

Un arreglo de puertos. AI Platform Prediction envía verificaciones de actividad, verificaciones de estado y solicitudes de predicción al contenedor en el primer puerto de la lista o a 8080 de forma predeterminada. La especificación de puertos adicionales no tiene efecto.

Marca de la CLI de gcloud: --ports

env (opcional)

Un arreglo de variables de entorno a las que pueden hacer referencia el comando de punto de entrada del contenedor y los campos command y args. Para obtener más información sobre cómo otros campos pueden hacer referencia a estas variables de entorno, lee la referencia de la API para ContainerSpec.

Marca de la CLI de gcloud: --env-vars

Además de las variables que estableces en el campo Version.container.env, AI Platform Prediction establece muchas otras variables según la configuración. Obtén más información sobre el uso de estas variables de entorno en estos campos y en el comando de punto de entrada del contenedor.

En el siguiente ejemplo, se muestra cómo especificar estos campos cuando creas una versión del modelo con la CLI de Google Cloud:

gcloud beta ai-platform versions create VERSION \
  --region=REGION \
  --model=MODEL \
  --machine-type=n1-standard-4 \
  --image=IMAGE_URI \
  --command=executable,param1,param2 \
  --args=param3,param4 \
  --ports=8081 \
  --env-vars \
    VAR1='value 1' \
    VAR2='value 2'

Reemplaza lo siguiente:

Configurar Version.routes

Puedes especificar un mensaje RouteMap en el campo Version.routes. En este mensaje, puedes especificar los siguientes subcampos. Si usas el comando gcloud beta ai-platform versions create con el fin de crear la versión del modelo, puedes usar una marca de línea de comandos para especificar cada subcampo.

health (opcional)

La ruta del servidor HTTP del contenedor en la que deseas que AI Platform Prediction envíe las verificaciones de estado.

Si no especificas este campo, el valor predeterminado es /v1/models/MODEL/versions/VERSION, en el que MODEL y VERSION se reemplazan por los nombres del modelo y la versión del modelo, respectivamente.

Marca de la CLI de gcloud: --health-route

predict (opcional)

La ruta del servidor HTTP del contenedor en la que deseas que AI Platform Prediction reenvíe las solicitudes de predicción.

Si no especificas este campo, el valor predeterminado es /v1/models/MODEL/versions/VERSION:predict, en el que MODEL y VERSION se reemplazan por los nombres del modelo y la versión del modelo, respectivamente.

Marca de la CLI de gcloud: --predict-route

En el siguiente ejemplo, se muestra cómo especificar estos campos cuando creas una versión del modelo con la CLI de gcloud:

gcloud beta ai-platform versions create VERSION \
  --region=REGION \
  --model=MODEL \
  --machine-type=n1-standard-4 \
  --image=IMAGE_URI \
  --command=executable,param1,param2 \
  --args=param3,param4 \
  --ports=8081 \
  --env-vars \
    VAR1='value 1' \
    VAR2='value 2' \
  --health-route=/health \
  --predict-route=/predict

Reemplaza lo siguiente:

Envía solicitudes de predicción

Para enviar una solicitud de predicción en línea a la versión del modelo, sigue la guía de predicción en línea. Este proceso funciona de la misma manera, independientemente de que uses un contenedor personalizado.

Sin embargo, cuando usas un contenedor personalizado, no es necesario que el cuerpo de cada solicitud de predicción cumpla con los requisitos del cuerpo de la solicitud para las versiones del modelo que usan una versión del entorno de ejecución. Dicho esto, te recomendamos que diseñes el contenedor para esperar cuerpos de solicitud con el formato estándar, si es posible. Obtén más información sobre los requisitos de solicitud y respuesta de predicción para contenedores personalizados.

¿Qué sigue?