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 addestramento, 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 di. AlgorithmSpecificationAPI

Sono disponibili le due opzioni seguenti per configurare manualmente il container Docker per l'esecuzione della tua immagine.

  • Usa CreateTrainingJobAPIe un contenitore Docker con un'istruzione entrypoint contenuta al suo interno.

  • Usa e trasmetti lo script di formazione dall'esterno del contenitore Docker. CreateTrainingJob API

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 valutazione, 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 un bucket URI di directory S3 Express One Zone anziché un bucket Amazon S3 per uso generico. Puoi crittografare i dati di SageMaker output in bucket di directory solo con crittografia lato server con chiavi gestite di Amazon S3 (-S3). SSE La crittografia lato server con AWS KMS chiavi (SSE-KMS) non è attualmente supportata per l'archiviazione dei dati di output nei bucket di directory. SageMaker 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 può eseguire uno script entrypoint incluso nel contenitore Docker.

  • Per impostazione predefinita, Amazon SageMaker esegue il seguente contenitore.

    docker run image train
  • SageMaker sostituisce tutte CMDle istruzioni predefinite 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. SIGKILL SageMaker APIs Le seguenti condizioni si applicano quando si utilizza il SageMaker APIs.

    • CreateTrainingJobAPIPresenta SageMaker una condizione di arresto che impone di interrompere l'addestramento del modello dopo un periodo di tempo specifico.

    • Di seguito viene illustrato il. StopTrainingJobAPI Ciò API emette l'equivalente didocker stop, con un comando di timeout di 2 minuti per arrestare correttamente il contenitore specificato.

      docker stop -t 120

      Il comando tenta di arrestare il container in esecuzione inviando un segnale SIGTERM. Dopo il timeout di 2 minuti, API invia SIGKILL e arresta forzatamente i contenitori. Se il container gestisce il segnale SIGTERM normalmente ed esce entro 120 secondi dalla ricezione, non viene inviato alcun segnale 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 GPU dispositivi per l'addestramento dei modelli, assicurati che i contenitori siano compatibili. nvidia-docker Includi solo il CUDA toolkit nei contenitori; non raggruppare NVIDIA i driver con l'immagine. Per maggiori informazioni sunvidia-docker, vedere NVIDIA/nvidia-docker.

  • Non è possibile utilizzare 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 l'addestramento.

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 la 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, completa la seguente procedura.

  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 un contenitore Docker all'Amazon Elastic Container Registry (Amazon ECR) seguendo le istruzioni in Pushing a Docker image nella Amazon ECR User Guide.

  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, completa la seguente procedura.

  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"]}' \

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.

Specificate la posizione dello script di allenamento utilizzando i ContainerArguments parametri ContainerEntrypoint e di 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 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 fornite soloContainerEntrypoint, la sintassi della richiesta che utilizza 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 è la seguente. CreateTrainingJob API

    { "AlgorithmSpecification": { "ContainerArguments": ["arg1", "arg2"], ... } }

    Il backend SageMaker di formazione esegue il punto di ingresso personalizzato come segue.

    docker run image <ContainerArguments>
  • Se si forniscono sia la cheContainerArguments, ContainerEntrypoint la sintassi della richiesta che utilizza è la CreateTrainingJob API 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>

È possibile utilizzare qualsiasi InputDataConfig fonte supportata in CreateTrainingJob API per fornire uno script di ingresso per eseguire l'immagine di allenamento.

Inserimento dello 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 di DataSourceAPIper 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 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. Fatelo utilizzando AWS CLI direttamente o con un JSON file.

Configura il canale dati di input utilizzando AWS CLI con un JSON file

Per configurare il canale dati di input con un JSON file, utilizzate AWS CLI come mostrato nella seguente struttura di codice. Assicuratevi che tutti i seguenti campi utilizzino la sintassi della richiesta definita in. 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, eseguite il AWS CLI comando per avviare il processo di formazione dal JSON file come segue.

aws sagemaker create-training-job --cli-input-json file://run-my-training-job.json

Configura il canale dati di input utilizzando AWS CLI direttamente

Per configurare il canale dati di input senza un JSON file, 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}'