

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 调整您的训练作业，以访问私有 Docker 注册表中的映像
<a name="docker-containers-adapt-your-own-private-registry"></a>

您可以使用私有 [Docker 注册表来代替亚马逊弹性容器注册表](https://docs.docker.com/registry/) (Amazon ECR) Container Registry 来托管用于人工智能训练的映像。 SageMaker 以下说明向您展示如何创建 Docker 注册表、配置虚拟私有云 (VPC) 和训练作业、存储映像以及如何让 SageMaker AI 访问私有 docker 注册表中的训练映像。这些说明还向您展示了如何使用 SageMaker 训练作业需要身份验证的 Docker 注册表。

## 创建映像并将其存储在私有 Docker 注册表中
<a name="docker-containers-adapt-your-own-private-registry-prerequisites"></a>

创建私有 Docker 注册表来存储您的映像。注册表必须：
+ 使用 [Docker Registry HTTP API](https://docs.docker.com/registry/spec/api/) 协议
+ 可以从 `CreateTrainingJob` API [VpcConfig](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateTrainingJob.html#API_CreateTrainingJob_RequestSyntax)参数中指定的相同 VPC 进行访问。在创建训练作业时输入 `VpcConfig`。
+ 使用来自已知公共证书颁发机构的 [TLS 证书](https://www.amazonaws.cn/what-is/ssl-certificate/)来保护。

有关创建 Docker 注册表的更多信息，请参阅[部署注册表服务器](https://docs.docker.com/registry/deploying/)。

## 配置您的 VPC 和 SageMaker 训练作业
<a name="docker-containers-adapt-your-own-private-registry-configure"></a>

SageMaker AI 使用您的 VPC 内的网络连接来访问您的 Docker 注册表中的镜像。要将您 Docker 注册表中的映像用于训练，注册表必须可以从您账户中的 Amazon VPC 访问。有关更多信息，请参阅 [使用需要身份验证的 Docker 注册表进行训练](docker-containers-adapt-your-own-private-registry-authentication.md)。

您还必须配置训练作业，将其连接到您的 Docker 注册表有权访问的同一 VPC。有关更多信息，请参阅[为 Amazon VPC 访问配置训练作业](https://docs.amazonaws.cn/sagemaker/latest/dg/train-vpc.html#train-vpc-configure)。

## 使用私有 Docker 注册表中的映像创建训练作业
<a name="docker-containers-adapt-your-own-private-registry-create"></a>

要使用私有 Docker 注册表中的映像进行训练，请使用以下指南配置您的映像、配置和创建训练作业。以下代码示例使用 适用于 Python (Boto3) 的 Amazon SDK 客户端。

1. 创建训练映像配置对象，并如下所示为 `TrainingRepositoryAccessMode` 字段输入 `Vpc`。

   ```
   training_image_config = {
       'TrainingRepositoryAccessMode': 'Vpc'
   }
   ```
**注意**  
如果您的私有 Docker 注册表需要身份验证，则必须将 `TrainingRepositoryAuthConfig` 对象添加到训练映像配置对象。您还必须使用对象的`TrainingRepositoryCredentialsProviderArn`字段指定向 A SageMaker I 提供访问凭证的 Amazon Lambda 函数的 Amazon 资源名称 (ARN)。`TrainingRepositoryAuthConfig`有关更多信息，请参阅以下示例代码结构。  

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

   有关如何创建 Lambda 函数以提供身份验证的信息，请参阅[使用需要身份验证的 Docker 注册表进行训练](docker-containers-adapt-your-own-private-registry-authentication.md)。

1. 使用 Boto3 客户端创建训练作业，并将正确的配置传递给 [create\_training\_job](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateTrainingJob.html) API。以下说明向您演示如何配置组件和创建训练作业。

   1. 创建要传递到 `create_training_job` 的 `AlgorithmSpecification` 对象。使用在上一步中创建的训练映像配置对象，如以下代码示例所示。

      ```
      algorithm_specification = {
         'TrainingImage': '{{myteam.myorg.com/docker-local/my-training-image:<IMAGE-TAG>}}',
         'TrainingImageConfig': training_image_config,
         'TrainingInputMode': '{{File}}'
      }
      ```
**注意**  
要使用映像的固定版本而不是更新版本，请引用映像的[摘要](https://docs.docker.com/engine/reference/commandline/pull/#pull-an-image-by-digest-immutable-identifier)，而不是引用名称或标签。

   1. 指定您要传递给 `create_training_job` 的训练作业名称和角色，如以下代码示例中所示。

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

   1. 为您的训练作业的 VPC 配置指定安全组和子网。您的私有 Docker 注册表必须允许来自您指定的安全组的入站流量，如以下代码示例所示。

      ```
      vpc_config = {
          'SecurityGroupIds': ['{{sg-0123456789abcdef0}}'],
          'Subnets': ['{{subnet-0123456789abcdef0}}','{{subnet-0123456789abcdef1}}']
      }
      ```
**注意**  
如果您的子网与私有 Docker 注册表不在同一 VPC 中，则必须在这两个 VPC 之间建立网络连接。 SeeConnect 使用 VPC 对[等互连的 VP](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-peering.html) C 了解更多信息。

   1. 指定资源配置，包括训练使用的机器学习计算实例和存储卷，如以下代码示例所示。

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

   1. 指定输入和输出数据配置、训练数据集的存储位置以及用于存储模型构件的位置，如以下代码示例所示。

      ```
      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. 指定模型训练作业可以运行的最大秒数，如以下代码示例所示。

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

   1. 最后，使用在上一步中指定的参数创建训练作业，如以下代码示例所示。

      ```
      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)
      ```