

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.

# Cree una imagen de contenedor Docker personalizada SageMaker y úsela para el entrenamiento de modelos en 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 y Mateusz Zaremba, Amazon Web Services*

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

Este patrón muestra cómo crear una imagen de contenedor de Docker para [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) y utilizarla como modelo de formación en [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html). Al empaquetar algoritmos personalizados en un contenedor, puede ejecutar prácticamente cualquier código del SageMaker entorno, independientemente del lenguaje de programación, el marco o las dependencias.

En la [SageMaker libreta](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html) de ejemplo proporcionada, la imagen del contenedor Docker personalizado se almacena en [Amazon Elastic Container Registry (Amazon ECR).](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) A continuación, Step Functions utiliza el contenedor que está almacenado en Amazon ECR para ejecutar un script de procesamiento de Python. SageMaker A continuación, el contenedor exporta el modelo a [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html).

## Requisitos previos y limitaciones
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Un [rol de AWS Identity and Access Management (IAM) para SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html) con permisos de Amazon S3
+ Un [rol de IAM para 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)
+ Conocimientos básicos sobre Python
+ Familiaridad con el SDK de Amazon SageMaker Python
+ Información de la interfaz de la línea de comandos de AWS (AWS CLI)
+ Información de AWS SDK para Python (Boto3)
+ Amazon ECR
+ Familiaridad con Docker

**Versiones de producto**
+ SDK de ciencia de datos de AWS Step Functions versión 2.3.0
+ Amazon SageMaker Python SDK versión 2.78.0

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

En el siguiente diagrama, se muestra un ejemplo de flujo de trabajo para crear una imagen de contenedor de Docker y utilizarla después como modelo de entrenamiento en Step Functions: SageMaker

![Flujo de trabajo para crear una imagen de contenedor de Docker SageMaker para usarla como modelo de entrenamiento de Step Functions.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/7857d57f-3077-4b06-8971-fb5846387693/images/37755e38-0bc4-4dd0-90c7-135d95b00053.png)


En el diagrama, se muestra el siguiente flujo de trabajo:

1. Un científico o DevOps ingeniero de datos utiliza un SageMaker bloc de notas de Amazon para crear una imagen de contenedor Docker personalizada.

1. Un científico o DevOps ingeniero de datos almacena la imagen del contenedor de Docker en un repositorio privado de Amazon ECR que se encuentra en un registro privado.

1. Un científico o DevOps ingeniero de datos utiliza el contenedor de Docker para ejecutar un trabajo de SageMaker procesamiento de Python en un flujo de trabajo de Step Functions.

**Automatización y escala**

