Implante a lógica de pré-processamento em um modelo de ML em um único endpoint usando um pipeline de inferência na Amazon SageMaker - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Implante a lógica de pré-processamento em um modelo de ML em um único endpoint usando um pipeline de inferência na Amazon SageMaker

Criado por Mohan Gowda Purushothama (AWS), Gabriel Rodriguez Garcia (AWS) e Mateusz Zaremba (AWS)

Ambiente: produção

Tecnologias: machine learning e IA; contêineres e microsserviços

Serviços da AWS: Amazon SageMaker; Amazon ECR

Resumo

Esse padrão explica como implantar vários objetos de modelo de pipeline em um único endpoint usando um pipeline de inferência na Amazon. SageMaker O objeto do modelo de pipeline representa diferentes estágios do fluxo de trabalho de machine learning (ML), como pré-processamento, inferência de modelos e pós-processamento. Para ilustrar a implantação de objetos de modelo de pipeline conectados em série, esse padrão mostra como implantar um contêiner Scikit-learn de pré-processamento e um modelo de regressão baseado no algoritmo linear do aluno incorporado. SageMaker A implantação é hospedada atrás de um único endpoint em SageMaker.

Observação: a implantação nesse padrão usa o tipo de instância ml.m4.2xlarge. Recomendamos usar um tipo de instância que se alinhe aos seus requisitos de tamanho de dados e à complexidade do seu fluxo de trabalho. Para obter mais informações, consulte Amazon SageMaker Pricing. Esse padrão usa imagens do Docker pré-construídas para o Scikit-learn, mas você pode usar seus próprios contêineres do Docker e integrá-los ao seu fluxo de trabalho.

Pré-requisitos e limitações

Pré-requisitos

Versões do produto

Arquitetura

Pilha de tecnologias de destino

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon SageMaker

  • SageMaker Estúdio Amazon

  • Amazon Simple Storage Service (Amazon S3)

  • Endpoint de inferência em tempo real para a Amazon SageMaker

Arquitetura de destino

O diagrama a seguir mostra a arquitetura para a implantação de um objeto de modelo de SageMaker pipeline da Amazon.

Arquitetura para implantação do objeto de modelo de SageMaker pipeline

O diagrama mostra o seguinte fluxo de trabalho:

  1. Um SageMaker notebook implanta um modelo de pipeline.

  2. Um bucket do S3 armazena os artefatos do modelo.

  3. O Amazon ECR obtém as imagens do contêiner de origem do bucket do S3.

Ferramentas

Ferramentas da AWS

  • O Amazon Elastic Container Registry (Amazon ECR) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.

  • SageMakerA Amazon é um serviço gerenciado de ML que ajuda você a criar e treinar modelos de ML e depois implantá-los em um ambiente hospedado pronto para produção.

  • O Amazon SageMaker Studio é um ambiente de desenvolvimento integrado (IDE) baseado na web para ML que permite criar, treinar, depurar, implantar e monitorar seus modelos de ML.

  • O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

Código

O código desse padrão está disponível no GitHub Inference Pipeline com o repositório Scikit-learn e Linear Learner.

Épicos

TarefaDescriçãoHabilidades necessárias

Prepare o conjunto de dados para sua tarefa de regressão.

Abra um caderno no Amazon SageMaker Studio.

Para importar todas as bibliotecas necessárias e inicializar seu ambiente de trabalho, use o código de exemplo a seguir em seu notebook:

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 baixar um conjunto de dados de exemplo, adicione o seguinte código ao seu caderno:

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

Observação: o exemplo deste padrão usa o Abalone Data Set do UCI Machine Learning Repository.

Cientista de dados

Faça upload do conjunto de dados em um bucket do S3.

No caderno em que você preparou seu conjunto de dados anteriormente, adicione o código a seguir para carregar seus dados de amostra em um bucket do S3:

WORK_DIRECTORY = "abalone_data" train_input = sagemaker_session.upload_data( path="{}/{}".format(WORK_DIRECTORY, "abalone.csv"), bucket=bucket, key_prefix="{}/{}".format(prefix, "train"), )
Cientista de dados
TarefaDescriçãoHabilidades necessárias

Prepare o script preprocessor.py.

  1. Copie a lógica de pré-processamento do arquivo Python GitHub no repositório sklearn_abalone_featurizer.py e cole o código em um arquivo Python separado chamado. sklearn_abalone_featurizer.py Você pode modificar o código para se adequar ao seu conjunto de dados personalizado e fluxo de trabalho personalizado.

  2. Salve o sklearn_abalone_featurizer.py arquivo no diretório raiz do seu projeto (ou seja, no mesmo local em que você executa o SageMaker notebook).

Cientista de dados

Crie o objeto do pré-processador do SKLearn.

Para criar um objeto pré-processador do skLearn (chamado skLearn Estimator) que você possa incorporar ao seu pipeline de inferência final, execute o seguinte código em seu notebook: 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})
Cientista de dados

Teste a inferência do pré-processador.

Para confirmar se seu pré-processador está definido corretamente, inicie um trabalho de transformação em lote inserindo o seguinte código em seu SageMaker notebook:

# 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
TarefaDescriçãoHabilidades necessárias

Criar um objeto modelo.

Para criar um objeto de modelo com base no algoritmo linear do aluno, insira o seguinte código em seu SageMaker caderno:

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)

O código anterior recupera a imagem do Docker do Amazon ECR do Registro público do Amazon ECR para o modelo, cria um objeto estimador e, em seguida, usa esse objeto para treinar o modelo de regressão.

Cientista de dados
TarefaDescriçãoHabilidades necessárias

Implantar o modelo de pipeline.

Para criar um objeto de modelo de pipeline (ou seja, um objeto de pré-processador) e implantar o objeto, insira o seguinte código em seu SageMaker notebook:

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)

Observação: você pode ajustar o tipo de instância usado no objeto de modelo para atender às suas necessidades.

Cientista de dados

Teste a inferência

Para confirmar se o endpoint está funcionando corretamente, execute o seguinte exemplo de código de inferência em seu SageMaker notebook:

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))
Cientista de dados

Recursos relacionados