

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Come creare un container di elaborazione personalizzato (scenario avanzato)
<a name="build-your-own-processing-container"></a>

Puoi fornire ad Amazon SageMaker Processing un'immagine Docker con il tuo codice e le tue dipendenze per eseguire i carichi di lavoro di elaborazione dei dati, ingegneria delle funzionalità e valutazione dei modelli. Di seguito vengono fornite informazioni su come creare un container di elaborazione personalizzato.

Il seguente esempio di file Docker crea un container con le librerie Python scikit-learn e panda che è possibile eseguire come attività di elaborazione. 

```
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"]
```

Per un esempio di script di elaborazione, consulta [Get started](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker_processing/basic_sagemaker_data_processing/basic_sagemaker_processing.ipynb) with Processing. SageMaker 

Crea e invia questa immagine Docker in un repository Amazon Elastic Container Registry (Amazon ECR) e assicurati che il tuo ruolo IAM SageMaker AI possa estrarre l'immagine da Amazon ECR. Quindi puoi eseguire questa immagine su Amazon SageMaker Processing.

## In che modo Amazon SageMaker Processing configura il tuo contenitore di elaborazione
<a name="byoc-config"></a>

Amazon SageMaker Processing fornisce informazioni di configurazione al contenitore di elaborazione tramite variabili di ambiente e due file JSON `/opt/ml/config/processingjobconfig.json` e `/opt/ml/config/resourceconfig.json` in posizioni predefinite all'interno del contenitore. 

Quando viene avviato un processo di elaborazione, vengono utilizzate le variabili di ambiente specificate con la mappa `Environment` nella richiesta `CreateProcessingJob`. Il file `/opt/ml/config/processingjobconfig.json` contiene le informazioni sui nomi host dei container di elaborazione ed è specificato anche nella richiesta `CreateProcessingJob`. 

Nell'esempio seguente viene illustrato il formato del file `/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
    }
}
```

Il file `/opt/ml/config/resourceconfig.json` contiene informazioni sui nomi host dei container di elaborazione. Utilizza i seguenti nomi host durante la creazione o l'esecuzione di codice di elaborazione distribuito.

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

Non utilizzare le informazioni sui nomi host contenuti in `/etc/hostname` o `/etc/hosts` perché potrebbero non essere accurate.

Le informazioni sul nome host potrebbero non essere immediatamente disponibili per il container di elaborazione. Ti consigliamo di aggiungere una policy per i nuovi tentativi sulle operazioni di risoluzione del nome host man mano che i nodi diventano disponibili nel cluster.