Implementar modelos con TorchServe - Amazon SageMaker AI

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.

Implementar modelos con TorchServe

TorchServe es el servidor modelo recomendado para PyTorch, preinstalado en el contenedor de aprendizaje profundo (DLC) de AWS PyTorch. Esta potente herramienta ofrece a los clientes una experiencia uniforme y fácil de usar, y ofrece un alto rendimiento al implementar varios modelos de PyTorch en múltiples instancias de AWS, incluidas CPU, GPU, Neuron y Graviton, independientemente del tamaño o la distribución del modelo.

TorchServe admite una amplia gama de funciones avanzadas, como el procesamiento dinámico por lotes, el microprocesamiento, las pruebas A/B de modelos, la transmisión, Torch XLA, TensorRT, ONNX e IPEX. Además, integra a la perfección la solución para modelos grandes de PyTorch, PiPPY, lo que permite un manejo eficiente de modelos grandes. Por otro lado, TorchServe amplía su soporte a bibliotecas populares de código abierto como DeepSpeed, Accelerate y Fast Transformers, entre otras, ampliando aún más sus capacidades. Con TorchServe, los usuarios de AWS pueden implementar y servir sus modelos PyTorch con confianza, aprovechando su versatilidad y rendimiento optimizado en diversas configuraciones de hardware y tipos de modelos. Para obtener información más detallada, consulte la documentación de PyTorch y TorchServe en GitHub.

En la siguiente tabla, se enumeran los DLC PyTorch de AWS admitidos por TorchServe.

Tipo de instancia Enlace al DLC PyTorch de SageMaker AI

CPU y GPU

Contenedores PyTorch de SageMaker AI

Neuron

Contenedores PyTorch Neuron

Graviton

Contenedores SageMaker AI PyTorch Graviton

En las siguientes secciones se describe la configuración para crear y probar los DLC PyTorch en Amazon SageMaker AI.

Introducción

Antes de comenzar, compruebe que cumple los siguientes requisitos previos:

  1. Asegúrese de tener acceso a una cuenta de AWS. Configure su entorno para que AWS CLI pueda acceder a su cuenta a través de un usuario de AWS IAM o un rol de IAM. Recomendamos utilizar un rol de IAM. Para realizar pruebas en su cuenta personal, puede asociar las siguientes políticas de permisos gestionados al rol de IAM:

  2. Configure sus dependencias de forma local, como se muestra en el siguiente ejemplo.

    from datetime import datetime import os import json import logging import time # External Dependencies: import boto3 from botocore.exceptions import ClientError import sagemaker sess = boto3.Session() sm = sess.client("sagemaker") region = sess.region_name account = boto3.client("sts").get_caller_identity().get("Account") smsess = sagemaker.Session(boto_session=sess) role = sagemaker.get_execution_role() # Configuration: bucket_name = smsess.default_bucket() prefix = "torchserve" output_path = f"s3://{bucket_name}/{prefix}/models" print(f"account={account}, region={region}, role={role}")
  3. Extraiga la imagen de DLC de PyTorch, como se muestra en el siguiente ejemplo.

    Las imágenes del DLC PyTorch de SageMaker AI están disponibles en todas las regiones de AWS. Para obtener más información, consulte la lista de imágenes de contenedores de DLC.

    baseimage = sagemaker.image_uris.retrieve( framework="pytorch", region="<region>", py_version="py310", image_scope="inference", version="2.0.1", instance_type="ml.g4dn.16xlarge", )
  4. Crear un espacio de trabajo local.

    mkdir -p workspace/

Añadir un paquete

En las secciones siguientes se describe cómo agregar y preinstalar paquetes a su imagen de DLC PyTorch.

Casos de uso de BYOC

Los siguientes pasos describen cómo añadir un paquete a su imagen de DLC de PyTorch. Para obtener más información sobre la personalización del contenedor, consulte Creación de imágenes personalizadas de contenedores de aprendizaje profundo de AWS.

  1. Supongamos que quiere añadir un paquete a la imagen de Docker del DLC PyTorch. Cree un Dockerfile en el directorio de docker, como se muestra en el siguiente ejemplo:

    mkdir -p workspace/docker cat workspace/docker/Dockerfile ARG BASE_IMAGE FROM $BASE_IMAGE #Install any additional libraries RUN pip install transformers==4.28.1
  2. Cree y publique la imagen de Docker personalizada mediante el siguiente script: build_and_push.sh.

    # Download script build_and_push.sh to workspace/docker ls workspace/docker build_and_push.sh Dockerfile # Build and publish your docker image reponame = "torchserve" versiontag = "demo-0.1" ./build_and_push.sh {reponame} {versiontag} {baseimage} {region} {account}

Casos de uso de la preinstalación de SageMaker AI

El siguiente ejemplo muestra cómo preinstalar un paquete en su contenedor de DLC PyTorch. Debe crear un archivo requirements.txt localmente en el directorio workspace/code.

mkdir -p workspace/code cat workspace/code/requirements.txt transformers==4.28.1

Crear artefactos del modelo TorchServe

