이 문서에서는 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 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
개발 환경 준비
이 섹션에서는 클러스터 환경을 준비하는 방법을 보여줍니다.
새 터미널 창에서 가상 환경을 만듭니다.
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
클러스터의 영역입니다. flex-start(유연한 시작) 및 Managed Lustre 인스턴스 모두에 영역을 선택합니다. 예를 들면
us-west4-a입니다. 유효한 처리량 값은 flex-start(유연한 시작) 프로비저닝 모드를 사용한 GPU 및 TPU 프로비저닝 정보를 참조하세요. - CLUSTER_NAME: GKE 클러스터의 이름입니다.
- VERSION: GKE 버전입니다. 이 버전이 Managed Lustre를 지원하는 최소 버전 이상인지 확인합니다. 예를 들면 1.33.2-gke.1111000입니다.
- NETWORK_NAME: 생성하는 네트워크의 이름입니다.
- IP_RANGE_NAME: IP 주소 범위의 이름입니다.
- FIREWALL_RULE_NAME: 방화벽 규칙의 이름입니다.
앞의 명령어는
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 계획을 참조하세요.
- Cloud TPU API의 가속기 유형으로 GKE 머신 유형을 매핑하려면 TPU Trillium (v6e) 문서를 참조하세요.
VPC 네트워크 준비
Managed Lustre 인스턴스 및 GKE 클러스터의 가상 사설 클라우드 네트워크를 준비합니다.
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: Managed Lustre 인스턴스의 이름입니다.
- STORAGE_THROUGHPUT: Managed 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 드라이버가 사용 설정되어 있습니다.
클러스터에 스토리지 인스턴스 연결
PersistentVolume (PV) 및 PersistentVolumeClaim (PVC)을 구성하기 위해 이 섹션에서는 매니페스트 파일과 함께 XPK 스토리지 연결 명령어 (xpk storage attach)를 사용합니다.
이 섹션에서는 매니페스트 예시
를 XPK 소스 코드에서 사용합니다.
다음 단계를 완료하여 Managed Lustre 스토리지 인스턴스를 GKE 클러스터에 연결합니다.
예시 매니페스트 파일을 현재 작업 디렉터리로 다운로드하고
lustre-manifest-attach.yaml로 저장합니다.Managed Lustre 인스턴스의 정보로 매니페스트 파일을 업데이트합니다.
PersistentVolume섹션에서 다음 값을 바꿉니다.- STORAGE_SIZE: Managed Lustre 인스턴스의 크기(GiB)입니다.
- PROJECT_ID/ZONE/INSTANCE_NAME: Managed Lustre 인스턴스의 전체 리소스 경로입니다.
- IP_ADDRESS: Managed 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 인스턴스에 액세스하는 방법을 알아보세요.