Membuat cluster GKE yang dioptimalkan untuk AI kustom yang menggunakan A4 atau A3 Ultra

Halaman ini menunjukkan cara membuat cluster Google Kubernetes Engine (GKE) yang dioptimalkan untuk AI yang menggunakan virtual machine (VM) A4 atau A3 Ultra untuk mendukung workload AI dan ML Anda. Untuk A4X, lihat Membuat cluster GKE yang dioptimalkan untuk AI kustom yang menggunakan A4X.

Seri mesin A4 dan A3 Ultra dirancang untuk memungkinkan Anda menjalankan cluster AI/ML skala besar dengan fitur seperti penempatan workload yang ditargetkan, kontrol pemeliharaan cluster tingkat lanjut, dan penjadwalan yang sesuai topologi. Untuk mengetahui informasi selengkapnya, lihat Ringkasan pengelolaan cluster.

GKE menyediakan satu platform untuk menjalankan beragam set workload bagi organisasi Anda, sehingga mengurangi beban operasional dalam mengelola beberapa platform. Anda dapat menjalankan workload seperti pra-pelatihan terdistribusi berperforma tinggi, penyesuaian model, inferensi model, penayangan aplikasi, dan layanan pendukung.

Di halaman ini, Anda akan mempelajari cara membuat cluster GKE dengan Google Cloud CLI untuk mendapatkan fleksibilitas maksimum dalam mengonfigurasi cluster berdasarkan kebutuhan workload Anda. Atau, Anda dapat memilih untuk menggunakan Cluster Toolkit guna men-deploy cluster dengan cepat menggunakan setelan default yang mencerminkan praktik terbaik untuk banyak kasus penggunaan. Untuk mengetahui petunjuk cara melakukannya, lihat Membuat cluster GKE yang dioptimalkan untuk AI dengan konfigurasi default.

Opsi konfigurasi cluster dengan GPUDirect RDMA

Untuk membuat cluster dengan Google Cloud CLI, Anda dapat memilih salah satu opsi konfigurasi cluster berikut:

  • Jika Anda tidak berencana menjalankan workload AI terdistribusi: buat cluster GKE tanpa menggunakan GPUDirect RDMA.
  • Jika Anda berencana menjalankan workload AI terdistribusi: buat cluster GKE dengan GPUDirect RDMA.

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. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan guna membuat dan mengelola cluster GKE, minta administrator untuk memberi Anda peran IAM berikut pada project:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Memilih opsi pemakaian dan mendapatkan kapasitas

  1. Pilih opsi pemakaian. Buat pilihan berdasarkan cara Anda ingin mendapatkan dan menggunakan resource GPU. Untuk mengetahui informasi selengkapnya, lihat Memilih opsi pemakaian.

    Untuk GKE, pertimbangkan informasi tambahan berikut saat Anda memilih opsi penggunaan:

  2. Dapatkan kapasitas. Pelajari cara mendapatkan kapasitas untuk opsi penggunaan Anda.

Persyaratan

