Creación de imágenes de paquetes modelo - AWS Marketplace

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Creación de imágenes de paquetes modelo

Un paquete SageMaker modelo de Amazon es un modelo previamente entrenado que hace predicciones y no requiere ninguna formación adicional por parte del comprador. Puedes crear un paquete modelo SageMaker y publicar tu producto de aprendizaje automático en AWS Marketplaceél. En las siguientes secciones se explica cómo crear un paquete modelo AWS Marketplace. Esto incluye la creación de la imagen del contenedor y la creación y prueba de la imagen localmente.

Información general

Un paquete de modelos incluye los siguientes componentes:

nota

Los artefactos del modelo son archivos que su modelo utiliza para realizar predicciones y, por lo general, son el resultado de sus propios procesos de entrenamiento. Los artefactos pueden ser de cualquier tipo de archivo que necesite el modelo, pero deben comprimirse con el archivo use.tar.gz. En el caso de los paquetes modelo, pueden agruparse en la imagen de inferencia o almacenarse por separado en Amazon. SageMaker Los artefactos del modelo almacenados en Amazon S3 se cargan en el contenedor de inferencias durante el tiempo de ejecución. Al publicar su paquete modelo, esos artefactos se publican y almacenan en depósitos de Amazon S3 AWS Marketplace propios a los que el comprador no puede acceder directamente.

sugerencia

Si su modelo de inferencia se ha creado con un marco de aprendizaje profundo como Gluon, Keras,,,, TensorFlow -Lite o MXNet PyTorch TensorFlow, ONNX considere la posibilidad de utilizar Amazon Neo. SageMaker Neo puede optimizar automáticamente los modelos de inferencia que se implementan en una familia específica de tipos de instancias en la nube, como, etc. ml.c4 ml.p2 Para obtener más información, consulte Optimizar el rendimiento de los modelos con Neo en la Guía para SageMaker desarrolladores de Amazon.

En el siguiente diagrama se muestra el flujo de trabajo para publicar y usar productos de paquetes de modelos.

Diagrama de cómo un vendedor crea una imagen de paquete de modelos con un algoritmo y cómo la usa un comprador.

El flujo de trabajo para crear un paquete de SageMaker modelos AWS Marketplace incluye los siguientes pasos:

  1. El vendedor crea una imagen de inferencia (no tiene acceso a la red cuando está desplegada) y la envía al Registro de AmazonECR.

    Los artefactos del modelo pueden agruparse en la imagen de inferencia o almacenarse por separado en S3.

  2. A continuación, el vendedor crea un recurso de paquete modelo en Amazon SageMaker y publica su producto de aprendizaje automático en él AWS Marketplace.

  3. El comprador se suscribe al producto de ML e implementa el modelo.

    nota

    El modelo se puede implementar como punto de conexión para inferencias en tiempo real o como un trabajo por lotes para obtener predicciones para todo un conjunto de datos de una sola vez. Para obtener más información, consulte Implementar modelos para inferencia.

  4. SageMaker ejecuta la imagen de inferencia. Todos los artefactos del modelo proporcionados por el vendedor que no estén incluidos en la imagen de inferencia se cargan dinámicamente en tiempo de ejecución.

  5. SageMaker pasa los datos de inferencia del comprador al contenedor utilizando los HTTP puntos finales del contenedor y devuelve los resultados de la predicción.

Cree una imagen de inferencia para los paquetes modelo

En esta sección se proporciona un tutorial para empaquetar el código de inferencia en una imagen de inferencia para el producto de paquete de modelos. El proceso consta de los siguientes pasos:

La imagen de inferencia es una imagen de Docker que contiene la lógica de inferencia. En tiempo de ejecución, el contenedor expone HTTP los puntos finales para permitir SageMaker el paso de datos hacia y desde el contenedor.

nota

El siguiente es solo un ejemplo de código de empaquetado para una imagen de inferencia. Para obtener más información, consulte Uso de contenedores Docker con SageMaker y los AWS Marketplace SageMaker ejemplos correspondientes. GitHub

En el siguiente ejemplo se utiliza un servicio web, Flask, por motivos de simplicidad, y no se considera listo para la producción.

Paso 1: Crear la imagen del contenedor

