Codice di inferenza personalizzato con la trasformazione in batch
Questa sezione spiega come Amazon SageMaker AI interagisce con un container Docker che esegue codice di inferenza personalizzato per la trasformazione in batch. Utilizza queste informazioni per scrivere il codice di inferenza e creare un'immagine Docker.
Argomenti
Come SageMaker AI esegue l’immagine di inferenza
Per configurare un container per l'esecuzione come un eseguibile, utilizza un'istruzione ENTRYPOINT in un Dockerfile. Tieni presente quanto segue:
-
Per le trasformazioni in batch, SageMaker AI invoca il modello per tuo conto. SageMaker AI esegue il container come:
docker runimageserveL'input per le trasformazioni in batch deve essere in un formato che possa essere suddiviso in file più piccoli da elaborare in parallelo. Questi formati includono CSV, JSON
, JSON Lines , TFRecord e RecordIO . SageMaker AI sostituisce le istruzioni
CMDpredefinite in un container specificando l’argomentoservedopo il nome dell’immagine. L'argomentoservesostituisce gli argomenti che fornisci con il comandoCMDnel Dockerfile. -
Ti consigliamo di utilizzare il modulo
execdell'istruzioneENTRYPOINT:ENTRYPOINT ["executable", "param1", "param2"]Per esempio:
ENTRYPOINT ["python", "k_means_inference.py"] -
SageMaker AI imposta le variabili specificate in
CreateModeleCreateTransformJobsul container. Inoltre, vengono popolate le seguenti variabili di ambiente:-
SAGEMAKER_BATCHè impostato sutruequando il container esegue una trasformazione in batch. -
SAGEMAKER_MAX_PAYLOAD_IN_MBè impostato sul payload di dimensioni più grandi che viene inviato al container tramite HTTP. -
SAGEMAKER_BATCH_STRATEGYè impostato suSINGLE_RECORDquando il container invia un singolo record per effettuare le invocazioni e chiamareMULTI_RECORDquando il container riceve tutti i record che rientrano nel payload. -
SAGEMAKER_MAX_CONCURRENT_TRANSFORMSè impostato sul numero massimo di richieste di/invocationsche possono essere aperte contemporaneamente.
Nota
Le ultime tre variabili di ambiente provengono dalla chiamata API effettuata dall'utente. Se l'utente non ne imposta i valori, le variabili non vengono inoltrate. In questo caso, sono utilizzati i valori predefiniti o i valori richiesti dall'algoritmo (in risposta a
/execution-parameters). -
-
Se prevedi di utilizzare dispositivi GPU per le inferenze di modelli (specificando le istanze di calcolo ML basate su GPU nella richiesta
CreateTransformJob), accertati che i container siano compatibili con nvidia-docker. Non aggregare i driver NVIDIA con l'immagine. Per ulteriori informazioni su nvidia-docker, consulta NVIDIA/nvidia-docker. -
Non puoi utilizzare l’inizializzatore
initcome punto di ingresso nei container SageMaker AI, perché può generare confusione con gli argomenti train e serve.
Come SageMaker AI carica gli artefatti del modello
In una richiesta CreateModel, le definizioni del container comprendono il parametro ModelDataUrl, che identifica la posizione in Amazon S3 in cui sono archiviati gli artefatti del modello. Quando utilizzi SageMaker AI per eseguire le inferenze, utilizza queste informazioni per determinare il percorso da dove copiare gli artefatti del modello. Gli artefatti vengono copiati nella directory /opt/ml/model nel container Docker per essere utilizzati dal codice di inferenza.
Il parametro di ModelDataUrl deve puntare a un file tar.gz. In caso contrario, SageMaker AI non può scaricare il file. Se addestri un modello in SageMaker AI, gli artefatti vengono salvati come un singolo file TAR compresso in Amazon S3. Se addestri un modello in un altro framework, devi archiviare gli artefatti del modello in Amazon S3 come file tar compresso. SageMaker AI decomprime questo file TAR e lo salva nella directory /opt/ml/model nel container prima dell’avvio del processo di trasformazione in batch.
Come i container servono le richieste
I container devono implementare un server Web che risponde a invocazioni e richieste ping sulla porta 8080. Per le trasformazioni in batch, puoi impostare algoritmi per implementare richieste execution-parameters per fornire una configurazione di runtime dinamica a SageMaker AI. SageMaker AI utilizza i seguenti endpoint:
-
ping: utilizzato per controllare periodicamente lo stato del container. SageMaker AI attende un codice di stato HTTP200e un corpo vuoto per una richiesta ping riuscita prima di inviare una richiesta di invocazione. Puoi utilizzare una richiesta ping per caricare un modello in memoria per generare inferenza quando vengono inviate richieste di invocazioni. -
(Facoltativo)
execution-parameters: consente all'algoritmo di fornire i parametri di sincronizzazione ottimali per un processo durante il runtime. In base alla memoria e alle CPU disponibili per un container, l'algoritmo sceglie i valoriMaxConcurrentTransforms,BatchStrategyeMaxPayloadInMBappropriati per il processo.
Prima di chiamare la richiesta di invocazioni, SageMaker AI tenta di invocare la richiesta execution-parameters. Quando si crea un processo di trasformazione in batch, è possibile fornire valori per i parametri MaxConcurrentTransforms, BatchStrategy e MaxPayloadInMB. SageMaker AI determina i valori per questi parametri utilizzando questo ordine di precedenza:
-
I valori dei parametri forniti al momento della creazione della richiesta
CreateTransformJob. -
I valori restituiti dal container del modello quando SageMaker AI invoca l’endpoint execution-parameters.
-
I valori predefiniti del parametro, elencati nella seguente tabella.
Parametro Valori predefiniti MaxConcurrentTransforms1
BatchStrategyMULTI_RECORDMaxPayloadInMB6
La risposta per una richiesta execution-parameters GET è un oggetto JSON con chiavi per i parametri MaxConcurrentTransforms, BatchStrategy e MaxPayloadInMB. Di seguito è riportato un esempio di risposta valida:
{ “MaxConcurrentTransforms”: 8, “BatchStrategy": "MULTI_RECORD", "MaxPayloadInMB": 6 }
Come il tuo container deve rispondere alle richieste di inferenza
Per ottenere inferenze, Amazon SageMaker AI invia una richiesta POST al container di inferenza. Il corpo della richiesta POST contiene dati da Amazon S3. Amazon SageMaker AI passa la richiesta al container e restituisce il risultato dell’inferenza dal container, salvando i dati dalla risposta ad Amazon S3.
Per ricevere le richieste di inferenza, il container deve disporre di un server Web in ascolto sulla porta 8080 e deve accettare le richieste all'endpoint /invocations. Il timeout della richiesta di inferenza e il numero massimo di tentativi possono essere configurati tramite ModelClientConfig.
Come il tuo container deve rispondere alle richieste di controllo dello stato (Ping)
Il più semplice requisito per il container è di rispondere con un codice di stato HTTP 200 e un corpo vuoto. Ciò indica a SageMaker AI che il container è pronto ad accettare richieste di inferenza all’endpoint /invocations.
Nonostante la barra minima per il container è di fornire uno 200 statico, uno sviluppatore di container può utilizzare questa funzionalità per eseguire maggiori controlli. Il timeout della richiesta sui tentativi /ping è 2 secondi.