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à.
In che modo Amazon SageMaker gestisce la tua immagine di formazione
Puoi utilizzare uno script del punto di ingresso personalizzato per automatizzare l'infrastruttura per l'addestramento in un ambiente di produzione. Se passi lo script entrypoint nel contenitore Docker, puoi anche eseguirlo come script autonomo senza ricostruire le immagini. SageMakerelabora l'immagine di allenamento utilizzando uno script entrypoint del contenitore 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 contenitore Docker, ti consigliamo di utilizzare invece la libreria di strumenti di formazione. SageMaker
Per impostazione predefinita, SageMaker cerca uno script chiamato all'interno del contenitore. train
Puoi anche fornire manualmente il tuo punto di ingresso personalizzato utilizzando i ContainerEntrypoint
parametri ContainerArguments
e dell'AlgorithmSpecificationAPI.
Sono disponibili le due opzioni seguenti per configurare manualmente il container Docker per l'esecuzione della tua immagine.
-
Utilizza l'CreateTrainingJobAPI e un contenitore Docker con un'istruzione entrypoint contenuta al suo interno.
-
Usa l'
CreateTrainingJob
API e trasmetti lo script di training dall'esterno del tuo container Docker.
Se passi lo script di training 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 training per l'immagine. Se utilizzi il source_dir
parametro opzionale all'interno di uno stimatoresource_dir
. Se non utilizzi source_dir
, puoi specificare il punto di ingresso utilizzando il parametro entry_point
. Per un esempio di script entrypoint personalizzato che contiene uno stimatore, vedi Bring Your
SageMaker model training supporta i bucket di directory S3 Express One Zone ad alte prestazioni come posizione di input dei dati per la modalità file, la modalità fast file e la modalità pipe. Puoi anche utilizzare i bucket di directory S3 Express One Zone per archiviare i risultati dell'allenamento. 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. Per ulteriori informazioni, consulta S3 Express One Zone.
Esegui un lavoro di training con uno script del punto di ingresso incluso nel container Docker
SageMaker può eseguire uno script entrypoint incluso nel contenitore Docker.
-
Per impostazione predefinita, Amazon SageMaker esegue il seguente contenitore.
docker run
image
train -
SageMaker sostituisce qualsiasi istruzione CMD
predefinita in un contenitore specificando l' train
argomento dopo il nome dell'immagine. Nel tuo container Docker, usa il seguente moduloexec
dell'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
exec
dell'istruzioneENTRYPOINT
avvia l'eseguibile direttamente, non come figlio di/bin/sh
. Ciò gli consente di ricevere segnali similiSIGTERM
e provenienti da API.SIGKILL
SageMaker Le seguenti condizioni si applicano all'utilizzo delle SageMaker API.-
L'
CreateTrainingJob
API presenta una condizione di arresto che impone di interrompere l' SageMaker addestramento del modello dopo un periodo di tempo specifico. -
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 120
Il comando tenta di arrestare il container in esecuzione inviando un segnale
SIGTERM
. Dopo il timeout di 2 minuti, l'API inviaSIGKILL
e blocca forzatamente i container. Se il container gestisce il segnaleSIGTERM
normalmente ed esce entro 120 secondi dalla ricezione, non viene inviatoSIGKILL
.
Se desideri accedere agli artefatti del modello intermedio dopo l' SageMaker interruzione dell'addestramento, aggiungi il codice per gestire il salvataggio degli artefatti nel tuo gestore.
SIGTERM
-
-
Se prevedi di utilizzare i dispositivi GPU per il training del modello, assicurati che i tuoi container siano compatibili a
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 potete usare l'
tini
inizializzatore come script di ingresso nei SageMaker contenitori perché viene confuso dagli argomenti and.train
serve
-
/opt/ml
e tutte le sottodirectory sono riservate tramite training. 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 il training.
Per raggruppare gli script di shell o Python all'interno dell'immagine Docker o per fornire lo script in un bucket Amazon S3 o utilizzando (CLI), continua con AWS Command Line Interface 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, usa i seguenti passaggi.
-
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.sh
dalla 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 formazione eseguendo il comando seguente. 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, usa i seguenti passaggi.
-
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.py
dalla 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 formazione eseguendo il AWS CLI comando seguente.
--algorithm-specification '{ \ "TrainingInputMode": "File", \ "TrainingImage": "
<your-ecr-image>
", \ "ContainerEntrypoint": ["python
"], \ "ContainerArguments": ["/mydir/custom_entrypoint.py
"]}' \
Esegui un lavoro di training con uno script del punto di ingresso al di fuori del container Docker
Puoi usare il tuo container Docker per il training 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.
Specificate la posizione dello script di formazione utilizzando i ContainerArguments
parametri ContainerEntrypoint
e dell'AlgorithmSpecificationAPI. 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 passi il tuo script del punto di ingresso personalizzato al tuo container di training Docker, gli input forniti determinano il comportamento del container.
-
Ad esempio, se fornite solo
ContainerEntrypoint
, la sintassi della richiesta che utilizza l' CreateTrainingJob API è la seguente.{ "AlgorithmSpecification": { "ContainerEntrypoint": ["
string
"], ... } }Quindi, il backend SageMaker di formazione esegue il punto di ingresso personalizzato come segue.
docker run --entrypoint
<ContainerEntrypoint>
imageNota
Se
ContainerEntrypoint
fornito, il backend di SageMaker formazione esegue l'immagine con il punto di ingresso specificato e sostituisce l'impostazione predefinita nell'immagine.ENTRYPOINT
-
Se lo fornisci solo
ContainerArguments
, SageMaker presuppone che il contenitore Docker contenga uno script entrypoint. La sintassi della richiesta che utilizza l'APICreateTrainingJob
è la seguente.{ "AlgorithmSpecification": { "ContainerArguments": ["
arg1
", "arg2
"], ... } }Il backend SageMaker di formazione esegue il punto di ingresso personalizzato come segue.
docker run image
<ContainerArguments>
-
Se fornisci sia l’opzione
ContainerEntrypoint
cheContainerArguments
, la sintassi della richiesta tramite l'APICreateTrainingJob
è la seguente.{ "AlgorithmSpecification": { "ContainerEntrypoint": ["
string
"], "ContainerArguments": ["arg1
", "arg2
"], ... } }Il backend SageMaker di formazione gestisce il punto di ingresso personalizzato come segue.
docker run --entrypoint
<ContainerEntrypoint>
image<ContainerArguments>
Puoi utilizzare qualsiasi fonte InputDataConfig
supportata nell'CreateTrainingJob
API per fornire uno script del punto di ingresso per eseguire la tua immagine di training.
Fornisci lo script del tuo punto di ingresso in un bucket Amazon S3
Per fornire uno script entrypoint personalizzato utilizzando un bucket S3, utilizza il S3DataSource
parametro dell'DataSourceAPI per specificare la posizione dello script. Se utilizzi il parametro S3DataSource
, i seguenti requisiti sono necessari.
-
InputModeDeve essere del tipo.
File
-
L'S3 DataDistributionType deve essere
FullyReplicated
.
L'esempio seguente presenta uno script chiamato custom_entrypoint.sh inserito nel path 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 training. Fatelo utilizzando AWS CLI direttamente o con un file JSON.
Configura il canale dati di input utilizzando AWS CLI un file JSON
Per configurare il canale dati di input con un file JSON, utilizzate AWS CLI come mostrato nella seguente struttura di codice. Assicurati che tutti i seguenti campi utilizzino la sintassi della richiesta definita nell'CreateTrainingJobAPI.
// 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 AWS CLI comando per avviare il processo di formazione dal file JSON come segue.
aws sagemaker create-training-job --cli-input-json file:
//run-my-training-job.json
Configura il canale dati di input utilizzando direttamente AWS CLI
Per configurare il canale dati di input senza un file JSON, utilizzate la seguente struttura di AWS CLI codice.
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
}'