이 문서에서는 관리형 Lustre를 GKE와 통합하여 인공지능 (AI), 머신러닝 (ML), 고성능 컴퓨팅 (HPC)과 같은 까다롭고 데이터 집약적인 워크로드에 최적화된 환경을 만드는 방법을 설명합니다.
이 문서에서는 XPK로 GKE 클러스터를 프로비저닝하고, 관리형 Lustre 인스턴스를 만들어 클러스터에 연결합니다. 이 구성을 테스트하려면 플렉스 시작 프로비저닝을 사용하는 노드에서 워크로드를 실행합니다.
이 문서는 관리형 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를 사용하면 필요한 리소스에 대한 비용만 지불하여 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 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
개발 환경 준비
이 섹션에서는 클러스터 환경을 준비하는 방법을 보여줍니다.
새 터미널 창에서 가상 환경을 만듭니다.
VENV_DIR=~/venvp4;python3 -m venv $VENV_DIR;source $VENV_DIR/bin/activateXPK 설치 파일의 단계에 따라 XPK를 설치합니다. 소스에서 클론하는 대신
pip install를 사용합니다.기본 환경 변수를 설정합니다.
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다음 값을 바꿉니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- LOCATION: GKE 클러스터의 영역입니다. 유연한 시작 및 Managed Lustre 인스턴스 모두에 대해 영역을 선택합니다. 예를 들면
us-west4-a입니다. 유효한 처리량 값은 flex-start(유연한 시작) 프로비저닝 모드를 사용한 GPU 및 TPU 프로비저닝 정보를 참고하세요. - CLUSTER_NAME: GKE 클러스터의 이름입니다.
- VERSION: GKE 버전 이 버전이 관리 Lustre를 지원하는 최소 버전 이상인지 확인합니다. 예를 들면 1.33.2-gke.1111000입니다.
- NETWORK_NAME: 생성한 네트워크의 이름입니다.
- IP_RANGE_NAME: IP 주소 범위의 이름입니다.
- FIREWALL_RULE_NAME: 방화벽 규칙의 이름입니다. rule.
위 명령어는
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_TYPE및NUM_SLICES변수를 맞춤설정하려면 다음 문서를 참고하여 사용 가능한 조합을 확인하세요.- 사용할 TPU 버전, GKE용 머신 유형, 토폴로지, 사용 가능한 영역을 확인하려면 GKE에서 TPU 계획을 참고하세요.
- GKE 머신 유형을 Cloud TPU API의 가속기 유형에 매핑하려면 TPU Trillium (v6e) 문서를 참고하세요.
VPC 네트워크 준비
관리형 Lustre 인스턴스 및 GKE 클러스터의 Virtual Private Cloud 네트워크를 준비합니다.
Service Networking API를 사용 설정합니다.
gcloud services enable servicenetworking.googleapis.com \ --project=${PROJECT_ID}VPC 네트워크를 만듭니다.
gcloud compute networks create ${NETWORK_NAME} \ --subnet-mode=auto --project=${PROJECT_ID} \ --mtu=8896VPC 피어링의 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}IP 주소 범위의 CIDR 범위를 가져옵니다.
CIDR_RANGE=$( gcloud compute addresses describe ${IP_RANGE_NAME} \ --global \ --format="value[separator=/](address, prefixLength)" \ --project=${PROJECT_ID} )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}VPC 피어링을 연결합니다.
gcloud services vpc-peerings connect \ --network=${NETWORK_NAME} \ --project=${PROJECT_ID} \ --ranges=${IP_RANGE_NAME} \ --service=servicenetworking.googleapis.com
Managed Lustre 스토리지 인스턴스 만들기
Managed Lustre 스토리지 인스턴스를 만듭니다.
스토리지 인스턴스 변수를 설정합니다.
export STORAGE_NAME=STORAGE_NAME export STORAGE_THROUGHPUT=STORAGE_THROUGHPUT export STORAGE_CAPACITY=STORAGE_CAPACITY_GIB export STORAGE_FS=lfs다음 값을 바꿉니다.
- STORAGE_NAME: 관리형 Lustre 인스턴스의 이름입니다.
- STORAGE_THROUGHPUT: 관리 Lustre 인스턴스의 처리량입니다(TiB당 MiB/s). 유효한 처리량 값은 새 용량 계산을 참고하세요.
- STORAGE_CAPACITY_GIB: Managed Lustre 인스턴스의 용량(GiB)입니다. 유효한 용량 값은 허용되는 용량 및 처리량 값을 참고하세요.
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를 제공합니다.작업 상태를 확인합니다.
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 드라이버가 사용 설정되어 있습니다.
스토리지 인스턴스를 클러스터에 연결
영구 볼륨 (PV) 및 영구 볼륨 신청 (PVC)을 구성하기 위해 이 섹션에서는 매니페스트 파일과 함께 XPK 스토리지 연결 명령어 (xpk storage attach)를 사용합니다.
이 섹션에서는 XPK 소스 코드의 매니페스트 예시를 사용합니다.
다음 단계를 완료하여 관리형 Lustre 스토리지 인스턴스를 GKE 클러스터에 연결합니다.
예시 매니페스트 파일을 현재 작업 디렉터리에 다운로드하고
lustre-manifest-attach.yaml로 저장합니다.Managed Lustre 인스턴스의 정보로 매니페스트 파일을 업데이트합니다.
PersistentVolume섹션에서 다음 값을 바꿉니다.- STORAGE_SIZE: Managed Lustre 인스턴스의 크기(GiB)입니다.
- PROJECT_ID/ZONE/INSTANCE_NAME: 관리형 Lustre 인스턴스의 전체 리소스 경로입니다.
- IP_ADDRESS: 관리형 Lustre 인스턴스의 IP 주소입니다.
- FILE_SYSTEM: 파일 시스템 유형(
lfs)
PersistentVolumeClaim섹션에서 다음 값을 바꿉니다.- STORAGE_SIZE: PersistentVolumeClaim의 크기(GiB)입니다.
스토리지 인스턴스를 클러스터에 연결합니다.
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'클러스터의 스토리지를 연결했는지 확인합니다.
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}
다음 단계
- Managed Lustre CSI 드라이버에 대해 자세히 알아보세요.
- Google Cloud Managed Lustre CSI 드라이버 참조를 살펴보세요.
- Lustre로 지원되는 볼륨을 만들고 사용하는 방법을 알아보세요.
- 기존 Lustre 인스턴스에 액세스하는 방법을 알아봅니다.