Implemente la lógica de preprocesamiento en un modelo de aprendizaje automático en un único punto final mediante una canalización de inferencias en Amazon SageMaker - Recomendaciones de AWS

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.

Implemente la lógica de preprocesamiento en un modelo de aprendizaje automático en un único punto final mediante una canalización de inferencias en Amazon SageMaker

Creado por Mohan Gowda Purushothama (AWS), Gabriel Rodríguez García (AWS) y Mateusz Zaremba (AWS)

Entorno: producción

Tecnologías: machine learning e inteligencia artificial; contenedores y microservicios

Servicios de AWS: Amazon SageMaker; Amazon ECR

Resumen

Este patrón explica cómo implementar varios objetos del modelo de canalización en un único punto final mediante una canalización de inferencia en Amazon SageMaker. El objeto del modelo de canalización representa diferentes etapas del flujo de trabajo del machine learning (ML), como el preprocesamiento, la inferencia de modelos y el posprocesamiento. Para ilustrar el despliegue de objetos del modelo de canalización conectados en serie, este patrón muestra cómo implementar un contenedor Scikit-learn de preprocesamiento y un modelo de regresión basado en el algoritmo de aprendizaje lineal incorporado. SageMaker La implementación se aloja en un único punto final. SageMaker

Nota: La implementación de este patrón utiliza el tipo de instancia ml.m4.2xlarge. Le recomendamos usar un tipo de instancia que se ajuste a sus requisitos de tamaño de datos y a la complejidad de su flujo de trabajo. Para obtener más información, consulta los SageMaker precios de Amazon. Este patrón usa imágenes de Docker prediseñadas para Scikit-learn, pero puede usar sus propios contenedores de Docker e integrarlos en su flujo de trabajo.

Requisitos previos y limitaciones

Requisitos previos 

Versiones de producto

Arquitectura

Pila de tecnología de destino

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon SageMaker

  • Amazon SageMaker Studio

  • Amazon Simple Storage Service (Amazon S3)

  • Punto final de inferencia en tiempo real para Amazon SageMaker

Arquitectura de destino

El siguiente diagrama muestra la arquitectura para el despliegue de un objeto del modelo de SageMaker canalización de Amazon.

Arquitectura para el despliegue de un objeto de modelo de SageMaker canalización

En el diagrama, se muestra el siguiente flujo de trabajo:

  1. Un SageMaker cuaderno despliega un modelo de canalización.

  2. Un bucket de S3 almacena los artefactos del modelo.

  3. Amazon ECR obtiene las imágenes del contenedor de origen del bucket de S3.

Herramientas

Herramientas de AWS

  • Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.

  • Amazon SageMaker es un servicio de aprendizaje automático gestionado que le ayuda a crear y entrenar modelos de aprendizaje automático para luego implementarlos en un entorno hospedado listo para la producción.

  • Amazon SageMaker Studio es un entorno de desarrollo integrado (IDE) basado en la web para el aprendizaje automático que le permite crear, entrenar, depurar, implementar y supervisar sus modelos de aprendizaje automático.

  • Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

Código

El código de este patrón está disponible en GitHub Inference Pipeline con los repositorios Scikit-learn y Linear Learner.

Epics

TareaDescripciónHabilidades requeridas

Prepare el conjunto de datos para la tarea de regresión.

Abre una libreta en Amazon SageMaker Studio.

Para importar todas las bibliotecas necesarias e inicializar su entorno de trabajo, utilice el siguiente código de ejemplo en su bloc de notas:

import sagemaker from sagemaker import get_execution_role sagemaker_session = sagemaker.Session() # Get a SageMaker-compatible role used by this Notebook Instance. role = get_execution_role() # S3 prefix bucket = sagemaker_session.default_bucket() prefix = "Scikit-LinearLearner-pipeline-abalone-example"

Para descargar un conjunto de datos de muestra, añada el siguiente código a su bloc de notas:

! mkdir abalone_data ! aws s3 cp s3://sagemaker-sample-files/datasets/tabular/uci_abalone/abalone.csv ./abalone_data

Nota: El ejemplo de este patrón utiliza el conjunto de datos Abalone del UCI Machine Learning Repository.

Científico de datos

Cargue el conjunto de datos en un bucket de S3.

En el bloc de notas en el que preparó su conjunto de datos anteriormente, añada el siguiente código para cargar los datos de muestra en un bucket de S3:

WORK_DIRECTORY = "abalone_data" train_input = sagemaker_session.upload_data( path="{}/{}".format(WORK_DIRECTORY, "abalone.csv"), bucket=bucket, key_prefix="{}/{}".format(prefix, "train"), )
Científico de datos
TareaDescripciónHabilidades requeridas