Para que la imagen de inferencia sea compatible SageMaker, la imagen de Docker debe exponer HTTP los puntos finales. Mientras el contenedor está en funcionamiento, SageMaker transfiere las entradas del comprador para su inferencia al punto final del contenedor. HTTP Los resultados de la inferencia se devuelven en el cuerpo de la HTTP respuesta.

El siguiente tutorial utiliza el Docker CLI en un entorno de desarrollo que utiliza una distribución de Linux Ubuntu.

Crear el script del servidor web

Este ejemplo usa un servidor de Python llamado Flask, pero puede usar cualquier servidor web que funcione para su marco.

nota

Aquí se usa Flask por motivos de simplicidad. No se considera un servidor web listo para producción.

Cree un script de servidor web Flask que sirva a los dos HTTP puntos finales del TCP puerto 8080 que utiliza. SageMaker Los dos puntos de conexión esperados son los siguientes:

  • /ping— SageMaker realiza HTTP GET solicitudes a este punto final para comprobar si su contenedor está listo. Cuando el contenedor esté listo, responderá a HTTP GET las solicitudes de este punto final con un código de respuesta de HTTP 200.

  • /invocations— envía SageMaker HTTP POST solicitudes a este punto final para realizar inferencias. Los datos de entrada para la inferencia se envían en el cuerpo de la solicitud. El tipo de contenido especificado por el usuario se pasa al HTTP encabezado. El cuerpo de la respuesta es el resultado de la inferencia. Para obtener más información sobre los tiempos de espera, consulte Requisitos y prácticas recomendadas para crear productos de machine learning.

./web_app_serve.py

# Import modules import json import re from flask import Flask from flask import request app = Flask(__name__) # Create a path for health checks @app.route("/ping") def endpoint_ping(): return ""   # Create a path for inference @app.route("/invocations", methods=["POST"]) def endpoint_invocations():      # Read the input   input_str = request.get_data().decode("utf8")      # Add your inference code between these comments.   #   #   #   #   #   # Add your inference code above this comment.      # Return a response with a prediction   response = {"prediction":"a","text":input_str}   return json.dumps(response)

En el ejemplo anterior, no existe una lógica de inferencia real. Para la imagen de inferencia real, añada la lógica de inferencia a la aplicación web para que procese la entrada y devuelva la predicción real.

La imagen de inferencia debe contener todas las dependencias requeridas, ya que no tendrá acceso a Internet ni podrá realizar llamadas a ninguna de ellas. Servicios de AWS

nota

Este mismo código se utiliza tanto para las inferencias en tiempo real como para las inferencias por lotes

Crear el script para la ejecución del contenedor

Cree un script con el nombre serve que SageMaker se ejecute cuando ejecute la imagen del contenedor de Docker. El siguiente script inicia el servidor HTTP web.

./serve

#!/bin/bash # Run flask server on port 8080 for SageMaker flask run --host 0.0.0.0 --port 8080

Creación del Dockerfile

Cree un Dockerfile en su contexto de compilación. En este ejemplo se usa Ubuntu 18.04, pero puede empezar desde cualquier imagen base que funcione para su framework.

./Dockerfile

FROM ubuntu:18.04 # Specify encoding ENV LC_ALL=C.UTF-8 ENV LANG=C.UTF-8 # Install python-pip RUN apt-get update \ && apt-get install -y python3.6 python3-pip \ && ln -s /usr/bin/python3.6 /usr/bin/python \ && ln -s /usr/bin/pip3 /usr/bin/pip; # Install flask server RUN pip install -U Flask; # Add a web server script to the image # Set an environment to tell flask the script to run COPY /web_app_serve.py /web_app_serve.py ENV FLASK_APP=/web_app_serve.py # Add a script that Amazon SageMaker will run # Set run permissions # Prepend program directory to $PATH COPY /serve /opt/program/serve RUN chmod 755 /opt/program/serve ENV PATH=/opt/program:${PATH}

El Dockerfile añade a la imagen los dos scripts creados anteriormente. El directorio del serve script se agrega al para PATH que pueda ejecutarse cuando se ejecute el contenedor.

Empaqueta o cargar los artefactos del modelo

Las dos formas de proporcionar los artefactos del modelo, desde el entrenamiento del modelo hasta la imagen de inferencia, son las siguientes:

  • Se empaqueta estáticamente con la imagen de inferencia.

  • Se carga dinámicamente en tiempo de ejecución. Como se carga de forma dinámica, puede usar la misma imagen para empaquetar diferentes modelos de machine learning.