El ejemplo de SageMaker cuaderno de este patrón utiliza un tipo de instancia de `ml.m5.xlarge` bloc de notas. Puede cambiar el tipo de instancia para que se ajuste a su caso de uso. Para obtener más información sobre los tipos de instancias de SageMaker notebook, consulta [ SageMaker los precios de Amazon](https://aws.amazon.com/sagemaker/pricing/).

## Tools (Herramientas)
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-tools"></a>
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
+ [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) es un servicio de aprendizaje automático gestionado (ML) que le ayuda a crear y entrenar modelos de aprendizaje automático y, a continuación, a implementarlos en un entorno hospedado listo para la producción.
+ [Amazon SageMaker Python SDK](https://github.com/aws/sagemaker-python-sdk) es una biblioteca de código abierto para entrenar e implementar modelos de aprendizaje automático en. SageMaker
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) es un servicio de orquestación sin servidor que le permite combinar funciones de AWS Lambda y otros servicios de AWS para crear aplicaciones esenciales desde el punto de vista empresarial.
+ El [SDK de Python de ciencia de datos de AWS Step Functions](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/index.html) es una biblioteca de código abierto que lo ayuda a crear flujos de trabajo de Step Functions que procesan y publican modelos de machine learning.

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

### Crear una imagen de contenedor de Docker personalizada y guardarla en Amazon ECR
<a name="create-a-custom-docker-container-image-and-store-it-in-amazon-ecr"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure Amazon ECR y cree un nuevo registro privado. | Si aún no lo ha hecho, configure Amazon ECR siguiendo las instrucciones de [Configuración con Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html) de la *Guía del usuario de Amazon ECR*. Cada cuenta de AWS se proporciona con un registro privado de Amazon ECR predeterminado. | DevOps ingeniero | 
| Crear un repositorio privado de Amazon ECR. | Siga las instrucciones de [Creación de un repositorio privado](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) de la *Guía del usuario de Amazon ECR*.El repositorio que cree es donde almacenará sus imágenes de contenedores de Docker personalizadas. | DevOps ingeniero | 
| Cree un Dockerfile que incluya las especificaciones necesarias para ejecutar su trabajo de SageMaker procesamiento.  | Cree un Dockerfile que incluya las especificaciones necesarias para ejecutar su trabajo de SageMaker procesamiento configurando un Dockerfile. Para obtener instrucciones, consulta Cómo [adaptar tu propio contenedor de formación](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html) en la *Guía para SageMaker desarrolladores de Amazon*.<br />Para obtener más información acerca de los Dockerfiles, consulte [Dockerfile Reference](https://docs.docker.com/engine/reference/builder/) (Referencia de Dockerfile) en la documentación de Docker.<br />**Ejemplo de celdas de código de un cuaderno de Jupyter para crear un Dockerfile**<br />*Celda 1*<pre># Make docker folder<br />!mkdir -p docker</pre><br />*Celda 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 ingeniero | 
| Cree la imagen del contenedor de Docker y enviarla a Amazon ECR. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.html)Para obtener más información, consulte [Crear y registrar el contenedor](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.html#Building-and-registering-the-container) en *Cómo crear su propio contenedor de algoritmos* GitHub.<br />**Ejemplo de celdas de código del cuaderno de Jupyter para crear y registrar una imagen de Docker**Antes de ejecutar las siguientes celdas, asegúrese de haber creado un Dockerfile y de haberlo almacenado en el directorio denominado `docker`. Además, asegúrese de haber creado un repositorio de Amazon ECR y de sustituir el valor `ecr_repository` de la primera celda por el nombre del repositorio.<br />*Celda 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 />*Celda 2*<pre># Build docker image<br />!docker build -t $image_uri docker</pre><br />*Celda 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 />*Celda 4*<pre># Push docker image<br />!docker push $image_uri</pre>Debe [autenticar su cliente de Docker en su registro privado](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html) para poder utilizar los comandos `docker push` y `docker pull`. Estos comandos envían y extraen imágenes de los repositorios de su registro y las extraen de ellos. | DevOps ingeniero | 

### Cree un flujo de trabajo de Step Functions que utilice su imagen de contenedor de Docker personalizada
<a name="create-a-step-functions-workflow-that-uses-your-custom-docker-container-image"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un script de Python que incluya su procesamiento personalizado y su lógica de capacitación de modelos. | Escriba una lógica de procesamiento personalizada para ejecutarla en su script de procesamiento de datos. A continuación, guárdelo como un script de Python denominado `training.py`.<br />Para obtener más información, consulte [Utilice su propio modelo con el modo SageMaker script activado](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html) GitHub.<br />**Ejemplo de script de Python que incluye procesamiento personalizado y lógica de capacitación 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> | Científico de datos | 
| Cree un flujo de trabajo de Step Functions que incluya su trabajo de SageMaker procesamiento como uno de los pasos.  | Instale e importe el [SDK de ciencia de datos de AWS Step Functions](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html) y cargue el archivo **training.py** en Amazon S3. A continuación, utilice el [SDK de Amazon SageMaker Python](https://github.com/aws/sagemaker-python-sdk) para definir un paso de procesamiento en Step Functions.Asegúrese de haber [creado un rol de ejecución de IAM para 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) en su cuenta de AWS.<br />**Ejemplo de configuración del entorno y script de capacitación personalizado para cargarlo en 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 />**Ejemplo SageMaker de definición de paso de procesamiento que utiliza una imagen personalizada de Amazon ECR y un script de Python**Asegúrese de utilizar el parámetro `execution_input` para especificar el nombre del trabajo. El valor del parámetro debe ser único cada vez que se ejecute el trabajo. Además, el código del archivo **training.py** se pasa como parámetro `input` a `ProcessingStep`, lo que significa que se copiará dentro del contenedor. El destino del código `ProcessingInput` es el mismo que el del segundo argumento incluido en `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 />**Ejemplo de flujo de trabajo de Step Functions que ejecuta un trabajo SageMaker de procesamiento**Este flujo de trabajo de ejemplo incluye solo el paso del trabajo de SageMaker procesamiento, no un flujo de trabajo completo de Step Functions. Para ver un ejemplo completo de flujo de trabajo, consulte [Cuadernos de ejemplo SageMaker en](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html#example-notebooks-in-sagemaker) la documentación del SDK de ciencia de datos de 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> | Científico de datos | 

## Recursos relacionados
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-resources"></a>
+ [Procesar datos](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html) (*Amazon SageMaker Developer Guide*)
+ [Adaptación de tu propio contenedor de formación](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html) (*Amazon SageMaker Developer Guide*)