讓即時推論容器使用私有 Docker 登錄檔 - Amazon SageMaker AI

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

讓即時推論容器使用私有 Docker 登錄檔

Amazon SageMaker AI 託管可讓您使用存放在 Amazon ECR 中的映像,根據預設建置容器以進行即時推論。或者,您可以從私有 Docker 登錄檔中的映像建立即時推論容器。私有登錄檔必須可以從您帳戶中的 Amazon VPC 存取。您基於私有 Docker 登錄檔中儲存的映像建立的模型須設定為連線至可存取私有 Docker 登錄檔的相同 VPC。如需將您的模型連線至 VPC 的資訊,請參閱讓 SageMaker AI 託管端點存取 Amazon VPC 中的資源

Docker 登錄檔須使用來自已知公有憑證授權單位 (CA) 的 TLS 憑證來保護。

注意

您的私有 Docker 登錄檔必須允許來自您在模型的 VPC 組態中指定的安全群組的傳入流量,以便 SageMaker AI 託管能夠從您的登錄檔提取模型映像。

如果 VPC 中有通往開放網際網路的路徑,SageMaker AI 可以從 DockerHub 提取模型映像。

將映像儲存在 Amazon Elastic Container Registry 以外的私有 Docker 登錄檔中

若要使用私有 Docker 登錄檔來存放 SageMaker AI 即時推論的影像,請建立可從 Amazon VPC 存取的私有登錄檔。如需建立 Docker 登錄檔的相關資訊,請參閱 Docker 文件中的部署登錄伺服器。Docker 登錄檔須符合下列規定:

  • 登錄檔須為 Docker 登錄檔 HTTP API V2 登錄檔。

  • Docker 登錄檔須可從您在建立模型時指定的 VpcConfig 參數中指定的相同 VPC 存取。

使用來自私有 Docker 登錄檔的映像進行即時推論

當您建立模型並將其部署到 SageMaker AI 託管時,您可以指定它使用私有 Docker 登錄檔中的映像來建置推論容器。在傳遞給 create_model 函式呼叫的 PrimaryContainer 參數中的 ImageConfig 物件中指定此值。

若要將儲存在私有 Docker 登錄檔中的映像用於推論容器
  1. 建立映像組態物件,並為 RepositoryAccessMode 欄位指定 Vpc 的值。

    image_config = { 'RepositoryAccessMode': 'Vpc' }
  2. 如果您的私有 Docker 登錄檔需要驗證,請將 RepositoryAuthConfig 物件新增至映像組態物件。針對 RepositoryAuthConfig 物件RepositoryCredentialsProviderArn的欄位,指定 函數的 Amazon Resource Name (ARN),該 AWS Lambda 函數提供登入資料,允許 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 AI 可能會提取比預期更新的映像版本。使用摘要表單可確保 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 AI 用戶端。

    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 登錄檔提取推論映像,請建立提供登入資料的 AWS Lambda 函數,並在呼叫 create_model 時提供 Lambda 函數的 Amazon Resource Name (ARN)。當 SageMaker AI 執行 時create_model,它會呼叫您指定的 Lambda 函數,以取得憑證以驗證您的 Docker 登錄檔。

建立 Lambda 函式

建立 AWS Lambda 函數,以傳回具有下列格式的回應:

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

視您為私有 Docker 登錄檔設定驗證的方式而定,Lambda 函式傳回的憑證可能表示下列其中一項:

  • 如果您將私有 Docker 登錄檔設置為使用基本驗證,請提供登入的憑據以向登錄檔進行驗證。

  • 如果您將私有 Docker 登錄檔設置為使用承載權杖驗證,則登入憑證將傳送至您的授權伺服器,該伺服器傳回可用於驗證私有 Docker 登錄檔的承載權杖。

將您的執行角色許可給予 Lambda

您用來呼叫 的執行角色create_model必須具有呼叫 AWS Lambda 函數的許可。將以下內容新增到執行角色的許可政策中。

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

myLambdaFunction 是您的 Lambda 函式的名稱。如需編輯角色許可政策的資訊,請參閱 AWS Identity and Access Management 使用者指南中的修改角色許可政策 (主控台)

注意

連接 AmazonSageMakerFullAccess 受管政策的執行角色有許可能夠呼叫任何在名稱中含有 SageMaker 的 Lambda 函式。

為 Lambda 建立介面 VPC 端點

建立介面端點,以便 Amazon VPC 可以與您的 AWS Lambda 函式通訊,而不必透過網際網路傳送流量。如需此使用方法的資訊,請參閱 AWS Lambda 開發人員指南中的設定 Lambda 的介面 VPC 端點

SageMaker AI 託管會透過您的 VPC 傳送請求至 lambda.region.amazonaws.com,以呼叫您的 Lambda 函數。如果您在建立介面端點時選擇私有 DNS 名稱,Amazon Route 53 會將呼叫路由至 Lambda 介面端點。如果您使用不同的 DNS 提供者,請務必將 lambda.region.amazonaws.com 對應到您的 Lambda 介面端點。