Questo tutorial mostra come eseguire il fine tuning di un modello mistralai/Mixtral-8x7B-v0.1
su un cluster Slurm multi-nodo e multi-GPU su Google Cloud. Il cluster utilizza due istanze di 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. Configuri anche un file system Lustre condiviso e una rete ad alta velocità.
- Dopo il deployment del cluster, esegui un job di ottimizzazione distribuita utilizzando il set di script che accompagnano questo tutorial. Il job utilizza PyTorch Fully Sharded Data Parallel (FSDP), a cui puoi accedere tramite la libreria Transformer Reinforcement Learning (TRL) di Hugging Face.
Questo tutorial è rivolto a machine learning engineer, ricercatori, amministratori e operatori di piattaforme e specialisti di dati e AI interessati a distribuire un carico di lavoro di AI su più nodi e GPU.
Obiettivi
- Accedere a Mixtral utilizzando Hugging Face
- Installa Cluster Toolkit
- prepara l'ambiente
- Crea ed esegui il deployment di un cluster Slurm A4 High-GPU di livello di produzione.
- Configura un ambiente multi-nodo per l'addestramento distribuito con FSDP.
- Perfeziona il modello Mixtral utilizzando la classe
trl.SFTTrainerdi Hugging Face. - Esegui lo staging dei dati sulle unità SSD locali.
- 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
- Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere 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 il quale 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 lustre.googleapis.com
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere 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 il quale 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 lustre.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.serviceUsageAdmingcloud 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 . Ad esempio:myemail@example.com.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@developer.gserviceaccount.com \ --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@developer.gserviceaccount.com" \ --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.
- Installa le dipendenze necessarie per utilizzare Cluster Toolkit.
Accedere a Mixtral utilizzando Hugging Face
Per utilizzare Hugging Face per accedere a Mixtral:
- Accedi a Hugging Face ed esplora il modello Mixtral.
- Crea un token di accesso
readdi Hugging Face. - Copia e salva il valore del token. Lo utilizzerai più avanti in questo tutorial.
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 progetto Google Cloud in cui vuoi creare il cluster Slurm.YOUR_ZONE: la zona in cui esiste la prenotazione.YOUR_REGION: la regione in cui esiste la prenotazione.YOUR_RESERVATION_NAME: l'URL o il nome della prenotazione che vuoi utilizzare per creare il cluster Slurm.YOUR_CLUSTER_NAME: il nome del deployment. Utilizza un nome breve contenente solo lettere e numeri (ad esempioa4high). Questo nome viene assegnato anche al cluster Slurm creato dal deployment.YOUR_GCS_BUCKET: il nome del bucket in cui memorizzi i risultati del checkpoint di addestramento. Specifica un bucket esistente o creane uno nuovo. 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 A4 Slurm:
Sovrascrivi il file
a4high-slurm-deployment.yamlnella directoryexamples/machine-learning/a4-highgpu-8gcon le tue variabili di ambiente eseguendo il seguente comando:Apri il file
a4high-slurm-blueprint.yamlnella directoryexamples/machine-learning/a4-highgpu-8ge modificalo per utilizzare Managed Lustre per la directory/homecondivisa come segue:- Rimuovi il blocco del modulo
homefspredefinito consource: modules/file-system/filestore. - Attiva i moduli
lustrefs(bloccohomefsconremote_mount: lustrefs) eprivate-service-access. - Nel blocco
vars, configura quanto segue:- Modifica il valore di
install_managed_lustrein/var/tmp/slurm_vars.jsonimpostandolo sutrue. - Imposta il parametro
per_unit_storage_throughputsu500. - Imposta il parametro
lustre_size_gibsu36000. - Rimuovi commento da
lustre_instance_id: lustre-instance. - Commenta o rimuovi
filestore_ip_rangeinutilizzati.
- Modifica il valore di
- Rimuovi il blocco del modulo
Esegui il deployment del cluster:
Il comando
./gcluster deployavvia 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 35 minuti.
- La seconda fase esegue il deployment del cluster utilizzando l'immagine personalizzata. Questo processo dovrebbe essere completato più rapidamente rispetto alla prima fase.
Prepara il workload
Per preparare il workload:
Crea script del workload
Per creare gli script che verranno utilizzati dal tuo workload di messa a punto:
Per configurare l'ambiente virtuale Python, crea il file
install_environment.shcon i seguenti contenuti:Per specificare le dipendenze Python per lo script di addestramento, crea un file
requirements-fsdp.txtcon i seguenti contenuti:Specifica
train-mixtral.pycome script di addestramento principale:Per specificare le attività da eseguire nei job sul cluster Slurm, crea il file
train-mixtral.shcon 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 per il cluster:La variabile
LOGIN_NODEmemorizza un valore simile a${DEPLOYMENT_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 i framework e gli strumenti richiesti eseguendo lo script di installazione su un nodo di calcolo:
Questo comando configura l'ambiente virtuale, installa tutte le dipendenze e
scarica i pesi del modello Mixtral in ~/Mixtral-8x7B-v0.1. Questo processo può
richiedere più di 30 minuti.
L'esecuzione di questo passaggio tramite srun delega lo script di installazione dal nodo di accesso a un nodo di calcolo allocato, consentendo allo script di accedere ai driver GPU durante la compilazione.
Avvia il carico di lavoro di fine-tuning
Per avviare il workload di addestramento:
Invia il job allo scheduler Slurm:
Monitorare il workload
Per monitorare l'avanzamento del job di perfezionamento, utilizza i seguenti metodi:
Sul nodo di accesso nel 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.Il job ha due fasi principali:
- Copia del modello di base di grandi dimensioni sull'SSD locale di ogni nodo di calcolo.
- Il job di addestramento, che inizia una volta completata la copia del modello.
L'esecuzione dell'intero job richiede circa 60 minuti.
Puoi anche 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=YOUR_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%7DIn alternativa, puoi inserire il comando direttamente nel terminale:
Quando monitori il carico di lavoro, puoi visualizzare quanto segue:
Utilizzo GPU: per un job di perfezionamento corretto, puoi aspettarti di vedere l'utilizzo di tutte le 16 GPU (otto GPU per ogni VM nel cluster) aumentare e stabilizzarsi a un livello specifico durante l'addestramento.
Durata del job: il completamento del job dovrebbe richiedere circa un'ora.
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
Esegui i seguenti comandi per eliminare le risorse create in questo tutorial:
Per eliminare il cluster Slurm, vai alla directory
cluster-toolkited esegui questo comando:Elimina il bucket:
Per eliminare un'immagine Packer, apri il browser web, vai alla pagina seguente, cerca l'immagine specifica e fai clic su Elimina.
Elimina il progetto
Elimina un progetto Google Cloud :
gcloud projects delete PROJECT_ID
Passaggi successivi
- Riesegui il deployment di un cluster Slurm
- Testare le prestazioni di rete su un cluster Slurm
- Monitora le VM in un cluster Slurm
- Crea un endpoint di pubblicazione: una volta ottimizzato il modello, puoi eseguirne il deployment in un endpoint di pubblicazione utilizzando Google Kubernetes Engine (GKE) o Vertex AI per renderlo accessibile per l'inferenza.
- Scopri di più sui servizi di archiviazione consigliati per i workload di AI e ML