Si desea empaquetar los artefactos del modelo con la imagen de inferencia, inclúyalos en el Dockerfile.

Si desea cargar los artefactos del modelo de forma dinámica, almacénelos por separado en un archivo comprimido (.tar.gz) en Amazon S3. Al crear el paquete modelo, especifique la ubicación del archivo comprimido y SageMaker extraiga y copie el contenido en el directorio del contenedor /opt/ml/model/ cuando ejecute el contenedor. Al publicar su paquete de modelos, esos artefactos se publican y almacenan en buckets de Amazon S3 propiedad de AWS Marketplace a los que el comprador no puede acceder directamente.

Paso 2: Cree y pruebe la imagen localmente

En el contexto de la compilación, ahora existen los siguientes archivos:

  • ./Dockerfile

  • ./web_app_serve.py

  • ./serve

  • Su lógica de inferencia y sus dependencias (opcionales)

A continuación, compile, ejecute y pruebe la imagen del contenedor.

Compilar la imagen

Ejecute el comando Docker en el contexto de compilación para crear y etiquetar la imagen. En este ejemplo se utiliza la etiqueta my-inference-image.

sudo docker build --tag my-inference-image ./

Tras ejecutar este comando de Docker para crear la imagen, debería ver el resultado a medida que Docker cree la imagen en función de cada línea de su Dockerfile. Cuando termine, debería ver algo similar a lo siguiente.

Successfully built abcdef123456 Successfully tagged my-inference-image:latest

Ejecutar localmente

Una vez completada la compilación, puede probar la imagen localmente.

sudo docker run \   --rm \   --publish 8080:8080/tcp \   --detach \   --name my-inference-container \   my-inference-image \   serve

A continuación se muestran los detalles del comando:

  • --rm: eliminar automáticamente el contenedor una vez que se detenga.

  • --publish 8080:8080/tcp— Exponga el puerto 8080 para simular el puerto al que SageMaker envía HTTP las solicitudes.

  • --detach: ejecuta el contenedor en segundo plano.

  • --name my-inference-container: asigna un nombre a este contenedor en ejecución.

  • my-inference-image: ejecuta la imagen creada.

  • serve— Ejecute el mismo script que SageMaker se ejecuta al ejecutar el contenedor.

Tras ejecutar este comando, Docker crea un contenedor a partir de la imagen de inferencia compilada y la ejecuta en segundo plano. El contenedor ejecuta el script serve, que lanza el servidor web con fines de prueba.

Pruebe el HTTP punto final del ping

Cuando SageMaker ejecuta el contenedor, hace ping periódicamente al punto final. Cuando el punto final devuelve una HTTP respuesta con el código de estado 200, indica SageMaker que el contenedor está listo para la inferencia. Para comprobarlo, ejecute el siguiente comando, que comprueba el punto de conexión e incluye el encabezado de respuesta.

curl --include http://127.0.0.1:8080/ping

A continuación, se muestra un ejemplo de resultado.

HTTP/1.0 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 0 Server: MyServer/0.16.0 Python/3.6.8 Date: Mon, 21 Oct 2019 06:58:54 GMT

Pruebe el punto final de la inferencia HTTP

Cuando el contenedor indique que está listo devolviendo un código de estado 200 a tu ping, SageMaker pasa los datos de inferencia al /invocations HTTP punto final mediante una POST solicitud. Pruebe el punto de inferencia ejecutando el siguiente comando.

curl \   --request POST \   --data "hello world" \   http://127.0.0.1:8080/invocations

A continuación, se muestra un ejemplo de resultado.

{"prediction": "a", "text": "hello world"}

Con estos dos HTTP puntos finales en funcionamiento, la imagen de inferencia ahora es compatible con ellos. SageMaker

nota

El modelo de su producto de paquete de modelos se puede implementar de dos maneras: en tiempo real y por lotes. En ambas implementaciones, SageMaker utiliza los mismos HTTP puntos de conexión al ejecutar el contenedor de Docker.

Para detener el contenedor, ejecute el siguiente comando.

sudo docker container stop my-inference-container

Cuando la imagen de inferencia esté lista y probada, podrá continuar con Carga de tus imágenes a Amazon Elastic Container Registry.