

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 no AWS Step Functions
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions"></a>

*Julia Bluszcz, Aubrey Oosthuizen, Mohan Gowda Purushothama, Neha Sharma e Mateusz Zaremba, Amazon Web Services*

## Resumo
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-summary"></a>

Esse padrão mostra como criar uma imagem de contêiner Docker para a [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) e usá-la para um modelo de treinamento no [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html). 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](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html) de exemplo fornecido, a imagem personalizada do contêiner Docker é armazenada no [Amazon Elastic Container Registry (Amazon ECR).](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) Em seguida, o Step Functions usa o contêiner armazenado no Amazon ECR para executar um script de processamento do Python para. SageMaker Depois disso, o contêiner exporta o modelo para o [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html).

## Pré-requisitos e limitações
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Uma [função do AWS Identity and Access Management (IAM) para SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html) com permissões do Amazon S3
+ Um [perfil do IAM destinado ao Step Functions](https://sagemaker-examples.readthedocs.io/en/latest/step-functions-data-science-sdk/step_functions_mlworkflow_processing/step_functions_mlworkflow_scikit_learn_data_processing_and_model_evaluation.html#Create-an-Execution-Role-for-Step-Functions)
+ Familiaridade com o Python
+ Familiaridade com o Amazon SageMaker Python SDK
+ Familiaridade com a AWS Command Line Interface (AWS CLI)
+ Familiaridade com o AWS SDK para Python (Boto3)
+ Familiaridade com o Amazon ECR
+ Familiaridade com o Docker

**Versões do produto**
+ AWS Step Functions Data Science SDK versão 2.3.0
+ SDK do Amazon SageMaker Python versão 2.78.0

## Arquitetura
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-architecture"></a>

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.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/7857d57f-3077-4b06-8971-fb5846387693/images/37755e38-0bc4-4dd0-90c7-135d95b00053.png)


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.

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

