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 del codice di inferenza con trasformazione in batch
Questa sezione spiega come Amazon SageMaker interagisce con un contenitore Docker che esegue il tuo codice di inferenza per la trasformazione in batch. Utilizza queste informazioni per scrivere il codice di inferenza e creare un'immagine Docker.
Argomenti
Come SageMaker viene eseguita la tua 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 richiama il modello per tuo conto. SageMaker esegue il contenitore come:
docker run
image
serveL'input per le trasformazioni in batch deve essere di 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 sovrascrive
CMD
le istruzioni predefinite in un contenitore specificando l'serve
argomento dopo il nome dell'immagine. L'argomentoserve
sostituisce gli argomenti che fornisci con il comandoCMD
nel Dockerfile. -
Ti consigliamo di utilizzare il modulo
exec
dell'istruzioneENTRYPOINT
:ENTRYPOINT ["executable", "param1", "param2"]
Per esempio:
ENTRYPOINT ["python", "k_means_inference.py"]
-
SageMaker imposta le variabili di ambiente specificate nel
CreateModel
eCreateTransformJob
sul contenitore. Inoltre, vengono popolate le seguenti variabili di ambiente:-
SAGEMAKER_BATCH
è impostata sutrue
quando il container esegue 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
viene impostato suSINGLE_RECORD
quando il container invia un singolo record per effettuare le invocazioni e chiamareMULTI_RECORD
quando il container riceve tutti i record che rientrano nel payload. -
SAGEMAKER_MAX_CONCURRENT_TRANSFORMS
è impostato sul numero massimo di richieste/invocations
che 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 passate. 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
init
come punto d'ingresso nei container SageMaker perché viene confuso dagli argomenti di formazione e servizio.
Come SageMaker 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 viene utilizzato SageMaker per eseguire inferenze, utilizza queste informazioni per determinare 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 non è in grado di scaricare il file. Se addestri un modello SageMaker, questo salva gli artefatti come un unico file tar compresso in Amazon S3. Se addestra un modello in un altro framework, devi archiviare gli artefatti del modello in Amazon S3 come file tar compresso. SageMaker decomprime questo file tar e lo salva nella /opt/ml/model
directory del contenitore prima dell'inizio 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, è possibile impostare algoritmi per implementare le richieste di parametri di esecuzione a cui fornire una configurazione di runtime dinamica. SageMaker SageMakerutilizza i seguenti endpoint:
-
ping
—Utilizzato per controllare periodicamente lo stato del contenitore. SageMaker attende un codice di200
stato HTTP e 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 invocazioni. -
(Facoltativo)
execution-parameters
—Consente all'algoritmo di fornire i parametri di sincronizzazione ottimali per un processo durante l'esecuzione. In base alla memoria e alle CPU disponibili per un container, l'algoritmo sceglie i valoriMaxConcurrentTransforms
,BatchStrategy
eMaxPayloadInMB
appropriati per il processo.
Prima di chiamare la richiesta di invocazione, SageMaker tenta di richiamare la richiesta dei parametri di esecuzione. Quando si crea un processo di trasformazione in batch, è possibile fornire valori per i MaxConcurrentTransforms
parametri, e. BatchStrategy
MaxPayloadInMB
SageMaker 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 che il contenitore del modello restituisce quando SageMaker richiama l'endpoint-parameters di esecuzione>
-
I valori predefiniti del parametro, elencati nella seguente tabella.
Parametro Valori predefiniti MaxConcurrentTransforms
1
BatchStrategy
MULTI_RECORD
MaxPayloadInMB
6
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 invia una richiesta POST al contenitore di inferenza. Il corpo della richiesta POST contiene dati da Amazon S3. Amazon SageMaker passa la richiesta al contenitore e ne restituisce il risultato dell'inferenza, salvando i dati della 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 sul container è di rispondere con un codice di stato HTTP 200 e un corpo vuoto. Ciò indica SageMaker che il contenitore è pronto ad accettare richieste di inferenza sull'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.