Utilizzo di un registro Docker privato per container di inferenza in tempo reale
L’hosting Amazon SageMaker AI consente di utilizzare immagini archiviate in Amazon ECR per creare container per l’inferenza in tempo reale per impostazione predefinita. Facoltativamente, puoi creare container per l'inferenza in tempo reale da immagini in un registro Docker privato. Il registro privato deve essere accessibile da un Amazon VPC nel tuo account. I modelli creati in base alle immagini archiviate nel registro Docker privato devono essere configurati per connettersi allo stesso VPC in cui è accessibile il registro Docker privato. Per ulteriori informazioni sulla connessione del modello a un VPC, consulta Concessione dell’accesso alle risorse nel tuo Amazon VPC per gli endpoint ospitati SageMaker AI.
Il registro Docker deve essere protetto con un certificato TLS di un'autorità di certificazione (CA) pubblica nota.
Nota
Il registro Docker privato deve consentire il traffico in entrata dai gruppi di sicurezza specificati nella configurazione VPC per il modello, in modo che l’hosting SageMaker AI possa estrarre le immagini del modello dal registro.
SageMaker AI può estrarre immagini di modelli da DockerHub se esiste un percorso verso una rete Internet aperta all’interno del tuo VPC.
Argomenti
Archiviazione delle immagini in un registro Docker privato diverso da Amazon Elastic Container Registry
Per utilizzare un registro Docker privato per archiviare le immagini per l’inferenza in tempo reale di SageMaker AI, crea un registro privato accessibile dal tuo Amazon VPC. Per informazioni sulla creazione di un registro Docker, consulta Deploy a registry server
-
Il registro deve essere un registro Registro Docker HTTP API V2
. -
Il registro Docker deve essere accessibile dallo stesso VPC specificato nel parametro
VpcConfigal momento della creazione del modello.
Utilizzo di un'immagine da un registro Docker privato per l'inferenza in tempo reale
Quando crei un modello e lo implementi nell’hosting SageMaker AI, è possibile specificare che utilizza un’immagine dal registro Docker privato per creare il container di inferenza. Specificalo nell'oggetto ImageConfig nel parametro PrimaryContainer che inoltri a una chiamata alla funzione create_model
Per utilizzare un'immagine archiviata nel registro Docker privato per il container di inferenza
-
Crea l'oggetto di configurazione dell'immagine e specifica un valore
Vpcper il campoRepositoryAccessMode.image_config = { 'RepositoryAccessMode': 'Vpc' } -
Se il registro Docker privato richiede l'autenticazione, aggiungi un oggetto
RepositoryAuthConfigall'oggetto di configurazione dell'immagine. Per il campoRepositoryCredentialsProviderArndell’oggettoRepositoryAuthConfig, specifica il nome della risorsa Amazon (ARN) di una funzione AWS Lambda che fornisce le credenziali che consentono a SageMaker AI di autenticarsi nel registro Docker privato. Per informazioni su come creare la funzione Lambda per fornire l'autenticazione, consulta Consentire a SageMaker AI di autenticarsi su un registro Docker privato.image_config = { 'RepositoryAccessMode': 'Vpc', 'RepositoryAuthConfig': { 'RepositoryCredentialsProviderArn': 'arn:aws:lambda:Region:Acct:function:FunctionName' } } -
Crea l'oggetto container principale da trasferire a
create_model, utilizzando l'oggetto di configurazione dell'immagine creato nella fase precedente.Fornisci la tua immagine in formato digest
. Se fornisci l’immagine utilizzando il tag :latest, c’è il rischio che SageMaker AI recuperi una versione dell’immagine più recente di quella prevista. L’utilizzo del formato digest assicura che SageMaker AI recuperi la versione dell’immagine desiderata.primary_container = { 'ContainerHostname': 'ModelContainer', 'Image': 'myteam.myorg.com/docker-local/my-inference-image:<IMAGE-TAG>', 'ImageConfig': image_config } -
Specifica il nome del modello e il ruolo di esecuzione che desideri inoltrare a
create_model.model_name = 'vpc-model' execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole' -
Specifica uno o più gruppi di sicurezza e sottoreti per la configurazione VPC per il tuo modello. Il registro Docker privato deve consentire il traffico in ingresso dai gruppi di sicurezza specificati. Le sottoreti specificate devono trovarsi nello stesso VPC del registro Docker privato.
vpc_config = { 'SecurityGroupIds': ['sg-0123456789abcdef0'], 'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1'] } -
Ottieni un client SageMaker AI Boto3.
import boto3 sm = boto3.client('sagemaker') -
Crea il modello richiamando
create_model, utilizzando i valori specificati nelle fasi precedenti per i parametriPrimaryContainereVpcConfig.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) -
Infine, richiama create_endpoint_config
e create_endpoint per creare l'endpoint di hosting, utilizzando il modello creato nella fase precedente. 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)
Consentire a SageMaker AI di autenticarsi su un registro Docker privato
Per estrarre un'immagine di inferenza da un registro Docker privato che richiede l'autenticazione, crea una funzione AWS Lambda che fornisca le credenziali e fornisci il nome della risorsa Amazon (ARN) della funzione Lambda quando richiami create_modelcreate_model, chiama la funzione Lambda specificata per ottenere le credenziali per l’autenticazione nel registro Docker.
Creazione della funzione Lambda
Crea una funzione AWS Lambda che restituisca una risposta con il seguente modulo:
def handler(event, context): response = { "Credentials": {"Username": "username", "Password": "password"} } return response
A seconda di come configuri l'autenticazione per il tuo registro Docker privato, le credenziali restituite dalla funzione Lambda possono significare una delle seguenti cose:
-
Se configuri il registro Docker privato per utilizzare l'autenticazione di base, fornisci le credenziali di accesso per l'autenticazione nel registro.
-
Se configuri il tuo registro Docker privato per utilizzare l'autenticazione con token bearer, le credenziali di accesso vengono inviate al tuo server di autorizzazione, che restituisce un token bearer che può quindi essere utilizzato per l'autenticazione nel registro Docker privato.
Concedi a Lamba l’autorizzazione per il tuo ruolo di esecuzione
Il ruolo di esecuzione che usi per chiamare create_model deve avere le autorizzazioni per richiamare le funzioni AWS Lambda. Aggiungi quanto segue alla policy sulle autorizzazioni del tuo ruolo di esecuzione.
{ "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:*:*:function:*myLambdaFunction*" ] }
Dove myLambdaFunction è il nome della funzione Lambda. Per informazioni su come modificare le autorizzazioni per un ruolo, consulta Modifying a role permissions policy (console) nella Guida per l’utente AWS Identity and Access Management.
Nota
Un ruolo di esecuzione a cui è collegata la policy gestita AmazonSageMakerFullAccess è autorizzato a richiamare qualsiasi funzione Lambda con SageMaker nel suo nome.
Creazione di un endpoint VPC di interfaccia per Lambda
Crea un endpoint di interfaccia in modo che Amazon VPC possa comunicare con la tua funzione AWS Lambda senza inviare traffico su Internet. Per informazioni su come svolgere questa operazione, consulta Configuring interface VPC endpoints for Lambda nella AWS LambdaGuida per gli sviluppatori.
L’hosting SageMaker AI invia una richiesta tramite il tuo VPC a lambda., per chiamare la funzione Lambda. Se scegli il Nome DNS privato quando crei l'endpoint di interfaccia, Amazon Route 53 indirizza la chiamata all'endpoint dell'interfaccia Lambda. Se utilizzi un provider DNS diverso, assicurati di mappare region.amazonaws.com.rproxy.govskope.calambda. all'endpoint dell'interfaccia Lambda.region.amazonaws.com