Persyaratan berikut berlaku untuk cluster GKE yang dioptimalkan untuk AI:

  • Untuk menggunakan model penyediaan mulai fleksibel, Anda harus menggunakan GKE versi 1.32.2-gke.1652000 atau yang lebih baru.
  • Pastikan Anda menggunakan versi driver GPU minimum, bergantung pada jenis mesin:

    • A4: GPU B200 di VM A4 memerlukan versi driver GPU R570 minimum. Secara default, GKE otomatis menginstal versi driver ini di semua node A4 yang menjalankan versi minimum yang diperlukan untuk A4, yaitu 1.32.1-gke.1729000 atau yang lebih baru.
    • A3 Ultra: GPU H200 di VM A3 Ultra memerlukan versi driver GPU R550 minimum, yang tersedia di GKE versi 1.31 sebagai versi driver latest. Untuk VM A3 Ultra, Anda harus menetapkan nilai kolom gpu-driver-version=latest dengan GKE versi 1.31. Untuk GKE versi 1.31.5-gke.1169000 atau yang lebih baru, GKE secara otomatis menginstal versi driver GPU R550 di node A3 Ultra secara default, termasuk saat Anda menghilangkan tanda gpu-driver-version.
  • Untuk menggunakan GPUDirect RDMA, persyaratan tambahan berikut berlaku:

    • Gunakan versi minimum berikut, bergantung pada jenis mesin:
      • A4: gunakan versi 1.32.2-gke.1475000 atau yang lebih baru.
      • A3 Ultra: gunakan versi 1.31.4-gke.1183000 atau yang lebih baru.
    • Node GKE harus menggunakan image node Container-Optimized OS. Image node Ubuntu dan Windows tidak didukung.
    • Workload GKE Anda harus menggunakan semua GPU yang tersedia dan Pod Anda harus menggunakan semua kartu antarmuka jaringan (NIC) sekunder yang tersedia di satu node GKE. Beberapa Pod tidak dapat berbagi RDMA di satu node GKE.
    • Penyiapan ini menjalankan pengujian NCCL. Untuk menjalankan pengujian NCCL ini, Anda harus memiliki kuota VM minimum sebesar 2 (yaitu, 16 GPU jika Anda menggunakan jenis mesin a4-highgpu-8g atau a3-ultragpu-8g).
    • GPUDirect RDMA tidak kompatibel dengan NCCL Fast Socket atau GPUDirect TCPX/TCPXO. Jangan mengaktifkan NCCL Fast Socket atau menginstal plugin TCPX/TCPXO di cluster yang menggunakan GPUDirect RDMA.
  • Pastikan Anda menggunakan lokasi yang memiliki ketersediaan untuk jenis mesin yang Anda pilih. Untuk mengetahui informasi selengkapnya, lihat Lokasi GPU.

Membuat cluster GKE yang dioptimalkan untuk AI

Ikuti petunjuk di bagian ini untuk membuat cluster GKE yang memenuhi persyaratan untuk cluster GKE yang dioptimalkan untuk AI. Anda dapat memilih antara membuat cluster dengan atau tanpa GPUDirect RDMA.

Pertimbangan untuk membuat cluster

Saat Anda membuat cluster, pertimbangkan informasi berikut:

  • Pilih lokasi cluster:
    • Pastikan Anda menggunakan lokasi yang memiliki ketersediaan untuk jenis mesin yang Anda pilih. Untuk mengetahui informasi selengkapnya, lihat Lokasi GPU.
    • Untuk reservasi padat, Anda dapat membuat cluster zonal. Dalam hal ini, ganti flag --region dengan flag --zone=COMPUTE_ZONE, dengan COMPUTE_ZONE adalah zona bidang kontrol Anda.
    • Untuk beban kerja yang berjalan di lebih dari 1.000 node dan yang memerlukan latensi jaringan rendah antar-node, Anda dapat membuat cluster regional. Untuk melakukan kolokasi fisik pada node yang sensitif terhadap performa, buat node pool GPU Anda dalam satu zona menggunakan flag --node-locations.
  • Pilih versi driver:
    • Versi driver dapat berupa salah satu nilai berikut:
      • default: menginstal versi driver default untuk versi node GKE Anda. Untuk mengetahui informasi selengkapnya tentang persyaratan untuk versi driver default, lihat bagian Persyaratan.
      • latest: menginstal versi driver terbaru yang tersedia untuk versi GKE Anda. Opsi ini hanya tersedia untuk node yang menggunakan Container-Optimized OS.
      • disabled: melewati penginstalan driver otomatis. Anda harus menginstal driver secara manual setelah membuat node pool.
    • Untuk mengetahui informasi selengkapnya tentang versi driver GPU default dan terbaru untuk versi node GKE, lihat Menginstal driver GPU NVIDIA secara manual.
  • Pilih afinitas reservasi:

    • Anda dapat menemukan informasi tentang reservasi Anda, seperti nama reservasi atau nama blok tertentu dalam reservasi Anda. Untuk menemukan nilai ini, lihat Melihat permintaan pemesanan untuk masa mendatang.
    • Flag --reservation-affinity dapat mengambil nilai specific atau any. Namun, untuk workload AI terdistribusi berperforma tinggi, sebaiknya gunakan reservasi tertentu.
    • Saat Anda menggunakan reservasi tertentu, termasuk reservasi bersama, tentukan nilai flag --reservation dalam format berikut:

      projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME
      

      Ganti kode berikut:

      • PROJECT_ID: Google Cloud Project ID Anda.
      • RESERVATION_NAME: nama pemesanan Anda.
      • BLOCK_NAME: nama blok tertentu dalam reservasi.

