Addestra Llama2 con Megatron-LM su macchine virtuali A3 Mega

Panoramica

In questa guida rapida, imparerai a eseguire un carico di lavoro Megatron-LM basato su container PyTorch 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:

  1. 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 workload.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. Assicurati di disporre dei seguenti ruoli nel progetto: roles/container.admin, roles/compute.networkAdmin, roles/iam.serviceAccountUser

    Controlla i ruoli

    1. Nella console Google Cloud vai alla pagina IAM.

      Vai a IAM
    2. Seleziona il progetto.
    3. Nella colonna Entità, trova tutte le righe che identificano te o un gruppo di cui fai parte. Per scoprire a quali gruppi appartieni, contatta il tuo amministratore.

    4. 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

    1. Nella console Google Cloud vai alla pagina IAM.

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

    5. Fai clic su Seleziona un ruolo, quindi cerca il ruolo.
    6. Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo successivo.
    7. Fai clic su Salva.

Crea un cluster A3 Mega

Crea un cluster GKE A3 Mega con GPUDirect-TCPXO e networking multiplo. Per saperne di più, consulta Massimizzare la larghezza di banda di rete della GPU con GPUDirect e il multi-networking.

Configura l'ambiente

  1. 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 tuo cluster GKE A3 Mega in cui sono abilitati GPUDirect-TCPXO e il networking multiplo.
    • CONTROL_PLANE_LOCATION: la posizione di Compute Engine del control plane del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.
    • PROJECT_ID: il tuo ID progetto Google Cloud .
  2. Configura Google Cloud CLI in modo da utilizzare le credenziali Google Cloud per l'autenticazione:

    gcloud auth login
    

    Per saperne di più, consulta Autenticati per usare Google Cloud CLI.

  3. Installa kubectl e il plug-in gcloud CLI per 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} \
      --location=${CONTROL_PLANE_LOCATION} \
      --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
    

Utilizzare lo scheduler topologia consapevole per eseguire il deployment dei pod

Puoi utilizzare lo scheduler topologia consapevole per eseguire il deployment dei pod GKE sui nodi con una topologia GPU specificata.

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

Per saperne di più, consulta Pianificatore della topologia.

  1. Configura il 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 della 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.py
    
  3. Installa il daemonset dell'etichetta della topologia e il pod dello scheduler della 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 dello scheduler della topologia:

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

Esegui il workload

Crea il Dockerfile ed esegui il push in Google Cloud Artifact Registry

  1. Crea un bucket Cloud Storage e un repository Docker. In 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
    
  2. Crea ed esegui il push dell'immagine pytorch-megatron:23.11-py3 nel 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 eseguire il push.

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

Avviare il benchmark Megatron-LM Llama2

  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 Helm predefinita.

    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 questa guida rapida.

  2. Fai clic su Elimina.

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

Passaggi successivi