Verwenden Sie ein privates Docker-Registry für Echtzeit-Inferenzcontainer - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie ein privates Docker-Registry für Echtzeit-Inferenzcontainer

Mit dem Amazon SageMaker -Hosting können Sie in Amazon ECR gespeicherte Images verwenden, um Ihre Container standardmäßig für Echtzeit-Inferenzen zu erstellen. Optional können Sie Container für Echtzeit-Inferenzen aus Bildern in einem privaten Docker-Registry erstellen. Das private Registry muss von einer Amazon VPC in Ihrem Konto aus zugänglich sein. Modelle, die Sie basierend auf den in Ihrem privaten Docker-Registry gespeicherten Bildern erstellen, müssen so konfiguriert sein, dass sie eine Verbindung zu derselben VPC herstellen, über die auf das private Docker-Registry zugegriffen werden kann. Informationen zum Herstellen einer Verbindung Ihres Modells mit einem VPC finden Sie unter Geben Sie SageMaker gehosteten Endpunkten Zugriff auf Ressourcen in Ihrem Amazon VPC.

Ihr Docker-Registry muss mit einem TLS-Zertifikat einer bekannten öffentlichen Zertifizierungsstelle (CA) gesichert werden.

Anmerkung

Ihre private Docker-Registrierung muss eingehenden Datenverkehr von den Sicherheitsgruppen zulassen, die Sie in der VPC-Konfiguration für Ihr Modell angeben, damit das SageMaker Hosting Modell-Images aus Ihrer Registrierung abrufen kann.

SageMaker kann Modellbilder aus abrufen, DockerHub wenn es einen Pfad zum offenen Internet in Ihrer VPC gibt.

Speichern Sie Bilder in ein privates Docker-Registry, bei der es sich nicht um Amazon Elastic Container-Registry handelt

Um eine private Docker-Registrierung zum Speichern Ihrer Images für Echtzeit SageMaker -Inferenzen zu verwenden, erstellen Sie eine private Registrierung, auf die von Ihrer Amazon VPC aus zugegriffen werden kann. Informationen zum Erstellen eines Docker-Registry finden Sie in der Docker-Dokumentation unter Bereitstellen eines Registry-Servers. Das Docker-Registry muss den folgenden Anforderungen entsprechen:

  • Bei der Registrierung muss es sich um eine Docker Registry HTTP API V2-Registrierung handeln.

  • Auf das Docker-Registry muss von derselben VPC aus zugegriffen werden können, die Sie in dem VpcConfig Parameter angeben, den Sie bei der Erstellung Ihres Modells angeben.

Verwenden Sie ein Bild aus einem privaten Docker-Registry für Echtzeit-Inferenz

Wenn Sie ein Modell erstellen und es für das SageMaker Hosting bereitstellen, können Sie angeben, dass es ein Image aus Ihrer privaten Docker-Registrierung verwendet, um den Inferenzcontainer zu erstellen. Geben Sie dies im ImageConfig Objekt in dem PrimaryContainer Parameter an, den Sie an einen Aufruf der create_model-Funktion übergeben.

Um ein in Ihrem privaten Docker-Registry gespeichertes Bild für Ihren Inferenzcontainer zu verwenden,
  1. erstellen Sie das Image-Konfigurationsobjekt und geben Sie einen Wert von Vpc für das RepositoryAccessMode Feld an.

    image_config = { 'RepositoryAccessMode': 'Vpc' }
  2. Wenn Ihr privates Docker-Registry eine Authentifizierung erfordert, fügen Sie dem Image-Konfigurationsobjekt ein RepositoryAuthConfig-Objekt hinzu. Geben Sie für das -RepositoryCredentialsProviderArnFeld des -RepositoryAuthConfigObjekts den Amazon-Ressourcennamen (ARN) einer - AWS Lambda Funktion an, die Anmeldeinformationen bereitstellt, mit denen SageMaker sich bei Ihrer privaten Docker-Registry authentifizieren kann. Weitere Informationen zum Erstellen der -Lambda-Funktion für die Authentifizierung finden Sie unter SageMaker Erlauben der Authentifizierung bei einer privaten Docker-Registrierung.

    image_config = { 'RepositoryAccessMode': 'Vpc', 'RepositoryAuthConfig': { 'RepositoryCredentialsProviderArn': 'arn:aws:lambda:Region:Acct:function:FunctionName' } }
  3. Erstellen Sie das primäre Container-Objekt, das Sie an create_model übergeben wollen, unter Verwendung des Image-Konfigurationsobjekts, das Sie im vorherigen Schritt erstellt haben.

    Stellen Sie Ihr Bild in Digest-Form bereit. Wenn Sie Ihr Image mit dem -:latestTag bereitstellen, besteht das Risiko, dass eine neuere Version des Images SageMaker abruft als beabsichtigt. Die Verwendung des Digest-Formulars stellt sicher, dass die gewünschte Image-Version SageMaker abruft.

    primary_container = { 'ContainerHostname': 'ModelContainer', 'Image': 'myteam.myorg.com/docker-local/my-inference-image:<IMAGE-TAG>', 'ImageConfig': image_config }
  4. Geben Sie den Modellnamen und die Ausführungsrolle an, die Sie an create_model übergeben wollen.

    model_name = 'vpc-model' execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole'
  5. Geben Sie eine oder mehrere Sicherheitsgruppen und Subnetze für die VPC-Konfiguration für Ihr Modell an. Ihr privates Docker-Registry muss eingehenden Datenverkehr von den Sicherheitsgruppen zulassen, die Sie angeben. Die Subnetze, die Sie angeben, müssen sich in derselben VPC wie Ihr privates Docker-Registry befinden.

    vpc_config = { 'SecurityGroupIds': ['sg-0123456789abcdef0'], 'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1'] }
  6. Rufen Sie einen Boto3 SageMaker -Client ab.

    import boto3 sm = boto3.client('sagemaker')
  7. Erstellen Sie das Modell, indem Sie create_model aufrufen und dabei die Werte verwenden, die Sie in den vorherigen Schritten für die Parameter PrimaryContainer und VpcConfig angegeben haben.

    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. Rufen Sie abschließend create_endpoint_config und create_endpoint auf, um den Hosting-Endpunkt zu erstellen. Verwenden Sie dabei das Modell, das Sie im vorherigen Schritt erstellt haben.

    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 Erlauben der Authentifizierung bei einer privaten Docker-Registrierung