Membuat cluster tanpa GPUDirect RDMA

Untuk membuat cluster tanpa GPUDirect RDMA, gunakan petunjuk berikut untuk membuat cluster dengan node pool default berbasis CPU dan node pool tambahan dengan GPU. Pendekatan ini memungkinkan kumpulan node default menjalankan layanan lain.

  1. Membuat cluster:

      gcloud container clusters create CLUSTER_NAME \
          --cluster-version=CLUSTER_VERSION \
          --region=COMPUTE_REGION
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster baru.
    • CLUSTER_VERSION: versi cluster baru Anda. Untuk mengetahui informasi selengkapnya tentang versi GKE yang mendukung konfigurasi Anda, lihat bagian Persyaratan.
    • COMPUTE_REGION: region cluster baru Anda. Jika Anda berencana membuat cluster zona, gunakan flag --zone, bukan flag --region, misalnya: --zone=COMPUTE_ZONE. Ganti COMPUTE_ZONE dengan zona bidang kontrol.
  2. Buat node pool berbasis GPU dengan salah satu perintah berikut. Perintah yang perlu Anda jalankan bergantung pada opsi penggunaan yang Anda gunakan untuk deployment. Pilih tab yang sesuai dengan model penyediaan opsi konsumsi Anda.

    Terikat dengan reservasi

    Untuk penyediaan yang terikat dengan reservasi, jalankan perintah berikut:

      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
    

    Ganti kode berikut:

    • NODE_POOL_NAME: nama node pool.
    • COMPUTE_REGION: region cluster baru Anda.
    • CLUSTER_NAME: nama cluster baru.
    • COMPUTE_ZONE: zona node pool Anda.
    • GPU_TYPE: jenis akselerator GPU:

      • VM A4: masukkan nvidia-b200.
      • VM A3 Ultra: masukkan nvidia-h200-141gb.
    • AMOUNT: jumlah GPU yang akan dipasang ke node di node pool. Misalnya, untuk VM a4-highgpu-8g dan a3-ultragpu-8g, jumlah GPU adalah 8.

    • DRIVER_VERSION: versi driver NVIDIA yang akan diinstal. Nilainya dapat berupa salah satu nilai berikut: default, latest, atau disabled.

    • MACHINE_TYPE: jenis mesin Compute Engine untuk node. Misalnya, gunakan a4-highgpu-8g untuk VM A4, dan a3-ultragpu-8g untuk VM A3 Ultra.

    • NUM_NODES: jumlah node untuk node pool.

    • RESERVATION_NAME: nama pemesanan Anda. Untuk menemukan nilai ini, lihat Melihat permintaan pemesanan untuk masa mendatang.

    • BLOCK_NAME: nama blok tertentu dalam reservasi. Untuk mengetahui nilai ini, lihat Melihat permintaan pemesanan untuk masa mendatang.

    Flex-start

    Untuk penyediaan mulai fleksibel, jalankan perintah berikut:

      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]
    

    Ganti kode berikut:

    • NODE_POOL_NAME: nama node pool.
    • COMPUTE_REGION: region cluster baru Anda.
    • CLUSTER_NAME: nama cluster baru.
    • COMPUTE_ZONE: zona node pool Anda.
    • GPU_TYPE: jenis akselerator GPU:

      • VM A4: masukkan nvidia-b200.
      • VM A3 Ultra: masukkan nvidia-h200-141gb.
    • AMOUNT: jumlah GPU yang akan dipasang ke node di node pool. Misalnya, untuk VM a4-highgpu-8g dan a3-ultragpu-8g, jumlah GPU adalah 8.

    • DRIVER_VERSION: versi driver NVIDIA yang akan diinstal. Nilainya dapat berupa salah satu nilai berikut: default, latest, atau disabled.

    • MACHINE_TYPE: jenis mesin Compute Engine untuk node. Misalnya, gunakan a4-highgpu-8g untuk VM A4, dan a3-ultragpu-8g untuk VM A3 Ultra.

    • TOTAL_MAX_NODES: jumlah maksimum node yang akan diskalakan secara otomatis untuk seluruh node pool.

      Jika Anda ingin menggunakan flex-start dengan penyediaan dalam antrean, sertakan flag --enable-queued-provisioning.

      Untuk mengetahui informasi selengkapnya tentang penggunaan mulai fleksibel, lihat Menjalankan workload skala besar dengan mulai fleksibel dengan penyediaan dalam antrean.

    Spot

    Untuk penyediaan spot, jalankan perintah berikut:

      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
    

    Ganti kode berikut:

    • NODE_POOL_NAME: nama node pool.
    • COMPUTE_REGION: region cluster baru Anda.
    • CLUSTER_NAME: nama cluster baru.
    • COMPUTE_ZONE: zona node pool Anda.
    • GPU_TYPE: jenis akselerator GPU:

      • VM A4: masukkan nvidia-b200.
      • VM A3 Ultra: masukkan nvidia-h200-141gb.
    • AMOUNT: jumlah GPU yang akan dipasang ke node di node pool. Misalnya, untuk VM a4-highgpu-8g dan a3-ultragpu-8g, jumlah GPU adalah 8.

    • DRIVER_VERSION: versi driver NVIDIA yang akan diinstal. Nilainya dapat berupa salah satu nilai berikut: default, latest, atau disabled.

    • MACHINE_TYPE: jenis mesin Compute Engine untuk node. Misalnya, gunakan a4-highgpu-8g untuk VM A4, dan a3-ultragpu-8g untuk VM A3 Ultra.

    • NUM_NODES: jumlah node untuk node pool.

      Untuk mengetahui informasi selengkapnya tentang cara membuat cluster dengan Spot VM, lihat artikel Menjalankan workload fault-tolerant dengan biaya lebih rendah menggunakan Spot VM.

  3. Hubungkan ke cluster Anda, sehingga Anda dapat menjalankan perintah kubectl di bagian berikutnya:

      gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGION
    

    Ganti kode berikut:

