Cree su propio contenedor para terminales SageMaker multimodelo - Amazon SageMaker

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.

Cree su propio contenedor para terminales SageMaker multimodelo

Consulte las siguientes secciones para incorporar su propio contenedor y sus dependencias a los puntos de conexión multimodelo.

Utilice sus propias dependencias para terminales multimodelo en instancias respaldadas CPU

Si ninguna de las imágenes de contenedor prediseñadas satisface sus necesidades, puede crear su propio contenedor para usarlo con CPU puntos de conexión multimodelo respaldados.

Se espera que las imágenes personalizadas de Amazon Elastic Container Registry (AmazonECR) implementadas en Amazon SageMaker cumplan con el contrato básico descrito en, Código de inferencia personalizado con servicios de alojamiento que regula la forma en que SageMaker interactúa con un contenedor de Docker que ejecuta su propio código de inferencia. Para que un contenedor pueda cargar y servir varios modelos al mismo tiempo, hay otros comportamientos que deben APIs seguirse. Este contrato adicional incluye modelos nuevos APIs para cargar, enumerar, obtener y descargar, y uno diferente API para invocar modelos. También hay diferentes comportamientos en los escenarios de error que APIs es necesario respetar. Para indicar que el contenedor cumple los requisitos adicionales, puede agregar el siguiente comando al archivo de Docker:

LABEL com.amazonaws.sagemaker.capabilities.multi-models=true

SageMaker también inyecta una variable de entorno en el contenedor

SAGEMAKER_MULTI_MODEL=true

Si está creando un punto de conexión multimodelo para una canalización de inferencia en serie, el archivo Docker debe tener las etiquetas necesarias para las canalizaciones de inferencia multimodelo y en serie. Para obtener más información acerca de las canalizaciones de información en serie, consulte Ejecutar predicciones en tiempo real con una canalización de inferencia.

Para ayudarle a implementar estos requisitos para un contenedor personalizado, hay dos bibliotecas disponibles:

  • Multi Model Server es un marco de código abierto para ofrecer modelos de aprendizaje automático que se puede instalar en contenedores para proporcionar la interfaz que cumpla con los requisitos del nuevo contenedor de puntos finales multimodelo. APIs Proporciona las funciones HTTP de administración de modelos y de interfaz que requieren los terminales multimodelo para alojar varios modelos en un único contenedor, cargar modelos en el contenedor y descargarlos de forma dinámica y realizar inferencias sobre un modelo cargado específico. También proporciona un backend conectable que admite un controlador backend personalizado conectable donde puede implementar su propio algoritmo.

  • SageMaker El kit de herramientas de inferencia es una biblioteca que incorpora a Multi Model Server una configuración y unos ajustes que lo hacen compatible con terminales multimodelo. SageMaker También le permite ajustar parámetros de rendimiento importantes, como el número de trabajadores por modelo, en función de las necesidades de su situación.

Utilice sus propias dependencias para terminales multimodelo en instancias respaldadas GPU

Actualmente, las bibliotecas Multi Model Server y Inference Toolkit no admiten la capacidad de traer su propio contenedor (BYOC) en puntos finales multimodelo con instancias GPU respaldadas. SageMaker

Para crear puntos de conexión multimodelo con instancias GPU respaldadas, puede utilizar el servidor de inferencia Triton SageMaker compatible con los contenedores de inferencia NVIDIA Triton. NVIDIA Para crear sus propias dependencias, puede crear su propio contenedor con el servidor de inferencia NVIDIA Triton SageMaker compatible como imagen base de su archivo de Docker:

FROM 301217895009.dkr.ecr.us-west-2.amazonaws.com/sagemaker-tritonserver:22.07-py3
importante

Los contenedores con el servidor de inferencia Triton son los únicos contenedores compatibles que puede usar para puntos finales multimodelo respaldados. GPU

Utilice el kit de herramientas de inferencia SageMaker

nota

El kit de herramientas de SageMaker inferencia solo es compatible con puntos finales multimodelo respaldados. CPU Actualmente, el kit de herramientas SageMaker de inferencia no es compatible con los puntos finales multimodelo respaldados. GPU

