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, ciascuna con 8 GPU NVIDIA B200.
I due processi principali descritti in questo tutorial sono i seguenti:
- Esegui il deployment di un cluster Slurm ad alte prestazioni di livello di produzione utilizzandoGoogle Cloud Cluster Toolkit. Nell'ambito di questo deployment, creerai un'immagine VM personalizzata con il software necessario preinstallato. Inoltre, configurerai un'istanza Filestore condivisa e il networking RDMA ad alta velocità.
- Dopo aver eseguito il deployment del cluster, esegui un job di pre-addestramento distribuito utilizzando l'insieme 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 l'addestramento di 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 saperne di più, consulta Accedi a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un progetto Google Cloud .
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.
-
Crea 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, se non è già abilitata:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore di Service Usage (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 i 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 . Per esempi, consulta Rappresenta gli utenti del pool di forza lavoro nelle policy IAM.ROLE: il ruolo IAM che concedi al tuo account utente.
- Attiva 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 esaminare il numero di progetto, consulta Recupera 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 credenziali di autenticazione locali 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.
Accedi a Qwen2 utilizzando Hugging Face
Per utilizzare Hugging Face per accedere a Qwen2, segui questi passaggi:
Installa Cluster Toolkit
Cluster Toolkit è uno strumento open source che semplifica il deployment di workload di computing ad alte prestazioni (HPC), intelligenza artificiale (AI) e machine learning (ML) su Google Cloud. Per saperne di più sull'utilizzo dell'interfaccia a riga di comando 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, segui questi passaggi:
Imposta le variabili di ambiente predefinite:
Sostituisci quanto segue:
YOUR_PROJECT_ID: il nome del progetto Google Cloud 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 archiviare i risultati del checkpoint di addestramento. Prima di crearlo, acquisisci familiarità con i requisiti di denominazione dei bucket.YOUR_HF_TOKEN: il token Hugging Face che hai creato in un passaggio precedente.
Crea un bucket Cloud Storage:
Crea un cluster Slurm A4
Per creare un cluster Slurm A4, segui questi passaggi:
Crea il file
a4high-slurm-deployment.yaml:Utilizza il comando
gcluster createper creare i manifest di Terraform:Applica la patch ai manifest:
Esegui il deployment del cluster:
Il comando
gcluster deployè un processo in due fasi, come segue:La prima fase crea un'immagine personalizzata con tutto il software preinstallato e può richiedere fino a 50 minuti.
La seconda fase esegue il deployment del cluster utilizzando l'immagine personalizzata. In genere, questo processo richiede meno tempo rispetto alla prima fase.
Se la prima fase ha esito positivo, ma la seconda non va a buon fine, puoi provare a eseguire nuovamente il deployment del cluster Slurm saltando la prima fase:
Prepara il workload
Per preparare il workload, segui questi passaggi:
Crea script del workload
Per creare gli script che verranno utilizzati dal workload di addestramento, segui questi passaggi:
Per configurare l'ambiente virtuale Python, crea il file
install_environment.shcon i seguenti contenuti:Per specificare le configurazioni per il job di ottimizzazione, crea il file
accelerate_config.yamlcon i seguenti contenuti:Per specificare le attività per i job da eseguire sul cluster Slurm, crea il file
submit.slurmcon i seguenti contenuti:Per specificare le dipendenze per il job di ottimizzazione, 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 di NVIDIA e la documentazione di PyTorch.Per scaricare, tokenizzare e pre-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 job, crea un file
train.pycon i seguenti contenuti:
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 del tuo 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:
Installa framework e strumenti
Dopo aver eseguito la connessione al nodo di accesso, installa framework e strumenti seguendo questi passaggi:
Configura un ambiente virtuale Python con tutte le dipendenze richieste:
Avvia il pre-addestramento del workload
Per iniziare l'addestramento del workload, segui questi passaggi:
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.
Monitora il workload
Puoi monitorare l'utilizzo delle GPU nel tuo 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 workload, puoi visualizzare quanto segue:
Utilizzo delle GPU: per un job di ottimizzazione integro, l'utilizzo di tutte le 16 GPU (otto GPU per ogni VM nel cluster) dovrebbe aumentare e stabilizzarsi a un livello specifico durante l'addestramento. TEST
Durata del job: il completamento del job dovrebbe richiedere circa un'ora.
Scarica 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 computing.
Puoi scaricare il modello salvato dal nodo di accesso sulla 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.
- Invia il modello all'Hugging Face Hub: condividi il modello addestrato inviandolo all'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.
Elimina le risorse
Per eliminare il cluster Slurm, esegui il comando
gcluster destroy:Per eliminare il bucket Cloud Storage, segui questi passaggi:
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, segui questi passaggi:
Elimina il progetto
Elimina un progetto Google Cloud :
gcloud projects delete PROJECT_ID