Invocare un endpoint a più modelli - 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à.

Invocare un endpoint a più modelli

Per richiamare un endpoint multimodello, usa il invoke_endpoint SageMaker Runtime proprio come richiameresti un endpoint a modello singolo, con una sola modifica. Passa un nuovo parametro TargetModel che specifica i modelli di destinazione nell'endpoint. La InvokeEndpoint richiesta SageMaker Runtime supporta X-Amzn-SageMaker-Target-Model una nuova intestazione che segue il percorso relativo del modello specificato per la chiamata. Il SageMaker sistema costruisce il percorso assoluto del modello combinando il prefisso fornito come parte della CreateModel API chiamata con il percorso relativo del modello.

Le procedure seguenti sono le stesse per entrambi gli endpoint CPU multimodello GPU supportati.

AWS SDK for Python (Boto 3)

L'esempio seguente di richiesta di previsione utilizza AWS SDKfor Python (Boto 3) nel notebook di esempio.

response = runtime_sagemaker_client.invoke_endpoint( EndpointName = "<ENDPOINT_NAME>", ContentType = "text/csv", TargetModel = "<MODEL_FILENAME>.tar.gz", Body = body)
AWS CLI

L'esempio seguente mostra come effettuare una CSV richiesta con due righe utilizzando (): AWS Command Line Interface AWS CLI

aws sagemaker-runtime invoke-endpoint \ --endpoint-name "<ENDPOINT_NAME>" \ --body "1.0,2.0,5.0"$'\n'"2.0,3.0,4.0" \ --content-type "text/csv" \ --target-model "<MODEL_NAME>.tar.gz" output_file.txt

Se l'inferenza ha avuto successo, viene effettuata una output_file.txt con informazioni sulle richieste di inferenza. Per altri esempi su come fare previsioni con AWS CLI, vedi Fare previsioni con the AWS CLI nella documentazione di Python SageMaker . SDK

L'endpoint a più modelli carica dinamicamente i modelli di destinazione in base alle esigenze. Puoi osservarlo quando esegui MMESample Notebook mentre esegue invocazioni casuali su più modelli di destinazione ospitati su un singolo endpoint. La prima richiesta per un determinato modello necessita di più tempo perché il modello deve essere scaricato da Amazon Simple Storage Service (Amazon S3) e caricato in memoria. Si tratta del cosiddetto avvio a freddo e, negli endpoint a più modelli, si prevede che venga ottimizzato per migliorare il rapporto prezzo/prestazioni dei clienti. Le chiamate successive terminano più velocemente perché non c'è alcun sovraccarico aggiuntivo dopo il caricamento del modello.

Nota

Per le istanze GPU supportate, il codice di HTTP risposta con 507 dal GPU contenitore indica una mancanza di memoria o di altre risorse. Ciò fa sì che i modelli non utilizzati vengano scaricati dal container per caricare i modelli utilizzati più di frequente.

Riprova le richieste in caso di errori ModelNotReadyException

La prima volta che chiami un modello invoke_endpoint, questo viene scaricato da Amazon Simple Storage Service e caricato nel container di inferenza. In questo modo la risposta alla prima chiamata impiega più tempo. Le chiamate successive allo stesso modello terminano più velocemente, perché il modello è già caricato.

SageMaker restituisce una risposta per una chiamata invoke_endpoint entro 60 secondi. Alcuni modelli sono troppo grandi per essere scaricati entro 60 secondi. Se il caricamento del modello non termina prima del limite di timeout di 60 secondi, la richiesta di invoke_endpoint restituisce il codice di errore ModelNotReadyException e il modello continua a essere scaricato e caricato nel container di inferenza per un massimo di 360 secondi. Se ricevi un codice di errore ModelNotReadyException per una richiesta di invoke_endpoint, riprova la richiesta. Per impostazione predefinita, le invoke_endpoint richieste di ripetizione AWS SDKs per Python (Boto 3) (utilizzando la modalità Legacy retry) e Java riprovano che generano errori. ModelNotReadyException Puoi configurare la strategie di ripetizione. per continuare a ripetere la richiesta per un massimo di 360 secondi. Se prevedi che il download e il caricamento del modello nel contenitore richieda più di 60 secondi, imposta il timeout del SDK socket su 70 secondi. Per ulteriori informazioni sulla configurazione della strategia di ripetizione di AWS SDK for Python (Boto3), consulta Configurazione di una modalità di ripetizione. Il codice seguente mostra un esempio che configura la strategia di ripetizione per ritentare le chiamate a invoke_endpoint per un massimo di 180 secondi.

import boto3 from botocore.config import Config # This example retry strategy sets the retry attempts to 2. # With this setting, the request can attempt to download and/or load the model # for upto 180 seconds: 1 orginal request (60 seconds) + 2 retries (120 seconds) config = Config( read_timeout=70, retries={ 'max_attempts': 2 # This value can be adjusted to 5 to go up to the 360s max timeout } ) runtime_sagemaker_client = boto3.client('sagemaker-runtime', config=config)