Membuat cluster dengan GPUDirect RDMA

Untuk beban kerja AI terdistribusi, beberapa node GPU sering kali ditautkan bersama untuk bekerja sebagai satu komputer. VM A4 dan VM A3 Ultra dilengkapi dengan adaptor jaringan Titanium ML, yang dibangun di NIC NVIDIA ConnectX-7 (CX7). VM A4 dan VM A3 Ultra memberikan traffic antar-GPU antar-node 3,2 Tbps yang tidak memblokir dengan menggunakan RDMA over Converged Ethernet (RoCE). RoCE memungkinkan penskalaan dan kolaborasi di beberapa GPU dengan memberikan pengalaman cloud berperforma tinggi untuk workload AI.

Untuk mengetahui informasi selengkapnya tentang cara membuat cluster GKE menggunakan Google Cloud CLI dan GPUDirect TCPX (VM A3 Tinggi) atau TCPXO (VM A3 Mega), lihat memaksimalkan bandwidth jaringan GPU di cluster mode Autopilot, atau memaksimalkan bandwidth jaringan GPU di cluster mode Standar.

Untuk membuat cluster GKE dalam mode Autopilot atau Standard dengan GPUDirect RDMA, selesaikan langkah-langkah berikut, yang dijelaskan di bagian berikutnya:

  1. Membuat VPC dan subnet
  2. Membuat cluster GKE dengan multi-networking
  3. Membuat objek jaringan GKE
  4. Instal biner RDMA dan konfigurasi NCCL
  5. Men-deploy dan menjalankan uji NCCL
  6. Mengonfigurasi manifes Pod untuk GPUDirect-RDMA

Membuat VPC dan subnet

VM A4 dan VM A3 Ultra memiliki konfigurasi berikut:

  • Delapan GPU NVIDIA B200 (A4) atau H200 (A3 Ultra) per mesin virtual yang terhubung dengan NVLink
  • Dua CPU Intel Emerald Rapids
  • Delapan NIC CX-7 400 Gbps untuk jaringan antar-GPU
  • Dua NIC Google Titanium 200 Gbps untuk layanan eksternal

