Come Amazon SageMaker AI fornisce informazioni di addestramento - Amazon SageMaker AI

Come Amazon SageMaker AI fornisce informazioni di addestramento

Questa sezione spiega come SageMaker AI rende disponibili informazioni di addestramento, come dati di addestramento, iperparametri e altre informazioni di configurazione, per il container Docker.

Quando invii una richiesta CreateTrainingJob a SageMaker AI per avviare l’addestramento dei modelli, specifichi il percorso Amazon Elastic Container Registry (Amazon ECR) dell’immagine Docker che contiene l’algoritmo di addestramento. Specifichi anche il percorso Amazon Simple Storage Service (Amazon S3), dove sono archiviati i dati di addestramento, e i parametri specifici dell'algoritmo. SageMaker AI rende disponibili queste informazioni per il container Docker in modo che il tuo algoritmo di addestramento possa utilizzarle. Questa sezione spiega come rendere queste informazioni disponibili al tuo container Docker. Per informazioni sulla creazione di un processo di addestramento, consulta CreateTrainingJob. Per ulteriori informazioni sul modo in cui i container SageMaker AI organizzano le informazioni, consulta Toolkit di addestramento e inferenza SageMaker.

Iperparametri

SageMaker AI rende disponibili gli iperparametri in una richiesta CreateTrainingJob nel container Docker nel file /opt/ml/input/config/hyperparameters.json.

Di seguito è riportato un esempio di configurazione iperparametri in hyperparameters.json per specificare gli iperparametri num_round e eta nell’operazione CreateTrainingJob per XGBoost.

{ "num_round": "128", "eta": "0.001" }

Per un elenco completo degli iperparametri che possono essere utilizzati per l’algoritmo XGBoost integrato di SageMaker AI, consulta Iperparametri XGBoost.

Gli iperparametri che puoi ottimizzare dipendono dall'algoritmo che stai addestrando. Un elenco degli iperparametri disponibili per un algoritmo integrato SageMaker AI è disponibile in Hyperparameters sotto il link dell’algoritmo in Use Amazon SageMaker AI Built-in Algorithms or Pre-trained Models.

Variabili di ambiente

SageMaker AI imposta le seguenti variabili di ambiente nel container:

  • TRAINING_JOB_NAME: specificato nel parametro TrainingJobName della richiesta CreateTrainingJob.

  • TRAINING_JOB_ARN: il nome della risorsa Amazon (ARN) del processo di addestramento restituito come TrainingJobArn nella risposta CreateTrainingJob.

  • Tutte le variabili di ambiente specificate nel parametro Ambiente nella richiesta CreateTrainingJob.

Configurazione dei dati di input

SageMaker AI specifica le informazioni del canale di dati nel parametro InputDataConfig dalla richiesta CreateTrainingJob disponibile nel file /opt/ml/input/config/inputdataconfig.json nel container Docker.

Ad esempio, supponiamo che specifichi tre canali di dati (train, evaluation e validation) nella tua richiesta. SageMaker AI fornisce il seguente JSON:

{ "train" : {"ContentType": "trainingContentType", "TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"}, "evaluation" : {"ContentType": "evalContentType", "TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"}, "validation" : {"TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"} }
Nota

SageMaker AI fornisce solo informazioni pertinenti su ciascun canale di dati (ad esempio, il nome del canale e il tipo di contenuti) al container, come mostrato nell’esempio precedente. S3DistributionType viene impostato come FullyReplicated se specifichi EFS o FSxLustre come origine dati di input.

Dati di addestramento

