Addestra Llama2 con Megatron-LM su macchine virtuali A3 Mega


Panoramica

In questa guida rapida, imparerai come eseguire un progetto Megatron-LM basato su container Carico di lavoro PyTorch su A3 Mega. Il codice è disponibile in questo repository GitHub: megatron-gke.

Prima di iniziare

Segui questi passaggi per abilitare l'API Google Kubernetes Engine (GKE):

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the GKE API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the GKE API.

    Enable the API

  8. Make sure that you have the following role or roles on the project: roles/container.admin, roles/compute.networkAdmin, roles/iam.serviceAccountUser

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Vai a IAM
    2. Seleziona il progetto.
    3. Fai clic su Concedi l'accesso.
    4. Nel campo Nuove entità, inserisci il tuo identificatore utente. In genere si tratta dell'indirizzo email di un Account Google.

    5. Nell'elenco Seleziona un ruolo, seleziona un ruolo.
    6. Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni altro ruolo.
    7. Fai clic su Salva.

Crea un cluster Mega A3

Crea un cluster GKE A3 Mega con GPUDirect-TCPXO e networking multiplo. Per ulteriori informazioni, consulta Massimizzare la larghezza di banda della rete GPU con GPUDirect e networking multiplo.

Configura l'ambiente

  1. Creare variabili di ambiente per alcuni parametri comuni

    export CLUSTER_NAME=CLUSTER_NAME
    export REGION=REGION
    export ZONE=ZONE
    export PROJECT_ID=PROJECT_ID
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster GKE A3 Mega in cui sono abilitati GPUDirect-TCPXO e il networking multiplo.
    • REGION: la regione in cui hai creato il cluster.
    • ZONE: la zona in cui hai creato il cluster.
    • PROJECT_ID: il tuo ID progetto Google Cloud.
  2. Configura Google Cloud CLI in modo da utilizzare le tue credenziali Google Cloud per l'autenticazione:

    gcloud auth login
    

    Per ulteriori informazioni, consulta Eseguire l'autenticazione per l'utilizzo di Google Cloud CLI.

  3. Installa kubectl e il plug-in dell'interfaccia alla gcloud CLI di GKE:

    sudo apt-get install kubectl
    sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
    
  4. Recupera le credenziali per il tuo cluster GKE:

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
      --zone=${ZONE} \
      --project=${PROJECT_ID}
    
  5. 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
    

Usa lo scheduler sensibile alla topologia per il deployment dei pod

Puoi utilizzare lo scheduler sensibile alla topologia per eseguire il deployment dei pod GKE ai nodi che hanno una topologia GPU specificata.

Nei seguenti comandi kubectl, utilizzerai i file direttamente da un repository. In alternativa, puoi clonare il repository in locale e kubectl possono invece fare riferimento ai file locali.

Per ulteriori informazioni, consulta lo scheduler di topologia.

  1. Configura l'account di servizio:

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/service-account.yaml
    
  2. Installa gli script dello scheduler di topologia in una 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.py
    
  3. Installa 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.yaml
    
  4. Osserva le azioni del programmatore della topologia:

    kubectl -n kube-system logs topology-scheduler-pod
    

Esegui il carico di lavoro

Crea il Dockerfile ed esegui il push su Artifact Registry di Google Cloud

  1. Crea un bucket Cloud Storage e un repository Docker. In scripts/setup-and-configure-resources.sh script, sostituisci il bucket e i nomi di repository con quelli che hai creato, quindi esegui lo script:

    bash scripts/setup-and-configure-resources.sh
    
  2. Crea ed esegui il push dell'immagine pytorch-megatron:23.11-py3 nel tuo repository. Assicurati che il nome del repository Docker nel file scripts/build-and-push-docker-image.sh corrisponda al nome del repository utilizzato nello script scripts/setup-and-configure-resources.sh. Puoi anche modificare il nome del tag dell'immagine Docker prima di eseguirne il push.

    bash scripts/build-and-push-docker-image.sh
    

Avvia il benchmark di Llama2 di Megatron-LM

  1. Modifica il file helm/values.yaml per specificare il bucket Cloud Storage e l'immagine Docker creati nelle sezioni precedenti. Per alcune configurazioni di esempio, consulta sample-configurations.

  2. (Facoltativo) Puoi anche modificare il file selected-configuration.sh per specificare eventuali modifiche apportate alla configurazione predefinita di Helm.

    helm install HELM_EXPERIMENT_NAME helm/ --values helm/values.yaml
    

    Sostituisci HELM_EXPERIMENT_NAME con 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.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.

Elimina il cluster GKE:

Vai alla pagina Cluster:

Vai a Cluster

  1. Seleziona la casella di controllo per CLUSTER_NAME.
  2. Fai clic su Elimina.
  3. Per confermare l'eliminazione, digita CLUSTER_NAME e fai clic su Elimina.

Elimina il bucket Cloud Storage

Vai alla pagina Bucket:

Vai a Bucket

  1. Seleziona la casella di controllo per il bucket Cloud Storage che hai creato per questo quickstart.

  2. Fai clic su Elimina.

  3. Per confermare l'eliminazione, digita DELETE e fai clic su Elimina.

Passaggi successivi