XPK를 사용하여 GKE에 Managed Lustre 프로비저닝

이 문서에서는 Managed Lustre를 GKE와 통합하여 인공지능 (AI), 머신러닝 (ML), 고성능 컴퓨팅 (HPC)과 같은 까다롭고 데이터 집약적인 워크로드에 최적화된 환경을 만드는 방법을 설명합니다.

이 문서에서는 XPK로 GKE 클러스터를 프로비저닝하고 Managed Lustre 인스턴스를 만든 후 클러스터에 연결합니다. 이 구성을 테스트하려면 flex-start 프로비저닝 노드에서 워크로드를 실행합니다.

이 문서는 Managed Lustre 인스턴스로 지원되는 Kubernetes 컨테이너 조정 기능을 살펴보고자 하는 머신러닝(ML) 엔지니어와 데이터 및 AI 전문가 를 대상으로 합니다. Managed Lustre 인스턴스로 지원되는 Kubernetes 컨테이너 조정 기능을 살펴보고자 하는 머신러닝(ML) 엔지니어와 데이터 및 AI 전문가를 대상으로 합니다. 콘텐츠에서 언급된 일반적인 역할 및 예시 태스크에 대해 자세히 알아보려면 Google Cloud 일반 GKE 사용자 역할 및 태스크를 참조하세요.

배경

이 섹션에서는 이 문서에서 사용되는 주요 기술을 설명합니다.

XPK

XPK는 특히 AI/ML 태스크를 위한 GKE 클러스터 및 워크로드의 프로비저닝과 관리를 간소화하는 도구입니다. XPK 는 사전 구성된 학습에 최적화된 인프라를 생성하는 데 도움이 되므로 개념 증명 및 테스트 환경에 적합한 옵션입니다.

Google Cloud CLI 또는 가속 처리 키트 (XPK)를 사용하여 TPU를 사용하는 클러스터를 만들 수 있습니다.

  • gcloud CLI를 사용하여 GKE 클러스터 인스턴스를 수동으로 만들어 기존 프로덕션 GKE 환경을 정확하게 맞춤설정하거나 확장합니다.
  • XPK를 사용하여 GKE 클러스터를 빠르게 만들고 개념 증명 및 테스트 를 위한 워크로드를 실행합니다. 자세한 내용은 XPK README를 참조하세요.

이 문서에서는 리소스 프로비저닝 및 관리에만 XPK를 사용합니다.

자세한 내용은 가속 처리 키트 (XPK) 문서를 참조하세요.

Flex-start

Flex-start를 사용하면 필요한 리소스에 대한 비용만 지불하여 TPU 프로비저닝을 최적화할 수 있습니다. 워크로드에 최대 7일 동안 필요에 따라 동적으로 프로비저닝된 리소스가 필요하고 비용 효율적인 액세스가 필요한 경우 flex-start(유연한 시작)를 사용하는 것이 좋습니다.

이 문서에서는 flex-start(유연한 시작)를 소비 옵션의 예로 사용하지만 예약 또는 스팟과 같은 다른 옵션을 사용할 수도 있습니다. 자세한 내용은 GKE의 AI/ML 워크로드용 가속기 소비 옵션 정보를 참조하세요.

Managed Lustre

Managed Lustre는 까다로운 워크로드를 위해 설계된 고성능 병렬 파일 시스템 서비스입니다. Managed Lustre CSI 드라이버를 사용하면 표준 Kubernetes 영구 볼륨 클레임 (PVC) 및 영구 볼륨(PV)을 사용하여 Managed Lustre 인스턴스를 GKE와 통합할 수 있습니다. 이 드라이버는 지속적이고 확장 가능하며 높은 처리량의 스토리지가 필요한 AI, ML, HPC 워크로드에 특히 유용합니다.

자세한 내용은 Managed Lustre CSI 드라이버 정보를 참조하세요.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Cloud Managed Lustre API 및 Google Kubernetes Engine API를 사용 설정합니다.
  • API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면 gcloud components update 명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.

개발 환경 준비

