调整您的训练作业,以访问私有 Docker 注册表中的映像 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

调整您的训练作业,以访问私有 Docker 注册表中的映像

您可以使用私有 Docker 注册表代替亚马逊弹性容器注册表 (Amazon ECR) 来托管用于训练的映像。 SageMaker以下说明向您展示如何创建 Docker 注册表、配置虚拟私有云 (VPC) 和训练作业、存储映像以及在私有 docker 注册表中授予对训练映像的 SageMaker 访问权限。这些说明还向您展示了如何使用 SageMaker 训练作业需要身份验证的 Docker 注册表。

创建映像并将其存储在私有 Docker 注册表中

创建私有 Docker 注册表来存储您的映像。注册表必须:

  • 使用 Docker Registry HTTP API 协议

  • 可以从 CreateTrainingJob API VpcConfig参数中指定的相同 VPC 进行访问。在创建训练作业时输入 VpcConfig

  • 使用来自已知公共证书颁发机构的 TLS 证书来保护。

有关创建 Docker 注册表的更多信息,请参阅部署注册表服务器

配置您的 VPC 和 SageMaker 训练作业

SageMaker 使用您的 VPC 内的网络连接来访问您的 Docker 注册表中的镜像。要将您 Docker 注册表中的映像用于训练,注册表必须可以从您账户中的 Amazon VPC 访问。有关更多信息,请参阅使用需要身份验证的 Docker 注册表进行训练

您还必须配置训练作业,将其连接到您的 Docker 注册表有权访问的同一 VPC。有关更多信息,请参阅为 Amazon VPC 访问配置训练作业

使用私有 Docker 注册表中的映像创建训练作业

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

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

    training_image_config = { 'TrainingRepositoryAccessMode': 'Vpc' }
    注意

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

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

    有关如何创建 Lambda 函数以提供身份验证的信息,请参阅使用需要身份验证的 Docker 注册表进行训练

  2. 使用 Boto3 客户端创建训练作业,并将正确的配置传递给 create_training_job API。以下说明向您演示如何配置组件和创建训练作业。

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

      algorithm_specification = { 'TrainingImage': 'myteam.myorg.com/docker-local/my-training-image:<IMAGE-TAG>', 'TrainingImageConfig': training_image_config, 'TrainingInputMode': 'File' }
      注意

      要使用映像的固定版本而不是更新版本,请引用映像的摘要,而不是引用名称或标签。

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

      training_job_name = 'private-registry-job' execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole'
    3. 为您的训练作业的 VPC 配置指定安全组和子网。您的私有 Docker 注册表必须允许来自您指定的安全组的入站流量,如以下代码示例所示。

      vpc_config = { 'SecurityGroupIds': ['sg-0123456789abcdef0'], 'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1'] }
      注意

      如果您的子网与私有 Docker 注册表不在同一 VPC 中,则必须在这两个 VPC 之间建立网络连接。 SeeConnect 使用 VPC 对等互连的 VP C 了解更多信息。

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

      resource_config = { 'InstanceType': 'ml.m4.xlarge', 'InstanceCount': 1, 'VolumeSizeInGB': 10, }
    5. 指定输入和输出数据配置、训练数据集的存储位置以及用于存储模型构件的位置,如以下代码示例所示。

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

      stopping_condition = { 'MaxRuntimeInSeconds': 1800 }
    7. 最后,使用在上一步中指定的参数创建训练作业,如以下代码示例所示。

      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)