Presentazione di Amazon SageMaker HyperPod per addestrare modelli fondamentali su larga scala

Introduzione di Amazon SageMaker HyperPod per l'addestramento su larga scala di modelli fondamentali

La creazione di modelli di fondazione (FMs) richiede la costruzione, il mantenimento e l’ottimizzazione di grandi cluster per addestrare modelli con decine o centinaia di miliardi di parametri su vasti quantitativi di dati. Creare un ambiente resiliente che possa gestire guasti e cambiamenti ambientali senza perdere giorni o settimane di progresso nell’addestramento del modello è una sfida operativa che richiede l’implementazione della scalabilità del cluster, il monitoraggio attivo dello stato di salute, il checkpointing dei lavori e la capacità di riprendere automaticamente l’addestramento in caso di guasti o problemi.

Siamo entusiasti di annunciare che Amazon SageMaker HyperPod è ora disponibile per consentire l’addestramento di modelli di fondazione con migliaia di acceleratori fino al 40% più veloce, fornendo un ambiente di addestramento altamente resiliente ed eliminando i compiti di gestione pesante non differenziata legati al funzionamento di cluster di addestramento su larga scala. Con SageMaker HyperPod, i professionisti di machine learning (ML) possono addestrare FMs per settimane e mesi senza interruzioni, senza dover affrontare problemi di guasti hardware.

I clienti come Stability AI utilizzano SageMaker HyperPod per addestrare i loro modelli di fondazione, inclusa Stable Diffusion.

“Come azienda leader di generative AI open source, il nostro obiettivo è massimizzare l’accessibilità dell’IA moderna. Stiamo costruendo modelli di fondazione con decine di miliardi di parametri, che richiedono un’infrastruttura per scalare le prestazioni di addestramento in modo ottimale. Con l’infrastruttura gestita e le librerie di ottimizzazione di SageMaker HyperPod, possiamo ridurre il tempo e i costi di addestramento di oltre il 50%. Ci permette di rendere l’addestramento del modello più resiliente e performante per costruire modelli all’avanguardia più velocemente”.

– Emad Mostaque, fondatore e CEO di Stability AI.

Per rendere il ciclo completo dello sviluppo delle FMs resiliente ai guasti hardware, SageMaker HyperPod ti aiuta a creare cluster, monitorare lo stato di salute dei cluster, riparare e sostituire i nodi difettosi al volo, salvare checkpoint frequenti e riprendere automaticamente l’addestramento senza perdere il progresso. Inoltre, SageMaker HyperPod è preconfigurato con Amazon SageMaker librerie di addestramento distribuite, inclusa la libreria di parallelismo dei dati di SageMaker (SMDDP) e la libreria di parallelismo del modello di SageMaker (SMP), per migliorare le prestazioni di addestramento degli FM suddividendo i dati e i modelli di addestramento in parti più piccole e processandoli in parallelo tra i nodi del cluster, utilizzando appieno il calcolo del cluster e l’infrastruttura di rete. SageMaker HyperPod integra il Gestore del carico di lavoro Slurm per l’orchestrazione dei cluster e dei lavori di addestramento.

Panoramica del Gestore del carico di lavoro Slurm

Slurm, precedentemente noto come Simple Linux Utility for Resource Management, è un programmato di scheduling dei lavori per l’esecuzione di lavori in un cluster di calcolo distribuito. Fornisce anche un framework per l’esecuzione di lavori in parallelo utilizzando le librerie di comunicazione collettiva NVIDIA (NCCL) o l’interfaccia di messaggistica (MPI). Slurm è un popolare sistema opensource di gestione delle risorse dei cluster utilizzato ampiamente nell’high performance computing (HPC), nel generative AI e nell’addestramento di FM. SageMaker HyperPod fornisce un modo semplice per avviare e utilizzare un cluster Slurm in pochi minuti.

Il seguente è un diagramma architetturale ad alto livello di come gli utenti interagiscono con SageMaker HyperPod e come i vari componenti del cluster interagiscono tra loro e con altri servizi AWS, come Amazon FSx for Lustre e Amazon Simple Storage Service (Amazon S3).

Le attività Slurm vengono inviate tramite comandi sulla linea di comando. I comandi per eseguire le attività Slurm sono srun e sbatch. Il comando srun esegue l’attività di formazione in modalità interattiva e bloccante, mentre sbatch la esegue in modalità di elaborazione batch e non bloccante. srun viene utilizzato principalmente per eseguire attività immediate, mentre sbatch può essere utilizzato per eseguire attività in un secondo momento.

