이 문서에서는 H4D 머신 시리즈와 원격 직접 메모리 액세스 (RDMA)를 사용하는 Google Kubernetes Engine (GKE) 클러스터에서 고성능 컴퓨팅(HPC) 워크로드를 실행하는 방법을 설명합니다.
H4D는 Compute Engine용 컴퓨팅 최적화 머신 제품군의 머신 시리즈입니다. 머신 시리즈는 고성능, 저비용, 확장성에 최적화되어 있습니다. H4D는 여러 노드로 확장되는 애플리케이션에 적합합니다. RDMA를 사용하도록 구성된 H4D 인스턴스는 노드 간에 최대 200Gbps의 네트워크 대역폭을 지원합니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면
gcloud components update명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
소비 옵션을 선택한 후 H4D VM의 용량을 확보합니다. H4D VM에는 밀도 높은 리소스 할당이 권장됩니다. 집중 리소스 할당은 H4D의 일부 프로비저닝 모델에서 사용할 수 있으며 H4D 용량에 대해 향상된 클러스터 관리 기능을 제공합니다. 용량을 가져오려면 다음을 수행하세요.
- VM 및 클러스터 생성용 프로비저닝 모델을 검토합니다.
- 소비 옵션을 선택하고 용량을 확보합니다.
다음 GKE 버전 요구사항을 준수해야 합니다.
- GKE 버전 1.32.6-gke.1060000 이상을 사용하여 GKE Standard 모드에서 예약된 H4D VM이 있는 노드 풀을 만듭니다.
GKE 버전 1.33.2-gke.4731000 이상을 사용하여 다음을 만드세요.
- 유연한 시작이 있는 H4D 노드
- Autopilot을 사용하는 H4D 노드
- Standard 클러스터에서 클러스터 자동 확장을 사용하는 H4D 노드
- Standard 클러스터에서 노드 자동 프로비저닝을 사용하는 H4D 노드
H4D 머신 유형을 사용할 수 있는 위치만 사용합니다. 자세한 내용은 사용 가능한 리전 및 영역의 표를 참고하고
H4D로 필터링하세요.Container-Optimized OS 노드 이미지만 사용합니다.
H4D 제한사항을 검토합니다.
H4D 머신 유형은 라이브 마이그레이션을 지원하지 않으므로 호스트 유지보수를 처리하는 방법을 검토하세요. 자세한 내용은 H4D 인스턴스의 유지보수 환경 및 라이브 마이그레이션되지 않는 GKE 노드의 중단 관리를 참고하세요.
GKE 클러스터 및 네트워크 구성
Cluster Toolkit을 사용하여 예약에 바인딩된 H4D VM을 사용하는 프로덕션 준비 GKE 클러스터를 빠르게 만들 수 있습니다. 이 섹션의 클러스터 툴킷 안내에서는 GKE H4D 블루프린트를 사용합니다.
또는 Google Cloud CLI를 사용하여 예약 바인딩 VM 또는 유연한 시작 VM으로 클러스터 환경을 최대한 유연하게 구성할 수 있습니다.
Cluster Toolkit
클러스터 툴킷 설정 Cloud Shell을 사용하여 이 작업을 실행하는 것이 좋습니다. 종속 항목이 클러스터 툴킷에 이미 사전 설치되어 있기 때문입니다.
클러스터 툴킷을 설치한 호스트 머신의 IP 주소를 가져옵니다.
curl ifconfig.me이 IP 주소를 저장하여 이후 단계에서
IP_ADDRESS변수에 사용합니다.Terraform 배포 상태를 저장할 Cloud Storage 버킷을 만듭니다.
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioning다음 변수를 바꿉니다.
BUCKET_NAME: 새 Cloud Storage 버킷의 이름입니다.PROJECT_ID: Google Cloud 프로젝트 ID입니다.COMPUTE_REGION_TERRAFORM_STATE: Terraform 배포의 상태를 저장할 컴퓨팅 리전입니다.
GitHub 저장소의
examples/gke-h4d/gke-h4d-deployment.yaml청사진에서terraform_backend_defaults및vars섹션에 배포의 특정 값과 일치하는 다음 설정을 입력합니다.DEPLOYMENT_NAME: 배포의 고유한 이름으로, 길이는 6~30자(영문 기준) 사이여야 합니다. 배포 이름이 프로젝트 내에서 고유하지 않으면 클러스터 생성에 실패합니다. 기본값은gke-h4d입니다.BUCKET_NAME: 이전 단계에서 만든 Cloud Storage 버킷의 이름입니다.PROJECT_ID: Google Cloud 프로젝트 ID입니다.COMPUTE_REGION: 클러스터의 컴퓨팅 리전으로, 예약에 사용할 수 있는 머신이 있는 리전과 일치해야 합니다.COMPUTE_ZONE: H4D 머신의 노드 풀의 컴퓨팅 영역입니다. 이 영역은 예약에서 머신을 사용할 수 있는 영역과 일치해야 합니다.NODE_COUNT: 클러스터의 H4D 노드 수입니다.IP_ADDRESS/SUFFIX: 클러스터에 연결하도록 허용할 IP 주소 범위입니다. 이 CIDR 블록에는 Terraform을 호출하는 데 사용할 머신의 IP 주소가 포함되어야 합니다. 자세한 내용은 승인된 네트워크 작동 방식을 참고하세요.reservation필드의 경우 노드 풀을 프로비저닝할 때 예약에서 특정 블록을 타겟팅할지 여부에 따라 다음 중 하나를 사용합니다.- 예약의 아무 곳에나 노드 풀을 배치하려면 예약 이름(
RESERVATION_NAME)을 제공합니다. 예약 내의 특정 블록을 타겟팅하려면 다음 형식으로 예약 및 블록 이름을 사용하세요.
RESERVATION_NAME/reservationBlocks/BLOCK_NAME예약에서 사용 가능한 블록을 모르는 경우 예약 토폴로지 보기를 참고하세요.
- 예약의 아무 곳에나 노드 풀을 배치하려면 예약 이름(
Terraform에 대한 액세스 권한을 제공하기 위해 애플리케이션 기본 사용자 인증 정보 (ADC)를 생성합니다. Cloud Shell을 사용하는 경우 다음 명령어를 실행할 수 있습니다.
gcloud auth application-default login청사진을 배포하여 H4D 머신 유형을 사용하여 GKE 인프라를 프로비저닝합니다.
./gcluster deploy -d examples/gke-h4d/gke-h4d-deployment.yaml examples/gke-h4d/gke-h4d.yaml메시지가 표시되면 적용을 선택하여 블루프린트를 배포합니다.
또한 이 청사진은 Filestore 인스턴스를 프로비저닝하고 영구 볼륨(PV)을 사용하여 GKE 클러스터에 연결합니다. 이 청사진에는 작업 템플릿의 예가 포함되어 있습니다. 이 템플릿은 이 공유 스토리지에서 데이터를 읽고 쓰는 병렬 작업을 실행합니다. 배포 출력에
kubectl create이 표시되며 이를 사용하여 샘플 작업을 트리거할 수 있습니다.
Google Cloud CLI
이 섹션의 명령어에 대해 다음 값을 바꿉니다.
PROJECT_ID: Google Cloud 프로젝트 IDCLUSTER_NAME: 클러스터의 이름입니다.CONTROL_PLANE_LOCATION: 클러스터 컨트롤 플레인의 Compute Engine 위치입니다. 리전 클러스터의 경우 리전 또는 영역 클러스터의 경우 영역을 제공합니다. 프로덕션 워크로드에는 리전 클러스터가 권장됩니다. 리전 클러스터의 경우 리전에 H4D를 사용할 수 있는 영역이 포함되어야 합니다. 영역 클러스터의 경우 영역에 H4D를 사용할 수 있어야 합니다. 예약을 사용하는 경우 리전과 영역이 예약의 리전 및 영역과 일치해야 합니다.COMPUTE_ZONE: 노드 풀의 영역입니다. H4D를 사용할 수 있는 영역이어야 합니다. 예약을 사용하는 경우 리전과 영역이 예약의 리전 및 영역과 일치해야 합니다. H4D 노드가 Cloud RDMA와 함께 작동하도록 하려면 멀티 영역 노드 풀을 만들 수 없습니다.RDMA_NETWORK_PREFIX: RDMA 네트워크 접두사입니다 (예:h4d-rdma).RDMA_SUBNET_CIDR: RDMA 서브넷 CIDR 범위입니다. 이 범위가 클러스터의 기본 네트워크와 겹치지 않는지 확인합니다.NODE_POOL_NAME: H4D 노드 풀의 이름입니다.NODE_COUNT: 노드 풀에 만들 H4D 노드 수입니다.H4D_MACHINE_TYPE: 사용할 H4D 머신 유형입니다 (예:h4d-highmem-192-lssd).
다음 단계에 따라 gcloud CLI로 클러스터를 만듭니다.
VPC 및 서브넷 만들기: 클러스터의 기본 가상 프라이빗 클라우드 (VPC) 및 서브넷을 구성합니다. IRDMA 네트워크 인터페이스 카드 (NIC)의 경우 전용 VPC와 서브넷을 만듭니다. 다음 안내에 따라 만든 VPC는 필요한 경우 Falcon VPC 네트워크 프로필을 사용합니다.
Falcon 전송 프로토콜을 통한 RDMA를 사용하는 iRDMA 네트워크 인터페이스용 VPC를 만듭니다.
gcloud compute --project=PROJECT_ID \ networks create RDMA_NETWORK_PREFIX-net \ --network-profile=COMPUTE_ZONE-vpc-falcon \ --subnet-mode=customFalcon VPC 네트워크의 서브넷을 만듭니다.
gcloud compute --project=PROJECT_ID \ networks subnets create \ RDMA_NETWORK_PREFIX-sub-0 \ --network=RDMA_NETWORK_PREFIX-net \ --region=CONTROL_PLANE_LOCATION \ --range=RDMA_SUBNET_CIDR
다중 네트워킹이 있는 GKE 클러스터 만들기: 클러스터를 만듭니다. 선택적으로 이 명령어를 사용하여 서비스 및 Pod의 보조 CIDR 범위를 명시적으로 제공할 수 있습니다.
다음 명령어를 실행합니다.
gcloud container clusters create CLUSTER_NAME --project PROJECT_ID \ --enable-dataplane-v2 --enable-ip-alias --location=CONTROL_PLANE_LOCATION \ --enable-multi-networking \ [--services-ipv4-cidr=SERVICE_CIDR \ --cluster-ipv4-cidr=POD_CIDR]이러한 선택적 플래그를 사용하는 경우 다음 추가 값을 바꿉니다.
SERVICE_CIDR: 서비스의 보조 CIDR 범위입니다.POD_CIDR: 포드의 보조 CIDR 범위입니다.
이러한 플래그를 사용하는 경우 CIDR 범위가 추가 노드 네트워크의 서브넷 범위와 겹치지 않는지 확인하세요. 예를 들면
SERVICE_CIDR=10.65.0.0/19및POD_CIDR=10.64.0.0/19입니다.GKE 네트워크 객체 만들기: GKE 네트워크 매개변수 세트를 사용하여 VPC 네트워크를 구성합니다.
GKENetworkParamSet및Network객체를 적용합니다.kubectl apply -f - <<EOF 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 EOFH4D 노드 풀 만들기: H4D를 사용하고 Falcon VPC 네트워크에 연결되는 노드 풀을 만듭니다. 예약 바인딩 H4D 노드와 컴팩트 배치를 사용할 수 있습니다. 또는 flex-start로 프로비저닝된 H4D 노드를 사용할 수 있습니다. 소비 옵션에 해당하는 탭을 선택합니다.
예약에 따름
압축 배치를 위한 리소스 정책을 만듭니다. 압축 배치는 영역 내에서 노드가 서로 물리적으로 배치되도록 하여 여러 노드에서 실행되는 긴밀하게 결합된 HPC 워크로드의 성능을 최적화합니다.
다음 명령어를 실행합니다.
gcloud compute resource-policies create group-placement POLICY_NAME \ --region REGION --collocation collocated다음 값을 바꿉니다.
POLICY_NAME: 리소스 정책의 이름 (예:h4d-compact)REGION: 클러스터의 리전입니다.
H4D를 사용하고 RDMA 네트워크에 연결되는 노드 풀을 만듭니다.
gcloud container node-pools create NODE_POOL_NAME --project PROJECT_ID \ --location=CONTROL_PLANE_LOCATION --cluster CLUSTER_NAME --num-nodes=NODE_COUNT \ --node-locations=COMPUTE_ZONE \ --machine-type H4D_MACHINE_TYPE \ --additional-node-network network=RDMA_NETWORK_PREFIX-net,subnetwork=RDMA_NETWORK_PREFIX-sub-0 \ --placement-policy POLICY_NAME \ --max-surge-upgrade 0 \ --max-unavailable-upgrade MAX_UNAVAILABLEMAX_UNAVAILABLE을 노드 풀 업그레이드 중에 동시에 사용할 수 없는 최대 노드 수로 바꿉니다. 효율적인 배치를 위해서는 일시 급증이 없는 신속한 업그레이드를 통해 업그레이드 중 노드가 인접한 위치에 배치될 가능성을 최적화하는 것이 좋습니다.
유연한 시작
flex-start로 프로비저닝되고 Falcon VPC 네트워크에 연결되는 H4D 노드를 사용하는 노드 풀을 만듭니다.
gcloud container node-pools create NODE_POOL_NAME --project PROJECT_ID \ --location=CONTROL_PLANE_LOCATION --cluster CLUSTER_NAME \ --node-locations=COMPUTE_ZONE \ --machine-type H4D_MACHINE_TYPE \ --additional-node-network network=RDMA_NETWORK_PREFIX-net,subnetwork=RDMA_NETWORK_PREFIX-sub-0 \ --flex-start --enable-autoscaling --reservation-affinity=none \ --min-nodes=0 --max-nodes=MAX_NODES --num-nodes=0MAX_NODES를 영역당 지정된 노드 풀에서 자동으로 확장되는 최대 노드 수로 바꿉니다.
Docker 이미지 준비
다음 예시 Dockerfile을 사용하여 이미지를 준비합니다.
FROM docker.io/rockylinux/rockylinux:8.10
RUN dnf -y install https://depot.ciq.com/public/download/ciq-sigcloud-next-8/ciq-sigcloud-next-8.x86_64/Packages/c/ciq-sigcloud-next-release-6-1.el8_10.cld_next.noarch.rpm
&& dnf -y update ciq-sigcloud-next-release
&& dnf clean all
RUN dnf install rdma-core libibverbs-utils librdmacm-utils infiniband-diags perftest -y
어떤 이미지가 IRDMA를 지원하는지 자세히 알아보려면 운영체제 세부정보의 표에 있는 인터페이스 탭을 참고하세요.
RDMA용 매니페스트 구성
포드 메타데이터에 다음 주석을 추가하여 Cloud RDMA를 사용 설정합니다.
metadata:
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"rdma-0"},
]
rping으로 RDMA 테스트
서버와 클라이언트 포드 간에 rping를 실행하여 Cloud RDMA 기능을 확인합니다.
서버 포드에서
rping명령어를 실행합니다.rping -s클라이언트 포드에서
rping명령어를 실행합니다.rping -c -C 2 -d -a SERVER_IPSERVER_IP를 서버 포드의 IP 주소로 바꿉니다.성공하면 출력은 다음과 비슷합니다.
created cm_id 0x5b597bf94800 cma_event type RDMA_CM_EVENT_ADDR_RESOLVED cma_id 0x5b597bf94800 (parent) cma_event type RDMA_CM_EVENT_ROUTE_RESOLVED cma_id 0x5b597bf94800 (parent) rdma_resolve_addr - rdma_resolve_route successful created pd 0x5b597bf94fa0 created channel 0x5b597bf96830 created cq 0x5b597bf94ff0 created qp 0x5b597bf96c00 rping_setup_buffers called on cb 0x5b597bf8c820 allocated & registered buffers... cq_thread started. cma_event type RDMA_CM_EVENT_ESTABLISHED cma_id 0x5b597bf94800 (parent) ESTABLISHED rdma_connect successful RDMA addr 5b597bf8cd80 rkey dadac8c4 len 64 send completion recv completion RDMA addr 5b597bf8cff0 rkey 86ef015f len 64 send completion recv completion RDMA addr 5b597bf8cd80 rkey dadac8c4 len 64 send completion recv completion RDMA addr 5b597bf8cff0 rkey 86ef015f len 64 send completion recv completion rping_free_buffers called on cb 0x5b597bf8c820 destroy cm_id 0x5b597bf94800
다음 단계
- 고성능 컴퓨팅에 대해 자세히 알아보세요.
- 일부 HPC 워크로드에서는 RDMA를 사용하여 긴밀하게 결합된 다중 노드 워크로드를 실행하기 위해 메시지 전달 인터페이스 (MPI)가 필요합니다. H4D 노드용 클러스터에서 MPI를 설정하는 방법에 대한 자세한 내용은 GKE H4D에서 MPI 워크로드 실행을 참고하세요.