Los contenedores prediseñados que admiten puntos de conexión multimodelo se muestran en Algoritmos, marcos e instancias compatibles para terminales multimodelo. Si desea usar cualquier otro marco o algoritmo, necesita compilar un contenedor. La forma más sencilla de hacerlo es utilizar el kit de herramientas de SageMaker inferencia para ampliar un contenedor prediseñado existente. El kit de herramientas de SageMaker inferencia es una implementación para el servidor multimodelo (MMS) que crea puntos finales en los que se pueden implementar. SageMaker Para ver un ejemplo de cuaderno que muestra cómo configurar e implementar un contenedor personalizado que admita terminales multimodelo SageMaker, consulte el cuaderno de muestra de terminales multimodelo. BYOC

nota

El kit de herramientas SageMaker de inferencia solo admite controladores de modelos de Python. Si desea implementar su controlador en cualquier otro lenguaje, debe crear su propio contenedor que implemente el punto final multimodelo adicional. APIs Para obtener más información, consulte Contrato para contenedores personalizados para puntos de conexión multimodelo.

Para ampliar un contenedor mediante el kit de herramientas de inferencia SageMaker
  1. Cree un controlador del modelo. MMSespera un controlador de modelos, que es un archivo de Python que implementa funciones para preprocesar, obtener predicciones del modelo y procesar la salida en un controlador de modelos. Para obtener un ejemplo de un controlador del modelo, consulte model_handler.py en el cuaderno de muestras.

  2. Importe el kit de herramientas de inferencia y utilice su función para empezar. model_server.start_model_server MMS El siguiente ejemplo procede del archivo dockerd-entrypoint.py del cuaderno de muestras. Observe que la llamada a model_server.start_model_server pasa el controlador del modelo descrito en el paso anterior:

    import subprocess import sys import shlex import os from retrying import retry from subprocess import CalledProcessError from sagemaker_inference import model_server def _retry_if_error(exception): return isinstance(exception, CalledProcessError or OSError) @retry(stop_max_delay=1000 * 50, retry_on_exception=_retry_if_error) def _start_mms(): # by default the number of workers per model is 1, but we can configure it through the # environment variable below if desired. # os.environ['SAGEMAKER_MODEL_SERVER_WORKERS'] = '2' model_server.start_model_server(handler_service='/home/model-server/model_handler.py:handle') def main(): if sys.argv[1] == 'serve': _start_mms() else: subprocess.check_call(shlex.split(' '.join(sys.argv[1:]))) # prevent docker exit subprocess.call(['tail', '-f', '/dev/null']) main()
  3. En su Dockerfile, copie el controlador del modelo del primer paso y especifique el archivo de Python del paso anterior como el punto de entrada en su Dockerfile. Las líneas siguientes son del archivo Dockerfile utilizado en el cuaderno de muestras:

    # Copy the default custom service file to handle incoming data and inference requests COPY model_handler.py /home/model-server/model_handler.py # Define an entrypoint script for the docker image ENTRYPOINT ["python", "/usr/local/bin/dockerd-entrypoint.py"]
  4. Compile y registre su contenedor. El siguiente guión de intérprete de comandos del cuaderno de muestras compila el contenedor y lo carga en un repositorio de Amazon Elastic Container Registry de su cuenta de AWS :

    %%sh # The name of our algorithm algorithm_name=demo-sagemaker-multimodel cd container account=$(aws sts get-caller-identity --query Account --output text) # Get the region defined in the current configuration (default to us-west-2 if none defined) region=$(aws configure get region) region=${region:-us-west-2} fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # If the repository doesn't exist in ECR, create it. aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null fi # Get the login command from ECR and execute it directly $(aws ecr get-login --region ${region} --no-include-email) # Build the docker image locally with the image name and then push it to ECR # with the full name. docker build -q -t ${algorithm_name} . docker tag ${algorithm_name} ${fullname} docker push ${fullname}

Ahora puede usar este contenedor para implementar puntos finales multimodelo. SageMaker