Workload AI dan ML, seperti pelatihan terdistribusi, memerlukan akselerasi yang canggih untuk mengoptimalkan performa dengan mengurangi waktu penyelesaian tugas. Untuk beban kerja yang memerlukan performa tinggi, throughput tinggi, dan latensi rendah, GPUDirect RDMA mengurangi hop jaringan yang diperlukan untuk mentransfer payload ke dan dari GPU, sehingga menggunakan bandwidth jaringan yang tersedia secara lebih efisien. GPUDirect RDMA dirancang untuk meningkatkan throughput secara signifikan dalam skala besar dibandingkan dengan GPU yang tidak menggunakan GPUDirect.

Salah satu NIC Google Titanium yang terkait dengan CPU menggunakan jaringan default di GKE. Anda tidak perlu membuat VPC baru untuk NIC ini jika memiliki rentang alamat IP yang cukup untuk jaringan default.

Anda dapat membuat satu VPC untuk NIC Titanium CPU kedua (gVNIC) dan VPC lain untuk delapan NIC RDMA CX-7 menggunakan perintah ini.

  1. Tetapkan variabel lingkungan agar sesuai dengan deployment Anda:

    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"
    

    Ganti variabel berikut:

    • COMPUTE_REGION: region cluster Anda.
    • COMPUTE_ZONE: zona node pool Anda.
    • PROJECT_ID: Google Cloud Project ID Anda.
    • GVNIC_NETWORK_PREFIX: a4high-gvnic untuk VM A4 atau a3ultra-gvnic untuk VM A3 Ultra.
    • RDMA_NETWORK_PREFIX: a4high-rdma untuk VM A4 atau a3ultra-rdma untuk VM A3 Ultra.
  2. Buat dua jaringan VPC:

    # 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
    

Membuat cluster GKE dengan multi-jaringan

Autopilot

  1. Buat cluster GKE Autopilot dengan multi-networking:

    gcloud container clusters create-auto CLUSTER_NAME \
        --enable-multi-networking \
        --cluster-version=CLUSTER_VERSION \
        --region=COMPUTE_REGION
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda.
    • CLUSTER_VERSION: versi cluster baru Anda. Untuk mengetahui versi GKE yang mendukung konfigurasi Anda, lihat bagian Persyaratan.
    • COMPUTE_REGION: nama region komputasi.
  2. Hubungkan ke cluster Anda, sehingga Anda dapat menjalankan perintah kubectl di bagian berikutnya:

    gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGION
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda.
    • COMPUTE_REGION: nama region komputasi.

    Untuk mengetahui informasi selengkapnya, lihat Menginstal kubectl dan mengonfigurasi akses cluster.

Standar

