Questo tutorial mostra come addestrare un modello linguistico di grandi dimensioni (LLM) su un cluster Slurm multi-nodo e multi-GPU su Google Cloud. Il modello che utilizzi in questo tutorial si basa su un modello Qwen2 con 1,5 miliardi di parametri. Il cluster Slurm utilizza due macchine virtuali (VM) a4-highgpu-8g, ognuna delle quali dispone di 8 GPU NVIDIA B200.
Le due procedure principali descritte in questo tutorial sono le seguenti:
- Esegui il deployment di un cluster Slurm ad alte prestazioni di livello di produzione utilizzando Google Cloud Cluster Toolkit. Nell'ambito di questo deployment, crei un'immagine VM personalizzata con il software necessario preinstallato. Configura anche un'istanza Filestore condivisa e configura il networking RDMA ad alta velocità.
- Dopo il deployment del cluster, esegui un job di pre-addestramento distribuito utilizzando il set di script che accompagnano questo tutorial. Il job utilizza la libreria Hugging Face Accelerate.
Questo tutorial è rivolto a ingegneri, ricercatori, amministratori e operatori di piattaforme di machine learning (ML) e a specialisti di dati e AI interessati al deployment di cluster Slurm ad alte prestazioni su Google Cloud per addestrare LLM.
Obiettivi
- Accedi al modello Qwen2 utilizzando Hugging Face.
- Prepara l'ambiente.
- Crea ed esegui il deployment di un cluster Slurm A4 di livello di produzione.
- Addestra il modello Qwen2 utilizzando la libreria Accelerate .
- Monitorare il job.
- Eseguire la pulizia.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Prima di iniziare
-
Installa Google Cloud CLI.
-
Configura gcloud CLI per utilizzare la tua identità federata.
Per ulteriori informazioni, vedi Accedi a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per cui ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del progetto Google Cloud .
-
Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud .
Abilita l'API richiesta:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.gcloud services enable compute.googleapis.com file.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com
-
Concedi ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:
roles/compute.admin, roles/iam.serviceAccountUser, roles/file.editor, roles/storage.admin, roles/serviceusage.serviceUsageAdmin, roles/compute.osAdminLogin, roles/iap.tunnelResourceAccessorgcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Sostituisci quanto segue:
PROJECT_ID: il tuo ID progetto.USER_IDENTIFIER: l'identificatore del tuo account utente account. Per esempi, vedi Rappresenta gli utenti del pool di forza lavoro nelle policy IAM.ROLE: il ruolo IAM che concedi al tuo account utente.
- Abilita il account di servizio predefinito per il tuo progetto Google Cloud :
gcloud iam service-accounts enable PROJECT_NUMBER-compute@ \ --project=PROJECT_ID
Sostituisci PROJECT_NUMBER con il numero del progetto. Per rivedere il numero del progetto, consulta Ottenere un progetto esistente.
- Concedi il ruolo Editor (
roles/editor) al service account predefinito:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@" \ --role=roles/editor
- Crea le credenziali di autenticazione locale per il tuo account utente:
gcloud auth application-default login
- Attiva OS Login per il tuo progetto:
gcloud compute project-info add-metadata --metadata=enable-oslogin=TRUE
- Accedi o crea un account Hugging Face.
Accedere a Qwen2 utilizzando Hugging Face
Per utilizzare Hugging Face per accedere a Qwen2:
Installa Cluster Toolkit
Cluster Toolkit è uno strumento open source che semplifica il deployment di carichi di lavoro di computing ad alte prestazioni (HPC), intelligenza artificiale (AI) e machine learning (ML) su Google Cloud. Per saperne di più sull'utilizzo di gcluster e
sulla gestione dei cluster, consulta la
panoramica di Cluster Toolkit.
Prepara la versione di Cluster Toolkit:
Scarica la release:
Definisci il percorso
gcluster:
prepara l'ambiente
Per preparare l'ambiente:
Imposta le variabili di ambiente predefinite:
Sostituisci quanto segue:
YOUR_PROJECT_ID: il nome del Google Cloud progetto in cui vuoi creare il cluster GKE.YOUR_CLUSTER_NAME: il nome del cluster Slurm che vuoi creare.YOUR_ZONE: la zona in cui esiste la prenotazione.YOUR_REGION,: la regione in cui esiste la prenotazione.RESERVATION_NAME: l'URL o il nome della prenotazione che vuoi utilizzare per creare il cluster Slurm.YOUR_GCS_BUCKET: il nome del bucket in cui memorizzi i risultati del checkpoint di addestramento. Prima di crearlo, acquisisci familiarità con i requisiti per la denominazione dei bucket.YOUR_HF_TOKEN: il token Hugging Face creato in un passaggio precedente.
Crea un bucket Cloud Storage:
Crea un cluster Slurm A4
Per creare un cluster Slurm A4:
Crea il file
a4high-slurm-deployment.yaml:Crea i manifest Terraform:
Applica patch ai manifest:
Esegui il deployment del cluster:
Il comando
gcluster deployè un processo in due fasi, che è il seguente:La prima fase crea un'immagine personalizzata con tutto il software preinstallato, il cui completamento può richiedere fino a 50 minuti.
La seconda fase esegue il deployment del cluster utilizzando l'immagine personalizzata. Il completamento di questo processo richiede in genere meno tempo rispetto alla prima fase.
Se la prima fase va a buon fine, ma la seconda no, puoi provare a eseguire nuovamente il deployment del cluster Slurm saltando la prima fase:
Prepara il workload
Per preparare il workload:
Crea script del workload
Per creare gli script che verranno utilizzati dal carico di lavoro di addestramento:
Per configurare l'ambiente virtuale Python, crea il file
install_environment.shcon i seguenti contenuti:Per specificare le configurazioni per il job di perfezionamento, crea il file
accelerate_config.yamlcon i seguenti contenuti:Per specificare le attività da eseguire nei job sul cluster Slurm, crea il file
submit.slurmcon il seguente contenuto:Per specificare le dipendenze per il job di perfezionamento, crea un file
requirements.txtcon i seguenti contenuti:
Nota: questo tutorial non utilizza le versioni più recenti delle dipendenze NVIDIA e Pytorch. Se hai bisogno di dipendenze più recenti, consulta la documentazione NVIDIA e la documentazione di Pytorch.Per scaricare, tokenizzare ed elaborare il set di dati in un formato pronto per l'addestramento, crea un file
preprocess_data.pycon i seguenti contenuti:Per specificare le istruzioni per il tuo job, crea un file
train.pycon il seguente contenuto:
Carica gli script nel cluster Slurm
Per caricare gli script creati nella sezione precedente nel cluster Slurm, segui questi passaggi:
Imposta la variabile
LOGIN_NODErecuperando il nome del nodo di accesso per il cluster:La variabile
LOGIN_NODEmemorizza un valore simile a${CLUSTER_NAME}-login-001.Crea una regola firewall:
Carica gli script nella home directory del nodo di accesso:
Connettiti al cluster Slurm
Connettiti al cluster Slurm connettendoti al nodo di accesso tramite SSH:
Installare framework e strumenti
Dopo aver eseguito la connessione al nodo di accesso, installa framework e strumenti nel seguente modo:
Configura un ambiente virtuale Python con tutte le dipendenze richieste:
Inizia il pre-training del tuo workload
Per iniziare l'addestramento del workload:
Invia il job allo scheduler Slurm:
Sul nodo di accesso del cluster Slurm, puoi monitorare l'avanzamento del job controllando i file di output creati nella directory
home:Se il job viene avviato correttamente, il file
.errmostra una barra di avanzamento che si aggiorna man mano che il job procede.
Monitorare il workload
Puoi monitorare l'utilizzo delle GPU nel cluster Slurm per verificare che il job di ottimizzazione venga eseguito in modo efficiente. Per farlo, apri il seguente link nel browser:
https://console.cloud.google.com/monitoring/metrics-explorer?project=PROJECT_ID&pageState=%7B%22xyChart%22%3A%7B%22dataSets%22%3A%5B%7B%22timeSeriesFilter%22%3A%7B%22filter%22%3A%22metric.type%3D%5C%22agent.googleapis.com%2Fgpu%2Futilization%5C%22%20resource.type%3D%5C%22gce_instance%5C%22%22%2C%22perSeriesAligner%22%3A%22ALIGN_MEAN%22%7D%2C%22plotType%22%3A%22LINE%22%7D%5D%7D%7D
In alternativa, puoi inserire il comando direttamente nel terminale:
Quando monitori il carico di lavoro, puoi visualizzare quanto segue:
Utilizzo delle GPU: per un job di messa a punto ottimale, puoi aspettarti di vedere l'utilizzo di tutte le 16 GPU (8 GPU per ogni VM nel cluster) aumentare e stabilizzarsi a un livello specifico durante l'addestramento. TEST
Durata del job: il completamento del job dovrebbe richiedere circa un'ora.
Scaricare il modello
Dopo aver eseguito correttamente il job, il modello addestrato viene salvato nella directory ~/qwen2-from-scratch-on-smollm-fineweb/ sul nodo di accesso. Poiché questa
directory condivisa permanente è montata su tutti i nodi del cluster,
i checkpoint del modello rimangono disponibili anche dopo il completamento del job o la
deallocazione dei nodi di calcolo.
Puoi scaricare il modello salvato dal nodo di accesso alla tua macchina locale
utilizzando il comando gcloud compute scp, come mostrato nell'esempio seguente:
Dopo aver scaricato il modello, puoi:
- Carica il modello per l'inferenza: utilizza il framework Hugging Face Transformers
per caricare la directory
qwen2-trained-model/ed eseguire l'inferenza con il modello Qwen2 appena addestrato. - Ottimizzazione aggiuntiva: utilizza il checkpoint salvato come punto di partenza per un'ottimizzazione aggiuntiva su un set di dati più specifico.
- Trasferisci il modello a Hugging Face Hub: condividi il modello addestrato trasferendolo a Hugging Face Hub.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Eliminare le risorse
Per eliminare il cluster Slurm:
Per eliminare il bucket Cloud Storage:
Per eliminare un'immagine Packer, apri il browser web, vai alla pagina seguente, cerca l'immagine specifica e fai clic su Elimina.
Per eliminare tutte le reti VPC, le regole firewall, i router, gli IP e le subnet associati al progetto:
Elimina il progetto
Elimina un progetto Google Cloud :
gcloud projects delete PROJECT_ID