Implemente modelos para inferência em tempo real - Amazon SageMaker

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á.

Implemente modelos para inferência em tempo real

A inferência em tempo real é ideal para workloads de inferência em que você tem requisitos em tempo real, interativos e de baixa latência. Esta seção mostra como você pode usar a inferência em tempo real para obter previsões do seu modelo de forma interativa.

Para implantar o modelo que produziu a melhor métrica de validação em um experimento do Autopilot, você tem várias opções. Por exemplo, ao usar o Autopilot no SageMaker Studio Classic, você pode implantar o modelo automática ou manualmente. Você também pode usar SageMaker APIs para implantar manualmente um modelo de piloto automático.

As guias a seguir mostram três opções para implantar seu modelo. Estas instruções supõem que você já criou um modelo no Autopilot. Se você não tem um modelo, consulte Crie trabalhos de regressão ou classificação para dados tabulares usando o AutoML API. Para ver exemplos de cada opção, abra cada guia.

A interface do usuário do Autopilot contém menus suspensos úteis, botões de alternância, dicas de ferramentas e muito mais para ajudá-lo(a) a navegar pela implantação do modelo. Você pode implantar usando um dos seguintes procedimentos: automático ou manual.

  • Implantação automática: para implantar automaticamente o melhor modelo de um experimento do Autopilot em um endpoint

    1. Crie um experimento no SageMaker Studio Classic.

    2. Mude o valor de Auto deploy (implantação automática) para Sim.

      nota

      A implantação automática falhará se a cota de recursos padrão ou a cota de clientes para instâncias de endpoint em uma região for muito limitada. No modo hyperparameter optimization (HPO), você precisa ter pelo menos duas instâncias ml.m5.2xlarge. No modo de agrupamento, você precisa ter pelo menos uma instância ml.m5.12xlarge. Se você encontrar uma falha relacionada às cotas, poderá solicitar um aumento do limite de serviço para instâncias de SageMaker endpoint.

  • Implantação manual: para implantar manualmente o melhor modelo de um experimento do Autopilot em um endpoint

    1. Crie um experimento no SageMaker Studio Classic.

    2. Mude o valor de Auto deploy (implantação automática) para Não.

    3. Selecione o modelo que deseja implantar em Model name (Nome do modelo).

    4. Selecione o botão laranja de Deployment and advanced settings (Implantação e configurações avançadas) localizado à direita do placar. Isso abre uma nova guia.

    5. Configure o nome do endpoint, o tipo de instância e outras informações opcionais.

    6. Selecione o botão laranja Deploy model (Implantar modelo) para implantar em um endpoint.

    7. Verifique o progresso do processo de criação do endpoint no https://console.aws.amazon.com/sagemaker/navegando até a seção Endpoints. Essa seção está localizada no menu suspenso Inference (Inferência) no painel de navegação.

    8. Depois que o status do endpoint mudar de Creating para InService, conforme mostrado abaixo, retorne ao Studio Classic e invoque o endpoint.

      SageMaker console: página de endpoints para criar um endpoint ou verificar o status do endpoint.

Você também pode obter inferência em tempo real implantando seu modelo usando API chamadas. Esta seção mostra as cinco etapas desse processo usando trechos de código AWS Command Line Interface (AWS CLI).