Buat cluster GKE Standard dan node pool GPU dengan multi-jaringan:

  1. Membuat cluster:

    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]
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda.
    • CLUSTER_VERSION: versi cluster baru Anda. Untuk mengetahui versi GKE yang mendukung konfigurasi Anda, lihat bagian Persyaratan.
    • COMPUTE_REGION: nama region komputasi.

    Secara opsional, Anda dapat memberikan rentang CIDR sekunder secara eksplisit untuk layanan dan Pod. Jika Anda menggunakan flag opsional ini, ganti variabel berikut:

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

    Saat menggunakan flag ini, Anda harus memverifikasi bahwa rentang CIDR tidak tumpang-tindih dengan rentang subnet untuk jaringan node tambahan. Misalnya, rentang dalam nilai SERVICE_CIDR=10.65.0.0/19 dan POD_CIDR=10.64.0.0/19 tidak tumpang-tindih satu sama lain. Untuk mengetahui informasi selengkapnya, lihat Menambahkan rentang alamat IPv4 Pod.

  2. Buat node pool. Perintah yang perlu Anda jalankan bergantung pada opsi penggunaan yang Anda gunakan untuk deployment. Pilih tab yang sesuai dengan model penyediaan opsi konsumsi Anda.

    Terikat dengan reservasi

    Untuk penyediaan yang terikat dengan reservasi, jalankan perintah berikut:

    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
    

    Ganti kode berikut:

    • NODE_POOL_NAME: nama node pool.
    • COMPUTE_REGION: region cluster baru Anda.
    • CLUSTER_NAME: nama cluster baru.
    • COMPUTE_ZONE: zona node pool Anda.
    • GPU_TYPE: jenis akselerator GPU:

      • VM A4: masukkan nvidia-b200.
      • VM A3 Ultra: masukkan nvidia-h200-141gb.
    • AMOUNT: jumlah GPU yang akan dipasang ke node di node pool. Misalnya, untuk VM a4-highgpu-8g dan a3-ultragpu-8g, jumlah GPU adalah 8.

    • DRIVER_VERSION: versi driver NVIDIA yang akan diinstal. Nilainya dapat berupa salah satu nilai berikut: default, latest, atau disabled.

    • MACHINE_TYPE: jenis mesin Compute Engine untuk node. Misalnya, gunakan a4-highgpu-8g untuk VM A4, dan a3-ultragpu-8g untuk VM A3 Ultra.

    • MACHINE_TYPE: jenis mesin Compute Engine untuk node. Misalnya, gunakan a4-highgpu-8g untuk VM A4, dan a3-ultragpu-8g untuk VM A3 Ultra.

    • NUM_NODES: jumlah node untuk node pool. Untuk flex-start, nilai ini harus ditetapkan ke 0.

    • RESERVATION_NAME: nama pemesanan Anda. Untuk menemukan nilai ini, lihat Melihat permintaan pemesanan untuk masa mendatang.

    • BLOCK_NAME: nama blok tertentu dalam reservasi. Untuk mengetahui nilai ini, lihat Melihat permintaan pemesanan untuk masa mendatang.

    Flex-start

    Untuk penyediaan mulai fleksibel, jalankan perintah berikut:

    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
    

    Ganti kode berikut:

    • NODE_POOL_NAME: nama node pool.
    • COMPUTE_REGION: region cluster baru Anda.
    • CLUSTER_NAME: nama cluster baru.
    • COMPUTE_ZONE: zona node pool Anda.
    • GPU_TYPE: jenis akselerator GPU:

      • VM A4: masukkan nvidia-b200.
      • VM A3 Ultra: masukkan nvidia-h200-141gb.
    • AMOUNT: jumlah GPU yang akan dipasang ke node di node pool. Misalnya, untuk VM a4-highgpu-8g dan a3-ultragpu-8g, jumlah GPU adalah 8.

    • DRIVER_VERSION: versi driver NVIDIA yang akan diinstal. Nilainya dapat berupa salah satu nilai berikut: default, latest, atau disabled.

    • MACHINE_TYPE: jenis mesin Compute Engine untuk node. Misalnya, gunakan a4-highgpu-8g untuk VM A4, dan a3-ultragpu-8g untuk VM A3 Ultra.

    • MACHINE_TYPE: jenis mesin Compute Engine untuk node. Misalnya, gunakan a4-highgpu-8g untuk VM A4, dan a3-ultragpu-8g untuk VM A3 Ultra.

    • NUM_NODES: jumlah node untuk node pool. Untuk flex-start, nilai ini harus ditetapkan ke 0.

    • TOTAL_MAX_NODES: jumlah maksimum node yang akan diskalakan secara otomatis untuk seluruh node pool.

    Jika Anda ingin menggunakan flex-start dengan penyediaan dalam antrean, sertakan flag --enable-queued-provisioning.

    Untuk mengetahui informasi selengkapnya tentang penggunaan mulai fleksibel, lihat Menjalankan workload skala besar dengan mulai fleksibel dengan penyediaan dalam antrean.

  3. Hubungkan ke cluster Anda, sehingga Anda dapat menjalankan perintah kubectl di bagian berikutnya:

    gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGION
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda.
    • COMPUTE_REGION: nama region komputasi.

    Untuk mengetahui informasi selengkapnya, lihat Menginstal kubectl dan mengonfigurasi akses cluster.

Membuat objek jaringan GKE

Jaringan VPC yang dibuat di bagian sebelumnya perlu dikonfigurasi melalui set parameter jaringan GKE. Secara khusus, NIC Titanium CPU kedua (gVNIC) harus dikonfigurasi dalam mode NetDevice dan masing-masing dari delapan NIC RDMA CX-7 harus dikonfigurasi dalam mode RDMA.

Perintah ini menggunakan nama berikut:

  • VPC CPU Titanium NIC (gVNIC) diberi nama ${GVNIC_NETWORK_PREFIX}-net dengan subnet bernama ${GVNIC_NETWORK_PREFIX}-sub
  • VPC NIC RDMA CX-7 diberi nama ${RDMA_NETWORK_PREFIX}-net dengan subnet bernama ${RDMA_NETWORK_PREFIX}-sub-[0…7]