1. 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](https://aws.amazon.com/sagemaker/pricing/).

## Ferramentas
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-tools"></a>
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
+  SageMakerA [Amazon](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) é 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](https://github.com/aws/sagemaker-python-sdk) é uma biblioteca de código aberto para treinar e implantar modelos de aprendizado de máquina em. SageMaker
+ O [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) é um serviço de orquestração com tecnologia sem servidor que permite combinar funções do AWS Lambda e outros serviços da AWS para criar aplicações essenciais aos negócios.
+ O [AWS Step Functions Data Science Python SDK](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/index.html) consiste em uma biblioteca de código aberto que auxilia na criação de fluxos de trabalho do Step Functions para o processamento e a publicação de modelos de machine learning.

## Épicos
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-epics"></a>

### Crie uma imagem de contêiner do Docker personalizada e armazene-a no Amazon ECR
<a name="create-a-custom-docker-container-image-and-store-it-in-amazon-ecr"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o Amazon ECR e crie um novo registro privado. | Se você ainda não o fez, configure o Amazon ECR seguindo as instruções em [Configuração com o Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html) no *Guia do usuário do Amazon ECR*. Cada conta da AWS é fornecida com um registro privado padrão do Amazon ECR. | DevOps engenheiro | 
| Crie um repositório privado do Amazon ECR. | Siga as instruções em [Criação de um repositório privado](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) no *Guia do usuário do Amazon ECR*.O repositório que você criar será o local em que você armazenará as imagens de contêiner do Docker personalizadas. | 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](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html) no *Amazon SageMaker Developer Guide*.<br />Para obter mais informações sobre Dockerfiles, consulte [Dockerfile Reference](https://docs.docker.com/engine/reference/builder/) na documentação do Docker.<br />**Exemplo de células de código do caderno Jupyter para criar um Dockerfile**<br />*Célula 1*<pre># Make docker folder<br />!mkdir -p docker</pre><br />*Célula 2*<pre>%%writefile docker/Dockerfile<br /><br />FROM python:3.7-slim-buster<br /><br />RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3<br />ENV PYTHONUNBUFFERED=TRUE<br /><br />ENTRYPOINT ["python3"]</pre> | DevOps engenheiro | 
| Crie a imagem do contêiner do Docker e envie-a para o Amazon ECR. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.html)Para obter mais informações, consulte [Criando e registrando o contêiner](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.html#Building-and-registering-the-container) em *Criando seu próprio contêiner de algoritmo* em GitHub.<br />**Exemplo de células de código do caderno Jupyter para criar e registrar uma imagem do Docker**Antes de executar as células apresentadas a seguir, certifique-se de que você criou um Dockerfile e o armazenou no diretório chamado `docker`. Além disso, certifique-se de ter criado um repositório Amazon ECR e de substituir o valor `ecr_repository` na primeira célula pelo nome do seu repositório.<br />*Célula 1*<pre>import boto3<br />tag = ':latest'<br />account_id = boto3.client('sts').get_caller_identity().get('Account')<br />region = boto3.Session().region_name<br />ecr_repository = 'byoc'<br /><br />image_uri = '{}.dkr.ecr.{}.amazonaws.com/{}'.format(account_id, region, ecr_repository + tag)</pre><br />*Célula 2*<pre># Build docker image<br />!docker build -t $image_uri docker</pre><br />*Célula 3*<pre># Authenticate to ECR<br />!aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com</pre><br />*Célula 4*<pre># Push docker image<br />!docker push $image_uri</pre>Você deve [autenticar o cliente do Docker no registro privado](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html) 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 | 

### Crie um fluxo de trabalho do Step Functions que use sua imagem personalizada de contêiner do Docker
<a name="create-a-step-functions-workflow-that-uses-your-custom-docker-container-image"></a>


| Tarefa | Description | Habilidades 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`.<br />Para obter mais informações, consulte [Traga seu próprio modelo com o Modo de SageMaker script ativado](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html) GitHub.<br />**Exemplo de script Python que inclui processamento personalizado e lógica de treinamento de modelos**<pre>%%writefile training.py<br />from numpy import empty<br />import pandas as pd<br />import os<br />from sklearn import datasets, svm<br />from joblib import dump, load<br /><br /><br />if __name__ == '__main__':<br />    digits = datasets.load_digits()<br />    #create classifier object<br />    clf = svm.SVC(gamma=0.001, C=100.)<br />    <br />    #fit the model<br />    clf.fit(digits.data[:-1], digits.target[:-1])<br />    <br />    #model output in binary format<br />    output_path = os.path.join('/opt/ml/processing/model', "model.joblib")<br />    dump(clf, output_path)</pre> | 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 [AWS Step Functions Data Science SDK](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html) e faça o upload do arquivo **training.py** para o Amazon S3. Em seguida, use o [Amazon SageMaker Python SDK](https://github.com/aws/sagemaker-python-sdk) para definir uma etapa de processamento em Step Functions.Certifique-se de ter [criado um perfil de execução do IAM para o Step Functions](https://sagemaker-examples.readthedocs.io/en/latest/step-functions-data-science-sdk/step_functions_mlworkflow_processing/step_functions_mlworkflow_scikit_learn_data_processing_and_model_evaluation.html#Create-an-Execution-Role-for-Step-Functions) em sua conta da AWS.<br />**Exemplo de configuração de ambiente e script de treinamento personalizado para upload para o Amazon S3**<pre>!pip install stepfunctions<br /><br />import boto3<br />import stepfunctions<br />import sagemaker<br />import datetime<br /><br />from stepfunctions import steps<br />from stepfunctions.inputs import ExecutionInput<br />from stepfunctions.steps import (<br />    Chain<br />)<br />from stepfunctions.workflow import Workflow<br />from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput<br /><br />sagemaker_session = sagemaker.Session()<br />bucket = sagemaker_session.default_bucket() <br />role = sagemaker.get_execution_role()<br />prefix = 'byoc-training-model'<br /><br /># See prerequisites section to create this role<br />workflow_execution_role = f"arn:aws:iam::{account_id}:role/AmazonSageMaker-StepFunctionsWorkflowExecutionRole"<br /><br />execution_input = ExecutionInput(<br />    schema={<br />        "PreprocessingJobName": str})<br /><br /><br />input_code = sagemaker_session.upload_data(<br />    "training.py",<br />    bucket=bucket,<br />    key_prefix="preprocessing.py",<br />)</pre><br />**Exemplo SageMaker de definição de etapa de processamento que usa uma imagem personalizada do Amazon ECR e um script Python**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`.<pre>script_processor = ScriptProcessor(command=['python3'],<br />                image_uri=image_uri,<br />                role=role,<br />                instance_count=1,<br />                instance_type='ml.m5.xlarge')<br /><br /><br />processing_step = steps.ProcessingStep(<br />    "training-step",<br />    processor=script_processor,<br />    job_name=execution_input["PreprocessingJobName"],<br />    inputs=[<br />        ProcessingInput(<br />            source=input_code,<br />            destination="/opt/ml/processing/input/code",<br />            input_name="code",<br />        ),<br />    ],<br />    outputs=[<br />        ProcessingOutput(<br />            source='/opt/ml/processing/model', <br />            destination="s3://{}/{}".format(bucket, prefix), <br />            output_name='byoc-example')<br />    ],<br />    container_entrypoint=["python3", "/opt/ml/processing/input/code/training.py"],<br />)</pre><br />**Exemplo de fluxo de trabalho do Step Functions que executa uma tarefa SageMaker de processamento**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 documentação](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html#example-notebooks-in-sagemaker) do SDK de ciência de dados do AWS Step Functions.<pre>workflow_graph = Chain([processing_step])<br /><br />workflow = Workflow(<br />    name="ProcessingWorkflow",<br />    definition=workflow_graph,<br />    role=workflow_execution_role<br />)<br /><br />workflow.create()<br /># Execute workflow<br />execution = workflow.execute(<br />    inputs={<br />        "PreprocessingJobName": str(datetime.datetime.now().strftime("%Y%m%d%H%M-%SS")),  # Each pre processing job (SageMaker processing job) requires a unique name,<br />    }<br />)<br />execution_output = execution.get_output(wait=True)</pre> | Cientista de dados | 

## Recursos relacionados
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-resources"></a>
+ [Processar dados](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html) (*Amazon SageMaker Developer Guide*)
+ [Adaptando seu próprio contêiner de treinamento](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html) (*Amazon SageMaker Developer Guide*)