本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为实时推理容器使用私有 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 注册表 HTTP API V2 注册表
。 -
Docker 注册表必须与您在创建模型时指定的
VpcConfig
参数中指定的注册表相同VPC。
使用来自私有 Docker 注册表的映像进行实时推理
创建模型并将其部署到 SageMaker AI 托管时,您可以指定它使用私有 Docker 注册表中的镜像来构建推理容器。在您传递给 create_modelPrimaryContainer
参数中,在 ImageConfig
对象中指定此项。
将存储在私有 Docker 注册表中的映像用于推理容器
-
创建映像配置对象并为
RepositoryAccessMode
字段指定Vpc
的值。image_config = { 'RepositoryAccessMode': 'Vpc' }
-
如果您的私有 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
' } } -
创建要传递到
create_model
的主容器对象,使用您在上一步中创建的映像配置对象。在摘要
表中提供您的映像。如果您使用 :latest
标签提供图像,则存在 SageMaker 人工智能提取比预期更新的图像版本的风险。使用摘要表单可确保 SageMaker AI 提取预期的图像版本。primary_container = { 'ContainerHostname': 'ModelContainer', 'Image': 'myteam.myorg.com/docker-local/my-inference-image:
<IMAGE-TAG>
', 'ImageConfig': image_config } -
指定要传递给
create_model
的模型名称和执行角色。model_name = 'vpc-model' execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole'
-
为您的模型的VPC配置指定一个或多个安全组和子网。您的私有 Docker 注册表必须允许来自您指定的安全组的入站流量。您指定的子网必须与您的私有 Docker 注册表VPC相同。
vpc_config = { 'SecurityGroupIds': ['sg-0123456789abcdef0'], 'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1'] }
-
获取 Boto3 SageMaker 人工智能客户端。
import boto3 sm = boto3.client('sagemaker')
-
通过调用
create_model
来创建模型,使用您在之前的步骤中为PrimaryContainer
和VpcConfig
参数指定的值。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)
-
最后,调用 create_endpoint_config
和 create_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)。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.
调用您的 Lambda 函数。如果您在创建接口终端节点时选择私有DNS名称,Amazon Route 53 会将调用路由到 Lambda 接口终端节点。如果您使用其他DNS提供商,请务必映射region
.amazonaws.comlambda.
到您的 Lambda 接口终端节点。region
.amazonaws.com