이 섹션에서는 클러스터 환경을 준비하는 방법을 보여줍니다.

  1. 새 터미널 창에서 가상 환경을 만듭니다.

    VENV_DIR=~/venvp4;python3 -m venv $VENV_DIR;source $VENV_DIR/bin/activate
    
  2. XPK 설치 파일의 단계에 따라 XPK를 설치합니다. 소스에서 클론하는 대신 pip install을 사용합니다.

  3. 기본 환경 변수를 설정합니다.

    gcloud config set project PROJECT_ID
    gcloud config set billing/quota_project PROJECT_ID
    export PROJECT_ID=$(gcloud config get project)
    export LOCATION=LOCATION
    export CLUSTER_NAME=CLUSTER_NAME
    export GKE_VERSION=VERSION
    export NETWORK_NAME=NETWORK_NAME
    export IP_RANGE_NAME=IP_RANGE_NAME
    export FIREWALL_RULE_NAME=FIREWALL_RULE_NAME
    export ACCELERATOR_TYPE=v6e-16
    export NUM_SLICES=1
    

    다음 값을 바꿉니다.

    앞의 명령어는 v6e-16 가속기 유형을 구성합니다. 이 구성에는 다음 변수가 포함됩니다.

    • ACCELERATOR_TYPE=v6e-16: 4x4 토폴로지가 있는 TPU Trillium에 해당합니다. 이 TPU 버전은 GKE에 멀티 호스트 슬라이스 노드 풀을 프로비저닝하도록 지시합니다. v6e-16은 GKE의 ct6e-standard-4t 머신 유형에 매핑됩니다.
    • NUM_SLICES=1: 선택한 ACCELERATOR_TYPE에 대해 XPK가 만드는 TPU 슬라이스 노드 풀 수입니다.

    ACCELERATOR_TYPENUM_SLICES 변수를 맞춤설정하려면 다음 문서를 참조하여 사용 가능한 조합을 찾으세요.

VPC 네트워크 준비

Managed Lustre 인스턴스 및 GKE 클러스터의 가상 사설 클라우드 네트워크를 준비합니다.

  1. Service Networking API를 사용 설정합니다.

    gcloud services enable servicenetworking.googleapis.com \
            --project=${PROJECT_ID}
    
  2. VPC 네트워크를 만듭니다.

    gcloud compute networks create ${NETWORK_NAME} \
            --subnet-mode=auto --project=${PROJECT_ID} \
            --mtu=8896
    
  3. VPC 피어링의 IP 주소 범위를 만듭니다.

    gcloud compute addresses create ${IP_RANGE_NAME} \
            --global \
            --purpose=VPC_PEERING \
            --prefix-length=20 \
            --description="Managed Lustre VPC Peering" \
            --network=${NETWORK_NAME} \
            --project=${PROJECT_ID}
    
  4. IP 주소 범위의 CIDR 범위를 가져옵니다.

    CIDR_RANGE=$(
        gcloud compute addresses describe ${IP_RANGE_NAME} \
                --global  \
                --format="value[separator=/](address, prefixLength)" \
                --project=${PROJECT_ID}
    )
    
  5. IP 주소 범위의 TCP 트래픽을 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create ${FIREWALL_RULE_NAME} \
            --allow=tcp:988,tcp:6988 \
            --network=${NETWORK_NAME} \
            --source-ranges=${CIDR_RANGE} \
            --project=${PROJECT_ID}
    
  6. VPC 피어링을 연결합니다.

    gcloud services vpc-peerings connect \
            --network=${NETWORK_NAME} \
            --project=${PROJECT_ID} \
            --ranges=${IP_RANGE_NAME} \
            --service=servicenetworking.googleapis.com
    

Managed Lustre 스토리지 인스턴스 만들기

Managed Lustre 스토리지 인스턴스를 만듭니다.

  1. 스토리지 인스턴스 변수를 설정합니다.

    export STORAGE_NAME=STORAGE_NAME
    export STORAGE_THROUGHPUT=STORAGE_THROUGHPUT
    export STORAGE_CAPACITY=STORAGE_CAPACITY_GIB
    export STORAGE_FS=lfs
    

    다음 값을 바꿉니다.

    • STORAGE_NAME: Managed Lustre 인스턴스의 이름입니다.
    • STORAGE_THROUGHPUT: Managed Lustre 인스턴스의 처리량(TiB당 MiB/s)입니다. 유효한 처리량 값은 새 용량 계산을 참조하세요.
    • STORAGE_CAPACITY_GIB: Managed Lustre 인스턴스의 용량(GiB)입니다. 유효한 용량 값은 허용되는 용량 및 처리량 값을 참조하세요.
  2. Managed Lustre 인스턴스를 만듭니다.

    gcloud lustre instances create ${STORAGE_NAME} \
            --per-unit-storage-throughput=${STORAGE_THROUGHPUT} \
            --capacity-gib=${STORAGE_CAPACITY} \
            --filesystem=${STORAGE_FS} \
            --location=${LOCATION} \
            --network=projects/${PROJECT_ID}/global/networks/${NETWORK_NAME} \
            --project=${PROJECT_ID} \
            --async # Creates the instance asynchronously
    

    --async 플래그는 인스턴스를 비동기식으로 만들고 상태를 추적할 수 있는 작업 ID를 제공합니다.

  3. 작업 상태를 확인합니다.

    gcloud lustre operations describe OPERATION_ID  \
            --location=${LOCATION} \
            --project=${PROJECT_ID}
    

    OPERATION_ID를 이전 비동기 명령어의 출력에서 가져온 ID로 바꿉니다. ID가 없는 경우 모든 작업을 나열할 수 있습니다.

    gcloud lustre operations list \
            --location=${LOCATION} \
            --project=${PROJECT_ID}
    

    명령어 출력에 done: true가 표시되면 인스턴스가 준비된 것입니다.

