Forme o Llama2 com o Megatron-LM em máquinas virtuais A3 Mega

Vista geral

Neste início rápido, vai saber como executar uma carga de trabalho Megatron-LM PyTorch baseada em contentores no A3 Mega. O código está disponível neste repositório do GitHub: megatron-gke.

Antes de começar

Siga os passos abaixo para ativar a 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.

    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 (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 (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. 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 column 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.

      Aceder ao IAM
    2. Selecione o projeto.
    3. Clique em Conceder acesso.
    4. No campo Novos responsáveis, introduza o identificador do utilizador. Normalmente, este é o endereço de email de uma Conta Google.

    5. Na lista Selecionar uma função, selecione uma função.
    6. Para conceder funções adicionais, clique em Adicionar outra função e adicione cada função adicional.
    7. Clique em Guardar.
    8. Crie um cluster A3 Mega

      Crie um cluster GKE A3 Mega com GPUDirect-TCPXO e várias redes. Para mais informações, consulte o artigo Maximize a largura de banda da rede da GPU com o GPUDirect e a rede múltipla.

      Configure o seu ambiente

      1. Crie variáveis de ambiente para alguns parâmetros comuns

        export CLUSTER_NAME=CLUSTER_NAME
        export CONTROL_PLANE_LOCATION=CONTROL_PLANE_LOCATION
        export PROJECT_ID=PROJECT_ID
        

        Substitua o seguinte:

        • CLUSTER_NAME: o nome do cluster do GKE A3 Mega que tem o GPUDirect-TCPXO e a rede múltipla ativados.
        • CONTROL_PLANE_LOCATION: a localização do Compute Engine do plano de controlo do seu cluster. Indique uma região para clusters regionais ou uma zona para clusters zonais.
        • PROJECT_ID: o ID do seu Google Cloud projeto.
      2. Configure a Google Cloud CLI para usar as suas Google Cloud credenciais para autenticação:

        gcloud auth login
        

        Para mais informações, consulte o artigo Autentique-se para usar a CLI Google Cloud.

      3. Instale o kubectl e o plug-in da CLI gcloud do GKE:

        sudo apt-get install kubectl
        sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
        
      4. Obtenha as credenciais do seu cluster do GKE:

        gcloud container clusters get-credentials ${CLUSTER_NAME} \
          --location=${CONTROL_PLANE_LOCATION} \
          --project=${PROJECT_ID}
        
      5. Se ainda não estiver instalado, instale o 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
        

      Use o programador com reconhecimento da topologia para implementar os seus pods

      Pode usar o programador com reconhecimento da topologia para implementar os seus pods do GKE em nós com uma topologia de GPU especificada.

      Nos seguintes comandos do kubectl, vai usar os ficheiros diretamente de um repositório. Em alternativa, pode clonar o repositório localmente e os kubectl comandos podem referenciar os ficheiros locais.

      Para mais informações, consulte o artigo Programador de topologia.

      1. Configure a conta de serviço:

        kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/service-account.yaml
        
      2. Instale os scripts do programador de topologia num 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. Instale o conjunto de daemons de etiquetas de topologia e o pod do programador de 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. Observe as ações do programador de topologia:

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

      Execute a carga de trabalho

      Crie o Dockerfile e envie-o para o Google Cloud Artifact Registry

      1. Crie um contentor do Cloud Storage e um repositório do Docker. No scripts/setup-and-configure-resources.sh script, substitua os nomes do contentor e do repositório pelos que criou e, de seguida, execute o script:

        bash scripts/setup-and-configure-resources.sh
        
      2. Crie e envie a imagem pytorch-megatron:23.11-py3 para o seu repositório. Certifique-se de que o nome do repositório do Docker no ficheiro scripts/build-and-push-docker-image.sh corresponde ao nome do repositório que usou no script scripts/setup-and-configure-resources.sh. Também pode editar o nome da etiqueta da imagem do Docker antes de a enviar.

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

      Inicie o benchmark Megatron-LM Llama2

      1. Edite o ficheiro helm/values.yaml para especificar o contentor do Cloud Storage e a imagem do Docker criados nas secções anteriores. Para ver algumas configurações de exemplo, consulte sample-configurations.

      2. Opcional: também pode editar o ficheiro selected-configuration.sh para especificar as alterações que fez à configuração Helm predefinida.

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

        Substitua HELM_EXPERIMENT_NAME por um nome arbitrário para a sua experiência.

      A experiência escreve métricas da ferramenta de criação de perfis Nsight Systems no contentor do Cloud Storage especificado no diretório megatron-experiments.

      Limpar

      Para evitar incorrer em cobranças na sua Google Cloud conta pelos recursos usados nesta página, siga estes passos.

      Elimine o cluster do GKE:

      Aceda à página Clusters:

      Aceda a Clusters

      1. Selecione a caixa de verificação CLUSTER_NAME.
      2. Clique em Eliminar.
      3. Para confirmar a eliminação, escreva CLUSTER_NAME e clique em Eliminar.

      Elimine o contentor do Cloud Storage

      Aceda à página Recipientes:

      Aceda a Recipientes

      1. Selecione a caixa de verificação do contentor do Cloud Storage que criou para este início rápido.

      2. Clique em Eliminar.

      3. Para confirmar a eliminação, escreva DELETE e clique em Eliminar.

      O que se segue?