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 seri mesin dalam Kelompok mesin yang dioptimalkan untuk komputasi untuk Compute Engine. Seri mesin ini dioptimalkan untuk performa tinggi, biaya rendah, dan skalabilitas. H4D berfungsi dengan baik untuk aplikasi yang dapat diskalakan ke beberapa node. Instance H4D yang dikonfigurasi untuk menggunakan RDMA mendukung bandwidth jaringan hingga 200 Gbps antar-node.
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 perintah
gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung perintah yang dijalankan dalam dokumen ini.
Dapatkan kapasitas untuk VM H4D setelah memilih opsi konsumsi. Alokasi resource padat direkomendasikan untuk VM H4D. Alokasi resource padat tersedia dengan beberapa model penyediaan untuk H4D, dan memberi Anda kemampuan pengelolaan cluster yang ditingkatkan untuk kapasitas H4D Anda. Untuk mendapatkan kapasitas, lakukan hal berikut:
Pastikan Anda mematuhi persyaratan versi GKE berikut:
- Gunakan GKE versi 1.32.6-gke.1060000 atau yang lebih baru untuk membuat node pool dengan VM H4D yang dipesan dalam mode GKE Standard.
Gunakan GKE versi 1.33.2-gke.4731000 atau yang lebih baru untuk membuat hal berikut:
- Node H4D dengan flex-start
- Node H4D dengan Autopilot
- Node H4D dengan cluster penskalaan otomatis di cluster Standard
- Node H4D dengan node penyediaan otomatis di cluster Standard
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 node images.
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, dan Mengelola gangguan pada node GKE yang tidak melakukan migrasi langsung.
Mengonfigurasi cluster dan jaringan GKE
Anda dapat menggunakan Cluster Toolkit untuk membuat cluster GKE siap produksi dengan cepat yang menggunakan VM H4D terikat reservasi. Petunjuk Cluster Toolkit di bagian ini menggunakan GKE H4D Blueprint.
Atau, Anda dapat menggunakan Google Cloud CLI untuk fleksibilitas maksimum dalam mengonfigurasi lingkungan cluster dengan VM terikat reservasi atau Flex-start.
Cluster Toolkit
Siapkan Cluster Toolkit. Sebaiknya gunakan Cloud Shell untuk melakukannya karena dependensi sudah diinstal sebelumnya untuk Cluster Toolkit.
Dapatkan alamat IP untuk mesin host tempat Anda menginstal Cluster Toolkit:
curl ifconfig.meSimpan alamat IP ini untuk digunakan sebagai variabel
IP_ADDRESSpada langkah berikutnya.Buat bucket Cloud Storage untuk menyimpan status deployment Terraform:
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 --versioningGanti variabel berikut:
BUCKET_NAME: nama bucket Cloud Storage baru.PROJECT_ID: ID project Anda Google Cloud .COMPUTE_REGION_TERRAFORM_STATE: region komputasi tempat Anda ingin menyimpan status deployment Terraform.
Dalam blueprint
examples/gke-h4d/gke-h4d-deployment.yamldari repo GitHub, isi setelan berikut di bagianterraform_backend_defaultsdanvarsagar sesuai dengan nilai tertentu untuk deployment Anda:DEPLOYMENT_NAME: nama unik untuk deployment, yang harus memiliki panjang antara 6 dan 30 karakter. Jika nama deployment tidak unik dalam project, pembuatan cluster akan gagal. Nilai defaultnya adalahgke-h4d.BUCKET_NAME: nama bucket Cloud Storage yang Anda buat pada langkah sebelumnya.PROJECT_ID: ID project Anda Google Cloud .COMPUTE_REGION: region komputasi untuk cluster, yang harus cocok dengan region tempat mesin tersedia untuk reservasi Anda.COMPUTE_ZONE: zona komputasi untuk node pool mesin H4D. Perhatikan bahwa zona ini harus cocok dengan zona tempat mesin tersedia dalam reservasi Anda.NODE_COUNT: jumlah node H4D di cluster Anda.IP_ADDRESS/SUFFIX: Rentang alamat IP yang ingin Anda izinkan untuk terhubung dengan cluster. Blok CIDR ini harus menyertakan alamat IP mesin yang ingin Anda gunakan untuk memanggil Terraform. Untuk mengetahui informasi selengkapnya, lihat Cara kerja jaringan yang diotorisasi.Untuk kolom
reservation, gunakan salah satu hal berikut, bergantung pada apakah Anda ingin menargetkan blok tertentu dalam reservasi saat menyediakan node pool:- Untuk menempatkan node pool di mana saja dalam reservasi, berikan nama reservasi Anda (
RESERVATION_NAME). Untuk menargetkan blok tertentu dalam reservasi Anda, gunakan nama reservasi dan blok dalam format berikut:
RESERVATION_NAME/reservationBlocks/BLOCK_NAMEJika Anda tidak mengetahui blok mana yang tersedia dalam reservasi Anda, lihat Melihat topologi reservasi.
- Untuk menempatkan node pool di mana saja dalam reservasi, berikan nama reservasi Anda (
Buat Kredensial Default Aplikasi (ADC) untuk memberikan akses ke Terraform. Jika menggunakan Cloud Shell, Anda dapat menjalankan perintah berikut:
gcloud auth application-default loginDeploy blueprint untuk menyediakan infrastruktur GKE menggunakan jenis mesin H4D:
./gcluster deploy -d examples/gke-h4d/gke-h4d-deployment.yaml examples/gke-h4d/gke-h4d.yamlSaat diminta, pilih (A)pply untuk men-deploy blueprint.
Selain itu, blueprint ini menyediakan instance Filestore dan menghubungkannya ke cluster GKE dengan Volume Persisten (PV). Contoh template Tugas disertakan dalam blueprint ini. Template ini menjalankan Tugas paralel yang membaca dan menulis data ke penyimpanan bersama ini.
kubectl createditampilkan dalam output deployment yang dapat digunakan untuk memicu Tugas contoh.
Google Cloud CLI
Ganti nilai berikut untuk perintah di bagian ini:
PROJECT_ID: ID project Anda . Google CloudCLUSTER_NAME: nama cluster Anda.CONTROL_PLANE_LOCATION: lokasi Compute Engine dari bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona. Cluster regional direkomendasikan untuk workload produksi. Untuk cluster regional, region harus menyertakan zona tempat H4D tersedia. Untuk cluster zona, zona harus memiliki ketersediaan H4D. Jika Anda menggunakan reservasi, region dan zona harus cocok dengan region dan zona reservasi.COMPUTE_ZONE: zona node pool Anda. Ini harus berupa zona tempat H4D tersedia. Jika Anda menggunakan reservasi, region dan zona harus cocok dengan region dan zona reservasi. Anda tidak dapat membuat node pool multi-zona jika ingin node H4D berfungsi dengan Cloud 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).
Buat cluster dengan gcloud CLI menggunakan langkah-langkah berikut:
Buat VPC dan subnet: Konfigurasi Virtual Private Cloud (VPC) dan subnet default untuk cluster. Untuk kartu antarmuka jaringan (NIC) IRDMA, buat VPC dan subnet khusus. VPC yang dibuat dengan petunjuk berikut menggunakan, sesuai kebutuhan, profil jaringan VPC Falcon.
Buat VPC untuk antarmuka jaringan IRDMA yang menggunakan protokol transportasi RDMA melalui Falcon:
gcloud compute --project=PROJECT_ID \ networks create RDMA_NETWORK_PREFIX-net \ --network-profile=COMPUTE_ZONE-vpc-falcon \ --subnet-mode=customBuat subnet untuk jaringan VPC Falcon:
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
Buat cluster GKE dengan multi-jaringan: Buat cluster. Secara opsional, dengan perintah ini, Anda dapat secara eksplisit memberikan rentang CIDR sekunder 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 menggunakan flag ini, pastikan rentang CIDR tidak tumpang-tindih dengan rentang subnet untuk jaringan node tambahan. Misalnya,
SERVICE_CIDR=10.65.0.0/19danPOD_CIDR=10.64.0.0/19.Buat objek jaringan GKE: Konfigurasi jaringan VPC dengan menggunakan kumpulan parameter jaringan GKE. Terapkan objek
GKENetworkParamSetdanNetwork: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 EOFBuat node pool H4D: Buat node pool yang menggunakan H4D dan terhubung ke jaringan VPC Falcon. Anda dapat menggunakan node H4D terikat reservasi dan penempatan rapat. Atau, Anda dapat menggunakan node H4D yang disediakan dengan flex-start. Pilih tab yang sesuai dengan opsi konsumsi Anda:
Terikat reservasi
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 berlokasi fisik relatif satu sama lain dalam zona.
Jalankan perintah berikut:
gcloud compute resource-policies create group-placement POLICY_NAME \ --region REGION --collocation collocatedGanti nilai berikut:
POLICY_NAME: nama kebijakan resource (misalnya,h4d-compact).REGION: region cluster Anda.
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_UNAVAILABLEGanti
MAX_UNAVAILABLEdengan 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 VPC Falcon:
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=0Ganti
MAX_NODESdengan 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 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
Untuk mengetahui informasi selengkapnya tentang image yang mendukung IRDMA, lihat tab Interfaces di tabel dalam Detail sistem operasi.
Mengonfigurasi manifes untuk RDMA
Aktifkan Cloud 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 Cloud RDMA dengan menjalankan rping antara Pod server dan klien:
Di Pod server, jalankan perintah
rping:rping -sDi Pod klien, jalankan perintah
rping:rping -c -C 2 -d -a SERVER_IPGanti
SERVER_IPdengan alamat IP Pod server.Output, jika 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 komputasi berperforma tinggi lebih lanjut.
- Pelajari praktik terbaik untuk menjalankan workload HPC di GKE.
- Beberapa workload HPC memerlukan Message Passing Interface (MPI) untuk menjalankan workload multi-node yang terkait erat dengan RDMA. Untuk mengetahui informasi selengkapnya tentang cara menyiapkan MPI di cluster untuk node H4D Anda, lihat Menjalankan Workload MPI di GKE H4D.