

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.

# Adaptar el trabajo de entrenamiento para acceder a las imágenes de un registro privado de Docker
<a name="docker-containers-adapt-your-own-private-registry"></a>

Puedes usar un [registro de Docker](https://docs.docker.com/registry/) privado en lugar de un Amazon Elastic Container Registry (Amazon ECR) para alojar tus imágenes para AI Training. SageMaker Las siguientes instrucciones le muestran cómo crear un registro de Docker, configurar su nube privada virtual (VPC) y el trabajo de formación, almacenar imágenes y SageMaker dar acceso a la IA a la imagen de entrenamiento en el registro de Docker privado. Estas instrucciones también le muestran cómo utilizar un registro de Docker que requiera autenticación para un trabajo de formación. SageMaker 

## Crear y almacenar imágenes en un registro privado de Docker
<a name="docker-containers-adapt-your-own-private-registry-prerequisites"></a>

Cree un registro privado de Docker para almacenar las imágenes. Su registro debe:
+ utilizar el protocolo [Docker Registry HTTP API](https://docs.docker.com/registry/spec/api/)
+ ser accesible desde la misma VPC especificada en el [VpcConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#API_CreateTrainingJob_RequestSyntax)parámetro de la API. `CreateTrainingJob` Introdúzcala `VpcConfig` cuando cree su trabajo de entrenamiento.
+ protegerse con un [certificado TLS](https://aws.amazon.com/what-is/ssl-certificate/) de una autoridad de certificación pública conocida.

Para obtener más información sobre la creación de un registro de Docker, consulte [Implementar un servidor de registro](https://docs.docker.com/registry/deploying/).

## Configure su VPC y SageMaker su trabajo de formación
<a name="docker-containers-adapt-your-own-private-registry-configure"></a>

SageMaker La IA utiliza una conexión de red dentro de la VPC para acceder a las imágenes del registro de Docker. Para utilizar las imágenes de su registro de Docker con fines de entrenamiento, debe poder acceder al registro desde una VPC de Amazon de su cuenta. Para obtener más información, consulte [Utilizar un registro de Docker que requiera autenticación para el entrenamiento](docker-containers-adapt-your-own-private-registry-authentication.md).

También debe configurar su trabajo de entrenamiento para conectarse a la misma VPC a la que tiene acceso su registro de Docker. Para obtener más información, consulte [Configurar un trabajo de entrenamiento para Amazon VPC Access](https://docs.aws.amazon.com/sagemaker/latest/dg/train-vpc.html#train-vpc-configure).

## Crear un trabajo de entrenamiento con una imagen del registro privado de Docker
<a name="docker-containers-adapt-your-own-private-registry-create"></a>

Para usar una imagen de su registro privado de Docker con fines de entrenamiento, utilice la siguiente guía para configurar su imagen, as´çi como configurar y crear un trabajo de entrenamiento. Los ejemplos de código que aparecen a continuación utilizan el AWS SDK para Python (Boto3) cliente.

1. Cree un objeto de configuración de imagen de entrenamiento e introduzca `Vpc` en el campo `TrainingRepositoryAccessMode` de la siguiente manera.

   ```
   training_image_config = {
       'TrainingRepositoryAccessMode': 'Vpc'
   }
   ```
**nota**  
Si su registro privado de Docker requiere autenticación, debe añadir un objeto `TrainingRepositoryAuthConfig` al objeto de configuración de la imagen de entrenamiento. También debe especificar el nombre de recurso de Amazon (ARN) de una AWS Lambda función que proporcione credenciales de acceso a la SageMaker IA mediante el `TrainingRepositoryCredentialsProviderArn` campo del `TrainingRepositoryAuthConfig` objeto. Para obtener más información, consulte la estructura del código de ejemplo que se incluye a continuación.  

   ```
   training_image_config = {
      'TrainingRepositoryAccessMode': 'Vpc',
      'TrainingRepositoryAuthConfig': {
           'TrainingRepositoryCredentialsProviderArn': 'arn:aws:lambda:Region:Acct:function:FunctionName'
      }
   }
   ```

   Para obtener información acerca de cómo crear la función de Lambda para proporcionar autenticación, consulte [Utilizar un registro de Docker que requiera autenticación para el entrenamiento](docker-containers-adapt-your-own-private-registry-authentication.md).

1. Utilice un cliente Boto3 para crear un trabajo de entrenamiento y pase la configuración correcta a la API [create\$1training\$1job](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html). En las siguientes instrucciones se muestra cómo configurar los componentes y crear un trabajo de entrenamiento.

   1. Cree el objeto `AlgorithmSpecification` que desea pasar a `create_training_job`. Utilice el objeto de configuración de imagen de entrenamiento que creó en el paso anterior, tal y como se muestra en el siguiente ejemplo de código.

      ```
      algorithm_specification = {
         'TrainingImage': 'myteam.myorg.com/docker-local/my-training-image:<IMAGE-TAG>',
         'TrainingImageConfig': training_image_config,
         'TrainingInputMode': 'File'
      }
      ```
**nota**  
Para utilizar una versión fija de una imagen en lugar de una versión actualizada, consulte el [resumen](https://docs.docker.com/engine/reference/commandline/pull/#pull-an-image-by-digest-immutable-identifier) de la imagen en lugar de utilizar el nombre o la etiqueta.

   1. Especifique el nombre del puesto de entrenamiento y el rol que desea pasar a `create_training_job`, tal y como se muestra en el siguiente ejemplo de código. 

      ```
      training_job_name = 'private-registry-job'
      execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole'
      ```

   1. Especifique un grupo de seguridad y una subred para la configuración de VPC para su trabajo de entrenamiento. Su registro privado de Docker debe permitir el tráfico entrante de los grupos de seguridad que especifique, como se muestra en el siguiente ejemplo de código.

      ```
      vpc_config = {
          'SecurityGroupIds': ['sg-0123456789abcdef0'],
          'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1']
      }
      ```
**nota**  
Si su subred no está en la misma VPC que su registro privado de Docker, debe configurar una conexión de red entre ambas. VPCs SeeConnect VPCs utilizando el [peering de VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-peering.html) para obtener más información.

   1. Especifique la configuración de los recursos, incluidas las instancias de computación de machine learning y los volúmenes de almacenamiento, que se utilizarán para el entrenamiento, como se muestra en el siguiente ejemplo de código. 

      ```
      resource_config = {
          'InstanceType': 'ml.m4.xlarge',
          'InstanceCount': 1,
          'VolumeSizeInGB': 10,
      }
      ```

   1. Especifique la configuración de los datos de entrada y salida, dónde se almacena el conjunto de datos de entrenamiento y dónde desea almacenar los artefactos del modelo, como se muestra en el siguiente ejemplo de código.

      ```
      input_data_config = [
          {
              "ChannelName": "training",
              "DataSource":
              {
                  "S3DataSource":
                  {
                      "S3DataDistributionType": "FullyReplicated",
                      "S3DataType": "S3Prefix",
                      "S3Uri": "s3://your-training-data-bucket/training-data-folder"
                  }
              }
          }
      ]
      
      output_data_config = {
          'S3OutputPath': 's3://your-output-data-bucket/model-folder'
      }
      ```

   1. Especifique el número máximo de segundos que puede ejecutar un trabajo de entrenamiento de modelos, como se muestra en el siguiente ejemplo de código.

      ```
      stopping_condition = {
          'MaxRuntimeInSeconds': 1800
      }
      ```

   1. Por último, cree el trabajo de entrenamiento con los parámetros que especificó en los pasos anteriores, tal y como se muestra en el siguiente ejemplo de código.

      ```
      import boto3
      sm = boto3.client('sagemaker')
      try:
          resp = sm.create_training_job(
              TrainingJobName=training_job_name,
              AlgorithmSpecification=algorithm_specification,
              RoleArn=execution_role_arn,
              InputDataConfig=input_data_config,
              OutputDataConfig=output_data_config,
              ResourceConfig=resource_config,
              VpcConfig=vpc_config,
              StoppingCondition=stopping_condition
          )
      except Exception as e:
          print(f'error calling CreateTrainingJob operation: {e}')
      else:
          print(resp)
      ```

# Utilice un estimador de SageMaker IA para realizar un trabajo de formación
<a name="docker-containers-adapt-your-own-private-registry-estimator"></a>

También puedes usar un [estimador](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html) del SDK de SageMaker Python para gestionar la configuración y la ejecución de tu trabajo de SageMaker entrenamiento. En los siguientes ejemplos de código, se muestra cómo configurar y ejecutar un estimador con imágenes de un registro privado de Docker.

1. Importe las bibliotecas y dependencias necesarias, tal y como se muestra en el siguiente ejemplo de código.

   ```
   import boto3
   import sagemaker
   from sagemaker.estimator import Estimator
   
   session = sagemaker.Session()
   
   role = sagemaker.get_execution_role()
   ```

1. Proporcione un identificador uniforme de recursos (URI) a su imagen de entrenamiento, grupos de seguridad y subredes para la configuración de VPC para su trabajo de entrenamiento, como se muestra en el siguiente ejemplo de código.

   ```
   image_uri = "myteam.myorg.com/docker-local/my-training-image:<IMAGE-TAG>"
   
   security_groups = ["sg-0123456789abcdef0"]
   subnets = ["subnet-0123456789abcdef0", "subnet-0123456789abcdef0"]
   ```

   Para obtener más información sobre `security_group_ids` y`subnets`, consulte la descripción del parámetro correspondiente en la sección [Estimadores](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html) del SDK de SageMaker Python.
**nota**  
SageMaker La IA utiliza una conexión de red dentro de la VPC para acceder a las imágenes del registro de Docker. Para utilizar las imágenes de su registro de Docker con fines de entrenamiento, debe poder acceder al registro desde una VPC de Amazon de su cuenta.

1. Si lo desea, si su registro de Docker requiere autenticación, también debe especificar el nombre de recurso de Amazon (ARN) de AWS Lambda una función que proporcione credenciales SageMaker de acceso a la IA. En el siguiente ejemplo, se muestra cómo especificar el ARN. 

   ```
   training_repository_credentials_provider_arn = "arn:aws:lambda:us-west-2:1234567890:function:test"
   ```

   Para obtener más información sobre el uso de imágenes en un registro de Docker que requiera autenticación, consulte **Uso de un registro de Docker que requiera autenticación con fines de entrenamiento**, a continuación.

1. Use los ejemplos de código de los pasos anteriores para configurar un estimador, como se muestra en el siguiente ejemplo de código.

   ```
   # The training repository access mode must be 'Vpc' for private docker registry jobs 
   training_repository_access_mode = "Vpc"
   
   # Specify the instance type, instance count you want to use
   instance_type="ml.m5.xlarge"
   instance_count=1
   
   # Specify the maximum number of seconds that a model training job can run
   max_run_time = 1800
   
   # Specify the output path for the model artifacts
   output_path = "s3://your-output-bucket/your-output-path"
   
   estimator = Estimator(
       image_uri=image_uri,
       role=role,
       subnets=subnets,
       security_group_ids=security_groups,
       training_repository_access_mode=training_repository_access_mode,
       training_repository_credentials_provider_arn=training_repository_credentials_provider_arn,  # remove this line if auth is not needed
       instance_type=instance_type,
       instance_count=instance_count,
       output_path=output_path,
       max_run=max_run_time
   )
   ```

1. Comience su trabajo de entrenamiento llamando a `estimator.fit` con el nombre del trabajo y la ruta de entrada como parámetros, tal y como se muestra en el siguiente ejemplo de código.

   ```
   input_path = "s3://your-input-bucket/your-input-path"
   job_name = "your-job-name"
   
   estimator.fit(
       inputs=input_path,
       job_name=job_name
   )
   ```

# Utilizar un registro de Docker que requiera autenticación para el entrenamiento
<a name="docker-containers-adapt-your-own-private-registry-authentication"></a>

Si su registro de Docker requiere autenticación, debe crear una AWS Lambda función que proporcione credenciales de acceso a la IA. SageMaker A continuación, cree un trabajo de entrenamiento y proporcione el ARN de esta función de Lambda dentro de la API [create\$1training\$1job](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_training_job). Por último, si lo desea, puede crear un punto de conexión de VPC de interfaz para que su VPC pueda comunicarse con su función de Lambda sin enviar tráfico a través de Internet. En la siguiente guía se muestra cómo crear una función de Lambda, asignarle la función correcta y crear un punto de conexión de VPC de interfaz.

## Crear la función de Lambda
<a name="docker-containers-adapt-your-own-private-registry-authentication-create-lambda"></a>

Cree una AWS Lambda función que pase las credenciales de acceso a la SageMaker IA y devuelva una respuesta. En el siguiente ejemplo de código se crea el controlador de funciones de Lambda, de la siguiente manera.

```
def handler(event, context):
   response = {
      "Credentials": {"Username": "username", "Password": "password"}
   }
   return response
```

El tipo de autenticación utilizado para configurar el registro privado de Docker determina el contenido de la respuesta que devuelve la función de Lambda como se muestra a continuación.
+ Si su registro privado de Docker utiliza la autenticación básica, la función de Lambda devolverá el nombre de usuario y la contraseña necesarios para autenticarse en el registro.
+ Si su registro privado de Docker utiliza la [autenticación por token de portador](https://docs.docker.com/registry/spec/auth/token/), el nombre de usuario y la contraseña se envían a su servidor de autorización, que luego devuelve un token de portador. Luego, este token se usa para autenticarse en su registro privado de Docker.

**nota**  
Si tiene más de una función de Lambda para sus registros en la misma cuenta y el rol de ejecución es el mismo para sus trabajos de entrenamiento, los trabajos de entrenamiento para el registro uno tendrían acceso a las funciones de Lambda de los demás registros.

## Conceda el permiso de rol correcto a la función de Lambda.
<a name="docker-containers-adapt-your-own-private-registry-authentication-lambda-role"></a>

La [IAMrole](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)que utilices en la `create_training_job` API debe tener permiso para llamar a una AWS Lambda función. En el siguiente ejemplo de código, se muestra cómo asociar una política de un rol de IAM para llamar a `myLambdaFunction`.

```
{
    "Effect": "Allow",
    "Action": [
        "lambda:InvokeFunction"
    ],
    "Resource": [
        "arn:aws:lambda:*:*:function:*myLambdaFunction*"
    ]
}
```

Para obtener más información acerca de cómo editar la política de permisos de un rol, consulte [Modificación de una política de permisos de rol (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy) en la *Guía del usuario de AWS Identity and Access Management*.

**nota**  
Un rol de IAM con una política **AmazonSageMakerFullAccess**gestionada adjunta tiene permiso para llamar a cualquier función de Lambda cuyo nombre SageMaker incluya «AI».

## Crear un punto de conexión de VPC de la interfaz para Lambda
<a name="docker-containers-adapt-your-own-private-registry-authentication-lambda-endpoint"></a>

Si crea un punto de conexión de interfaz, su VPC de Amazon puede comunicarse con su función de Lambda sin enviar tráfico a través de Internet. Para obtener más información, consulte [Configuración de puntos de conexión de VPC de interfaz para Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc-endpoints.html) en la *AWS Lambda Guía para desarrolladores*.

Una vez creado el punto final de la interfaz, la SageMaker formación llamará a la función Lambda enviando una solicitud a través de la VPC a. `lambda.region.amazonaws.com` Si selecciona **Enable DNS Name (Habilitar nombre de DNS)** al crear el punto de conexión de la interfaz, [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) dirige la llamada al punto de conexión de la interfaz de Lambda. Si utiliza un proveedor de DNS diferente, debe asignar `lambda.region.amazonaws.co`m al punto de conexión de la interfaz de Lambda.