Um ein Inferenz-Image aus einer privaten Docker-Registrierung abzurufen, die eine Authentifizierung erfordert, erstellen Sie eine - AWS Lambda Funktion, die Anmeldeinformationen bereitstellt, und geben Sie den Amazon-Ressourcennamen (ARN) der Lambda-Funktion an, wenn Sie create_model aufrufen. Wenn SageMaker ausführtcreate_model, ruft es die von Ihnen angegebene Lambda-Funktion auf, um Anmeldeinformationen für die Authentifizierung bei Ihrer Docker-Registrierung abzurufen.

So erstellen Sie die Lambda-Funktion:

Erstellen Sie eine - AWS Lambda Funktion, die eine Antwort mit dem folgenden Format zurückgibt:

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

Je nachdem, wie Sie die Authentifizierung für Ihr privates Docker-Registry einrichten, können die Anmeldeinformationen, die Ihre Lambda-Funktion zurückgibt, eine der folgenden Bedeutungen haben:

  • Wenn Sie Ihr privates Docker-Registry für die Verwendung der grundlegenden Authentifizierung einrichten, geben Sie die Anmeldeinformationen für die Authentifizierung bei der Registrierung ein.

  • Wenn Sie Ihr privates Docker-Registry für die Verwendung der Bearer-Token-Authentifizierung einrichten, werden die Anmeldeinformationen an Ihren Autorisierungsserver gesendet, der ein Bearer-Token zurückgibt, das dann zur Authentifizierung bei dem privaten Docker-Registry verwendet werden kann.

Erteilen Sie Lambda die Berechtigung für Ihre Ausführungsrolle

Die Ausführungsrolle, die Sie zum Aufrufen von verwenden, create_model muss über Berechtigungen zum Aufrufen von - AWS Lambda Funktionen verfügen. Fügen Sie der Berechtigungsrichtlinie Ihrer Ausführungsrolle Folgendes hinzu.

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

Wobei der Name Ihrer Lambda-Funktion myLambdaFunction ist. Informationen zum Bearbeiten einer Rollenberechtigungsrichtlinie finden Sie unter Abändern einer Rollenberechtigungsrichtlinie (Konsole) im AWS Identity and Access Management Benutzerhandbuch.

Anmerkung

Eine Ausführungsrolle, an die die AmazonSageMakerFullAccess verwaltete Richtlinie angehängt ist, hat die Berechtigung, jede Lambda-Funktion mit SageMaker im Namen aufzurufen.

Erstellen Sie einen Schnittstellen-VPC-Endpunkt für Lambda

Erstellen Sie einen Schnittstellenendpunkt, damit Ihre Amazon VPC mit Ihrer AWS Lambda Funktion kommunizieren kann, ohne Traffic über das Internet zu senden. Informationen dazu finden Sie unter Konfigurieren von Schnittstellen-VPC-Endpunkten für Lambda im AWS Lambda Entwicklerhandbuch.

SageMaker Hosting sendet eine Anforderung über Ihre VPC an lambda.region.amazonaws.com, um Ihre Lambda-Funktion aufzurufen. Wenn Sie bei der Erstellung Ihres Schnittstellenendpunkts den privaten DNS-Namen wählen, leitet Amazon Route 53 den Anruf an den Lambda-Schnittstellenendpunkt weiter. Wenn Sie einen anderen DNS-Anbieter verwenden, stellen Sie sicher, dass Sie lambda.region.amazonaws.com Ihrem Lambda-Schnittstellenendpunkt zuordnen.