

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

# Eseguire script con il proprio container di elaborazione
<a name="processing-container-run-scripts"></a>

Puoi utilizzare gli script scikit-learn per preelaborare i dati e valutare i modelli. Per vedere come eseguire gli script scikit-learn per eseguire queste attività, consulta il notebook di esempio [Elaborazione con scikit-learn](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation). Questo notebook utilizza la `ScriptProcessor` classe dell'Amazon SageMaker Python SDK for Processing.

L'esempio seguente mostra un flusso di lavoro generale per l'utilizzo del proprio contenitore di elaborazione. Il flusso di lavoro mostra come creare la propria immagine, creare il contenitore ed eseguire uno script di preelaborazione Python con il contenitore. Il processo di elaborazione elabora i dati di input e salva i dati elaborati in Amazon Simple Storage Service (Amazon S3).

Prima di utilizzare i seguenti esempi, devi disporre dei tuoi dati di input e di uno script Python preparato per elaborare i dati. Per un esempio guidato e completo di questo processo, fai riferimento al notebook di esempio [Elaborazione scikit-learn](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation).

1. Creare una directory Docker e aggiungere il file Docker utilizzato per creare il container di elaborazione. Installare panda e scikit-learn. È anche possibile installare le dipendenze con un comando `RUN` simile.

   ```
   mkdir docker
   
   %%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"]
   ```

1. Creare il container utilizzando il comando docker che crea un repository Amazon Elastic Container Registry (Amazon ECR) e invia l'immagine ad Amazon ECR.

   ```
   import boto3
   
   account_id = boto3.client('sts').get_caller_identity().get('Account')
   region = boto3.Session().region_name
   ecr_repository = 'sagemaker-processing-container'
   tag = ':latest'
   processing_repository_uri = '{}.dkr.ecr.{}.amazonaws.com/{}'.format(account_id, region, ecr_repository + tag)
   
   # Create ECR repository and push docker image
   !docker build -t $ecr_repository docker
   !aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com
   !aws ecr create-repository --repository-name $ecr_repository
   !docker tag {ecr_repository + tag} $processing_repository_uri
   !docker push $processing_repository_uri
   ```

1. Configura ed esegui il processo di elaborazione. Sostituiscilo {{image\_uri}} con l'URI dell'immagine che hai creato e sostituiscilo {{role\_arn}} con l'ARN per un AWS Identity and Access Management ruolo che ha accesso al bucket Amazon S3 di destinazione. Sostituiscilo {{preprocessing.py}} con il nome del tuo script di elaborazione Python e sostituiscilo {{s3://path/to/my/input-data.csv}} con il percorso Amazon S3 dei dati di input.

   ```
   from sagemaker.core.resources import ProcessingJob
   
   processing_job = ProcessingJob.create(
       processing_job_name="my-processing-job",
       role_arn='{{role_arn}}',
       app_specification={
           "image_uri": '{{image_uri}}',
           "container_entrypoint": ["python3", "/opt/ml/processing/input/code/preprocessing.py"]
       },
       processing_resources={
           "cluster_config": {
               "instance_count": 1,
               "instance_type": "ml.m5.xlarge",
               "volume_size_in_gb": 30
           }
       },
       processing_inputs=[
           {
               "input_name": "code",
               "s3_input": {
                   "s3_uri": '{{s3://path/to/preprocessing.py}}',
                   "local_path": "/opt/ml/processing/input/code",
                   "s3_data_type": "S3Prefix",
                   "s3_input_mode": "File"
               }
           },
           {
               "input_name": "input-data",
               "s3_input": {
                   "s3_uri": '{{s3://path/to/my/input-data.csv}}',
                   "local_path": "/opt/ml/processing/input",
                   "s3_data_type": "S3Prefix",
                   "s3_input_mode": "File"
               }
           }
       ],
       processing_output_config={
           "outputs": [
               {"output_name": "train", "s3_output": {"s3_uri": "s3://output/train", "local_path": "/opt/ml/processing/output/train", "s3_upload_mode": "EndOfJob"}},
               {"output_name": "validation", "s3_output": {"s3_uri": "s3://output/validation", "local_path": "/opt/ml/processing/output/validation", "s3_upload_mode": "EndOfJob"}},
               {"output_name": "test", "s3_output": {"s3_uri": "s3://output/test", "local_path": "/opt/ml/processing/output/test", "s3_upload_mode": "EndOfJob"}}
           ]
       }
   )
   ```

La stessa procedura può essere utilizzata con qualsiasi altra libreria o dipendenza di sistema. È anche possibile utilizzare immagini Docker esistenti. Ciò include le immagini eseguite su altre piattaforme come [Kubernetes](https://kubernetes.io/).