

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

# Como criar um contêiner de processamento (cenário avançado)
<a name="build-your-own-processing-container"></a>

Você pode fornecer ao Amazon SageMaker Processing uma imagem do Docker que tenha seu próprio código e dependências para executar suas cargas de trabalho de processamento de dados, engenharia de recursos e avaliação de modelos. Veja a seguir informações sobre como criar um contêiner de processamento.

O exemplo a seguir de um Dockerfile cria um contêiner com as bibliotecas Python de scikit-learn e pandas que podem ser executados como um trabalho de processamento. 

```
FROM python:3.7-slim-buster

# Install scikit-learn and pandas
RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3

# Add a Python script and configure Docker to run it
ADD processing_script.py /
ENTRYPOINT ["python3", "/processing_script.py"]
```

Para ver um exemplo de script de processamento, consulte [Introdução ao SageMaker processamento](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker_processing/basic_sagemaker_data_processing/basic_sagemaker_processing.ipynb).

Crie e envie essa imagem do Docker para um repositório do Amazon Elastic Container Registry (Amazon ECR) e garanta que sua função de SageMaker IA IAM possa extrair a imagem do Amazon ECR. Em seguida, você pode executar essa imagem no Amazon SageMaker Processing.

## Como o Amazon SageMaker Processing configura seu contêiner de processamento
<a name="byoc-config"></a>

O Amazon SageMaker Processing fornece informações de configuração para seu contêiner de processamento por meio de variáveis de ambiente e dois arquivos JSON — `/opt/ml/config/processingjobconfig.json` e `/opt/ml/config/resourceconfig.json` — em locais predefinidos no contêiner. 

Quando um trabalho de processamento é iniciado, ele usa as variáveis de ambiente que você especificou com o mapa de `Environment` na solicitação `CreateProcessingJob`. O arquivo `/opt/ml/config/processingjobconfig.json` contém informações sobre os nomes de host dos contêineres de processamento e também é especificado na solicitação `CreateProcessingJob`. 

O exemplo a seguir mostra o formato do arquivo `/opt/ml/config/processingjobconfig.json`.

```
{
    "ProcessingJobArn": "<processing_job_arn>",
    "ProcessingJobName": "<processing_job_name>",
    "AppSpecification": {
        "ImageUri": "<image_uri>",
        "ContainerEntrypoint": null,
        "ContainerArguments": null
    },
    "Environment": {
        "KEY": "VALUE"
    },
    "ProcessingInputs": [
        {
            "InputName": "input-1",
            "S3Input": {
                "LocalPath": "/opt/ml/processing/input/dataset",
                "S3Uri": "<s3_uri>",
                "S3DataDistributionType": "FullyReplicated",
                "S3DataType": "S3Prefix",
                "S3InputMode": "File",
                "S3CompressionType": "None",
                "S3DownloadMode": "StartOfJob"
            }
        }
    ],
    "ProcessingOutputConfig": {
        "Outputs": [
            {
                "OutputName": "output-1",
                "S3Output": {
                    "LocalPath": "/opt/ml/processing/output/dataset",
                    "S3Uri": "<s3_uri>",
                    "S3UploadMode": "EndOfJob"
                }
            }
        ],
        "KmsKeyId": null
    },
    "ProcessingResources": {
        "ClusterConfig": {
            "InstanceCount": 1,
            "InstanceType": "ml.m5.xlarge",
            "VolumeSizeInGB": 30,
            "VolumeKmsKeyId": null
        }
    },
    "RoleArn": "<IAM role>",
    "StoppingCondition": {
        "MaxRuntimeInSeconds": 86400
    }
}
```

O arquivo `/opt/ml/config/resourceconfig.json` contém informações sobre os nomes de host dos contêineres de processamento. Use nomes de host a seguir ao criar ou executar código de processamento distribuído.

```
{
  "current_host": "algo-1",
  "hosts": ["algo-1","algo-2","algo-3"]
}
```

Não use as informações sobre nomes de host contidos no `/etc/hostname` ou no `/etc/hosts` porque elas podem estar incorretas.

As informações do nome do host podem não estar imediatamente disponíveis para o contêiner de processamento. Recomendamos adicionar uma política de nova tentativa em operações de resolução de nomes de host à medida que os nós se tornarem disponíveis no cluster.