In che modo Amazon SageMaker gestisce la tua immagine di formazione - 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à.

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 ulteriori informazioni su come utilizzare il toolkit di training, consulta Adattamento del container di training.

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'CreateTrainingJobAPI 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 stimatore, dovrebbe fare riferimento al percorso Amazon S3 relativo alla cartella contenente lo script del punto di ingresso. Puoi fare riferimento a più file utilizzando il parametro source_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 Own Model with Script Model. SageMaker

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'trainargomento dopo il nome dell'immagine. Nel tuo container Docker, usa il seguente modulo exec dell'istruzione ENTRYPOINT.

    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'istruzione ENTRYPOINT avvia l'eseguibile direttamente, non come figlio di /bin/sh. Ciò gli consente di ricevere segnali simili SIGTERM e provenienti da API. SIGKILL SageMaker Le seguenti condizioni si applicano all'utilizzo delle SageMaker API.

    • L'CreateTrainingJobAPI 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 comando docker 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 invia SIGKILL e blocca forzatamente i container. Se il container gestisce il segnale SIGTERM normalmente ed esce entro 120 secondi dalla ricezione, non viene inviato SIGKILL.

    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 su nvidia-docker, consulta NVIDIA/nvidia-docker.

  • Non potete usare l'tiniinizializzatore come script di ingresso nei SageMaker contenitori perché viene confuso dagli argomenti and. train serve

  • /opt/mle 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.

  1. 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 in mydir. 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/
  2. 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.

  3. 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.

  1. 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 in mydir.

    FROM <base-docker-image>:<tag> # Copy custom entrypoint from current dir to /mydir on container COPY ./custom_entrypoint.py /mydir/
  2. 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 soloContainerEntrypoint, 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> image
    Nota

    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 soloContainerArguments, SageMaker presuppone che il contenitore Docker contenga uno script entrypoint. La sintassi della richiesta che utilizza l'API CreateTrainingJob è 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 che ContainerArguments, la sintassi della richiesta tramite l'API CreateTrainingJob è 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'CreateTrainingJobAPI 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.

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}'