Buat objek jaringan GKE dengan menjalankan perintah berikut:

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

Instal biner RDMA dan konfigurasi NCCL

Terapkan DaemonSet berikut untuk menginstal biner RDMA dan library NCCL di setiap node. Di setiap VM pokok, biner RDMA diinstal di direktori /home/kubernetes/bin/gib, dan library NCCL diinstal di direktori /home/kubernetes/bin/nvidia/lib64.

Autopilot

Untuk mode Autopilot GKE, jalankan perintah berikut:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/gpudirect-rdma/nccl-rdma-installer-autopilot.yaml

Standar

Untuk mode GKE Standard, jalankan perintah berikut:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/gpudirect-rdma/nccl-rdma-installer.yaml

Menjalankan pengujian NCCL

Untuk memvalidasi fungsi cluster yang disediakan, Anda dapat menjalankan pengujian NCCL. Untuk mengetahui petunjuknya, lihat Men-deploy dan menjalankan pengujian NCCL.

Mengonfigurasi manifes Pod untuk GPUDirect RDMA

Untuk menjalankan workload menggunakan GPUDirect RDMA, konfigurasi manifes Pod Anda dengan langkah-langkah berikut:

  1. Tambahkan anotasi berikut ke metadata Pod.

    Autopilot

    Gunakan anotasi berikut untuk mode 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"}
        ]
    

    Standar

    Anotasi berikut untuk mode GKE Standard tidak menyertakan spesifikasigvnic-1, tetapi Anda dapat menambahkannya jika workload Anda memerlukannya.

    Gunakan anotasi berikut untuk mode 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"}
        ]
    
  2. Tentukan jenis GPU yang dipilih dan reservasi tertentu menggunakan pemilih node:

    spec:
      nodeSelector:
        cloud.google.com/gke-accelerator: ACCELERATOR
        cloud.google.com/reservation-name: RESERVATION_NAME
        cloud.google.com/reservation-affinity: "specific"
    

    Ganti kode berikut:

    • ACCELERATOR: akselerator yang Anda pesan dalam reservasi kapasitas Compute Engine. Anda harus menggunakan salah satu nilai berikut:
      • nvidia-b200: NVIDIA B200 (180 GB) untuk VM A4
      • nvidia-h200-141gb: NVIDIA H200 (141 GB) untuk VM A3 Ultra
    • RESERVATION_NAME: nama reservasi kapasitas Compute Engine.

    Untuk menggunakan reservasi bersama, atau blok dan sub-blok reservasi tertentu, lihat bagian masing-masing di Menggunakan resource jalur zona yang dipesan.

  3. Tambahkan volume berikut ke spesifikasi Pod:

    spec:
      volumes:
        - name: library-dir-host
          hostPath:
            path: /home/kubernetes/bin/nvidia
        - name: gib
          hostPath:
            path: /home/kubernetes/bin/gib
    
  4. Tambahkan pemasangan volume, variabel lingkungan, dan resource berikut ke container yang meminta GPU. Container workload Anda harus meminta kedelapan GPU:

    Autopilot

    Untuk mode GKE Autopilot, konfigurasi resource berikut:

    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
    

    Standar

    Untuk mode GKE Standard, konfigurasi resource berikut:

    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
    
  5. Tetapkan semua variabel lingkungan yang diperlukan untuk mengonfigurasi NCCL menggunakan skrip shell berikut dari container workload:

    source /usr/local/gib/scripts/set_nccl_env.sh
    

Tab berikut menyertakan contoh manifes Pod yang telah selesai.

Autopilot

Untuk mode Autopilot GKE, manifes Pod yang telah selesai akan terlihat serupa dengan berikut ini:

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
          ...

Standar

Untuk mode GKE Standard, manifes Pod yang telah selesai akan terlihat mirip dengan berikut ini:

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
          ...

Menguji performa jaringan untuk cluster yang menggunakan GPUDirect RDMA

Sebaiknya Anda memvalidasi fungsi cluster yang disediakan. Untuk melakukannya, gunakan uji NCCL/gIB, yaitu uji NVIDIA Collective Communications Library (NCCL) yang dioptimalkan untuk lingkungan Google.

Langkah berikutnya