XPK를 사용하여 GKE 클러스터 만들기

XPK를 사용하여 노드 풀이 있는 GKE 클러스터를 만듭니다.

GKE 클러스터를 만듭니다.

xpk cluster create --cluster ${CLUSTER_NAME} \
        --num-slices=${NUM_SLICES} \
        --tpu-type=${ACCELERATOR_TYPE} \
        --zone=${LOCATION} \
        --project=${PROJECT_ID} \
        --gke-version=${GKE_VERSION} \
        --custom-cluster-arguments="--network=${NETWORK_NAME}" \
        --enable-lustre-csi-driver \
        --flex

이 명령어는 XPK를 사용하여 GKE 클러스터를 만듭니다. 클러스터는 노드 프로비저닝에 flex-start(유연한 시작)를 사용하도록 구성되어 있으며 Managed Lustre CSI 드라이버가 사용 설정되어 있습니다.

클러스터에 스토리지 인스턴스 연결

PersistentVolume (PV) 및 PersistentVolumeClaim (PVC)을 구성하기 위해 이 섹션에서는 매니페스트 파일과 함께 XPK 스토리지 연결 명령어 (xpk storage attach)를 사용합니다. 이 섹션에서는 매니페스트 예시 를 XPK 소스 코드에서 사용합니다.

다음 단계를 완료하여 Managed Lustre 스토리지 인스턴스를 GKE 클러스터에 연결합니다.

  1. 예시 매니페스트 파일을 현재 작업 디렉터리로 다운로드하고 lustre-manifest-attach.yaml로 저장합니다.

  2. Managed Lustre 인스턴스의 정보로 매니페스트 파일을 업데이트합니다.

    1. PersistentVolume 섹션에서 다음 값을 바꿉니다.

      • STORAGE_SIZE: Managed Lustre 인스턴스의 크기(GiB)입니다.
      • PROJECT_ID/ZONE/INSTANCE_NAME: Managed Lustre 인스턴스의 전체 리소스 경로입니다.
      • IP_ADDRESS: Managed Lustre 인스턴스의 IP 주소입니다.
      • FILE_SYSTEM: 파일 시스템 유형으로 lfs입니다.
    2. PersistentVolumeClaim 섹션에서 다음 값을 바꿉니다.

      • STORAGE_SIZE: PersistentVolumeClaim의 크기(GiB)입니다.
  3. 클러스터에 스토리지 인스턴스를 연결합니다.

    xpk storage attach ${STORAGE_NAME} \
            --cluster=${CLUSTER_NAME} --project=${PROJECT_ID} --zone=${LOCATION} \
            --type=lustre \
            --mount-point='/lustre-data' \
            --readonly=false \
            --auto-mount=true \
            --manifest='./lustre-manifest-attach.yaml'
    
  4. 클러스터의 스토리지를 연결했는지 확인합니다.

    xpk storage list \
            --cluster=${CLUSTER_NAME} --project=${PROJECT_ID} --zone=${LOCATION}
    

워크로드 실행

연결된 Managed Lustre 인스턴스로 워크로드를 실행합니다 . 다음 명령어 예시는 사용 가능한 디스크를 나열하고 Managed Lustre 인스턴스의 디렉터리에 'hello' 파일을 만듭니다.

워크로드를 만들고 실행합니다.

xpk workload create --workload test-lustre \
--cluster=${CLUSTER_NAME} --project=${PROJECT_ID} --zone=${LOCATION} \
--command="df -h && echo 'hello' > /lustre-data/hello.txt && cat /lustre-data/hello.txt" \
--tpu-type=${ACCELERATOR_TYPE} \
--num-slices=1 \
--flex

정리

이 문서의 단계를 완료한 후 계정에 원치 않는 비용이 발생하지 않도록 클러스터를 삭제합니다.

  xpk cluster delete --cluster ${CLUSTER_NAME} \
        --zone ${LOCATION} \
        --project ${PROJECT_ID}

다음 단계