Prepare el script preprocessor.py.

  1. Copie la lógica de preprocesamiento del archivo Python del repositorio GitHub sklearn_abalone_featurizer.py y, a continuación, pegue el código en un archivo Python independiente denominadosklearn_abalone_featurizer.py. Puede modificar el código para que se adapte a su conjunto de datos y flujo de trabajo personalizados.

  2. Guarde el sklearn_abalone_featurizer.py archivo en el directorio raíz del proyecto (es decir, en la misma ubicación en la que ejecuta el SageMaker bloc de notas).

Científico de datos

Cree el objeto del preprocesador SKLearn.

Para crear un objeto preprocesador de SKLearn (denominado Estimator de SKLearn) que pueda incorporar a su proceso de inferencia final, ejecute el siguiente código en su bloc de notas: SageMaker

from sagemaker.sklearn.estimator import SKLearn FRAMEWORK_VERSION = "0.23-1" script_path = "sklearn_abalone_featurizer.py" sklearn_preprocessor = SKLearn( entry_point=script_path, role=role, framework_version=FRAMEWORK_VERSION, instance_type="ml.c4.xlarge", sagemaker_session=sagemaker_session, ) sklearn_preprocessor.fit({"train": train_input})
Científico de datos

Pruebe la inferencia del preprocesador.

Para confirmar que su preprocesador está definido correctamente, inicie un trabajo de transformación por lotes introduciendo el siguiente código en su cuaderno: SageMaker

# Define a SKLearn Transformer from the trained SKLearn Estimator transformer = sklearn_preprocessor.transformer( instance_count=1, instance_type="ml.m5.xlarge", assemble_with="Line", accept="text/csv" ) # Preprocess training input transformer.transform(train_input, content_type="text/csv") print("Waiting for transform job: " + transformer.latest_transform_job.job_name) transformer.wait() preprocessed_train = transformer.output_path
TareaDescripciónHabilidades requeridas

Cree un objeto modelo.

Para crear un objeto modelo basado en el algoritmo de aprendizaje lineal, introduzca el siguiente código en su SageMaker bloc de notas:

import boto3 from sagemaker.image_uris import retrieve ll_image = retrieve("linear-learner", boto3.Session().region_name) s3_ll_output_key_prefix = "ll_training_output" s3_ll_output_location = "s3://{}/{}/{}/{}".format( bucket, prefix, s3_ll_output_key_prefix, "ll_model" ) ll_estimator = sagemaker.estimator.Estimator( ll_image, role, instance_count=1, instance_type="ml.m4.2xlarge", volume_size=20, max_run=3600, input_mode="File", output_path=s3_ll_output_location, sagemaker_session=sagemaker_session, ) ll_estimator.set_hyperparameters(feature_dim=10, predictor_type="regressor", mini_batch_size=32) ll_train_data = sagemaker.inputs.TrainingInput( preprocessed_train, distribution="FullyReplicated", content_type="text/csv", s3_data_type="S3Prefix", ) data_channels = {"train": ll_train_data} ll_estimator.fit(inputs=data_channels, logs=True)

El código anterior recupera la imagen de Docker de Amazon ECR correspondiente del registro público de Amazon ECR del modelo, crea un objeto estimador y, a continuación, utiliza ese objeto para entrenar el modelo de regresión.

Científico de datos
TareaDescripciónHabilidades requeridas

Implemente el modelo de canalización.

Para crear un objeto de modelo de canalización (es decir, un objeto de preprocesador) e implementar el objeto, introduzca el siguiente código en su SageMaker bloc de notas:

from sagemaker.model import Model from sagemaker.pipeline import PipelineModel import boto3 from time import gmtime, strftime timestamp_prefix = strftime("%Y-%m-%d-%H-%M-%S", gmtime()) scikit_learn_inferencee_model = sklearn_preprocessor.create_model() linear_learner_model = ll_estimator.create_model() model_name = "inference-pipeline-" + timestamp_prefix endpoint_name = "inference-pipeline-ep-" + timestamp_prefix sm_model = PipelineModel( name=model_name, role=role, models= [scikit_learn_inferencee_model, linear_learner_model] ) sm_model.deploy(initial_instance_count=1, instance_type="ml.c4.xlarge", endpoint_name=endpoint_name)

Nota: Puede ajustar el tipo de instancia utilizado en el objeto modelo para adaptarlo a sus necesidades.

Científico de datos

Pruebe la inferencia.

Para confirmar que el punto final funciona correctamente, ejecute el siguiente código de inferencia de ejemplo en su SageMaker bloc de notas:

from sagemaker.predictor import Predictor from sagemaker.serializers import CSVSerializer payload = "M, 0.44, 0.365, 0.125, 0.516, 0.2155, 0.114, 0.155" actual_rings = 10 predictor = Predictor( endpoint_name=endpoint_name, sagemaker_session=sagemaker_session, serializer=CSVSerializer() ) print(predictor.predict(payload))
Científico de datos

Recursos relacionados