Addestrare Llama2 con Megatron-LM sulle macchine virtuali A3 Mega
Panoramica
In questa guida rapida, imparerai a eseguire un carico di lavoro PyTorch Megatron-LM basato su container su A3 Mega. Il codice è disponibile in questo repository GitHub: megatron-gke.
Prima di iniziare
Per abilitare l'API Google Kubernetes Engine (GKE), segui questi passaggi:
- Accedi al tuo Google Cloud account. 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 workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the GKE API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the GKE API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Assicurati di avere il seguente ruolo o i seguenti ruoli nel progetto: roles/container.admin, roles/compute.networkAdmin, roles/iam.serviceAccountUser
Controlla i ruoli
-
Nella Google Cloud console vai alla pagina IAM.
Vai a IAM - Seleziona il progetto.
-
Nella colonna Entità, trova tutte le righe che identificano te o un gruppo di cui fai parte. Per scoprire i gruppi di cui fai parte, contatta l' amministratore.
- Per tutte le righe che ti specificano o ti includono, controlla la colonna Ruolo per verificare se l'elenco dei ruoli include i ruoli richiesti.
Concedi i ruoli
-
Nella Google Cloud console vai alla pagina IAM.
Vai a IAM - Seleziona il progetto.
- Fai clic su Concedi l'accesso.
-
Nel campo Nuove entità, inserisci il tuo identificatore dell'utente. In genere si tratta dell'indirizzo email di un Account Google.
- Fai clic su Seleziona un ruolo, quindi cerca il ruolo.
- Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo aggiuntivo.
- Fai clic su Salva.
-
Crea un cluster A3 Mega
Crea un cluster GKE A3 Mega con GPUDirect-TCPXO e multi-networking. Per saperne di più, consulta Massimizzare la larghezza di banda di rete della GPU con GPUDirect e multi-networking.
Configura l'ambiente
Crea variabili di ambiente per alcuni parametri comuni
export CLUSTER_NAME=CLUSTER_NAME export CONTROL_PLANE_LOCATION=CONTROL_PLANE_LOCATION export PROJECT_ID=PROJECT_ID
Sostituisci quanto segue:
CLUSTER_NAME: il nome del cluster GKE A3 Mega in cui sono abilitati GPUDirect-TCPXO e multi-networking.CONTROL_PLANE_LOCATION: la località di Compute Engine del piano di controllo del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.PROJECT_ID: l' Google Cloud ID progetto.
Configura Google Cloud CLI in modo da utilizzare le tue Google Cloud credenziali per l'autenticazione:
gcloud auth login
Per saperne di più, consulta Autenticati per usare Google Cloud CLI.
Installa
kubectle il plug-in gcloud CLI di GKE:sudo apt-get install kubectl sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
Recupera le credenziali per il cluster GKE:
gcloud container clusters get-credentials ${CLUSTER_NAME} \ --location=${CONTROL_PLANE_LOCATION} \ --project=${PROJECT_ID}Se non è già installato, installa Helm:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh && rm get_helm.sh sudo chmod +x /usr/local/bin/helm
Utilizza lo scheduler con riconoscimento della topologia per eseguire il deployment dei pod
Puoi utilizzare lo scheduler con riconoscimento della topologia per eseguire il deployment dei pod GKE sui nodi che hanno una topologia GPU specificata.
Nei seguenti comandi kubectl, utilizzerai i file direttamente da un repository. In alternativa, puoi clonare il repository localmente e i comandi kubectl possono fare riferimento ai file locali.
Per saperne di più, consulta Scheduler di topologia.
Configura il account di servizio:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/service-account.yaml
Installa gli script dello scheduler di topologia in un configmap:
curl -OL https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/schedule-daemon.py curl -OL https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/label-nodes-daemon.py kubectl -n kube-system create configmap topology-scheduler-scripts \ --from-file=schedule-daemon.py=schedule-daemon.py \ --from-file=label-nodes-daemon.py=label-nodes-daemon.pyInstalla il daemonset dell'etichetta di topologia e il pod dello scheduler di topologia:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/label-nodes-daemon.yaml $ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/schedule-daemon.yamlOsserva le azioni dello scheduler di topologia:
kubectl -n kube-system logs topology-scheduler-pod
Esegui il workload
Crea il Dockerfile ed esegui il push in Google Cloud Artifact Registry
Crea un bucket Cloud Storage e un repository Docker. Nel
scripts/setup-and-configure-resources.sh script, sostituisci i nomi del bucket e del repository con quelli che hai creato, quindi esegui lo script:bash scripts/setup-and-configure-resources.sh
Crea l'immagine
pytorch-megatron:23.11-py3ed eseguine il push nel repository. Assicurati che il nome del repository Docker nel filescripts/build-and-push-docker-image.shcorrisponda al nome del repository utilizzato nello scriptscripts/setup-and-configure-resources.sh. Puoi anche modificare il nome del tag dell'immagine Docker prima di eseguire il push.bash scripts/build-and-push-docker-image.sh
Avvia il benchmark Llama2 di Megatron-LM
Modifica il file
helm/values.yamlper specificare il bucket Cloud Storage e l'immagine Docker creati nelle sezioni precedenti. Per alcune configurazioni di esempio, consulta sample-configurations.(Facoltativo) Puoi anche modificare il file
selected-configuration.shper specificare le modifiche apportate alla configurazione Helm predefinita.helm install HELM_EXPERIMENT_NAME helm/ --values helm/values.yaml
Sostituisci
HELM_EXPERIMENT_NAMEcon un nome arbitrario per l'esperimento.
L'esperimento scrive le metriche dello strumento di profilazione Nsight Systems nel bucket Cloud Storage
specificato nella directory megatron-experiments.
Libera spazio
Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.
Elimina il cluster GKE:
Vai alla pagina Cluster:
- Seleziona la casella di controllo per CLUSTER_NAME.
- Fai clic su Elimina.
- Per confermare l'eliminazione, digita CLUSTER_NAME e fai clic su Elimina.
Elimina il bucket Cloud Storage
Vai alla pagina Bucket:
Seleziona la casella di controllo per il bucket Cloud Storage che hai creato per questa guida rapida.
Fai clic su Elimina.
Per confermare l'eliminazione, digita
DELETEe fai clic su Elimina.