이 문서에서는 H4D 머신 시리즈와 원격 직접 메모리 액세스 (RDMA)를 사용하는 Google Kubernetes Engine (GKE) 클러스터에서 고성능 컴퓨팅(HPC) 워크로드를 실행하는 방법을 설명합니다.
H4D는 Compute Engine용 컴퓨팅 최적화 머신 계열의 머신 시리즈입니다. 머신 시리즈는 고성능, 저비용, 확장성에 최적화되어 있습니다. H4D는 여러 노드로 확장되는 애플리케이션에 적합합니다. RDMA를 사용하도록 구성된 H4D 인스턴스는 노드 간에 최대 200Gbps의 네트워크 대역폭을 지원합니다.
이 페이지의 안내에서는 Google Cloud CLI를 사용하며 클러스터 환경을 최대한 유연하게 구성할 수 있습니다. 또는 클러스터 툴킷을 사용하여 H4D를 사용하는 프로덕션 지원 GKE 클러스터를 빠르게 만들 수 있습니다. 자세한 내용은 GKE H4D 블루프린트를 참고하세요.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
- flex-start 프로비저닝 모드를 사용하여 H4D VM을 획득합니다. 또는 90일 이상 리소스가 필요하거나 요청에 256개 이상의 H4D VM이 포함된 경우 계정팀에 문의하세요. 또한 거주 지역에서 사용 가능한 용량에 따라 주문형으로 H4D VM을 프로비저닝할 수도 있습니다.
- GKE 버전 1.32.6-gke.1060000 이상을 사용하여 GKE Standard 모드에서 예약된 H4D VM이 있는 노드 풀을 만듭니다.
GKE 버전 1.33.2-gke.4731000 이상을 사용하여 다음을 만드세요.
- flex-start가 적용된 H4D 노드
- Autopilot을 사용하는 H4D 노드
- Standard 클러스터에서 클러스터 자동 확장을 사용하는 H4D 노드
- Standard 클러스터에서 노드 자동 프로비저닝을 사용하는 H4D 노드
H4D 머신 유형을 사용할 수 있는 위치만 사용합니다. 자세한 내용은 사용 가능한 리전 및 영역의 표를 참고하고
H4D
로 필터링하세요.Container-Optimized OS 노드 이미지만 사용합니다.
H4D 제한사항을 검토합니다.
H4D 머신 유형은 라이브 마이그레이션을 지원하지 않으므로 호스트 유지보수를 처리하는 방법을 검토하세요. 자세한 내용은 H4D 인스턴스 유지보수 환경을 참고하세요.
다음 섹션의 명령어에 대해 다음 값을 바꿉니다.
PROJECT_ID
:Trusted Cloud by S3NS 프로젝트 ID입니다.CLUSTER_NAME
: 클러스터 이름입니다.CONTROL_PLANE_LOCATION
: 클러스터의 컨트롤 플레인에 대한 Compute Engine 위치입니다. 리전 클러스터의 경우 리전을, 영역 클러스터의 경우 영역을 제공합니다. 프로덕션 워크로드에는 리전 클러스터가 권장됩니다. 리전 클러스터의 경우 리전에 H4D를 사용할 수 있는 영역이 포함되어야 합니다. 영역 클러스터의 경우 영역에 H4D 가용성이 있어야 합니다.COMPUTE_ZONE
: 노드 풀의 영역입니다. H4D를 사용할 수 있는 영역이어야 합니다. H4D 노드가 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
).
VPC 및 서브넷 만들기
클러스터의 기본 Virtual Private Cloud (VPC) 및 서브넷을 구성합니다. RDMA 네트워크 인터페이스 카드 (NIC)의 경우 전용 VPC와 서브넷을 만듭니다. 다음 안내에 따라 생성된 VPC는 필요한 경우 RDMA 네트워크 프로필을 사용합니다.
RDMA NIC용 HPC VPC를 만듭니다.
gcloud compute --project=PROJECT_ID \ networks create RDMA_NETWORK_PREFIX-net \ --network-profile=COMPUTE_ZONE-vpc-falcon \ --subnet-mode=custom
RDMA 네트워크의 서브넷을 만듭니다.
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 클러스터 만들기
멀티 네트워킹이 사용 설정된 GKE 클러스터를 만듭니다. 선택적으로 이 명령어를 사용하여 서비스 및 포드의 보조 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
EOF
H4D 노드 풀 만들기
H4D를 사용하고 RDMA 네트워크에 연결되는 노드 풀을 만듭니다. 예약에 바인딩된 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_UNAVAILABLE
MAX_UNAVAILABLE
을 노드 풀 업그레이드 중에 동시에 사용할 수 없는 최대 노드 수로 바꿉니다. 효율적인 배치를 위해서는 일시 급증이 없는 신속한 업그레이드를 통해 업그레이드 중 노드가 인접한 위치에 배치될 가능성을 최적화하는 것이 좋습니다.
유연한 시작
flex-start로 프로비저닝되고 RDMA 네트워크에 연결되는 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=0
MAX_NODES
를 영역당 지정된 노드 풀에서 자동으로 확장되는 최대 노드 수로 바꿉니다.
Docker 이미지 준비
다음 예시 Dockerfile을 사용하여 이미지를 준비합니다.
FROM rockylinux:8.9
RUN dnf install https://depot.ciq.com/public/files/gce-accelerator/irdma-kernel-modules-el8-x86_64/irdma-repos.rpm -y
RUN dnf install rdma-core libibverbs-utils librdmacm-utils infiniband-diags perftest -y
Rocky 8은 RDMA를 지원하는 컨테이너 기반 이미지로 권장됩니다. iRDMA 드라이버는 아직 다른 Linux 배포에서 널리 제공되지 않을 수 있습니다.
RDMA용 매니페스트 구성
포드 메타데이터에 다음 주석을 추가하여 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
를 실행하여 RDMA 기능을 확인합니다.
서버 포드에서
rping
명령어를 실행합니다.rping -s
클라이언트 포드에서
rping
명령어를 실행합니다.rping -c -C 2 -d -a SERVER_IP
SERVER_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 워크로드 실행을 참고하세요.