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

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

对实时推理容器使用私有 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 注册表必须遵守以下内容:

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

  • Docker 注册表必须可从您在创建模型时在 VpcConfig 参数中指定的同一 VPC 访问。

  • Docker 注册表不能要求任何身份验证。

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

在创建模型并将其部署到 SageMaker 托管时,您可以指定它使用私有 Docker 注册表中的映像来构建推理容器。

为您的推理容器使用存储在私有 Docker 注册表中的映像

  1. 在调用 Vpccreate_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', }, }
  2. 为您的模型的 VPC 配置指定一个或多个安全组和子网。您的私有 Docker 注册表必须允许来自您指定的安全组的入站流量。您指定的子网必须与私有 Docker 注册表位于同一 VPC 中。

    vpc_config = { 'SecurityGroupIds': ['sg-0123456789abcdef0'], 'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1'] }
  3. 通过使用您在之前步骤中为 create_modelPrimaryContainer 参数指定的值来调用 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)
  4. 最后,调用 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)