Per informazioni su ulteriori comandi e configurazioni Slurm, consulta la documentazione di Slurm Workload Manager.

Funzionalità di ripresa automatica e di riparazione

Una delle nuove funzionalità di SageMaker HyperPod è la possibilità di avere la ripresa automatica delle tue attività. In precedenza, quando un nodo lavoratore falliva durante l’esecuzione di un’attività di formazione o fine-tuning, era compito dell’utente verificare lo stato dell’attività, riavviarla dall’ultimo checkpoint e continuare a monitorarla per l’intera durata dell’esecuzione. Con attività di formazione o fine-tuning che devono essere eseguite per giorni, settimane o anche mesi, ciò diventa costoso a causa del costo amministrativo aggiuntivo dell’utente che deve dedicare risorse per monitorare e mantenere l’attività nel caso in cui un nodo si arresti, oltre al costo del tempo di inattività delle costose istanze di calcolo accelerate.

SageMaker HyperPod affronta la resilienza delle attività mediante l’utilizzo di controlli sanitari automatizzati, sostituzione dei nodi e ripristino delle attività. Le attività Slurm in SageMaker HyperPod vengono monitorate utilizzando un plugin personalizzato di SageMaker Slurm che utilizza il framework SPANK. Quando un’attività di formazione fallisce, SageMaker HyperPod esamina la salute del cluster attraverso una serie di controlli sanitari. Se viene trovato un nodo difettoso nel cluster, SageMaker HyperPod rimuoverà automaticamente il nodo dal cluster, lo sostituirà con un nodo sano e riavvierà l’attività di formazione. Quando si utilizza il checkpointing nelle attività di formazione, qualsiasi attività interrotta o fallita può riprendere dall’ultimo checkpoint.

Panoramica della soluzione

Per distribuire il tuo SageMaker HyperPod, devi prima preparare l’ambiente configurando la tua Virtual Private Cloud di Amazon (Amazon VPC) e i gruppi di sicurezza, distribuire i servizi di supporto come FSx for Lustre nella tua VPC e pubblicare i tuoi script di ciclo di vita Slurm in un bucket S3. Successivamente, distribuisci e configuri il tuo SageMaker HyperPod e connettiti al nodo master per avviare le tue attività di formazione.

Prerequisiti

Prima di creare il tuo SageMaker HyperPod, devi prima configurare la tua VPC, creare un file system FSx for Lustre e creare un bucket S3 con i tuoi script di ciclo di vita del cluster desiderati. Hai anche bisogno dell’ultima versione dell’Interfaccia a riga di comando di AWS (AWS CLI) e del plugin CLI installato per AWS Session Manager, una funzionalità di AWS Systems Manager.

SageMaker HyperPod è completamente integrato nella tua VPC. Per informazioni sulla creazione di una nuova VPC, consulta Crea una VPC predefinita o Crea una VPC. Per consentire una connessione senza problemi con le prestazioni più elevate tra le risorse, è consigliabile creare tutte le risorse nella stessa regione e nella stessa zona di disponibilità e garantire che le regole dei gruppi di sicurezza associati consentano la connessione tra le risorse del cluster.

Successivamente, devi creare un file system FSx for Lustre. Questo servirà come file system ad alte prestazioni da utilizzare durante la formazione dei modelli. Assicurati che i gruppi di sicurezza di FSx for Lustre e del cluster consentano la comunicazione in entrata e in uscita tra le risorse del cluster e il file system FSx for Lustre.

Per configurare gli script del ciclo di vita del cluster, che vengono eseguiti quando si verificano eventi come l’aggiunta di una nuova istanza di cluster, è necessario creare un bucket S3 e quindi copiare e personalizzare eventualmente gli script del ciclo di vita predefiniti. Per questo esempio, memorizziamo tutti gli script del ciclo di vita in un prefisso del bucket chiamato lifecycle-scripts.

Prima di tutto, scarica gli script di esempio del ciclo di vita dal repo di GitHub. Dovresti personalizzarli per adattarli ai comportamenti desiderati del cluster.

Successivamente, crea un bucket S3 per memorizzare gli script del ciclo di vita personalizzati.

aws s3 mb s3://<your_bucket_name>

