リアルタイム推論コンテナにプライベート Docker レジストリを使用する - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

リアルタイム推論コンテナにプライベート Docker レジストリを使用する

Amazon SageMaker ホスティングでは、Amazon ECR に保存されているイメージを使用して、デフォルトでリアルタイム推論用のコンテナを構築できます。オプションで、プライベート Docker レジストリ内のイメージからリアルタイム推論用のコンテナを構築できます。プライベートレジストリは、アカウント内の Amazon VPC からアクセスできることが必要です。プライベート Docker レジストリに格納されているイメージに基づいて作成するモデルは、プライベート Docker レジストリがアクセスできる同じ VPC に接続するように設定する必要があります。モデルの VPC への接続の詳細については、「 SageMaker ホストされたエンドポイントに Amazon VPC 内のリソースへのアクセスを許可する」を参照してください。

Docker レジストリは、既知の公開認証機関 (CA) からの TLS 証明書で保護されている必要があります。

注記

プライベート Docker レジストリは、 SageMaker ホスティングがレジストリからモデルイメージをプルできるように、モデルの VPC 設定で指定したセキュリティグループからのインバウンドトラフィックを許可する必要があります。

SageMaker は、VPC 内にオープンインターネットへのパス DockerHub がある場合、 からモデルイメージをプルできます。

Amazon Elastic コンテナレジストリ以外のプライベート Docker レジストリにイメージを保存する

プライベート Docker レジストリを使用してイメージを SageMaker リアルタイム推論用に保存するには、Amazon VPC からアクセスできるプライベートレジストリを作成します。Docker レジストリの作成の詳細については、Docker ドキュメントの「レジストリサーバーをデプロイする」を参照してください。Docker レジストリは、以下を満たす必要があります。

  • レジストリは Docker Registry HTTP API V2 レジストリであることが必要です。

  • Docker レジストリは、モデルの作成時に指定する VpcConfig パラメータで指定する同じ VPC からアクセスできる必要があります。

リアルタイム推論にプライベート Docker レジストリのイメージを使用する

モデルを作成して SageMaker ホスティングにデプロイするときに、プライベート Docker レジストリのイメージを使用して推論コンテナを構築するように指定できます。create_model 関数の呼び出しに渡す PrimaryContainer パラメータの ImageConfig オブジェクトでこれを指定します。

プライベート Docker レジストリに保存されているイメージを推論コンテナに使用するには
  1. イメージ設定オブジェクトを作成し、RepositoryAccessMode フィールドに Vpc の値を指定します。

    image_config = { 'RepositoryAccessMode': 'Vpc' }
  2. プライベートの Docker レジストリに認証が必要な場合は、RepositoryAuthConfig オブジェクトを、イメージ設定オブジェクトに追加します。RepositoryAuthConfig オブジェクトの RepositoryCredentialsProviderArnフィールドで、 がプライベート Docker レジストリ SageMaker に対して認証できるようにする 認証情報を提供する AWS Lambda 関数の Amazon リソースネーム (ARN) を指定します。認証を提供するために 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. 1 つ以上のセキュリティグループとサブネットをモデルの VPC 設定に指定します。プライベート Docker レジストリは、指定したセキュリティグループからのインバウンドトラフィックを許可する必要があります。指定するサブネットは、プライベート Docker レジストリと同じ VPC 内にある必要があります。

    vpc_config = { 'SecurityGroupIds': ['sg-0123456789abcdef0'], 'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1'] }
  6. Boto3 SageMaker クライアントを取得します。

    import boto3 sm = boto3.client('sagemaker')
  7. PrimaryContainer および VpcConfig パラメータに前の手順で指定した値を使用して create_model を呼び出し、モデルを作成します。

    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_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 プライベート Docker レジストリへの認証を に許可する

認証が必要なプライベート Docker レジストリから推論イメージをプルするには、認証情報を提供する AWS Lambda 関数を作成し、create_model を呼び出すときに Lambda 関数の Amazon リソースネーム (ARN) を指定します。が SageMaker を実行すると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 へのアクセス許可を付与する

の呼び出しに使用する実行ロールには、 AWS Lambda 関数を呼び出すアクセス許可create_modelが必要です。実行ロールのアクセス許可ポリシーに以下を追加します。

{ "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 ホスティングは、VPC 経由で にリクエストを送信しlambda.region.amazonaws.com、Lambda 関数を呼び出します。インターフェイスエンドポイントの作成時にプライベート DNS 名を選択すると、Amazon Route 53 は呼び出しを Lambda インターフェイスエンドポイントにルーティングします。別の DNS プロバイダーを使用する場合は、必ず lambda.region.amazonaws.com を Lambda インターフェイスエンドポイントに対応付けてください。