Crie uma imagem de contêiner Docker personalizada SageMaker e use-a para treinamento de modelos em AWS Step Functions - 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á.

Crie uma imagem de contêiner Docker personalizada SageMaker e use-a para treinamento de modelos em AWS Step Functions

Criado por Julia Bluszcz (AWS), Neha Sharma (), Aubrey Oosthuizen (AWS), Mohan Gowda Purushothama () e Mateusz Zaremba () AWS AWS AWS

Ambiente: produção

Tecnologias: aprendizado de máquina e IA; DevOps

AWSserviços: AmazonECR; Amazon SageMaker; AWS Step Functions

Resumo

Esse padrão mostra como criar uma imagem de contêiner Docker para a Amazon SageMaker e usá-la para um modelo de treinamento no AWSStep Functions. Ao empacotar algoritmos personalizados em um contêiner, você pode executar praticamente qualquer código no SageMaker ambiente, independentemente da linguagem de programação, estrutura ou dependências.

No SageMaker notebook de exemplo fornecido, a imagem personalizada do contêiner Docker é armazenada no Amazon Elastic Container Registry (AmazonECR). Em seguida, o Step Functions usa o contêiner armazenado na Amazon ECR para executar um script de processamento do Python para. SageMaker Em seguida, o contêiner exporta o modelo para o Amazon Simple Storage Service (Amazon S3).

Pré-requisitos e limitações

Pré-requisitos

Versões do produto

  • AWSStep Functions Data Science SDK versão 2.3.0

  • Amazon SageMaker Python versão 2.78.0 SDK

Arquitetura

O diagrama a seguir mostra um exemplo de fluxo de trabalho para criar uma imagem de contêiner do Docker e usá-la para um modelo de treinamento no Step Functions: SageMaker

Fluxo de trabalho para criar uma imagem de contêiner do Docker SageMaker para uso como modelo de treinamento do Step Functions.

O diagrama mostra o seguinte fluxo de trabalho:

  1. Um cientista ou DevOps engenheiro de dados usa um SageMaker notebook da Amazon para criar uma imagem personalizada de contêiner Docker.

  2. Um cientista ou DevOps engenheiro de dados armazena a imagem do contêiner Docker em um repositório ECR privado da Amazon que está em um registro privado.

  3. Um cientista ou DevOps engenheiro de dados usa o contêiner Docker para executar uma tarefa de processamento do SageMaker Python em um fluxo de trabalho do Step Functions.

Automação e escala

O SageMaker notebook de exemplo nesse padrão usa um tipo de instância de ml.m5.xlarge notebook. É possível alterar o tipo de instância de acordo com seu caso de uso. Para obter mais informações sobre os tipos de instância de SageMaker notebook, consulte Amazon SageMaker Pricing.