Inoltre, copia gli script del ciclo di vita predefiniti dalla directory locale al bucket desiderato e al prefisso utilizzando aws s3 sync:

aws s3 sync . s3://<your_bucket_name>/lifecycle-scripts

Infine, per configurare il client per una connessione semplificata al nodo principale del cluster, dovresti installare o aggiornare la AWS CLI e installare il plugin AWS Session Manager CLI per consentire connessioni interattive al terminale per amministrare il cluster ed eseguire lavori di formazione.

Puoi creare un cluster SageMaker HyperPod con risorse disponibili su richiesta o richiedendo una prenotazione di capacità con SageMaker. Per creare una prenotazione di capacità, crei una richiesta di aumento delle quote per riservare tipi specifici di istanze di calcolo e allocazione di capacità nel dashboard delle quote di servizio.

Configura il tuo cluster di formazione

Per creare il tuo cluster SageMaker HyperPod, segui i seguenti passaggi:

  1. Sulla console di SageMaker, seleziona Gestione cluster sotto Cluster HyperPod nel riquadro di navigazione.
  2. Scegli Crea un cluster.
  3. Fornisci un nome per il cluster e, facoltativamente, eventuali tag da applicare alle risorse del cluster, quindi scegli Avanti.
  4. Seleziona Crea gruppo di istanze e specifica il nome del gruppo di istanze, il tipo di istanza necessario, la quantità di istanze desiderate e il bucket S3 e il percorso del prefisso dove hai precedentemente copiato gli script del ciclo di vita del cluster.

È consigliabile avere gruppi di istanze diversi per i nodi controller utilizzati per amministrare il cluster e inviare lavori e i nodi worker utilizzati per eseguire lavori di formazione utilizzando istanze di calcolo accelerate. È possibile configurare facoltativamente un gruppo di istanze aggiuntivo per i nodi di accesso.

  1. Innanzitutto, crea il gruppo di istanze del controller, che includerà il nodo principale del cluster.
  2. Per il ruolo di Gestione identità e accesso AWS (IAM) di questo gruppo di istanze, scegli Crea un nuovo ruolo e specifica eventuali bucket S3 a cui desideri che le istanze del cluster abbiano accesso.

Il ruolo generato avrà accesso in sola lettura ai bucket specificati per impostazione predefinita.

  1. Scegli Crea ruolo.
  2. Inserisci il nome dello script da eseguire all’avvio di ogni istanza nell’invito allo script di creazione. In questo esempio, lo script di creazione si chiama on_create.sh.
  3. Scegli Salva.
  4. Scegli Crea gruppo di istanze per creare il gruppo di istanze dei lavoratori.
  5. Fornisci tutti i dettagli richiesti, tra cui il tipo di istanza e la quantità desiderata.

In questo esempio vengono utilizzate quattro istanze accelerate ml.trn1.32xl per eseguire il nostro lavoro di formazione. Puoi utilizzare lo stesso ruolo IAM di prima o personalizzare il ruolo per le istanze dei lavoratori. Allo stesso modo, puoi utilizzare script del ciclo di vita di creazione diversi per questo gruppo di istanze dei lavoratori rispetto al gruppo di istanze precedente.

  1. Scegli Avanti per procedere.
  2. Scegli il VPC desiderato, la subnet e i gruppi di sicurezza per le istanze del tuo cluster.

Ospitiamo le istanze del cluster in una singola zona di disponibilità e subnet per garantire una bassa latenza.

Nota che se accederai frequentemente ai dati di S3, è consigliabile creare un endpoint del VPC associato alla tabella di routing della subnet privata per ridurre eventuali costi di trasferimento dati.

  1. Scegli Avanti.
  2. Rivedi il riepilogo dei dettagli del cluster, quindi scegli Invia.

Alternativamente, per creare il tuo SageMaker HyperPod utilizzando la CLI AWS, personalizza prima i parametri JSON usati per creare il cluster:

