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à.
Come Amazon SageMaker AI esegue un’immagine di addestramento
Puoi utilizzare uno script del punto di ingresso personalizzato per automatizzare l'infrastruttura per l'addestramento in un ambiente di produzione. Se inoltri il tuo script nel punto di ingresso nel container Docker, puoi anche eseguirlo come script autonomo senza ricostruire le tue immagini. SageMaker AI elabora l’immagine di addestramento utilizzando uno script del punto di ingresso del container Docker.
In questa sezione viene descritto come utilizzare un punto di ingresso personalizzato senza utilizzare il toolkit. Se desideri utilizzare un punto di ingresso personalizzato ma non hai familiarità con la configurazione manuale di un container Docker, ti consigliamo di utilizzare invece la libreria del toolkit di addestramento SageMaker
Per impostazione predefinita, SageMaker AI cerca uno script chiamato train all’interno del container. Puoi inoltre fornire manualmente il tuo punto di ingresso personalizzato utilizzando i parametri ContainerArguments e ContainerEntrypoint dell’API AlgorithmSpecification.
Sono disponibili le due opzioni seguenti per configurare manualmente il container Docker per l'esecuzione della tua immagine.
-
Utilizza l'API CreateTrainingJob e un container Docker con un'istruzione del punto di ingresso contenuta al suo interno.
-
Usa l'API
CreateTrainingJobe trasmetti lo script di addestramento dall'esterno del tuo container Docker.
Se inoltri lo script di addestramento dall'esterno del tuo container Docker, non devi ricostruire il container Docker quando aggiorni lo script. Puoi anche utilizzare diversi script da eseguire nello stesso container.
Lo script del punto di ingresso deve contenere il codice di addestramento per l'immagine. Se utilizzi il parametro opzionale source_dir all'interno di uno strumento di valutazionesource_dir. Se non utilizzi source_dir, puoi specificare il punto di ingresso utilizzando il parametro entry_point. Per un esempio di script del punto di ingresso personalizzato che contiene uno strumento di stima, consulta Bring Your Own Model with SageMaker AI Script Mode
L’addestramento dei modelli di SageMaker AI supporta i bucket di directory S3 Express One Zone ad alte prestazioni come posizione di input dei dati per la modalità File, FastFile e Pipe. È anche possibile utilizzare i bucket di directory S3 Express One Zone per archiviare l’output dell’addestramento. Per utilizzare S3 Express One Zone, fornisci l’URI di un bucket di directory S3 Express One Zone anziché di un bucket Amazon S3 per uso generico. Puoi crittografare i dati di output SageMaker AI solo in bucket di directory con crittografia lato server con chiavi gestite da Amazon S3 (SSE-S3). La crittografia lato server con chiavi AWS KMS (SSE-KMS) non è attualmente supportata per l’archiviazione dei dati di output SageMaker AI in bucket di directory. Per ulteriori informazioni, consulta S3 Express One Zone.
Esecuzione di un processo di addestramento con uno script del punto di ingresso incluso nel container Docker
SageMaker AI può eseguire uno script del punto di ingresso in bundle all’interno del container Docker.
-
Per impostazione predefinita, Amazon SageMaker AI esegue il seguente container.
docker runimagetrain -
SageMaker AI sostituisce qualsiasi istruzione CMD
predefinita in un container specificando l’argomento traindopo il nome dell’immagine. Nel tuo container Docker, usa il seguente moduloexecdell'istruzioneENTRYPOINT.ENTRYPOINT ["executable", "param1", "param2", ...]L'esempio seguente illustra come specificare un'istruzione di punto di ingresso python chiamata
k-means-algorithm.py.ENTRYPOINT ["python", "k-means-algorithm.py"]Il modulo
execdell'istruzioneENTRYPOINTavvia l'eseguibile direttamente, non come figlio di/bin/sh. Questo gli consente di ricevere segnali comeSIGTERMeSIGKILLdalle API SageMaker. Quando si utilizzano le API SageMaker si applicano le seguenti condizioni.-
L’API
CreateTrainingJobpresenta una condizione di arresto che indica a SageMaker AI di arrestare l’addestramento dei modelli dopo uno specifico periodo di tempo. -
Quanto segue mostra l’API
StopTrainingJob. Questo API rilascia l'equivalente del comandodocker stop, con un timeout di due minuti, per arrestare in modo normale il container specificato.docker stop -t 120Il comando tenta di arrestare il container in esecuzione inviando un segnale
SIGTERM. Dopo il timeout di 2 minuti, l'API inviaSIGKILLe blocca forzatamente i container. Se il container gestisce il segnaleSIGTERMnormalmente ed esce entro 120 secondi dalla ricezione, non viene inviato alcun segnaleSIGKILL.
Se desideri accedere agli artefatti del modello intermedio, dopo che SageMaker AI arresta l’addestramento, aggiungi codice per gestire il salvataggio degli artefatti nel tuo handler
SIGTERM. -
-
Se prevedi di utilizzare i dispositivi GPU per l’addestramento del modello, assicurati che i tuoi container siano compatibili con
nvidia-docker. Includi soltanto il tooklit CUDA sui container; non raggruppare i driver NVIDIA con l'immagine. Per ulteriori informazioni sunvidia-docker, consulta NVIDIA/nvidia-docker. -
Non puoi utilizzare l’inizializzatore
tinicome script del punto di ingresso nei container SageMaker AI, perché può generare confusione con gli argomentitraineserve. -
/opt/mle tutte le sottodirectory sono riservate dall’addestramento SageMaker. Quando crei l'immagine Docker del tuo algoritmo, assicurati di non inserire in questa directory i dati richiesti dall'algoritmo. Se lo fai, i dati potrebbero non essere più visibili durante l'addestramento.
Per raggruppare gli script di shell o Python all'interno della tua immagine Docker o per fornire lo script in un bucket Amazon S3 o utilizzando AWS Command Line Interface (CLI), continua con la sezione seguente.
Raggruppa lo script di shell (interprete di comandi) in un container Docker
Se desideri raggruppare uno script di shell personalizzato all'interno della tua immagine Docker, completa la seguente procedura.
-
Copia lo script di shell (interprete di comandi) dalla directory di lavoro all'interno del container Docker. Il seguente frammento di codice copia uno script del punto di ingresso personalizzato
custom_entrypoint.shdalla directory di lavoro corrente a un container Docker situato inmydir. L'esempio seguente presuppone che nell'immagine Docker di base sia installato Python.FROM<base-docker-image>:<tag># Copy custom entrypoint from current dir to /mydir on container COPY./custom_entrypoint.sh /mydir/ -
Crea e invia con notifica push un container Docker all’Amazon Elastic Container Registry (Amazon ECR) seguendo le istruzioni riportate nella sezione Push di un’immagine Docker nella Guida per l’utente Amazon ECR.
-
Avvia il processo di addestramento eseguendo il seguente comando AWS CLI.
aws --region<your-region>sagemaker create-training-job \ --training-job-name<your-training-job-name>\ --role-arn<your-execution-role-arn>\ --algorithm-specification '{ \ "TrainingInputMode": "File", \ "TrainingImage": "<your-ecr-image>", \ "ContainerEntrypoint": ["/bin/sh"], \ "ContainerArguments": ["/mydir/custom_entrypoint.sh"]}' \ --output-data-config '{"S3OutputPath": "s3://custom-entrypoint-output-bucket/"}' \ --resource-config '{"VolumeSizeInGB":10,"InstanceCount":1,"InstanceType":"ml.m5.2xlarge"}' \ --stopping-condition '{"MaxRuntimeInSeconds":180}'
Raggruppa il tuo script Python in un container Docker
Per raggruppare uno script Python personalizzato all'interno della tua immagine Docker, completa la seguente procedura.
-
Copia lo script Python dalla tua directory di lavoro all'interno del tuo container Docker. Il seguente frammento di codice copia uno script del punto di ingresso personalizzato
custom_entrypoint.pydalla directory di lavoro corrente a un container Docker situato inmydir.FROM<base-docker-image>:<tag># Copy custom entrypoint from current dir to /mydir on container COPY./custom_entrypoint.py /mydir/ -
Avvia il processo di addestramento eseguendo il seguente comando AWS CLI.
--algorithm-specification '{ \ "TrainingInputMode": "File", \ "TrainingImage": "<your-ecr-image>", \ "ContainerEntrypoint": ["python"], \ "ContainerArguments": ["/mydir/custom_entrypoint.py"]}' \
Esecuzione di un processo di addestramento con uno script del punto di ingresso al di fuori del container Docker
Puoi usare il tuo container Docker per l’addestramento e inserire uno script del punto di ingresso dall'esterno del container Docker. Ci sono alcuni vantaggi nello strutturare lo script del punto di ingresso all'esterno del container. Se aggiorni lo script di ingresso, non devi ricostruire il container Docker. Puoi anche utilizzare diversi script da eseguire nello stesso container.
Specifica la posizione del tuo script di addestramento utilizzando i parametri ContainerEntrypoint e ContainerArguments dell’API AlgorithmSpecification. Questi punti di ingresso e argomenti si comportano allo stesso modo dei punti di ingresso e degli argomenti Docker. I valori di questi parametri hanno la precedenza su quelli corrispondenti ENTRYPOINT o CMD forniti come parte del container Docker.
Quando inoltrii il tuo script del punto di ingresso personalizzato al tuo container di addestramento Docker, gli input forniti determinano il comportamento del container.
-
Ad esempio, se fornisci solo
ContainerEntrypoint, la sintassi della richiesta che utilizza l'API CreateTrainingJob è la seguente.{ "AlgorithmSpecification": { "ContainerEntrypoint": ["string"], ... } }Quindi, il backend dell’addestramento SageMaker esegue il tuo punto di ingresso personalizzato come segue.
docker run --entrypoint<ContainerEntrypoint>imageNota
Se viene fornito
ContainerEntrypoint, il backend di addestramento SageMaker esegue l'immagine con il punto di ingresso specificato e sostituisce l'impostazione predefinitaENTRYPOINTnell’immagine. -
Se fornisci solo
ContainerArguments, SageMaker AI presuppone che il container Docker contenga uno script del punto di ingresso. La sintassi della richiesta che utilizza l'APICreateTrainingJobè la seguente.{ "AlgorithmSpecification": { "ContainerArguments": ["arg1", "arg2"], ... } }Il backend di addestramento SageMaker gestisce il tuo punto di ingresso personalizzato come segue.
docker run image<ContainerArguments> -
Se fornisci sia l’opzione
ContainerEntrypointcheContainerArguments, la sintassi della richiesta tramite l'APICreateTrainingJobè la seguente.{ "AlgorithmSpecification": { "ContainerEntrypoint": ["string"], "ContainerArguments": ["arg1", "arg2"], ... } }Il backend di addestramento SageMaker gestisce il tuo punto di ingresso personalizzato come segue.
docker run --entrypoint<ContainerEntrypoint>image<ContainerArguments>
Puoi utilizzare qualsiasi origine InputDataConfig supportata nell'API CreateTrainingJob per fornire uno script del punto di ingresso per eseguire la tua immagine di addestramento.
Inserimento dello script del tuo punto di ingresso in un bucket Amazon S3
Per inserire uno script del punto di ingresso personalizzato utilizzando un bucket S3, utilizza il parametro S3DataSource dell'API DataSource per specificare la posizione dello script. Se utilizzi il parametro S3DataSource, i seguenti requisiti sono necessari.
-
L'InputMode deve essere del tipo
File. -
Il S3DataDistributionType deve essere
FullyReplicated.
L'esempio seguente presenta uno script chiamato custom_entrypoint.sh inserito nel percorso di un bucket S3 s3://<bucket-name>/<bucket
prefix>/custom_entrypoint.sh.
#!/bin/bash echo "Running custom_entrypoint.sh" echo "Hello you have provided the following arguments: " "$@"
Successivamente, devi impostare la configurazione del canale dati di input per eseguire un processo di addestramento. Fallo utilizzando la AWS CLI direttamente o con un file JSON.
Configurazione del canale dati di input utilizzando la AWS CLI con un file JSON
Per configurare il canale dati di input con un file JSON, utilizza la AWS CLI, come mostrato nella seguente struttura di codice. Assicurati che tutti i seguenti campi utilizzino la sintassi della richiesta definita nell'API CreateTrainingJob.
// run-my-training-job.json { "AlgorithmSpecification": { "ContainerEntrypoint": ["/bin/sh"], "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"], ... }, "InputDataConfig": [ { "ChannelName": "<your_channel_name>", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": "s3://<bucket-name>/<bucket_prefix>" } }, "InputMode": "File", }, ...] }
Quindi, esegui il comando AWS CLI per avviare il processo di addestramento dal file JSON come segue.
aws sagemaker create-training-job --cli-input-json file://run-my-training-job.json
Configurazione del canale dati di input utilizzando direttamente AWS CLI
Per configurare il tuo canale dati di input senza un file JSON, utilizza la seguente struttura di codice AWS CLI.
aws --region<your-region>sagemaker create-training-job \ --training-job-name<your-training-job-name>\ --role-arn<your-execution-role-arn>\ --algorithm-specification '{ \ "TrainingInputMode": "File", \ "TrainingImage": "<your-ecr-image>", \ "ContainerEntrypoint": ["/bin/sh"], \ "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"]}' \ --input-data-config '[{ \ "ChannelName":"<your_channel_name>", \ "DataSource":{ \ "S3DataSource":{ \ "S3DataType":"S3Prefix", \ "S3Uri":"s3://<bucket-name>/<bucket_prefix>", \ "S3DataDistributionType":"FullyReplicated"}}}]' \ --output-data-config '{"S3OutputPath": "s3://custom-entrypoint-output-bucket/"}' \ --resource-config '{"VolumeSizeInGB":10,"InstanceCount":1,"InstanceType":"ml.m5.2xlarge"}' \ --stopping-condition '{"MaxRuntimeInSeconds":180}'