Il parametro TrainingInputMode nella AlgorithmSpecification della richiesta CreateTrainingJob specifica in che modo il set di dati di addestramento viene reso disponibile per il container. Sono disponibili le modalità di input seguenti:

  • Modalità File

    Se utilizzi la modalità File come valore TrainingInputMode, SageMaker AI imposta i seguenti parametri nel container.

    • Il parametro TrainingInputMode viene scritto in inputdataconfig.json come "File".

    • La directory del tuo canale dati viene scritta in /opt/ml/input/data/channel_name.

    Se utilizzi la modalità File, SageMaker AI crea una directory per ogni canale. Ad esempio, se hai tre canali denominati training, validation e testing, SageMaker AI crea le seguenti tre directory nel container Docker:

    • /opt/ml/input/data/training

    • /opt/ml/input/data/validation

    • /opt/ml/input/data/testing

    La modalità File supporta le seguenti origini dati.

    • Amazon Simple Storage Service (Amazon S3)

    • Amazon Elastic File System (Amazon EFS)

    • Amazon FSx per Lustre

    Nota

    I canali che utilizzano origini dati del file system come Amazon EFS e Amazon FSx devono utilizzare la modalità File. In questo caso, il percorso della directory fornito nel canale viene montato in /opt/ml/input/data/channel_name.

  • Modalità FastFile

    Se utilizzi la modalità FastFile come TrainingInputNodeParameter, SageMaker AI imposta i seguenti parametri nel container.

    • Analogamente alla modalità File, nella modalità FastFile il tuo parametro TrainingInputMode viene scritto in inputdataconfig.json come "File".

    • La directory del tuo canale dati viene scritta in /opt/ml/input/data/channel_name.

    La modalità FastFile supporta le seguenti origini dati.

    • Amazon S3

    Se utilizzi la modalità FastFile, la directory dei canali viene montata con l'autorizzazione di sola lettura.

    Storicamente, la modalità File precedeva la modalità FastFile. Per garantire la compatibilità con le versioni precedenti, gli algoritmi che supportano la modalità File possono funzionare senza problemi anche con la modalità FastFile, purché il parametro TrainingInputMode sia impostato su File in inputdataconfig.json..

    Nota

    I canali che utilizzano la modalità FastFile devono utilizzare un S3DataType di "S3Prefix".

    La modalità FastFile presenta una visualizzazione di cartelle che utilizza la barra in avanti (/) come delimitatore per raggruppare oggetti Amazon S3 nelle cartelle. I prefissi S3Uri non devono corrispondere a un nome parziale di cartella. Ad esempio, se un set di dati Amazon S3 contiene s3://amzn-s3-demo-bucket/train-01/data.csv, allora non sono consentiti né s3://amzn-s3-demo-bucket/trains3://amzn-s3-demo-bucket/train-01 come prefissi S3Uri.

    Consigliamo di utilizzare una barra finale per definire un canale corrispondente a una cartella. Ad esempio, il canale s3://amzn-s3-demo-bucket/train-01/ per la cartella train-01. Senza la barra finale, il canale sarebbe ambiguo se esistesse un'altra cartella s3://amzn-s3-demo-bucket/train-011/ o un file s3://amzn-s3-demo-bucket/train-01.txt/.

  • Modalità Pipe

    • Il parametro TrainingInputMode scritto in inputdataconfig.json: "Pipe"

    • Directory del canale dati nel container Docker: /opt/ml/input/data/channel_name_epoch_number

    • Fonti di dati supportate: Amazon S3

    Devi leggere da una pipe separata per ogni canale. Ad esempio, se hai tre canali denominati training, validation e testing, devi leggere dalle seguenti pipe:

    • /opt/ml/input/data/training_0, /opt/ml/input/data/training_1, ...

    • /opt/ml/input/data/validation_0, /opt/ml/input/data/validation_1, ...

    • /opt/ml/input/data/testing_0, /opt/ml/input/data/testing_1, ...

    Leggi le pipe sequenzialmente. Ad esempio, se hai un canale che si chiama training, leggi le pipe in questa sequenza:

    1. Apri /opt/ml/input/data/training_0 in modalità di lettura e leggilo fino a end-of-file (EOF) oppure, se hai finito con la prima epoca, chiudi il file in anticipo.

    2. Dopo aver chiuso il primo file pipe, cerca /opt/ml/input/data/training_1 e leggilo finché non hai completato la seconda epoca e così via.

    Se il file per una determinata epoca non esiste ancora, il tuo codice potrebbe dover riprovare finché non viene creata la pipe. Non c'è alcuna restrizione di sequenziamento sui tipi di canale. Ad esempio, puoi leggere più epoche per il canale training, e iniziare a leggere il canale validation solo quando sei pronto. In alternativa, li puoi leggere simultaneamente se il tuo algoritmo lo richiede.

    Per un esempio di notebook Jupyter che mostra come utilizzare la modalità Pipe quando utilizzi il tuo container, consulta Bring your own pipe-mode algorithm to Amazon SageMaker AI.

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. Per utilizzare S3 Express One Zone, inserisci la posizione del bucket di directory S3 Express One Zone anziché un bucket Amazon S3 per uso generico. Fornisci l’ARN per il ruolo IAM con la policy di controllo degli accessi e delle autorizzazioni richiesta. Per i dettagli, fai riferimento ad AmazonSageMakerFullAccesspolicy. 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.

Configurazione dell’addestramento distribuito

Se stai eseguendo un addestramento distribuito con più container, SageMaker AI rende disponibili le informazioni su tutti i container nel file /opt/ml/input/config/resourceconfig.json.

Per abilitare la comunicazione tra container, questo file JSON contiene le informazioni per tutti i container. SageMaker AI rende questo file disponibile per gli algoritmi delle modalità File e Pipe. Il file fornisce le informazioni che seguono:

  • current_host: il nome del container corrente sulla rete di container. Ad esempio, algo-1. I valori host possono cambiare in qualsiasi momento. Non scrivere codice con valori specifici per questa variabile.

  • hosts: l'elenco dei nomi di tutti i container nella rete di container, ordinato in ordine lessicografico. Ad esempio, ["algo-1", "algo-2", "algo-3"] per un cluster a tre nodi. I container possono utilizzare questi nomi per gestire altri container sulla rete di container. I valori host possono cambiare in qualsiasi momento. Non scrivere codice con valori specifici per queste variabili.

  • network_interface_name: il nome dell'interfaccia di rete esposta al tuo container. Ad esempio, container che eseguono l'interfaccia MPI (Message Passing Interface) possono utilizzare questa informazione per impostare il nome dell'interfaccia di rete.

  • Non utilizzare le informazioni in /etc/hostname o /etc/hosts perché potrebbero non essere accurate.

  • Le informazioni sul nome host potrebbero non essere immediatamente disponibili per il container degli algoritmi. Ti consigliamo di aggiungere una policy per i nuovi tentativi sulle operazioni di risoluzione del nome host man mano che i nodi diventano disponibili nel cluster.

Di seguito è riportato un file di esempio sul nodo 1 in un cluster a tre nodi.

{ "current_host": "algo-1", "hosts": ["algo-1","algo-2","algo-3"], "network_interface_name":"eth1" }