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

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

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

Amazon SageMaker 托管使您能够使用存储在亚马逊 ECR 中的图像构建容器,以便默认情况下进行实时推断。或者,您可以构建容器,以便从私有 Docker 注册表中的图像进行实时推断。私有注册表必须可从您账户中的 Amazon VPC 访问。您基于存储在私有 Docker 注册表中的映像创建的模型必须配置为连接到可访问私有 Docker 注册表的相同 VPC。有关将模型连接到 VPC 的信息,请参阅。为 SageMaker 托管终端节点授予您 Amazon VPC 中的资源的访问权限.

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

注意

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

如果您的 VPC 内有通往开放互联网的路径,SageMaker 可以从 DockerHub 提取模型映像。

在亚马逊弹性容器注册表以外的私有 Docker 注册表中存储图像

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

  • 注册表必须是Docker 注册表 HTTP API V2注册表。

  • Docker 注册表必须可从您在VpcConfig参数,您在创建模型时指定。

使用私有 Docker 注册表中的图像进行实时推断

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

将存储在私有 Docker 注册表中的图像用于推理容器

  1. 创建映像配置对象并指定Vpc(对于 )RepositoryAccessMode字段中返回的子位置类型。

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

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

    提供您的图片摘要形式。如果您使用:latest标签,则存在 SageMaker 拉取比预期更新的图像版本的风险。使用摘要表单可确保 SageMaker 拉出预期的图像版本。

    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. 获取一个肉体 3 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. 最后,调用创建终端节点配置创建终端节点以使用您在上一步中创建的模型创建托管终端节点。

    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 对私有 Docker 注册表进行身份验证

要从需要身份验证的私有 Docker 注册表中提取推理图像,请创建Amazon Lambda函数,并在调用时提供 Lambda 函数的 Amazon 资源名称 (ARN)。创建模型. 当 SageMaker 运行create_model,它会调用您指定的 Lambda 函数来获取凭据以对 Docker 注册表进行身份验证。

创建 Lambda 函数

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

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

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

  • 如果您将私有 Docker 注册表设置为使用基本身份验证,则这是usernamepassword以对注册表进行身份验证。

  • 如果您将私有 Docker 注册表设置为使用持有令牌身份验证,则usernamepassword被发送到您的授权服务器,该服务器会返回一个 Baer 令牌,然后可以使用该令牌对私有 Docker 注册表进行身份验证。

向 Lambda 授予您的执行角色权限

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

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

其中我的拉姆达函数是 Lambda 函数的名称。有关编辑角色权限策略的信息,请参阅修改角色权限策略(控制台)中的Amazon Identity and Access Management用户指南.

注意

具有AmazonSageMakerFullAccess托管策略有权调用任何 Lambda 函数SageMaker以其名称。

为 Lambda 创建接口 VPC 终端节点

创建接口终端节点,以便您的 Amazon VPC 可以与Amazon Lambda函数,而无需通过 Internet 发送流量。有关此操作的信息,请参阅为 Lambda 配置接口 VPC 终端节点中的Amazon Lambda开发人员指南.

SageMaker 托管通过您的 VPC 将请求发送到lambda.region.amazonaws.com来调用您的 Lambda 函数。如果您在创建接口终端节点时选择了私有 DNS 名称,Amazon Route 53 会将调用路由到 Lambda 接口终端节点。如果您使用不同的 DNS 提供程序,请确保将lambda.region.amazonaws.com到您的 Lambda 接口终端节点。