Menjalankan workload komputasi berperforma tinggi (HPC) dengan H4D


Dokumen ini menjelaskan cara menjalankan workload komputasi berperforma tinggi (HPC) di cluster Google Kubernetes Engine (GKE) yang menggunakan seri mesin H4D dan akses memori langsung jarak jauh (RDMA).

H4D adalah rangkaian mesin dalam kelompok mesin yang dioptimalkan untuk HPC untuk Compute Engine. Seri mesin ini dioptimalkan untuk performa tinggi, biaya rendah, dan skalabilitas. H4D berfungsi dengan baik untuk aplikasi yang diskalakan di beberapa node. Instance H4D yang dikonfigurasi untuk menggunakan RDMA mendukung bandwidth jaringan hingga 200 Gbps antar-node.

Petunjuk di halaman ini menggunakan Google Cloud CLI dan memungkinkan Anda mendapatkan fleksibilitas maksimum dalam mengonfigurasi lingkungan cluster. Atau, Anda dapat menggunakan Cluster Toolkit untuk membuat cluster GKE siap produksi dengan cepat yang menggunakan H4D. Untuk mengetahui informasi selengkapnya, lihat Blueprint H4D GKE.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.
  • Gunakan mode penyediaan mulai fleksibel untuk mendapatkan VM H4D. Atau, jika Anda memerlukan sumber daya selama lebih dari 90 hari, atau lebih dari 256 VM H4D dalam satu permintaan, hubungi tim akun Anda. Anda juga dapat menyediakan VM H4D sesuai permintaan, bergantung pada kapasitas yang tersedia di wilayah Anda.
  • Gunakan GKE versi 1.32.6-gke.1060000 atau yang lebih baru untuk membuat node pool dengan VM H4D yang dicadangkan dalam mode Standar GKE.
  • Gunakan GKE versi 1.33.2-gke.4731000 atau yang lebih baru untuk membuat berikut ini:

  • Gunakan hanya lokasi tempat jenis mesin H4D tersedia. Untuk mengetahui informasi selengkapnya, lihat tabel di Region dan zona yang tersedia, dengan memfilter H4D.

  • Gunakan hanya image node Container-Optimized OS.

  • Tinjau batasan H4D.

  • Tinjau cara menangani pemeliharaan host, karena jenis mesin H4D tidak mendukung migrasi langsung. Untuk mengetahui informasi selengkapnya, lihat Pengalaman pemeliharaan untuk instance H4D.

  • Ganti nilai berikut untuk perintah di bagian berikutnya:

    • PROJECT_ID:Google Cloud Project ID Anda.
    • CLUSTER_NAME: nama cluster Anda.
    • CONTROL_PLANE_LOCATION: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zonal. Cluster regional direkomendasikan untuk workload produksi. Untuk cluster regional, region harus menyertakan zona tempat H4D tersedia. Untuk cluster zona, zona harus memiliki ketersediaan H4D.
    • COMPUTE_ZONE: zona node pool Anda. Ini harus berupa zona tempat H4D tersedia. Anda tidak dapat membuat node pool multi-zona jika ingin node H4D berfungsi dengan RDMA.
    • RDMA_NETWORK_PREFIX: awalan jaringan RDMA (misalnya, h4d-rdma).
    • RDMA_SUBNET_CIDR: rentang CIDR subnet RDMA. Pastikan rentang ini tidak tumpang-tindih dengan jaringan default cluster.
    • NODE_POOL_NAME: nama node pool H4D Anda.
    • NODE_COUNT: jumlah node H4D yang akan dibuat di node pool.
    • H4D_MACHINE_TYPE: jenis mesin H4D yang akan digunakan (misalnya, h4d-highmem-192-lssd).

Membuat VPC dan subnet

Konfigurasi Virtual Private Cloud (VPC) dan subnet default untuk cluster. Untuk kartu antarmuka jaringan (NIC) RDMA, buat VPC dan subnet khusus. VPC yang dibuat dengan petunjuk berikut menggunakan profil jaringan RDMA sesuai kebutuhan.

  1. Buat VPC HPC untuk NIC RDMA:

    gcloud compute --project=PROJECT_ID \
      networks create RDMA_NETWORK_PREFIX-net \
      --network-profile=COMPUTE_ZONE-vpc-falcon \
      --subnet-mode=custom
    
  2. Buat subnet untuk jaringan 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
    

