Utilizzo di un Registro Docker privato per Container di inferenza in tempo reale - Amazon SageMaker

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di un Registro Docker privato per Container di inferenza in tempo reale

L' SageMaker hosting Amazon ti consente di utilizzare le immagini archiviate in Amazon ECR per creare contenitori per l'inferenza in tempo reale per impostazione predefinita. Facoltativamente, è possibile 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 Offri agli endpoint SageMaker ospitati l'accesso alle risorse nel tuo Amazon VPC.

Il registro Docker deve essere protetto con un certificato TLS di una nota autorità di certificazione (CA) pubblica.

Nota

Il tuo registro Docker privato deve consentire il traffico in entrata dai gruppi di sicurezza specificati nella configurazione VPC per il tuo modello, in modo che l' SageMaker hosting sia in grado di estrarre le immagini del modello dal tuo registro.

SageMaker puoi estrarre immagini di modelli da DockerHub se esiste un percorso verso una rete Internet aperta all'interno del tuo VPC.

Archivia le 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 SageMaker in tempo reale, crea un registro privato accessibile dal tuo Amazon VPC. Per informazioni sulla creazione di un registro Docker, consulta Distribuire un server di registro nella documentazione Docker. Il registro Docker deve rispettare quanto segue:

  • Il registro deve essere un registro Registro Docker HTTP API V2.

  • Il registro Docker deve essere accessibile dallo stesso VPC specificato nel parametro VpcConfig specificato al momento della creazione del modello.

Usa un'immagine da un Registro Docker privato per l'Inferenza in tempo reale

Quando crei un modello e lo distribuisci nell' SageMaker hosting, puoi specificare che utilizzi un'immagine del tuo registro Docker privato per creare il contenitore di inferenza. Specificalo nell'oggetto ImageConfig nel parametro PrimaryContainer che passi a una chiamata alla funzione create_model.

Per utilizzare un'immagine archiviata nel registro Docker privato per il container di inferenza
  1. Crea l'oggetto di configurazione dell'immagine e specifica un valore Vpc per il campo RepositoryAccessMode.

    image_config = { 'RepositoryAccessMode': 'Vpc' }
  2. Se il registro Docker privato richiede l'autenticazione, aggiungi un oggetto RepositoryAuthConfig all'oggetto di configurazione dell'immagine. Per il RepositoryCredentialsProviderArn campo dell'RepositoryAuthConfigoggetto, specifica l'Amazon Resource Name (ARN) di una AWS Lambda funzione che fornisce credenziali che consentono l'autenticazione nel tuo SageMaker Docker Registry privato. Per informazioni su come creare la funzione Lambda per fornire l'autenticazione, consultare Consenti SageMaker l'autenticazione in un registro Docker privato.

    image_config = { 'RepositoryAccessMode': 'Vpc', 'RepositoryAuthConfig': { 'RepositoryCredentialsProviderArn': 'arn:aws:lambda:Region:Acct:function:FunctionName' } }
  3. Creare l'oggetto container principale che si desidera passare a create_model, utilizzando l'oggetto di configurazione dell'immagine creato nel passaggio precedente.

    Fornisci la tua immagine in formato riassunto. Se fornisci l'immagine utilizzando il :latest tag, c'è il rischio che SageMaker recuperi una versione dell'immagine più recente di quella prevista. L'utilizzo del modulo riepilogativo assicura che venga recuperata la SageMaker versione dell'immagine desiderata.

    primary_container = { 'ContainerHostname': 'ModelContainer', 'Image': 'myteam.myorg.com/docker-local/my-inference-image:<IMAGE-TAG>', 'ImageConfig': image_config }
  4. Specificare il nome del modello e il ruolo di esecuzione a cui si desidera trasferire create_model.

    model_name = 'vpc-model' execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole'
  5. Specificare uno o più gruppi di sicurezza e sottoreti per la configurazione VPC per il proprio 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'] }
  6. Procurati un client Boto3 SageMaker .

    import boto3 sm = boto3.client('sagemaker')
  7. Crea il modello richiamando create_model, utilizzando i valori specificati nei passaggi precedenti per i parametri PrimaryContainer e VpcConfig.

    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. Infine, richiama create_endpoint_config e create_endpoint per creare l'endpoint di hosting, utilizzando il modello creato nel passaggio 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)

Consenti SageMaker l'autenticazione in un registro Docker privato

Per estrarre un'immagine di inferenza da un registro Docker privato che richiede l'autenticazione, crea una AWS Lambda funzione che fornisca le credenziali e fornisci l'Amazon Resource Name (ARN) della funzione Lambda quando chiami create_model. Quando SageMaker viene eseguitocreate_model, chiama la funzione Lambda specificata per ottenere le credenziali per l'autenticazione nel registro Docker.

Creazione della funzione Lambda

Crea una AWS Lambda funzione 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 di connessione, le credenziali di accesso vengono inviate al tuo server di autorizzazione, che restituisce un token di Connessione che può quindi essere utilizzato per l'autenticazione nel registro Docker privato.

Assegna la tua autorizzazione del ruolo di esecuzione a Lambda

Il ruolo di esecuzione utilizzato per chiamare create_model deve disporre delle autorizzazioni per chiamare AWS Lambda le funzioni. Aggiungi quanto segue alla policy sulle autorizzazioni del tuo ruolo di esecuzione.

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

myLambdaFunctionDov'è il nome della tua funzione Lambda. Per informazioni su come modificare le autorizzazioni per un ruolo, consulta Modifica di una policy di autorizzazioni del ruolo (console) nella Guida per l’utente AWS Identity and Access Management .

Nota

Un ruolo di esecuzione a cui è associata la policy AmazonSageMakerFullAccess gestita è autorizzato a chiamare qualsiasi funzione Lambda con SageMakernel suo nome.

Crea 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, consultare Configurazione degli endpoint VPC dell'interfaccia per Lambda nella AWS Lambda Guida per gli sviluppatori.

SageMaker hosting invia una richiesta tramite il tuo VPC alambda.region.amazonaws.com, per chiamare la tua 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 lambda.region.amazonaws.com all'endpoint dell'interfaccia Lambda.