

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Ejecutar scripts con su propio contenedor de procesamiento
<a name="processing-container-run-scripts"></a>

Puede usar scripts de scikit-learn para preprocesar datos y evaluar sus modelos. Para saber cómo ejecutar scripts de scikit-learn para realizar estas tareas, consulte el cuaderno de muestras de [Procesamiento de scikit-learn](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation). Este cuaderno usa la `ScriptProcessor` clase del SDK de Amazon SageMaker Python para el procesamiento.

El siguiente ejemplo muestra un flujo de trabajo general para usar una clase `ScriptProcessor` con su propio contenedor de procesamiento. El flujo de trabajo muestra cómo crear su propia imagen, construir su contenedor y usar una clase `ScriptProcessor` para ejecutar un guión de preprocesamiento de Python con el contenedor. El trabajo de procesamiento procesa los datos de entrada y guarda los datos procesados en Amazon Simple Storage Service (Amazon S3).

Antes de usar los siguientes ejemplos, debe tener sus propios datos de entrada y un guión de Python preparado para procesar los datos. Para ver un end-to-end ejemplo guiado de este proceso, consulte el cuaderno de ejemplo de [procesamiento de scikit-learn](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation).

1. Cree un directorio de Docker y agregue el archivo Dockerfile utilizado para crear el contenedor de procesamiento. Instale pandas y scikit-learn en él. (También puede instalar sus propias dependencias con un comando `RUN` similar.)

   ```
   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. Cree el contenedor mediante el comando docker, cree un repositorio de Amazon Elastic Container Registry (Amazon ECR) y envíe la imagen a 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. Configure `ScriptProcessor` desde el SDK de SageMaker Python para ejecutar el script. *image\$1uri*Sustitúyalo por el URI de la imagen que has creado y *role\$1arn* sustitúyelo por el ARN de un AWS Identity and Access Management rol que tenga acceso a tu bucket de Amazon S3 de destino.

   ```
   from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput
   
   script_processor = ScriptProcessor(command=['python3'],
                   image_uri='image_uri',
                   role='role_arn',
                   instance_count=1,
                   instance_type='ml.m5.xlarge')
   ```

1. Ejecute el script. *preprocessing.py*Sustitúyalo por el nombre de tu propio script de procesamiento de Python y *s3://path/to/my/input-data.csv* sustitúyelo por la ruta de Amazon S3 a tus datos de entrada.

   ```
   script_processor.run(code='preprocessing.py',
                        inputs=[ProcessingInput(
                           source='s3://path/to/my/input-data.csv',
                           destination='/opt/ml/processing/input')],
                        outputs=[ProcessingOutput(source='/opt/ml/processing/output/train'),
                                  ProcessingOutput(source='/opt/ml/processing/output/validation'),
                                  ProcessingOutput(source='/opt/ml/processing/output/test')])
   ```

Puede usar el mismo procedimiento con otra dependencia de biblioteca o de sistema. También puede utilizar las imágenes de Docker existentes. Esto incluye las imágenes que ejecute en otras plataformas, como [Kubernetes](https://kubernetes.io/).