Verwenden Sie eine private Docker-Registry für Echtzeit-Inferenzcontainer
Das Hosting von Amazon SageMaker AI ermöglicht es Ihnen, in Amazon ECR gespeicherte Images zu verwenden, um Ihre Container standardmäßig für Echtzeit-Inferenzen zu erstellen. Optional können Sie Container für Echtzeit-Inferenzen aus Images in einer privaten Docker-Registry erstellen. Die private Registry muss von einer Amazon VPC in Ihrem Konto aus zugänglich sein. Modelle, die Sie basierend auf den in Ihrer privaten Docker-Registry gespeicherten Images erstellen, müssen so konfiguriert sein, dass sie eine Verbindung zu derselben VPC herstellen, über die auf die private Docker-Registry zugegriffen werden kann. Informationen zum Herstellen einer Verbindung Ihres Modells mit einem VPC finden Sie unter Gewähren von Zugriff für von SageMaker AI gehostete Endpunkte auf Ressourcen in Ihrer Amazon VPC.
Ihre Docker-Registry muss mit einem TLS-Zertifikat einer bekannten öffentlichen Zertifizierungsstelle (CA) gesichert werden.
Anmerkung
Ihre private Docker-Registry muss eingehenden Datenverkehr von den Sicherheitsgruppen zulassen, die Sie in der VPC-Konfiguration für Ihr Modell angeben, damit das SageMaker-AI-Hosting Modell-Images aus Ihrer Registry abrufen kann.
SageMaker AI kann Modell-Images von DockerHub abrufen, wenn es in Ihrer VPC einen Pfad zum offenen Internet gibt.
Themen
Speichern Sie Images in einer privaten Docker-Registry, bei der es sich nicht um Amazon Elastic-Container-Registry handelt
Um eine private Docker-Registry zum Speichern Ihrer Images für die Echtzeit-Inferenz von SageMaker AI zu verwenden, erstellen Sie eine private Registry, auf die von Ihrer Amazon VPC aus zugegriffen werden kann. Informationen zum Erstellen einer Docker-Registry finden Sie in der Docker-Dokumentation unter Bereitstellen eines Registry-Servers
-
Bei der Registrierung muss es sich um eine Docker Registry HTTP API V2
-Registrierung handeln. -
Auf die Docker-Registry muss von derselben VPC aus zugegriffen werden können, die Sie in dem
VpcConfigParameter angeben, den Sie bei der Erstellung Ihres Modells angeben.
Verwenden Sie ein Image aus einer privaten Docker-Registry für Echtzeit-Inferenz
Wenn Sie ein Modell erstellen und es auf dem SageMaker-AI-Hosting bereitstellen, können Sie angeben, dass es ein Image aus Ihrer privaten Docker-Registry 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
Um ein in Ihrer privaten Docker-Registry gespeichertes Image für Ihren Inferenzcontainer zu verwenden,
-
erstellen Sie das Image-Konfigurationsobjekt und geben Sie einen Wert von
Vpcfür dasRepositoryAccessModeFeld an.image_config = { 'RepositoryAccessMode': 'Vpc' } -
Wenn Ihre private Docker-Registry eine Authentifizierung erfordert, fügen Sie dem Image-Konfigurationsobjekt ein
RepositoryAuthConfig-Objekt hinzu. Geben Sie für dasRepositoryCredentialsProviderArn-Feld desRepositoryAuthConfig-Objekts den Amazon-Ressourcennamen (ARN) einer AWS Lambda-Funktion an, die Anmeldeinformationen bereitstellt, die es SageMaker AI ermöglichen, sich bei Ihrer privaten Docker-Registry zu authentifizieren. Weitere Informationen zum Erstellen der Lambda-Funktion für die Authentifizierung finden Sie unter SageMaker AI erlauben, sich bei einer privaten Docker-Registry zu authentifizieren.image_config = { 'RepositoryAccessMode': 'Vpc', 'RepositoryAuthConfig': { 'RepositoryCredentialsProviderArn': 'arn:aws:lambda:Region:Acct:function:FunctionName' } } -
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 Image in Digest
-Form bereit. Wenn Sie Ihr Image mit dem :latest-Tag bereitstellen, besteht das Risiko, dass SageMaker AI eine neuere Version des Images als beabsichtigt abruft. Durch die Verwendung des Digest-Formulars wird sichergestellt, dass SageMaker AI die beabsichtigte Image-Version abruft.primary_container = { 'ContainerHostname': 'ModelContainer', 'Image': 'myteam.myorg.com/docker-local/my-inference-image:<IMAGE-TAG>', 'ImageConfig': image_config } -
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' -
Geben Sie eine oder mehrere Sicherheitsgruppen und Subnetze für die VPC-Konfiguration für Ihr Modell an. Ihre private Docker-Registry muss eingehenden Datenverkehr von den Sicherheitsgruppen zulassen, die Sie angeben. Die Subnetze, die Sie angeben, müssen sich in derselben VPC wie Ihre private Docker-Registry befinden.
vpc_config = { 'SecurityGroupIds': ['sg-0123456789abcdef0'], 'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1'] } -
Holen Sie sich einen Boto3-Client für SageMaker AI.
import boto3 sm = boto3.client('sagemaker') -
Erstellen Sie das Modell, indem Sie
create_modelaufrufen und dabei die Werte verwenden, die Sie in den vorherigen Schritten für die ParameterPrimaryContainerundVpcConfigangegeben 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) -
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 AI erlauben, sich bei einer privaten Docker-Registry zu authentifizieren
Um ein Inferenz-Image aus einer privaten Docker-Registry abzurufen, für die eine Authentifizierung erforderlich ist, erstellen Sie eine AWS Lambda Funktion, die Anmeldeinformationen bereitstellt, und geben Sie den Amazon-Ressourcennamen (ARN) der Lambda-Funktion an, wenn Sie create_modelcreate_model ausführt, ruft es die Lambda-Funktion auf, die Sie angegeben haben, um Anmeldeinformationen für die Authentifizierung bei Ihrer Docker-Registry abzurufen.
So erstellen Sie die Lambda-Funktion:
Erstellen Sie eine AWS Lambda Funktion, die eine Antwort mit der folgenden Form zurückgibt:
def handler(event, context): response = { "Credentials": {"Username": "username", "Password": "password"} } return response
Je nachdem, wie Sie die Authentifizierung für Ihre private Docker-Registry einrichten, können die Anmeldeinformationen, die Ihre Lambda-Funktion zurückgibt, eine der folgenden Bedeutungen haben:
-
Wenn Sie Ihre private Docker-Registry für die Verwendung der grundlegenden Authentifizierung einrichten, geben Sie die Anmeldeinformationen für die Authentifizierung bei der Registrierung ein.
-
Wenn Sie Ihre private 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 der privaten Docker-Registry verwendet werden kann.
Lambda die Berechtigung für Ihre Ausführungsrolle erteilen
Die Ausführungsrolle, die Sie für den Aufruf von create_model verwenden, muss über die Berechtigung zum Aufruf von AWS LambdaFunktionen verfügen. Fügen Sie der Berechtigungsrichtlinie Ihrer Ausführungsrolle Folgendes hinzu.
{ "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:*:*:function:*myLambdaFunction*" ] }
Wobei myLambdaFunction der Name Ihrer Lambda-Funktion 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 angefügt ist, hat die Berechtigung, jede Lambda-Funktion mit SageMaker in ihrem Namen aufzurufen.
Einen Schnittstellen-VPC-Endpunkt für Lambda erstellen
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.
Das SageMaker-AI-Hosting sendet eine Anfrage durch Ihre VPC an lambda., 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 region.amazonaws.comlambda. Ihrem Lambda-Schnittstellenendpunkt zuordnen.region.amazonaws.com