为实时推理容器使用私有 Docker 注册表 - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

为实时推理容器使用私有 Docker 注册表

默认情况下, SageMaker Amazon AI 托管允许您使用存储在亚马逊中的图像ECR来构建容器以进行实时推理。或者,您可以从私有 Docker 注册表中的映像来构建容器用于实时推理。私有注册表必须可以从您账户的 Amazon VPC 上访问。根据存储在私有 Docker 注册表中的映像创建的模型必须配置为连接到VPC可以访问私有 Docker 注册表的相同模型。有关将模型连接到 a 的信息VPC,请参阅让 SageMaker AI 托管的终端节点访问您的 Amazon 中的资源 VPC

您的 Docker 注册表必须使用来自已知公共TLS证书颁发机构 (CA) 的证书进行保护。

注意

您的私有 Docker 注册表必须允许来自您在模型VPC配置中指定的安全组的入站流量,这样 SageMaker AI 托管才能从您的注册表中提取模型映像。

SageMaker DockerHub 如果你的内部有通往开放互联网的道路,人工智能可以从中提取模型图像VPC。

在 Amazon Elastic Container Registry 以外的私有 Docker 注册表中存储映像

要使用私有 Docker 注册表来存储用于 SageMaker 人工智能实时推断的图像,请创建一个可从您的 Amazon 访问的私有注册表。VPC有关创建 Docker 注册表的信息,请参阅 Docker 文档中的部署注册表服务器。Docker 注册表必须遵守以下要求:

使用来自私有 Docker 注册表的映像进行实时推理

创建模型并将其部署到 SageMaker AI 托管时,您可以指定它使用私有 Docker 注册表中的镜像来构建推理容器。在您传递给 create_model 函数的调用的 PrimaryContainer 参数中,在 ImageConfig 对象中指定此项。

将存储在私有 Docker 注册表中的映像用于推理容器
  1. 创建映像配置对象并为 RepositoryAccessMode 字段指定 Vpc 的值。

    image_config = { 'RepositoryAccessMode': 'Vpc' }
  2. 如果您的私有 Docker 注册表需要身份验证,请添加 RepositoryAuthConfig 对象到映像配置对象。在RepositoryAuthConfig对象的RepositoryCredentialsProviderArn字段中,指定一个 Amazon Lambda 函数的 Amazon 资源名称 (ARN),该函数提供允许 SageMaker AI 向您的私有 Docker 注册表进行身份验证的凭证。有关如何创建 Lambda 函数以提供身份验证的信息,请参阅允许 SageMaker AI 向私有 Docker 注册表进行身份验证

    image_config = { 'RepositoryAccessMode': 'Vpc', 'RepositoryAuthConfig': { 'RepositoryCredentialsProviderArn': 'arn:aws:lambda:Region:Acct:function:FunctionName' } }
  3. 创建要传递到 create_model 的主容器对象,使用您在上一步中创建的映像配置对象。

    摘要表中提供您的映像。如果您使用:latest标签提供图像,则存在 SageMaker 人工智能提取比预期更新的图像版本的风险。使用摘要表单可确保 SageMaker AI 提取预期的图像版本。

    primary_container = { 'ContainerHostname': 'ModelContainer', 'Image': 'myteam.myorg.com/docker-local/my-inference-image:<IMAGE-TAG>', 'ImageConfig': image_config }
  4. 指定要传递给 create_model 的模型名称和执行角色。

    model_name = 'vpc-model' execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole'
  5. 为您的模型的VPC配置指定一个或多个安全组和子网。您的私有 Docker 注册表必须允许来自您指定的安全组的入站流量。您指定的子网必须与您的私有 Docker 注册表VPC相同。

    vpc_config = { 'SecurityGroupIds': ['sg-0123456789abcdef0'], 'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1'] }
  6. 获取 Boto3 SageMaker 人工智能客户端。

    import boto3 sm = boto3.client('sagemaker')
  7. 通过调用 create_model 来创建模型,使用您在之前的步骤中为 PrimaryContainerVpcConfig 参数指定的值。

    try: resp = sm.create_model( ModelName=model_name, PrimaryContainer=primary_container, ExecutionRoleArn=execution_role_arn, VpcConfig=vpc_config, ) except Exception as e: print(f'error calling CreateModel operation: {e}') else: print(resp)
  8. 最后,调用 create_endpoint_configcreate_endpoint 以创建托管端点,使用您在之前步骤中创建的模型。

    endpoint_config_name = 'my-endpoint-config' sm.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { 'VariantName': 'MyVariant', 'ModelName': model_name, 'InitialInstanceCount': 1, 'InstanceType': 'ml.t2.medium' }, ], ) endpoint_name = 'my-endpoint' sm.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name, ) sm.describe_endpoint(EndpointName=endpoint_name)

允许 SageMaker AI 向私有 Docker 注册表进行身份验证

要从需要身份验证的私有 Docker 注册表中提取推理映像,请创建一个提供证书的 Amazon Lambda 函数,并在调用 create_model 时提供 Lambda 函数的亚马逊资源名称 (ARN)。当 SageMaker AI 运行时create_model,它会调用您指定的 Lambda 函数来获取凭证,以便向 Docker 注册表进行身份验证。

创建 Lambda 函数

创建一个返回以下格式的响应的 Amazon Lambda 函数:

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

根据您为私有 Docker 注册表设置的身份验证方式,Lambda 函数返回的凭证可能是以下任一内容:

  • 如果您将私有 Docker 注册表设置为使用基本身份验证,请提供登录凭证以便向注册表进行身份验证。

  • 如果您将私有 Docker 注册表设置为使用持有者令牌身份验证,则登录凭证将发送到您的授权服务器,该服务器将返回一个持有者令牌,然后可用于向私有 Docker 注册表进行身份验证。

向 Lambda 授予执行角色权限

用于调用的执行角色create_model必须具有调用 Amazon Lambda 函数的权限。将以下内容添加到您执行角色的权限策略中。

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

myLambdaFunction的 Lambda 函数的名称在哪里。有关编辑角色权限策略的信息,请参阅《Amazon Identity and Access Management 用户指南》中的修改角色权限策略(控制台)

注意

附加了AmazonSageMakerFullAccess托管策略的执行角色有权调用其名称SageMaker中包含的任何 Lambda 函数。

为 Lambda 创建接口VPC终端节点

创建接口终端节点,这样您的 Amazon VPC 就可以与您的 Amazon Lambda 函数进行通信,而无需通过互联网发送流量。有关如何执行此操作的信息,请参阅Amazon Lambda 开发人员指南中的为 Lambda 配置接口VPC终端节点

SageMaker AI 托管通过您的收件人发送请求VPC来lambda.region.amazonaws.com调用您的 Lambda 函数。如果您在创建接口终端节点时选择私有DNS名称,Amazon Route 53 会将调用路由到 Lambda 接口终端节点。如果您使用其他DNS提供商,请务必映射lambda.region.amazonaws.com到您的 Lambda 接口终端节点。