本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对实时推理容器使用私有 Docker 注册表
Amazon SageMaker 托管使您能够使用存储在 Amazon ECR 中的映像来构建容器,以便在默认情况下进行实时推理。(可选)您可以从私有 Docker 注册表中的映像构建容器以进行实时推理。私有注册表必须可从您账户中的 Amazon VPC访问。您根据存储在私有 Docker 注册表中的映像创建的模型必须配置为连接到您创建私有 Docker 注册表的同一 VPC。有关将您的模型连接到 VPC 的信息,请参阅为 SageMaker 托管终端节点授予您的 Amazon VPC 中的资源的访问权限。
必须使用来自已知公有证书颁发机构 (CA) 的 TLS 证书保护您的 Docker 注册表。
您的私有 Docker 注册表必须允许来自您在模型的 VPC 配置中指定的安全组的入站流量,以便 SageMaker 托管能够从您的注册表中提取模型映像。
在私有 Docker 注册表中存储映像
要使用私有 Docker 注册表存储映像用于 SageMaker 实时推理,请创建可从您的 Amazon VPC 访问的私有注册表。有关创建 Docker 注册表的信息,请参阅
Docker 文档中的部署注册表服务器
-
注册表必须是 Docker 注册表 HTTP API V2
注册表。 -
Docker 注册表必须可从您在创建模型时在
VpcConfig
参数中指定的同一 VPC 访问。 -
Docker 注册表不能要求任何身份验证。
使用私有 Docker 注册表中的映像进行实时推理
在创建模型并将其部署到 SageMaker 托管时,您可以指定它使用私有 Docker 注册表中的映像来构建推理容器。
为您的推理容器使用存储在私有 Docker 注册表中的映像
-
在调用
Vpc
create_modelRepositoryAccess
函数时,指定ImageConfig
作为主容器的 设置的字段的值。 model_name = 'vpc-model' execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole' primary_container = { 'ContainerHostname': 'ModelContainer', 'Image': 'myteam.myorg.com/docker-local/my-inference-image:latest', 'ImageConfig': { 'RepositoryAccessMode': 'Vpc', }, }
-
为您的模型的 VPC 配置指定一个或多个安全组和子网。您的私有 Docker 注册表必须允许来自您指定的安全组的入站流量。您指定的子网必须与私有 Docker 注册表位于同一 VPC 中。
vpc_config = { 'SecurityGroupIds': ['sg-0123456789abcdef0'], 'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1'] }
-
通过使用您在之前步骤中为
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)