En el siguiente ejemplo, utilizamos el modelo MNIST previamente entrenado. Creamos un directorio workspace/mnist, implementamos mnist_handler.py siguiendo las instrucciones de servicio personalizadas de TorchServe y configuramos los parámetros del modelo (como el tamaño del lote y los trabajadores) en model-config.yaml. A continuación, utilizamos la herramienta torch-model-archiver de TorchServe para crear los artefactos del modelo y subirlos a Amazon S3.

  1. Configure los parámetros del modelo en model-config.yaml.

    ls -al workspace/mnist-dev mnist.py mnist_handler.py mnist_cnn.pt model-config.yaml # config the model cat workspace/mnist-dev/model-config.yaml minWorkers: 1 maxWorkers: 1 batchSize: 4 maxBatchDelay: 200 responseTimeout: 300
  2. Cree los artefactos del modelo mediante torch-model-archiver.

    torch-model-archiver --model-name mnist --version 1.0 --model-file workspace/mnist-dev/mnist.py --serialized-file workspace/mnist-dev/mnist_cnn.pt --handler workspace/mnist-dev/mnist_handler.py --config-file workspace/mnist-dev/model-config.yaml --archive-format tgz

    Si desea preinstalar un paquete, debe incluir el directorio code en el archivo tar.gz.

    cd workspace torch-model-archiver --model-name mnist --version 1.0 --model-file mnist-dev/mnist.py --serialized-file mnist-dev/mnist_cnn.pt --handler mnist-dev/mnist_handler.py --config-file mnist-dev/model-config.yaml --archive-format no-archive cd mnist mv ../code . tar cvzf mnist.tar.gz .
  3. Suba mnist.tar.gz a Amazon S3.

    # upload mnist.tar.gz to S3 output_path = f"s3://{bucket_name}/{prefix}/models" aws s3 cp mnist.tar.gz {output_path}/mnist.tar.gz

Uso de puntos de conexión de un solo modelo para implementar con TorchServe

El siguiente ejemplo muestra cómo crear un punto de conexión de inferencia en tiempo real de un solo modelo, implementar el modelo en el punto de conexión y probar el punto de conexión mediante el Amazon SageMaker Python SDK.

from sagemaker.model import Model from sagemaker.predictor import Predictor # create the single model endpoint and deploy it on SageMaker AI model = Model(model_data = f'{output_path}/mnist.tar.gz', image_uri = baseimage, role = role, predictor_cls = Predictor, name = "mnist", sagemaker_session = smsess) endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime()) predictor = model.deploy(instance_type='ml.g4dn.xlarge', initial_instance_count=1, endpoint_name = endpoint_name, serializer=JSONSerializer(), deserializer=JSONDeserializer()) # test the endpoint import random import numpy as np dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()} res = predictor.predict(dummy_data)

Uso de puntos de conexión multimodelo para implementarlos con TorchServe

Los puntos de conexión multimodelo son una solución escalable y rentable para alojar una gran cantidad de modelos detrás de un punto de conexión. Mejoran la utilización de los puntos de conexión al compartir la misma flota de recursos y servir contenedores para alojar todos sus modelos. También reducen la sobrecarga de implementación porque SageMaker AI administra la carga y descarga de modelos de forma dinámica, además de escalar los recursos en función de los patrones de tráfico. Los puntos de conexión multimodelo son especialmente útiles para el aprendizaje profundo y los modelos de IA generativa que requieren una potencia de cálculo acelerada.

Al utilizar TorchServe en los puntos de conexión multimodelo de SageMaker AI, puede acelerar su desarrollo utilizando una pila de servidores con la que esté familiarizado y, al mismo tiempo, aprovechar el intercambio de recursos y la gestión simplificada de modelos que ofrecen los puntos de conexión multimodelo de SageMaker AI.

El siguiente ejemplo muestra cómo crear un punto de conexión multimodelo, implementar el modelo en el punto de conexión y probar el punto de conexión mediante el Amazon SageMaker Python SDK. Puede encontrar más detalles en este ejemplo de cuaderno.

from sagemaker.multidatamodel import MultiDataModel from sagemaker.model import Model from sagemaker.predictor import Predictor # create the single model endpoint and deploy it on SageMaker AI model = Model(model_data = f'{output_path}/mnist.tar.gz', image_uri = baseimage, role = role, sagemaker_session = smsess) endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime()) mme = MultiDataModel( name = endpoint_name, model_data_prefix = output_path, model = model, sagemaker_session = smsess) mme.deploy( initial_instance_count = 1, instance_type = "ml.g4dn.xlarge", serializer=sagemaker.serializers.JSONSerializer(), deserializer=sagemaker.deserializers.JSONDeserializer()) # list models list(mme.list_models()) # create mnist v2 model artifacts cp mnist.tar.gz mnistv2.tar.gz # add mnistv2 mme.add_model(mnistv2.tar.gz) # list models list(mme.list_models()) predictor = Predictor(endpoint_name=mme.endpoint_name, sagemaker_session=smsess) # test the endpoint import random import numpy as np dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()} res = predictor.predict(date=dummy_data, target_model="mnist.tar.gz")

Métricas

TorchServe admite métricas tanto a nivel de sistema como a nivel de modelo. Puede habilitar las métricas en el modo de formato de registro o en el modo Prometheus a través de la variable de entorno TS_METRICS_MODE. Puede usar el archivo metrics.yaml de configuración de métricas central de TorchServe para especificar los tipos de métricas que se van a rastrear, como el recuento de solicitudes, la latencia, el uso de memoria, el uso de la GPU, etc. Al consultar este archivo, puede obtener información sobre el rendimiento y el estado de los modelos implementados y monitorear de manera efectiva el comportamiento del servidor de TorchServe en tiempo real. Para obtener información más detallada, consulte la documentación de métricas de TorchServe.

Puede acceder a los registros de métricas de TorchServe que son similares al formato StatsD a través del filtro de registros de Amazon CloudWatch. A continuación se muestra un ejemplo de un registro de métricas de TorchServe:

CPUUtilization.Percent:0.0|#Level:Host|#hostname:my_machine_name,timestamp:1682098185 DiskAvailable.Gigabytes:318.0416717529297|#Level:Host|#hostname:my_machine_name,timestamp:1682098185