// create-cluster-slurm-default-vpc.json{   "ClusterName": "sagemaker-demo-cluster",   "InstanceGroups": [        {            "InstanceGroupName": "my-controller-group",            "InstanceType": "ml.m5.xlarge",            "InstanceCount": 1,            "lifecycleConfig": {                "SourceS3Uri": "s3://<your-s3-bucket>/<lifecycle-script-directory>/",                "OnCreate": "on_create.sh"            },            "ExecutionRole": "arn:aws:iam::111122223333:role/my-role-for-cluster",            "ThreadsPerCore": 1        },         {            "InstanceGroupName": "worker-group-1",            "InstanceType": "ml.trn1.32xlarge",            "InstanceCount": 4,            "lifecycleConfig": {                "SourceS3Uri": "s3://<your-s3-bucket>/<lifecycle-script-directory>/",                "OnCreate": "on_create.sh"            },            "ExecutionRole": "arn:aws:iam::111122223333:role/my-role-for-cluster",            "ThreadsPerCore": 1        }    ]}

Poi utilizza il seguente comando per creare il cluster utilizzando gli input forniti:

aws sagemaker create-cluster create-cluster-slurm-default-vpc.json

Esegui il tuo primo lavoro di addestramento con Llama 2

Nota che l’utilizzo del modello Llama 2 è regolato dalla licenza Meta. Per scaricare i pesi del modello e il tokenizer, visita il sito web e accetta la licenza prima di richiedere l’accesso sul sito web di Hugging Face di Meta.

Dopo che il cluster è in esecuzione, accedi con Session Manager utilizzando l’id del cluster, il nome del gruppo di istanze e l’id dell’istanza. Utilizza il seguente comando per visualizzare i dettagli del cluster:

aws sagemaker describe-cluster –cluster-name <cluster_name>

Prendi nota dell’ID del cluster incluso nell’ARN del cluster nella risposta.

“ClusterArn”: “arn:aws:sagemaker:us-west-2:111122223333:cluster/<cluster_id>”

Utilizza il seguente comando per recuperare il nome del gruppo di istanze e l’id dell’istanza necessari per accedere al cluster.

aws sagemaker list-cluster-nodes --cluster-name <cluster_name>

Prendi nota del InstanceGroupName e dell’InstanceId nella risposta, poiché verranno utilizzati per connettersi all’istanza con Session Manager.

Ora usa Session Manager per accedere al nodo principale o a uno dei nodi di accesso e avviare il tuo lavoro di addestramento:

aws ssm start-session —target sagemaker-cluster:<cluster_id>_<instance_group_name>-<instance_id>

Successivamente, prepareremo l’ambiente e scaricheremo Llama 2 e il set di dati RedPajama. Per il codice completo e una spiegazione passo passo, seguire le istruzioni nel repository di AWSome Distributed Training su GitHub.

git clone https://github.com/aws-samples/awsome-distributed-training.git

Segui le indicazioni dettagliate nel file 2.test_cases/8.neuronx-nemo-megatron/README.md. Dopo aver seguito i passaggi per preparare l’ambiente, preparare il modello, scaricare e tokenizzare il set di dati e precompilare il modello, dovresti modificare lo script 6.pretrain-model.sh e il comando di invio del lavoro sbatch per includere un parametro che ti permetterà di usufruire della funzione di auto-ripristino di SageMaker HyperPod.

Modifica la riga sbatch come segue:

sbatch --nodes 4 --auto-resume=1 run.slurm ./llama2_7b.sh

Dopo aver inviato il lavoro, otterrai un JobID che potrai utilizzare per controllare lo stato del lavoro usando il seguente codice:

squeue <jobid>

Inoltre, puoi monitorare il lavoro seguendo il log dell’output del lavoro usando il seguente codice:

tail -f slurm-run.slurm-<jobid>.out

Pulizia

Per eliminare il tuo cluster SageMaker HyperPod, puoi utilizzare la console di SageMaker o il seguente comando AWS CLI:

aws sagemaker delete-cluster --cluster-name <nome_cluster>

Conclusione

Questo post ti ha mostrato come preparare il tuo ambiente AWS, distribuire il tuo primo cluster SageMaker HyperPod e addestrare un modello Llama 2 con 7 miliardi di parametri. SageMaker HyperPod è disponibile oggi nelle regioni delle Americhe (N. Virginia, Ohio e Oregon), Asia Pacific (Singapore, Sydney e Tokyo) ed Europa (Frankfurt, Ireland e Stockholm). Possono essere distribuiti tramite la console di SageMaker, AWS CLI e AWS SDK e supportano le famiglie di istanze p4d, p4de, p5, trn1, inf2, g5, c5, c5n, m5 e t3.

Per saperne di più su SageMaker HyperPod, visita Amazon SageMaker HyperPod.