A3 Mega 가상 머신에서 Megatron-LM으로 Llama2 학습


개요

이 빠른 시작에서는 A3 Mega에서 컨테이너 기반 Megatron-LM PyTorch 워크로드를 실행하는 방법을 알아봅니다. 코드는 GitHub 저장소 megatron-gke에서 제공됩니다.

시작하기 전에

다음 단계에 따라 Google Kubernetes Engine(GKE) API를 사용 설정합니다.

  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.

      IAM으로 이동
    2. 프로젝트를 선택합니다.
    3. 액세스 권한 부여를 클릭합니다.
    4. 새 주 구성원 필드에 사용자 식별자를 입력합니다. 일반적으로 Google 계정의 이메일 주소입니다.

    5. 역할 선택 목록에서 역할을 선택합니다.
    6. 역할을 추가로 부여하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.
    7. 저장을 클릭합니다.

    A3 Mega 클러스터 만들기

    GPUDirect-TCPXO 및 멀티 네트워킹을 사용하여 A3 Mega GKE 클러스터를 만듭니다. 자세한 내용은 GPUDirect 및 멀티 네트워킹으로 GPU 네트워크 대역폭 극대화를 참조하세요.

환경 설정하기

  1. 몇 가지 공통적인 매개변수에 대한 환경 변수를 만듭니다.

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

    다음을 바꿉니다.

    • CLUSTER_NAME: GPUDirect-TCPXO 및 멀티 네트워킹이 사용 설정된 A3 Mega GKE 클러스터의 이름입니다.
    • REGION: 클러스터를 만든 리전입니다.
    • ZONE: 클러스터를 만든 영역입니다.
    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  2. 인증에 Google Cloud 사용자 인증 정보를 사용하도록 Google Cloud CLI를 구성합니다.

    gcloud auth login
    

    자세한 내용은 Google Cloud CLI 사용을 위한 인증을 참조하세요.

  3. kubectl 및 GKE gcloud CLI 플러그인을 설치합니다.

    sudo apt-get install kubectl
    sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
    
  4. GKE 클러스터의 사용자 인증 정보를 가져옵니다.

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
      --zone=${ZONE} \
      --project=${PROJECT_ID}
    
  5. 아직 설치되어 있지 않으면 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
    

토폴로지 인식 스케줄러를 사용한 포드 배포

토폴로지 인식 스케줄러를 사용하여 GKE 포드를 지정된 GPU 토폴로지가 있는 노드에 배포할 수 있습니다.

다음 kubectl 명령어에서는 저장소에서 직접 파일을 사용합니다. 또는 저장소를 로컬로 클론하고 kubectl 명령어에서 대신 로컬 파일을 참조할 수 있습니다.

자세한 내용은 토폴로지 스케줄러를 참조하세요.

  1. 서비스 계정을 설정합니다.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/service-account.yaml
    
  2. 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. 토폴로지 라벨 daemonset 및 토폴로지 스케줄러 포드를 설치합니다.

    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. 토폴로지 스케줄러의 작업을 관찰합니다.

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

워크로드 실행

Dockerfile을 빌드하고 Google Cloud Artifact Registry에 푸시

  1. Cloud Storage 버킷Docker 저장소를 만듭니다. scripts/setup-and-configure-resources.sh script에서 버킷 및 저장소 이름을 앞에서 만든 이름으로 바꾸고 스크립트를 실행합니다.

    bash scripts/setup-and-configure-resources.sh
    
  2. pytorch-megatron:23.11-py3 이미지를 빌드하고 저장소에 푸시합니다. scripts/build-and-push-docker-image.sh 파일의 Docker 저장소 이름이 scripts/setup-and-configure-resources.sh 스크립트에 사용한 저장소 이름과 일치하는지 확인합니다. 내보내기 전에 Docker 이미지 태그 이름을 수정할 수도 있습니다.

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

Megatron-LM Llama2 벤치마크 실행

  1. helm/values.yaml 파일을 수정하여 이전 섹션에서 만든 Cloud Storage 버킷과 Docker 이미지를 지정합니다. 일부 구성 예시는 샘플 구성을 참조하세요.

  2. 선택사항: selected-configuration.sh 파일을 수정하여 기본 Helm 구성에 변경한 사항을 지정할 수도 있습니다.

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

    HELM_EXPERIMENT_NAME을 실험에 대한 임의의 이름으로 바꿉니다.

실험에서는 Nsight Systems 프로파일링 도구의 측정항목을 megatron-experiments 디렉터리에 지정된 Cloud Storage 버킷에 씁니다.

삭제

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.

GKE 클러스터를 삭제합니다.

클러스터 페이지로 이동합니다.

클러스터로 이동

  1. CLUSTER_NAME의 체크박스를 선택합니다.
  2. 삭제를 클릭합니다.
  3. 삭제를 확인하려면 CLUSTER_NAME를 입력하고 삭제를 클릭합니다.

Cloud Storage 버킷 삭제

버킷 페이지로 이동합니다.

버킷으로 이동

  1. 이 빠른 시작에서 만든 Cloud Storage 버킷의 체크박스를 선택합니다.

  2. 삭제를 클릭합니다.

  3. 삭제를 확인하려면 DELETE를 입력하고 삭제를 클릭합니다.

다음 단계