Para obter exemplos de código completos para ambos os AWS CLI comandos e AWS SDK para Python (boto3), abra as guias diretamente seguindo estas etapas.

  1. Obtenha definições de candidatos

    Obtenha as definições do contêiner candidato em InferenceContainers. Essas definições candidatas são usadas para criar um SageMaker modelo.

    O exemplo a seguir usa o DescribeAutoMLJobAPIpara obter as definições do candidato ao melhor modelo. Veja o AWS CLI comando a seguir como exemplo.

    aws sagemaker describe-auto-ml-job --auto-ml-job-name <job-name> --region <region>
  2. Listar candidatos

    O exemplo a seguir usa o ListCandidatesForAutoMLJobAPIpara listar todos os candidatos. O comando AWS CLI a seguir é um exemplo.

    aws sagemaker list-candidates-for-auto-ml-job --auto-ml-job-name <job-name> --region <region>
  3. Crie um SageMaker modelo

    Use as definições de contêiner das etapas anteriores para criar um SageMaker modelo usando CreateModelAPIo. Veja o AWS CLI comando a seguir como exemplo.

    aws sagemaker create-model --model-name '<your-custom-model-name>' \ --containers ['<container-definition1>, <container-definition2>, <container-definition3>]' \ --execution-role-arn '<execution-role-arn>' --region '<region>
  4. Criar uma configuração de endpoint

    O exemplo a seguir usa o CreateEndpointConfigAPIpara criar uma configuração de endpoint. Veja o AWS CLI comando a seguir como exemplo.

    aws sagemaker create-endpoint-config --endpoint-config-name '<your-custom-endpoint-config-name>' \ --production-variants '<list-of-production-variants>' \ --region '<region>'
  5. Criar o endpoint

    O AWS CLI exemplo a seguir usa o CreateEndpointAPIpara criar o endpoint.

    aws sagemaker create-endpoint --endpoint-name '<your-custom-endpoint-name>' \ --endpoint-config-name '<endpoint-config-name-you-just-created>' \ --region '<region>'

    Verifique o progresso da implantação do seu endpoint usando o. DescribeEndpointAPI Veja o AWS CLI comando a seguir como exemplo.

    aws sagemaker describe-endpoint —endpoint-name '<endpoint-name>' —region <region>

    Depois que EndpointStatus muda para InService, o endpoint está pronto para ser usado para inferência em tempo real.

  6. Invoque o endpoint

    A estrutura de comando a seguir invoca o endpoint para inferência em tempo real.

    aws sagemaker invoke-endpoint --endpoint-name '<endpoint-name>' \ --region '<region>' --body '<your-data>' [--content-type] '<content-type>' <outfile>

As guias a seguir contêm exemplos de código completos para implantar um modelo com for AWS SDK Python (boto3) ou o. AWS CLI

AWS SDK for Python (boto3)
  1. Obtenha as definições do candidato usando o exemplo de código a seguir.

    import sagemaker import boto3 session = sagemaker.session.Session() sagemaker_client = boto3.client('sagemaker', region_name='us-west-2') job_name = 'test-auto-ml-job' describe_response = sm_client.describe_auto_ml_job(AutoMLJobName=job_name) # extract the best candidate definition from DescribeAutoMLJob response best_candidate = describe_response['BestCandidate'] # extract the InferenceContainers definition from the caandidate definition inference_containers = best_candidate['InferenceContainers']
  2. Crie o modelo usando o exemplo de código a seguir.

    # Create Model model_name = 'test-model' sagemaker_role = 'arn:aws:iam:444455556666:role/sagemaker-execution-role' create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, Containers = inference_containers )
  3. Crie a configuração de endpoint usando o exemplo de código a seguir.

    endpoint_config_name = 'test-endpoint-config' instance_type = 'ml.m5.2xlarge' # for all supported instance types, see # https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html#sagemaker-Type-ProductionVariant-InstanceType # Create endpoint config endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "VariantName": "variant1", "ModelName": model_name, "InstanceType": instance_type, "InitialInstanceCount": 1 } ] ) print(f"Created EndpointConfig: {endpoint_config_response['EndpointConfigArn']}")
  4. Crie o endpoint e implante o modelo com o exemplo de código a seguir.

    # create endpoint and deploy the model endpoint_name = 'test-endpoint' create_endpoint_response = sagemaker_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name) print(create_endpoint_response)

    Verifique o status da criação do endpoint usando o exemplo de código a seguir.

    # describe endpoint creation status status = sagemaker_client.describe_endpoint(EndpointName=endpoint_name)["EndpointStatus"]
  5. Invoque o endpoint para inferência em tempo real usando a estrutura de comando a seguir.

    # once endpoint status is InService, you can invoke the endpoint for inferencing if status == "InService": sm_runtime = boto3.Session().client('sagemaker-runtime') inference_result = sm_runtime.invoke_endpoint(EndpointName='test-endpoint', ContentType='text/csv', Body='1,2,3,4,class')
AWS Command Line Interface (AWS CLI)
  1. Obtenha as definições do candidato usando o exemplo de código a seguir.

    aws sagemaker describe-auto-ml-job --auto-ml-job-name 'test-automl-job' --region us-west-2
  2. Crie o modelo usando o exemplo de código a seguir.

    aws sagemaker create-model --model-name 'test-sagemaker-model' --containers '[{ "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3", amzn-s3-demo-bucket1 "ModelDataUrl": "s3://amzn-s3-demo-bucket/output/model.tar.gz", "Environment": { "AUTOML_SPARSE_ENCODE_RECORDIO_PROTOBUF": "1", "AUTOML_TRANSFORM_MODE": "feature-transform", "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "application/x-recordio-protobuf", "SAGEMAKER_PROGRAM": "sagemaker_serve", "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code" } }, { "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-xgboost:1.3-1-cpu-py3", "ModelDataUrl": "s3://amzn-s3-demo-bucket/output/model.tar.gz", "Environment": { "MAX_CONTENT_LENGTH": "20971520", "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv", "SAGEMAKER_INFERENCE_OUTPUT": "predicted_label", "SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,probabilities" } }, { "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3", aws-region "ModelDataUrl": "s3://amzn-s3-demo-bucket/output/model.tar.gz", "Environment": { "AUTOML_TRANSFORM_MODE": "inverse-label-transform", "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv", "SAGEMAKER_INFERENCE_INPUT": "predicted_label", "SAGEMAKER_INFERENCE_OUTPUT": "predicted_label", "SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,labels,probabilities", "SAGEMAKER_PROGRAM": "sagemaker_serve", "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code" } }]' \ --execution-role-arn 'arn:aws:iam::1234567890:role/sagemaker-execution-role' \ --region 'us-west-2'

    Para obter detalhes adicionais, consulte Criando um modelo.

    O comando create model responderá no formato a seguir.

    { "ModelArn": "arn:aws:sagemaker:us-west-2:1234567890:model/test-sagemaker-model" }
  3. Crie a configuração de endpoint usando o exemplo de código a seguir.

    aws sagemaker create-endpoint-config --endpoint-config-name 'test-endpoint-config' \ --production-variants '[{"VariantName": "variant1", "ModelName": "test-sagemaker-model", "InitialInstanceCount": 1, "InstanceType": "ml.m5.2xlarge" }]' \ --region us-west-2

    O comando de configuração create endpoint responderá no formato a seguir.

    { "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:1234567890:endpoint-config/test-endpoint-config" }
  4. Crie um endpoint usando o exemplo de código a seguir.

    aws sagemaker create-endpoint --endpoint-name 'test-endpoint' \ --endpoint-config-name 'test-endpoint-config' \ --region us-west-2

    O comando create endpoint responderá no formato a seguir.

    { "EndpointArn": "arn:aws:sagemaker:us-west-2:1234567890:endpoint/test-endpoint" }

    Verifique o progresso da implantação do endpoint usando o seguinte exemplo de código CLIdescribe-endpoint.

    aws sagemaker describe-endpoint --endpoint-name 'test-endpoint' --region us-west-2

    A verificação de progresso anterior responderá no formato a seguir.

    { "EndpointName": "test-endpoint", "EndpointArn": "arn:aws:sagemaker:us-west-2:1234567890:endpoint/test-endpoint", "EndpointConfigName": "test-endpoint-config", "EndpointStatus": "Creating", "CreationTime": 1660251167.595, "LastModifiedTime": 1660251167.595 }

    Depois das alterações EndpointStatus para InService, o endpoint está pronto para uso em inferência em tempo real.

  5. Invoque o endpoint para inferência em tempo real usando a estrutura de comando a seguir.

    aws sagemaker-runtime invoke-endpoint --endpoint-name 'test-endpoint' \ --region 'us-west-2' \ --body '1,51,3.5,1.4,0.2' \ --content-type 'text/csv' \ '/tmp/inference_output'

    Para obter mais opções, consulte invocar um endpoint.

Você pode implantar um modelo do Autopilot a partir de uma conta diferente da conta original na qual o modelo foi gerado. Para implementar a implantação do modelo entre contas, esta seção mostra como fazer o seguinte:

  1. Conceder permissão à conta de implantação

    Para assumir a função na conta geradora, você deve dar permissão para a conta de implantação. Isso permite que a conta de implantação descreva as tarefas do Autopilot na conta geradora.

    O exemplo a seguir usa uma conta geradora com uma entidade sagemaker-role confiável. O exemplo mostra como dar permissão a uma conta de implantação com o ID 111122223333 para assumir a função da conta geradora.

    "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "sagemaker.amazonaws.com" ], "AWS": [ "111122223333"] }, "Action": "sts:AssumeRole" }

    A nova conta com o ID 111122223333 agora pode assumir a função da conta geradora.

    Em seguida, chame a DescribeAutoMLJob API partir da conta de implantação para obter uma descrição do trabalho criado pela conta geradora.

    O exemplo de código a seguir descreve o modelo da conta de implantação.

    import sagemaker import boto3 session = sagemaker.session.Session() sts_client = boto3.client('sts') sts_client.assume_role role = 'arn:aws:iam::111122223333:role/sagemaker-role' role_session_name = "role-session-name" _assumed_role = sts_client.assume_role(RoleArn=role, RoleSessionName=role_session_name) credentials = _assumed_role["Credentials"] access_key = credentials["AccessKeyId"] secret_key = credentials["SecretAccessKey"] session_token = credentials["SessionToken"] session = boto3.session.Session() sm_client = session.client('sagemaker', region_name='us-west-2', aws_access_key_id=access_key, aws_secret_access_key=secret_key, aws_session_token=session_token) # now you can call describe automl job created in account A job_name = "test-job" response= sm_client.describe_auto_ml_job(AutoMLJobName=job_name)
  2. Conceda acesso à conta de implantação aos artefatos do modelo na conta geradora.

    Conceda acesso à conta de implantação somente aos artefatos do modelo na conta geradora para implantá-la. Eles estão localizados no S3 OutputPath que foi especificado na CreateAutoMLJob API chamada original durante a geração do modelo.

    Para dar acesso à conta de implantação aos artefatos do modelo, escolha uma das seguintes opções:

    1. Dê acesso ao ModelDataUrl da conta geradora para a conta de implantação.

      Em seguida, você precisa dar permissão à conta de implantação para assumir a função. Siga as etapas de inferência em tempo real para implantar.

    2. Copie artefatos do modelo do S3 original da conta geradora OutputPath para a conta geradora.

      Para conceder acesso aos artefatos do modelo, defina um modelo best_candidate e reatribua os contêineres do modelo à nova conta.

      O exemplo a seguir mostra como definir um modelo best_candidate e reatribuir o ModelDataUrl.

      best_candidate = automl.describe_auto_ml_job()['BestCandidate'] # reassigning ModelDataUrl for best_candidate containers below new_model_locations = ['new-container-1-ModelDataUrl', 'new-container-2-ModelDataUrl', 'new-container-3-ModelDataUrl'] new_model_locations_index = 0 for container in best_candidate['InferenceContainers']: container['ModelDataUrl'] = new_model_locations[new_model_locations_index++]

      Após essa atribuição de contêineres, siga as etapas em Implemente usando SageMaker APIs para implantar.

Para criar uma carga útil em inferência em tempo real, veja o exemplo do bloco de anotações para definir uma carga útil de teste. Para criar a carga a partir de um CSV arquivo e invocar um endpoint, consulte a seção Prever com seu modelo em Criar um modelo de aprendizado de máquina automaticamente.