이 페이지에서는 A4 또는 A3 Ultra 가상 머신 (VM)을 사용하여 AI 및 ML 워크로드를 지원하는 AI 최적화 Google Kubernetes Engine (GKE) 클러스터를 만드는 방법을 보여줍니다. A4X의 경우 A4X를 사용하는 맞춤 AI 최적화 GKE 클러스터 만들기를 참고하세요.
A4 및 A3 Ultra 머신 시리즈는 대규모 AI/ML 클러스터를 실행할 수 있도록 설계되었으며, 워크로드 배치 지정, 고급 클러스터 유지보수 제어, 토폴로지 인식 스케줄링과 같은 기능을 제공합니다. 자세한 내용은 클러스터 관리 개요를 참조하세요.
GKE는 조직의 다양한 워크로드를 실행할 수 있는 단일 플랫폼을 제공하여 여러 플랫폼을 관리하는 운영 부담을 줄여줍니다. 고성능 분산 사전 학습, 모델 미세 조정, 모델 추론, 애플리케이션 서빙, 지원 서비스와 같은 워크로드를 실행할 수 있습니다.
이 페이지에서는 워크로드의 요구사항에 따라 클러스터를 최대한 유연하게 구성할 수 있도록 Google Cloud CLI로 GKE 클러스터를 만드는 방법을 알아봅니다. 또는 Cluster Toolkit을 사용하여 여러 사용 사례의 권장사항을 반영하는 기본 설정으로 클러스터를 빠르게 배포할 수도 있습니다. 이 작업을 실행하는 방법은 기본 구성으로 AI에 최적화된 GKE 클러스터 만들기를 참고하세요.
GPUDirect RDMA를 사용하는 클러스터 구성 옵션
Google Cloud CLI로 클러스터를 만들려면 다음 클러스터 구성 옵션 중 하나를 선택하면 됩니다.
- 분산 AI 워크로드를 실행하지 않을 계획인 경우: GPUDirect RDMA를 사용하지 않고 GKE 클러스터를 만듭니다.
- 분산 AI 워크로드를 실행하려는 경우: GPUDirect RDMA를 사용하여 GKE 클러스터를 만듭니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면
gcloud components update명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
필요한 역할
GKE 클러스터를 만들고 관리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
Kubernetes Engine 관리자(
roles/container.admin) -
Cloud Build 편집자(
roles/cloudbuild.builds.editor) -
Compute 관리자(
roles/compute.admin) -
프로젝트 IAM 관리자(
roles/resourcemanager.projectIamAdmin) -
서비스 계정 관리자(
roles/iam.serviceAccountAdmin) -
서비스 계정 사용자(
roles/iam.serviceAccountUser) -
서비스 사용량 소비자(
roles/serviceusage.serviceUsageConsumer) -
스토리지 관리자(
roles/storage.admin)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
소비 옵션 선택 및 용량 확보
소비 옵션을 선택합니다. GPU 리소스를 가져와 사용하는 방법에 따라 선택하세요. 자세한 내용은 사용 옵션 선택을 참고하세요.
GKE의 경우 소비 옵션을 선택할 때 다음 추가 정보를 고려하세요.
- flex-start(미리보기) 및 GKE에 대한 자세한 내용은 flex-start를 사용한 GPU 획득 가능성 정보를 참고하세요.
- Flex-start는 최선의 방식의 간단한 배치를 사용합니다. 토폴로지를 검사하려면 GKE 클러스터의 노드 물리적 토폴로지 보기를 참고하세요.
- 압축 배치를 구성한 경우에만 스팟 VM을 사용할 때 토폴로지 정보를 가져올 수 있습니다.
용량 확보 사용 옵션의 용량을 확보하는 방법을 알아보세요.
요구사항
AI 최적화 GKE 클러스터에는 다음 요구사항이 적용됩니다.
- flex-start 프로비저닝 모델을 사용하려면 GKE 버전 1.32.2-gke.1652000 이상을 사용해야 합니다.
머신 유형에 따라 최소 GPU 드라이버 버전을 사용해야 합니다.
- A4: A4 VM의 B200 GPU에는 최소 R570 GPU 드라이버 버전이 필요합니다. GKE는 기본적으로 A4에 필요한 최소 버전(1.32.1-gke.1729000 이상)을 실행하는 모든 A4 노드에 이 드라이버 버전을 자동으로 설치합니다.
- A3 Ultra: A3 Ultra VM의 H200 GPU에는 최소 R550 GPU 드라이버 버전이 필요하며, 이는 GKE 버전 1.31에서
latest드라이버 버전으로 제공됩니다. A3 Ultra VM의 경우 GKE 버전 1.31로gpu-driver-version=latest필드의 값을 설정해야 합니다. GKE 버전 1.31.5-gke.1169000 이상에서는gpu-driver-version플래그를 생략하는 경우를 비롯해 기본적으로 GKE가 A3 Ultra 노드에 R550 GPU 드라이버 버전을 자동으로 설치합니다.
GPUDirect RDMA를 사용하려면 다음 추가 요구사항이 적용됩니다.
- 머신 유형에 따라 다음 최소 버전을 사용하세요.
- A4: 버전 1.32.2-gke.1475000 이상을 사용합니다.
- A3 Ultra: 버전 1.31.4-gke.1183000 이상을 사용합니다.
- GKE 노드는 Container-Optimized OS 노드 이미지를 사용해야 합니다. Ubuntu 및 Windows 노드 이미지는 지원되지 않습니다.
- GKE 워크로드는 사용 가능한 모든 GPU를 사용해야 하고 포드는 단일 GKE 노드에서 사용 가능한 모든 보조 네트워크 인터페이스 카드 (NIC)를 사용해야 합니다. 여러 포드가 단일 GKE 노드에서 RDMA를 공유할 수 없습니다.
- 이 설정은 NCCL 테스트를 실행합니다. 이 NCCL 테스트를 실행하려면 최소 VM 할당량이
2(즉,a4-highgpu-8g또는a3-ultragpu-8g머신 유형을 사용하는 경우 GPU 16개)여야 합니다. - GPUDirect RDMA는 NCCL Fast Socket 또는 GPUDirect TCPX/TCPXO와 호환되지 않습니다. GPUDirect RDMA를 사용하는 클러스터에서는 NCCL Fast Socket을 사용 설정하거나 TCPX/TCPXO 플러그인을 설치하지 마세요.
- 머신 유형에 따라 다음 최소 버전을 사용하세요.
선택한 머신 유형을 사용할 수 있는 위치를 사용해야 합니다. 자세한 내용은 GPU 위치를 참고하세요.
AI에 최적화된 GKE 클러스터 만들기
이 섹션의 안내에 따라 AI 최적화 GKE 클러스터의 요구사항을 충족하는 GKE 클러스터를 만드세요. GPUDirect RDMA를 사용하거나 사용하지 않고 클러스터를 만들 수 있습니다.
클러스터 생성 시 고려사항
클러스터를 만들 때 다음 정보를 고려하세요.
- 클러스터 위치 선택:
- 선택한 머신 유형을 사용할 수 있는 위치를 사용해야 합니다. 자세한 내용은 GPU 위치를 참고하세요.
- 밀도 높은 예약의 경우 영역 클러스터를 만들 수 있습니다. 이 경우
--region플래그를--zone=COMPUTE_ZONE플래그로 바꿉니다. 여기서COMPUTE_ZONE은 컨트롤 플레인의 영역입니다. - 1,000개가 넘는 노드에서 실행되고 노드 간 네트워크 지연 시간이 짧아야 하는 워크로드의 경우 리전 클러스터를 만들면 됩니다.
성능에 민감한 노드를 물리적으로 공동 배치하려면
--node-locations플래그를 사용하여 단일 영역 내에 GPU 노드 풀을 만드세요.
- 드라이버 버전 선택:
- 드라이버 버전은 다음 값 중 하나일 수 있습니다.
default: GKE 노드 버전의 기본 드라이버 버전을 설치합니다. 기본 드라이버 버전 요구사항에 관한 자세한 내용은 요구사항 섹션을 참고하세요.latest: GKE 버전에 사용 가능한 최신 드라이버 버전을 설치합니다. 이 옵션은 Container-Optimized OS를 사용하는 노드에서만 사용할 수 있습니다.disabled: 자동 드라이버 설치를 건너뜁니다. 노드 풀을 만든 후 수동으로 드라이버를 설치해야 합니다.
- GKE 노드 버전의 기본 및 최신 GPU 드라이버 버전에 대한 자세한 내용은 NVIDIA GPU 드라이버 수동 설치를 참고하세요.
- 드라이버 버전은 다음 값 중 하나일 수 있습니다.
예약 어피니티 선택:
- 예약 이름 또는 예약 내의 특정 블록 이름과 같은 예약 정보를 확인할 수 있습니다. 이 값을 확인하려면 미래용 예약 요청 보기를 참고하세요.
--reservation-affinity플래그는specific또는any값을 사용할 수 있습니다. 하지만 고성능 분산 AI 워크로드의 경우 특정 예약을 사용하는 것이 좋습니다.공유 예약을 비롯한 특정 예약을 사용하는 경우 다음 형식으로
--reservation플래그의 값을 지정합니다.projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME다음을 바꿉니다.
PROJECT_ID: Google Cloud 프로젝트 ID입니다.RESERVATION_NAME: 예약의 이름BLOCK_NAME: 예약 내의 특정 블록 이름입니다.
GPUDirect RDMA 없이 클러스터 만들기
GPUDirect RDMA 없이 클러스터를 만들려면 다음 안내에 따라 CPU 기반 기본 노드 풀과 GPU가 포함된 추가 노드 풀이 있는 클러스터를 만드세요. 이 접근 방식을 사용하면 기본 노드 풀에서 다른 서비스를 실행할 수 있습니다.
클러스터를 만듭니다.
gcloud container clusters create CLUSTER_NAME \ --cluster-version=CLUSTER_VERSION \ --region=COMPUTE_REGION다음을 바꿉니다.
CLUSTER_NAME: 새 클러스터의 이름입니다.CLUSTER_VERSION: 새 클러스터의 버전입니다. 구성에서 지원되는 GKE 버전에 대한 자세한 내용은 요구사항 섹션을 참고하세요.COMPUTE_REGION: 새 클러스터의 리전입니다. 영역 클러스터를 만들 계획이라면--region플래그 대신--zone플래그를 사용합니다(예:--zone=COMPUTE_ZONE).COMPUTE_ZONE을 컨트롤 플레인의 영역으로 바꿉니다.
다음 명령어 중 하나를 사용하여 GPU 기반 노드 풀을 만듭니다. 실행해야 하는 명령어는 배포에 사용하는 소비 옵션에 따라 달라집니다. 해당 소비 옵션의 프로비저닝 모델에 해당하는 탭을 선택하세요.
예약에 따름
예약 바인딩 프로비저닝의 경우 다음 명령어를 실행합니다.
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --reservation-affinity=specific \ --reservation=RESERVATION_NAME/reservationBlocks/BLOCK_NAME다음을 바꿉니다.
NODE_POOL_NAME: 노드 풀의 이름입니다.COMPUTE_REGION: 새 클러스터의 리전입니다.CLUSTER_NAME: 새 클러스터의 이름입니다.COMPUTE_ZONE: 노드 풀의 영역입니다.GPU_TYPE: GPU 가속기의 유형입니다.- A4 VM:
nvidia-b200를 입력합니다. - A3 Ultra VM:
nvidia-h200-141gb를 입력합니다.
- A4 VM:
AMOUNT: 노드 풀의 노드에 연결할 GPU 수입니다. 예를 들어a4-highgpu-8g및a3-ultragpu-8gVM 모두 GPU 수는8입니다.DRIVER_VERSION: 설치할 NVIDIA 드라이버 버전입니다.default,latest,disabled중 하나일 수 있습니다.MACHINE_TYPE: 노드의 Compute Engine 머신 유형입니다. 예를 들어 A4 VM에는a4-highgpu-8g를 사용하고 A3 Ultra VM에는a3-ultragpu-8g를 사용합니다.NUM_NODES: 노드 풀의 노드 수입니다.RESERVATION_NAME: 예약 이름입니다. 이 값을 확인하려면 미래용 예약 요청 보기를 참고하세요.BLOCK_NAME: 예약 내의 특정 블록 이름입니다. 이 값을 확인하려면 미래용 예약 요청 보기를 참고하세요.
유연한 시작
플렉스 시작 프로비저닝의 경우 다음 명령어를 실행합니다.
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --flex-start --enable-autoscaling --num-nodes=0 \ --total-max-nodes TOTAL_MAX_NODES \ --no-enable-autorepair --location-policy=ANY \ --reservation-affinity=none [\ --enable-queued-provisioning]다음을 바꿉니다.
NODE_POOL_NAME: 노드 풀의 이름입니다.COMPUTE_REGION: 새 클러스터의 리전입니다.CLUSTER_NAME: 새 클러스터의 이름입니다.COMPUTE_ZONE: 노드 풀의 영역입니다.GPU_TYPE: GPU 가속기의 유형입니다.- A4 VM:
nvidia-b200를 입력합니다. - A3 Ultra VM:
nvidia-h200-141gb를 입력합니다.
- A4 VM:
AMOUNT: 노드 풀의 노드에 연결할 GPU 수입니다. 예를 들어a4-highgpu-8g및a3-ultragpu-8gVM 모두 GPU 수는8입니다.DRIVER_VERSION: 설치할 NVIDIA 드라이버 버전입니다.default,latest,disabled중 하나일 수 있습니다.MACHINE_TYPE: 노드의 Compute Engine 머신 유형입니다. 예를 들어 A4 VM에는a4-highgpu-8g를 사용하고 A3 Ultra VM에는a3-ultragpu-8g를 사용합니다.TOTAL_MAX_NODES: 전체 노드 풀에 대해 자동으로 확장되는 최대 노드 수입니다.큐에 추가된 프로비저닝을 통한 flex-start를 사용하려면
--enable-queued-provisioning플래그를 포함합니다.flex-start 사용에 대한 자세한 내용은 큐에 추가된 프로비저닝을 통한 flex-start로 대규모 워크로드 실행을 참고하세요.
스팟
스팟 프로비저닝의 경우 다음 명령어를 실행합니다.
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --spot다음을 바꿉니다.
NODE_POOL_NAME: 노드 풀의 이름입니다.COMPUTE_REGION: 새 클러스터의 리전입니다.CLUSTER_NAME: 새 클러스터의 이름입니다.COMPUTE_ZONE: 노드 풀의 영역입니다.GPU_TYPE: GPU 가속기의 유형입니다.- A4 VM:
nvidia-b200를 입력합니다. - A3 Ultra VM:
nvidia-h200-141gb를 입력합니다.
- A4 VM:
AMOUNT: 노드 풀의 노드에 연결할 GPU 수입니다. 예를 들어a4-highgpu-8g및a3-ultragpu-8gVM 모두 GPU 수는8입니다.DRIVER_VERSION: 설치할 NVIDIA 드라이버 버전입니다.default,latest,disabled중 하나일 수 있습니다.MACHINE_TYPE: 노드의 Compute Engine 머신 유형입니다. 예를 들어 A4 VM에는a4-highgpu-8g를 사용하고 A3 Ultra VM에는a3-ultragpu-8g를 사용합니다.NUM_NODES: 노드 풀의 노드 수입니다.스팟 VM으로 클러스터를 만드는 방법에 대한 자세한 내용은 스팟 VM을 사용하여 저렴한 비용으로 내결함성 워크로드 실행을 참고하세요.
다음 섹션에서
kubectl명령어를 실행할 수 있도록 클러스터에 연결합니다.gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGION다음을 바꿉니다.
CLUSTER_NAME: 클러스터 이름입니다.COMPUTE_REGION: 컴퓨팅 리전의 이름입니다.자세한 내용은 kubectl 설치 및 클러스터 액세스 구성을 참고하세요.
GPUDirect RDMA를 사용하여 클러스터 만들기
분산 AI 워크로드의 경우 여러 GPU 노드가 단일 컴퓨터로 작동하도록 함께 연결되는 경우가 많습니다. A4 VM과 A3 Ultra VM에는 NVIDIA ConnectX-7 (CX7) NIC를 기반으로 구축된 Titanium ML 네트워크 어댑터가 제공됩니다. A4 VM과 A3 Ultra VM은 모두 통합 이더넷 기반 RDMA (RoCE)를 사용하여 차단되지 않는 3.2Tbps의 노드 간 GPU-GPU 트래픽을 제공합니다. RoCE는 AI 워크로드에 고성능 클라우드 환경을 제공하여 여러 GPU에서 확장 및 공동작업을 지원합니다.
Google Cloud CLI와 GPUDirect TCPX (A3 High VM) 또는 TCPXO (A3 Mega VM)를 사용하여 GKE 클러스터를 만드는 방법에 대한 자세한 내용은 Autopilot 모드 클러스터에서 GPU 네트워크 대역폭 최대화 또는 Standard 모드 클러스터에서 GPU 네트워크 대역폭 최대화를 참고하세요.
GPUDirect RDMA를 사용하여 Autopilot 또는 Standard 모드로 GKE 클러스터를 만들려면 다음 단계를 완료하세요. 다음 섹션에 설명되어 있습니다.
- VPC 및 서브넷 만들기
- 다중 네트워킹으로 GKE 클러스터 만들기
- GKE 네트워크 객체 만들기
- RDMA 바이너리 설치 및 NCCL 구성
- NCCL 테스트 배포 및 실행
- GPUDirect-RDMA용 포드 매니페스트 구성
VPC 및 서브넷 만들기
A4 VM과 A3 Ultra VM의 구성은 다음과 같습니다.
- NVLink로 연결된 가상 머신당 NVIDIA B200 (A4) 또는 H200 (A3 Ultra) GPU 8개
- Intel Emerald Rapids CPU 2개
- GPU 간 네트워킹을 위한 400Gbps CX-7 NIC 8개
- 외부 서비스를 위한 200Gbps Google Titanium NIC 2개
분산 학습과 같은 AI 및 ML 워크로드에는 작업 완료 시간을 단축하여 성능을 최적화하기 위한 강력한 가속이 필요합니다. 고성능, 높은 처리량, 짧은 지연 시간이 필요한 워크로드의 경우 GPUDirect RDMA는 GPU와 주고받는 페이로드를 전송하는 데 필요한 네트워크 홉을 줄여 사용 가능한 네트워크 대역폭을 더 효율적으로 사용합니다. GPUDirect RDMA는 GPUDirect를 사용하지 않는 GPU에 비해 대규모 처리량을 크게 개선하도록 설계되었습니다.
CPU와 연결된 Google Titanium NIC 중 하나가 GKE의 기본 네트워크를 사용합니다. 기본 네트워크에 충분한 IP 주소 범위가 있는 경우 이 NIC에 새 VPC를 만들 필요가 없습니다.
이러한 명령어를 사용하여 두 번째 CPU Titanium NIC (gVNIC)용 VPC 하나와 8개의 CX-7 RDMA NIC용 VPC 하나를 만들 수 있습니다.
배포에 맞게 환경 변수를 설정합니다.
export REGION="COMPUTE_REGION" export ZONE="COMPUTE_ZONE" export PROJECT="PROJECT_ID" export GVNIC_NETWORK_PREFIX="GVNIC_NETWORK_PREFIX" export RDMA_NETWORK_PREFIX="RDMA_NETWORK_PREFIX"다음 변수를 바꿉니다.
COMPUTE_REGION: 클러스터의 리전COMPUTE_ZONE: 노드 풀의 영역입니다.PROJECT_ID: Google Cloud 프로젝트 ID입니다.GVNIC_NETWORK_PREFIX: A4 VM의 경우a4high-gvnic, A3 Ultra VM의 경우a3ultra-gvnic입니다.RDMA_NETWORK_PREFIX: A4 VM의 경우a4high-rdma, A3 Ultra VM의 경우a3ultra-rdma입니다.
VPC 네트워크 2개를 만듭니다.
# Create a VPC for the additional Google Titanium CPU NIC gcloud compute --project=${PROJECT} \ networks create \ ${GVNIC_NETWORK_PREFIX}-net \ --subnet-mode=custom gcloud compute --project=${PROJECT} \ networks subnets create \ ${GVNIC_NETWORK_PREFIX}-sub \ --network=${GVNIC_NETWORK_PREFIX}-net \ --region=${REGION} \ --range=192.168.0.0/24 gcloud compute --project=${PROJECT} \ firewall-rules create \ ${GVNIC_NETWORK_PREFIX}-internal \ --network=${GVNIC_NETWORK_PREFIX}-net \ --action=ALLOW \ --rules=tcp:0-65535,udp:0-65535,icmp \ --source-ranges=192.168.0.0/16 # Create HPC VPC for the RDMA NICs with 8 subnets. gcloud beta compute --project=${PROJECT} \ networks create ${RDMA_NETWORK_PREFIX}-net \ --network-profile=${ZONE}-vpc-roce \ --subnet-mode=custom # Create subnets for the HPC VPC. for N in $(seq 0 7); do gcloud compute --project=${PROJECT} \ networks subnets create \ ${RDMA_NETWORK_PREFIX}-sub-$N \ --network=${RDMA_NETWORK_PREFIX}-net \ --region=${REGION} \ --range=192.168.$((N+1)).0/24 & # offset to avoid overlap with gvnics done
멀티 네트워킹으로 GKE 클러스터 만들기
Autopilot
멀티 네트워킹이 있는 GKE Autopilot 클러스터를 만듭니다.
gcloud container clusters create-auto CLUSTER_NAME \ --enable-multi-networking \ --cluster-version=CLUSTER_VERSION \ --region=COMPUTE_REGION다음을 바꿉니다.
CLUSTER_NAME: 클러스터 이름입니다.CLUSTER_VERSION: 새 클러스터의 버전입니다. 구성에서 지원되는 GKE 버전을 확인하려면 요구사항 섹션을 참고하세요.COMPUTE_REGION: 컴퓨팅 리전의 이름입니다.
다음 섹션에서
kubectl명령어를 실행할 수 있도록 클러스터에 연결합니다.gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGION다음을 바꿉니다.
CLUSTER_NAME: 클러스터 이름입니다.COMPUTE_REGION: 컴퓨팅 리전의 이름입니다.
자세한 내용은 kubectl 설치 및 클러스터 액세스 구성을 참고하세요.
표준
다중 네트워킹을 사용하여 GKE Standard 클러스터와 GPU 노드 풀을 만듭니다.
클러스터를 만듭니다.
gcloud container clusters create CLUSTER_NAME \ --region=COMPUTE_REGION \ --cluster-version=CLUSTER_VERSION \ --enable-dataplane-v2 --enable-ip-alias --enable-multi-networking [\ --services-ipv4-cidr=SERVICE_CIDR \ --cluster-ipv4-cidr=POD_CIDR]다음을 바꿉니다.
CLUSTER_NAME: 클러스터 이름입니다.CLUSTER_VERSION: 새 클러스터의 버전입니다. 구성에서 지원되는 GKE 버전을 확인하려면 요구사항 섹션을 참고하세요.COMPUTE_REGION: 컴퓨팅 리전의 이름입니다.
선택적으로 서비스 및 포드의 보조 CIDR 범위를 명시적으로 제공할 수 있습니다. 이러한 선택적 플래그를 사용하는 경우 다음 변수를 바꿉니다.
SERVICE_CIDR: 서비스의 보조 CIDR 범위입니다.POD_CIDR: 포드의 보조 CIDR 범위입니다.
이러한 플래그를 사용하는 경우 CIDR 범위가 추가 노드 네트워크의 서브넷 범위와 겹치지 않는지 확인해야 합니다. 예를 들어
SERVICE_CIDR=10.65.0.0/19및POD_CIDR=10.64.0.0/19값의 범위가 서로 겹치지 않습니다. 자세한 내용은 포드 IPv4 주소 범위 추가를 참고하세요.노드 풀을 만듭니다. 실행해야 하는 명령어는 배포에 사용하는 소비 옵션에 따라 달라집니다. 해당 소비 옵션의 프로비저닝 모델에 해당하는 탭을 선택하세요.
예약에 따름
예약 바인딩 프로비저닝의 경우 다음 명령어를 실행합니다.
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --reservation-affinity=specific \ --reservation=RESERVATION_NAME/reservationBlocks/BLOCK_NAME \ --additional-node-network network=${GVNIC_NETWORK_PREFIX}-net,subnetwork=${GVNIC_NETWORK_PREFIX}-sub \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-0 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-1 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-2 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-3 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-4 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-5 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-6 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-7다음을 바꿉니다.
NODE_POOL_NAME: 노드 풀의 이름입니다.COMPUTE_REGION: 새 클러스터의 리전입니다.CLUSTER_NAME: 새 클러스터의 이름입니다.COMPUTE_ZONE: 노드 풀의 영역입니다.GPU_TYPE: GPU 가속기의 유형입니다.- A4 VM:
nvidia-b200를 입력합니다. - A3 Ultra VM:
nvidia-h200-141gb를 입력합니다.
- A4 VM:
AMOUNT: 노드 풀의 노드에 연결할 GPU 수입니다. 예를 들어a4-highgpu-8g및a3-ultragpu-8gVM 모두 GPU 수는8입니다.DRIVER_VERSION: 설치할 NVIDIA 드라이버 버전입니다.default,latest,disabled중 하나일 수 있습니다.MACHINE_TYPE: 노드의 Compute Engine 머신 유형입니다. 예를 들어 A4 VM에는a4-highgpu-8g를 사용하고 A3 Ultra VM에는a3-ultragpu-8g를 사용합니다.MACHINE_TYPE: 노드의 Compute Engine 머신 유형입니다. 예를 들어 A4 VM에는a4-highgpu-8g를 사용하고 A3 Ultra VM에는a3-ultragpu-8g를 사용합니다.NUM_NODES: 노드 풀의 노드 수입니다. flex-start의 경우 이 값은0로 설정해야 합니다.RESERVATION_NAME: 예약 이름입니다. 이 값을 확인하려면 미래용 예약 요청 보기를 참고하세요.BLOCK_NAME: 예약 내의 특정 블록 이름입니다. 이 값을 확인하려면 미래용 예약 요청 보기를 참고하세요.
유연한 시작
플렉스 시작 프로비저닝의 경우 다음 명령어를 실행합니다.
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --flex-start --num-nodes=0 --enable-autoscaling \ --total-max-nodes TOTAL_MAX_NODES \ --no-enable-autorepair --location-policy=ANY \ --reservation-affinity=none \ [--enable-queued-provisioning \] --additional-node-network network=${GVNIC_NETWORK_PREFIX}-net,subnetwork=${GVNIC_NETWORK_PREFIX}-sub \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-0 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-1 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-2 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-3 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-4 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-5 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-6 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-7다음을 바꿉니다.
NODE_POOL_NAME: 노드 풀의 이름입니다.COMPUTE_REGION: 새 클러스터의 리전입니다.CLUSTER_NAME: 새 클러스터의 이름입니다.COMPUTE_ZONE: 노드 풀의 영역입니다.GPU_TYPE: GPU 가속기의 유형입니다.- A4 VM:
nvidia-b200를 입력합니다. - A3 Ultra VM:
nvidia-h200-141gb를 입력합니다.
- A4 VM:
AMOUNT: 노드 풀의 노드에 연결할 GPU 수입니다. 예를 들어a4-highgpu-8g및a3-ultragpu-8gVM 모두 GPU 수는8입니다.DRIVER_VERSION: 설치할 NVIDIA 드라이버 버전입니다.default,latest,disabled중 하나일 수 있습니다.MACHINE_TYPE: 노드의 Compute Engine 머신 유형입니다. 예를 들어 A4 VM에는a4-highgpu-8g를 사용하고 A3 Ultra VM에는a3-ultragpu-8g를 사용합니다.MACHINE_TYPE: 노드의 Compute Engine 머신 유형입니다. 예를 들어 A4 VM에는a4-highgpu-8g를 사용하고 A3 Ultra VM에는a3-ultragpu-8g를 사용합니다.NUM_NODES: 노드 풀의 노드 수입니다. flex-start의 경우 이 값은0로 설정해야 합니다.TOTAL_MAX_NODES: 전체 노드 풀에 대해 자동으로 확장되는 최대 노드 수입니다.
큐에 추가된 프로비저닝을 통한 flex-start를 사용하려면
--enable-queued-provisioning플래그를 포함합니다.flex-start 사용에 대한 자세한 내용은 큐에 추가된 프로비저닝을 통한 flex-start로 대규모 워크로드 실행을 참고하세요.
다음 섹션에서
kubectl명령어를 실행할 수 있도록 클러스터에 연결합니다.gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGION다음을 바꿉니다.
CLUSTER_NAME: 클러스터 이름입니다.COMPUTE_REGION: 컴퓨팅 리전의 이름입니다.
자세한 내용은 kubectl 설치 및 클러스터 액세스 구성을 참고하세요.
GKE 네트워크 객체 만들기
이전 섹션에서 생성된 VPC 네트워크는 GKE 네트워크 매개변수 세트를 통해 구성해야 합니다. 구체적으로 두 번째 CPU Titanium NIC (gVNIC)는 NetDevice 모드로 구성해야 하고 8개의 CX-7 RDMA NIC는 각각 RDMA 모드로 구성해야 합니다.
이 명령어는 다음 이름을 사용합니다.
- CPU Titanium NIC (gVNIC) VPC의 이름은
${GVNIC_NETWORK_PREFIX}-net이고 서브넷의 이름은${GVNIC_NETWORK_PREFIX}-sub입니다. - CX-7 RDMA NIC VPC의 이름은
${RDMA_NETWORK_PREFIX}-net이고 서브넷의 이름은${RDMA_NETWORK_PREFIX}-sub-[0…7]입니다.
다음 명령어를 실행하여 GKE 네트워크 객체를 만듭니다.
kubectl apply -f - <<EOF
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: gvnic-1
spec:
vpc: ${GVNIC_NETWORK_PREFIX}-net
vpcSubnet: ${GVNIC_NETWORK_PREFIX}-sub
deviceMode: NetDevice
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: gvnic-1
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: gvnic-1
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-0
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-0
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-0
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-0
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-1
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-1
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-1
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-1
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-2
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-2
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-2
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-2
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-3
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-3
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-3
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-3
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-4
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-4
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-4
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-4
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-5
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-5
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-5
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-5
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-6
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-6
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-6
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-6
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-7
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-7
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-7
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-7
EOF
RDMA 바이너리 설치 및 NCCL 구성
다음 DaemonSet을 적용하여 각 노드에 RDMA 바이너리와 NCCL 라이브러리를 설치합니다. 기본 VM마다 RDMA 바이너리는 /home/kubernetes/bin/gib 디렉터리에 설치되고 NCCL 라이브러리는 /home/kubernetes/bin/nvidia/lib64 디렉터리에 설치됩니다.
Autopilot
GKE Autopilot 모드의 경우 다음 명령어를 실행합니다.
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/gpudirect-rdma/nccl-rdma-installer-autopilot.yaml
표준
GKE Standard 모드의 경우 다음 명령어를 실행합니다.
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/gpudirect-rdma/nccl-rdma-installer.yaml
NCCL 테스트 실행
프로비저닝된 클러스터의 기능을 검증하려면 NCCL 테스트를 실행하면 됩니다. 자세한 내용은 NCCL 테스트 배포 및 실행을 참고하세요.
GPUDirect RDMA용 포드 매니페스트 구성
GPUDirect RDMA를 사용하여 워크로드를 실행하려면 다음 단계에 따라 포드 매니페스트를 구성하세요.
포드 메타데이터에 다음 주석을 추가합니다.
Autopilot
GKE Autopilot 모드에는 다음 주석을 사용하세요.
metadata: annotations: networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"gvnic-1"}, {"interfaceName":"eth2","network":"rdma-0"}, {"interfaceName":"eth3","network":"rdma-1"}, {"interfaceName":"eth4","network":"rdma-2"}, {"interfaceName":"eth5","network":"rdma-3"}, {"interfaceName":"eth6","network":"rdma-4"}, {"interfaceName":"eth7","network":"rdma-5"}, {"interfaceName":"eth8","network":"rdma-6"}, {"interfaceName":"eth9","network":"rdma-7"} ]표준
GKE Standard 모드의 다음 주석에는
gvnic-1사양이 포함되어 있지 않지만 워크로드에 필요한 경우 추가할 수 있습니다.GKE Standard 모드에는 다음 주석을 사용하세요.
metadata: annotations: networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth2","network":"rdma-0"}, {"interfaceName":"eth3","network":"rdma-1"}, {"interfaceName":"eth4","network":"rdma-2"}, {"interfaceName":"eth5","network":"rdma-3"}, {"interfaceName":"eth6","network":"rdma-4"}, {"interfaceName":"eth7","network":"rdma-5"}, {"interfaceName":"eth8","network":"rdma-6"}, {"interfaceName":"eth9","network":"rdma-7"} ]노드 선택기를 사용하여 선택한 GPU 유형과 특정 예약을 지정합니다.
spec: nodeSelector: cloud.google.com/gke-accelerator: ACCELERATOR cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific"다음을 바꿉니다.
ACCELERATOR: Compute Engine 용량 예약에서 예약한 가속기. 다음 값 중 하나를 사용해야 합니다.nvidia-b200: A4 VM용 NVIDIA B200 (180GB)nvidia-h200-141gb: A3 Ultra VM용 NVIDIA H200 (141GB)
RESERVATION_NAME: Compute Engine 용량 예약의 이름입니다.
공유 예약 또는 예약의 특정 블록 및 하위 블록을 사용하려면 예약된 영역 경로 리소스 사용의 해당 섹션을 참고하세요.
포드 사양에 다음 볼륨을 추가합니다.
spec: volumes: - name: library-dir-host hostPath: path: /home/kubernetes/bin/nvidia - name: gib hostPath: path: /home/kubernetes/bin/gibGPU를 요청하는 컨테이너에 다음 볼륨 마운트, 환경 변수, 리소스를 추가합니다. 워크로드 컨테이너는 8개의 GPU를 모두 요청해야 합니다.
Autopilot
GKE Autopilot 모드의 경우 다음 리소스를 구성합니다.
containers: - name: my-container volumeMounts: - name: library-dir-host mountPath: /usr/local/nvidia readOnly: true - name: gib mountPath: /usr/local/gib readOnly: true env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 resources: limits: nvidia.com/gpu: 8표준
GKE Standard 모드의 경우 다음 리소스를 구성합니다.
containers: - name: my-container volumeMounts: - name: library-dir-host mountPath: /usr/local/nvidia - name: gib mountPath: /usr/local/gib env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 resources: limits: nvidia.com/gpu: 8워크로드 컨테이너에서 다음 셸 스크립트를 사용하여 NCCL을 구성하는 데 필요한 모든 환경 변수를 설정합니다.
source /usr/local/gib/scripts/set_nccl_env.sh
다음 탭에는 완료된 포드 매니페스트의 예가 포함되어 있습니다.
Autopilot
GKE Autopilot 모드의 경우 완성된 포드 매니페스트는 다음과 유사해야 합니다.
apiVersion: apps/v1
kind: Pod
metadata:
name: my-pod
labels:
k8s-app: my-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"gvnic-1"},
{"interfaceName":"eth2","network":"rdma-0"},
{"interfaceName":"eth3","network":"rdma-1"},
{"interfaceName":"eth4","network":"rdma-2"},
{"interfaceName":"eth5","network":"rdma-3"},
{"interfaceName":"eth6","network":"rdma-4"},
{"interfaceName":"eth7","network":"rdma-5"},
{"interfaceName":"eth8","network":"rdma-6"},
{"interfaceName":"eth9","network":"rdma-7"}
]
spec:
...
volumes:
- name: library-dir-host
hostPath:
path: /home/kubernetes/bin/nvidia
- name: gib
hostPath:
path: /home/kubernetes/bin/gib
containers:
- name: my-container
volumeMounts:
- name: library-dir-host
mountPath: /usr/local/nvidia
readOnly: true
- name: gib
mountPath: /usr/local/gib
readOnly: true
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
resources:
limits:
nvidia.com/gpu: 8
...
표준
GKE Standard 모드의 경우 완성된 포드 매니페스트는 다음과 유사해야 합니다.
apiVersion: apps/v1
kind: Pod
metadata:
name: my-pod
labels:
k8s-app: my-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth2","network":"rdma-0"},
{"interfaceName":"eth3","network":"rdma-1"},
{"interfaceName":"eth4","network":"rdma-2"},
{"interfaceName":"eth5","network":"rdma-3"},
{"interfaceName":"eth6","network":"rdma-4"},
{"interfaceName":"eth7","network":"rdma-5"},
{"interfaceName":"eth8","network":"rdma-6"},
{"interfaceName":"eth9","network":"rdma-7"}
]
spec:
...
volumes:
- name: library-dir-host
hostPath:
path: /home/kubernetes/bin/nvidia
- name: gib
hostPath:
path: /home/kubernetes/bin/gib
containers:
- name: my-container
volumeMounts:
- name: library-dir-host
mountPath: /usr/local/nvidia
- name: gib
mountPath: /usr/local/gib
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
resources:
limits:
nvidia.com/gpu: 8
...
GPUDirect RDMA를 사용하는 클러스터의 네트워크 성능 테스트
프로비저닝된 클러스터의 기능을 검증하는 것이 좋습니다. 이렇게 하려면 Google 환경에 최적화된 NVIDIA Collective Communications Library (NCCL) 테스트인 NCCL/gIB 테스트를 사용하세요.
다음 단계
- Topology Aware Scheduling (TAS) 및 Kueue를 사용하여 GKE 클러스터에서 워크로드를 예약하는 방법에 대한 자세한 내용은 Topology Aware Scheduling으로 GKE 워크로드 예약을 참고하세요.
- GKE 클러스터 및 AI 워크로드와 관련된 일반적인 이벤트를 관리하는 방법에 대한 자세한 내용은 AI 최적화 GKE 클러스터 관리를 참고하세요.
- 환경을 테스트하여 올바르게 설정하고 최적화하는 방법에 대한 자세한 내용은 NCCL/gIB를 사용하여 클러스터 네트워킹 최적화를 참고하세요.