Membuat cluster GKE dengan multi-jaringan

Buat cluster GKE dengan multi-jaringan diaktifkan. Secara opsional, dengan perintah ini, Anda dapat memberikan rentang CIDR sekunder secara eksplisit untuk layanan dan Pod.

Jalankan perintah berikut:

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]

Jika Anda menggunakan flag opsional ini, ganti nilai tambahan berikut:

  • SERVICE_CIDR: rentang CIDR sekunder untuk layanan.
  • POD_CIDR: rentang CIDR sekunder untuk Pod.

Saat Anda menggunakan tanda ini, pastikan rentang CIDR tidak tumpang-tindih dengan rentang subnet untuk jaringan node tambahan. Misalnya, SERVICE_CIDR=10.65.0.0/19 dan POD_CIDR=10.64.0.0/19.

Membuat objek jaringan GKE

Konfigurasi jaringan VPC menggunakan set parameter jaringan GKE. Terapkan objek GKENetworkParamSet dan 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

Membuat node pool H4D

Buat node pool yang menggunakan H4D dan terhubung ke jaringan RDMA. Anda dapat menggunakan node H4D yang terikat reservasi dan penempatan kompak. Atau, Anda dapat menggunakan node H4D yang disediakan dengan flex-start. Pilih tab yang sesuai dengan opsi konsumsi Anda:

Terikat dengan reservasi

  1. Buat kebijakan resource untuk penempatan rapat. Penempatan rapat mengoptimalkan performa untuk workload HPC yang terkait erat—yang berjalan di beberapa node—dengan memastikan bahwa node secara fisik ditempatkan relatif satu sama lain dalam suatu zona.

    Jalankan perintah berikut:

    gcloud compute resource-policies create group-placement POLICY_NAME \
        --region REGION --collocation collocated
    

    Ganti nilai berikut:

    • POLICY_NAME: nama kebijakan resource (misalnya, h4d-compact).
    • REGION: region cluster Anda.
  2. Buat node pool yang menggunakan H4D dan terhubung ke jaringan 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
    

    Ganti MAX_UNAVAILABLE dengan jumlah maksimum node yang tidak dapat tersedia secara bersamaan selama upgrade node pool. Untuk penempatan rapat, sebaiknya gunakan upgrade cepat tanpa lonjakan untuk mengoptimalkan penemuan node dengan lokasi yang sama selama upgrade.

Flex-start

Buat node pool yang menggunakan node H4D yang disediakan dengan flex-start, dan terhubung ke jaringan RDMA:

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

Ganti MAX_NODES dengan jumlah maksimum node yang akan diskalakan secara otomatis untuk node pool yang ditentukan per zona.

Menyiapkan image Docker

Siapkan image Anda menggunakan contoh Dockerfile berikut:

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
Praktik terbaik:

Rocky 8 adalah image berbasis container yang direkomendasikan dan mendukung RDMA. Driver iRDMA mungkin belum tersedia secara luas di distribusi Linux lainnya.

Mengonfigurasi manifes untuk RDMA

Aktifkan RDMA dengan menambahkan anotasi berikut ke metadata Pod Anda:

metadata:
  annotations:
    networking.gke.io/default-interface: 'eth0'
    networking.gke.io/interfaces: |
      [
        {"interfaceName":"eth0","network":"default"},
        {"interfaceName":"eth1","network":"rdma-0"},
      ]

Menguji RDMA dengan rping

Verifikasi fungsi RDMA dengan menjalankan rping antara Pod server dan klien:

  1. Di Pod server, jalankan perintah rping:

    rping -s
    
  2. Di Pod klien, jalankan perintah rping:

    rping -c -C 2 -d -a SERVER_IP
    

    Ganti SERVER_IP dengan alamat IP Pod server.

    Output yang berhasil akan terlihat seperti berikut:

    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
    

Langkah berikutnya

  • Pelajari lebih lanjut komputasi berperforma tinggi.
  • Beberapa workload HPC memerlukan Message Passing Interface (MPI) untuk menjalankan workload multi-node yang terkait erat dengan RDMA. Untuk mengetahui informasi selengkapnya tentang cara menyetel MPI di cluster untuk node H4D, lihat Menjalankan Workload MPI di GKE H4D.