Ferramentas

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

  • SageMakerA Amazon é um serviço gerenciado de aprendizado de máquina (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 Python SDK é uma biblioteca de código aberto para treinamento e implantação de modelos de aprendizado de máquina em. SageMaker

  • AWSO Step Functions é um serviço de orquestração sem servidor que ajuda você a combinar funções AWS Lambda e outros AWS serviços para criar aplicativos essenciais para os negócios.

  • AWSStep Functions Data Science Python SDK é uma biblioteca de código aberto que ajuda você a criar fluxos de trabalho do Step Functions que processam e publicam modelos de aprendizado de máquina.

Épicos

TarefaDescriçãoHabilidades necessárias

Configure a Amazon ECR e crie um novo registro privado.

Se você ainda não o fez, configure a Amazon ECR seguindo as instruções em Configuração com a Amazon ECR no Guia do ECR usuário da Amazon. Cada AWS conta é fornecida com um ECR registro privado padrão da Amazon.

DevOps engenheiro

Crie um repositório ECR privado da Amazon.

Siga as instruções em Criação de um repositório privado no Guia do ECR usuário da Amazon.

Observação: o repositório que você cria é onde você armazenará suas imagens personalizadas de contêiner do Docker.

DevOps engenheiro

Crie um Dockerfile que inclua as especificações necessárias para executar seu trabalho de SageMaker processamento.

Crie um Dockerfile que inclua as especificações necessárias para executar seu trabalho de SageMaker processamento configurando um Dockerfile. Para obter instruções, consulte Adaptar seu próprio contêiner de treinamento no Amazon SageMaker Developer Guide.

Para obter mais informações sobre Dockerfiles, consulte a Referência do Dockerfile na documentação do Docker.

Exemplo de células de código do caderno Jupyter para criar um Dockerfile

Célula 1

# Make docker folder !mkdir -p docker

Célula 2

%%writefile docker/Dockerfile FROM python:3.7-slim-buster RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3 ENV PYTHONUNBUFFERED=TRUE ENTRYPOINT ["python3"]
DevOps engenheiro

Crie sua imagem de contêiner Docker e envie-a para a AmazonECR.

  1. Crie a imagem do contêiner usando o Dockerfile que você criou executando o docker build comando no. AWS CLI

  2. Envie a imagem do contêiner para a Amazon ECR executando o docker push comando.

Para obter mais informações, consulte Criando e registrando o contêiner em Criando seu próprio contêiner de algoritmo em GitHub.

Exemplo de células de código do caderno Jupyter para criar e registrar uma imagem do Docker

Importante: antes de executar as células a seguir, verifique se você criou um Dockerfile e o armazenou no diretório chamado docker. Além disso, certifique-se de ter criado um ECR repositório da Amazon e de substituir o ecr_repository valor na primeira célula pelo nome do seu repositório.

Célula 1

import boto3 tag = ':latest' account_id = boto3.client('sts').get_caller_identity().get('Account') region = boto3.Session().region_name ecr_repository = 'byoc' image_uri = '{}.dkr.ecr.{}.amazonaws.com/{}'.format(account_id, region, ecr_repository + tag)

Célula 2

# Build docker image !docker build -t $image_uri docker

Célula 3

# Authenticate to ECR !aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com

Célula 4

# Push docker image !docker push $image_uri

Nota: você deve autenticar seu cliente Docker em seu registro privado para poder usar os comandos docker push e docker pull. Esses comandos enviam e extraem imagens de e para os repositórios em seu registro.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Crie um script Python que inclua sua lógica personalizada de processamento e treinamento de modelos.

Escreva uma lógica de processamento personalizada para ser executada em seu script de processamento de dados. Em seguida, salve-o como um script Python chamado training.py.

Para obter mais informações, consulte Traga seu próprio modelo com o Modo de SageMaker script ativado GitHub.

Exemplo de script Python que inclui processamento personalizado e lógica de treinamento de modelos

%%writefile training.py from numpy import empty import pandas as pd import os from sklearn import datasets, svm from joblib import dump, load if __name__ == '__main__': digits = datasets.load_digits() #create classifier object clf = svm.SVC(gamma=0.001, C=100.) #fit the model clf.fit(digits.data[:-1], digits.target[:-1]) #model output in binary format output_path = os.path.join('/opt/ml/processing/model', "model.joblib") dump(clf, output_path)
Cientista de dados

Crie um fluxo de trabalho do Step Functions que inclua sua tarefa de SageMaker processamento como uma das etapas.

Instale e importe o AWSStep Functions Data Science SDK e faça o upload do arquivo training.py para o Amazon S3. Em seguida, use o Amazon SageMaker Python SDK para definir uma etapa de processamento em Step Functions.

Importante: certifique-se de ter criado uma função de IAM execução para Step Functions em sua AWS conta.

Exemplo de configuração de ambiente e script de treinamento personalizado para upload para o Amazon S3

!pip install stepfunctions import boto3 import stepfunctions import sagemaker import datetime from stepfunctions import steps from stepfunctions.inputs import ExecutionInput from stepfunctions.steps import ( Chain ) from stepfunctions.workflow import Workflow from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput sagemaker_session = sagemaker.Session() bucket = sagemaker_session.default_bucket() role = sagemaker.get_execution_role() prefix = 'byoc-training-model' # See prerequisites section to create this role workflow_execution_role = f"arn:aws:iam::{account_id}:role/AmazonSageMaker-StepFunctionsWorkflowExecutionRole" execution_input = ExecutionInput( schema={ "PreprocessingJobName": str}) input_code = sagemaker_session.upload_data( "training.py", bucket=bucket, key_prefix="preprocessing.py", )

Exemplo SageMaker de definição de etapa de processamento que usa uma ECR imagem personalizada da Amazon e um script Python

Nota: certifique-se de usar o parâmetro execution_input para especificar o nome do trabalho. O valor do parâmetro deve ser exclusivo sempre que a tarefa for executada. Além disso, o código do arquivo training.py é passado como um parâmetro input para o ProcessingStep, o que significa que ele será copiado dentro do contêiner. O destino do código ProcessingInput é o mesmo do segundo argumento dentro do container_entrypoint.

script_processor = ScriptProcessor(command=['python3'], image_uri=image_uri, role=role, instance_count=1, instance_type='ml.m5.xlarge') processing_step = steps.ProcessingStep( "training-step", processor=script_processor, job_name=execution_input["PreprocessingJobName"], inputs=[ ProcessingInput( source=input_code, destination="/opt/ml/processing/input/code", input_name="code", ), ], outputs=[ ProcessingOutput( source='/opt/ml/processing/model', destination="s3://{}/{}".format(bucket, prefix), output_name='byoc-example') ], container_entrypoint=["python3", "/opt/ml/processing/input/code/training.py"], )

Exemplo de fluxo de trabalho do Step Functions que executa uma tarefa SageMaker de processamento

Nota: Esse exemplo de fluxo de trabalho inclui somente a etapa do trabalho de SageMaker processamento, não um fluxo de trabalho completo do Step Functions. Para ver um exemplo completo de fluxo de trabalho, consulte Exemplos de cadernos SageMaker na SDK documentação do AWS Step Functions Data Science.

workflow_graph = Chain([processing_step]) workflow = Workflow( name="ProcessingWorkflow", definition=workflow_graph, role=workflow_execution_role ) workflow.create() # Execute workflow execution = workflow.execute( inputs={ "PreprocessingJobName": str(datetime.datetime.now().strftime("%Y%m%d%H%M-%SS")), # Each pre processing job (SageMaker processing job) requires a unique name, } ) execution_output = execution.get_output(wait=True)
Cientista de dados

Recursos relacionados