Mengonfigurasi jaringan otomatis untuk VM akselerator

Dokumen ini menunjukkan cara menggunakan jaringan otomatis untuk VM akselerator, seperti GPU dan TPU, guna menyederhanakan konfigurasi jaringan untuk workload akselerator Google Kubernetes Engine (GKE). Hal ini penting untuk menjalankan kecerdasan buatan (AI), machine learning (ML), dan komputasi berperforma tinggi (HPC) di mesin yang dioptimalkan untuk akselerator.

Dokumen ini mengasumsikan pemahaman tentang konsep dasar GKE, workload GPU dan TPU, serta jaringan VPC. Secara khusus, Anda harus memahami:

Halaman ini ditujukan untuk Arsitek cloud dan Spesialis jaringan yang mendesain dan membangun arsitektur jaringan organisasi mereka. Untuk ringkasan semua set dokumentasi GKE, lihat Menjelajahi dokumentasi GKE. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang dirujuk dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.

GKE menyederhanakan pengoperasian AI dan ML berperforma tinggi di akselerator khusus. Dengan jaringan otomatis untuk VM akselerator, Anda dapat mengaktifkan konektivitas multi-jaringan berkecepatan tinggi—yang penting untuk protokol seperti RDMA—dengan satu tanda konfigurasi. Otomatisasi ini menghilangkan proses manual yang rumit dalam menyiapkan beberapa jaringan VPC, mengelola rentang alamat IP, dan mengonfigurasi antarmuka jaringan untuk setiap node pool dan Pod. Dengan menggunakan satu parameter saat membuat node pool, GKE menyediakan semua resource jaringan cloud dan Kubernetes yang diperlukan.

Terminologi

Istilah berikut penting untuk memahami arsitektur jaringan untuk VM akselerator.

  • Virtual Private Cloud (VPC): VPC adalah versi virtual dari jaringan fisik, yang diterapkan di dalam jaringan produksi Google. Jaringan ini menyediakan konektivitas untuk instance virtual machine (VM) Compute Engine, cluster GKE, dan resource lainnya.
  • NIC Titanium: NIC pintar yang mengurangi beban tugas pemrosesan jaringan dari CPU, sehingga CPU dapat berfokus pada workload Anda. Di mesin GPU, NIC menangani semua traffic yang bukan komunikasi GPU-ke-GPU langsung. Pada mesin TPU, semua NIC adalah NIC Titanium.
  • Subnetwork: Subnetwork adalah bagian tersegmentasi dari VPC yang lebih besar. Setiap subnetwork dikaitkan dengan region dan memiliki rentang alamat IP yang ditentukan.
  • Pengontrol Antarmuka Jaringan (NIC): NIC adalah antarmuka jaringan virtual yang menghubungkan instance VM ke jaringan. Setiap NIC terhubung ke VPC dan subnetwork tertentu.
  • Jaringan host: jaringan utama yang digunakan oleh antarmuka jaringan (NIC) utama node untuk komunikasi cluster umum, seperti traffic bidang kontrol dan jaringan Pod reguler.
  • Jaringan data: jaringan khusus untuk transfer data berperforma tinggi antara VM akselerator. Untuk GPU, ini sering kali berupa GPUDirect VPC dengan RDMA. Untuk TPU, ini mungkin merupakan jaringan host kedua.
  • Remote Direct Memory Access(RDMA): RDMA adalah teknologi yang memungkinkan perangkat jaringan bertukar data secara langsung dengan memori utama komputer tanpa melibatkan sistem operasi atau CPU. Hal ini secara signifikan mengurangi latensi dan meningkatkan throughput, yang sangat penting untuk workload HPC dan ML.
  • NVLink: NVLink adalah teknologi interkoneksi berkecepatan tinggi yang dikembangkan oleh NVIDIA untuk menghubungkan beberapa GPU dalam satu node, sehingga memungkinkan GPU tersebut berbagi memori dan bekerja sama pada set data besar.
  • Alokasi resource dinamis (DRA) Kubernetes: DRA adalah fitur Kubernetes yang menyediakan cara yang lebih fleksibel bagi Pod untuk meminta dan menggunakan resource, seperti GPU dan hardware khusus lainnya. Hal ini memungkinkan kontrol terperinci atas alokasi resource.

Cara kerja jaringan otomatis

Mesin yang dioptimalkan untuk akselerator memiliki arsitektur jaringan khusus untuk mendukung komunikasi throughput tinggi dan latensi rendah antara GPU dan TPU. Setiap mesin fisik berisi beberapa GPU atau TPU, yang sering kali terhubung oleh interkoneksi berkecepatan tinggi seperti NVLink. Mesin ini juga memiliki satu atau beberapa NIC untuk jaringan umum dan beberapa NIC GPU untuk interkoneksi berkecepatan tinggi.

Saat Anda membuat node GKE yang menggunakan jenis mesin yang dioptimalkan akselerator, GKE akan mengonfigurasi beberapa NIC di VM yang mendasarinya. NIC host terhubung ke jaringan VPC host untuk komunikasi dan pengelolaan cluster umum guna berkomunikasi dengan bidang kontrol. NIC GPU terhubung ke jaringan VPC khusus berperforma tinggi, sering kali dengan RDMA diaktifkan dan setelan MTU tinggi (8896), untuk memfasilitasi komunikasi GPUDirect.

Saat Pod meminta GPU atau TPU, Anda dapat mengonfigurasinya untuk mengakses antarmuka jaringan berperforma tinggi di node. Anda dapat meminta semua NIC yang tersedia atau subset tertentu. Setiap antarmuka jaringan yang diklaim dikhususkan untuk satu Pod dan tidak dibagikan. Konfigurasi jaringan ini memastikan Pod memiliki akses eksklusif ke bandwidth dan resource penuh antarmuka tersebut, yang merupakan manfaat utama untuk workload yang sensitif terhadap performa.

Batasan

  • Jaringan otomatis untuk VM akselerator tidak didukung di cluster Autopilot.
  • Jaringan otomatis mengharuskan cluster menggunakan GKE Dataplane V2.
  • Jenis mesin yang didukung: Jaringan otomatis didukung di kelompok mesin yang dioptimalkan untuk akselerator A3, A4, dan TPU Trillium (v6e).
  • Node pool satu zona diperlukan: Anda harus menggunakan node pool dengan satu zona.
  • Saat menggunakan DRANET terkelola GKE untuk mengonfigurasi workload, lihat pertimbangan utama dan batasan untuk DRANET terkelola GKE.
  • Anda tidak dapat menggunakan multi-network API dan DRANET secara bersamaan di nodepool yang sama. Anda harus memilih salah satu metode untuk lampiran jaringan untuk Pod Anda.

Konfigurasi jaringan mesin yang dioptimalkan untuk akselerator

Mesin yang dioptimalkan akselerator memiliki konfigurasi jaringan yang bervariasi, bergantung pada jenisnya. Tabel berikut merangkum spesifikasi jaringan untuk berbagai jenis mesin.

VM akselerator GPU

Jenis mesin Jumlah GPU Jumlah NIC Titanium Jumlah NIC GPU Teknologi GPUDirect VPC Tambahan
A3 8 (H100) 1 4 TCPX 4 untuk NIC GPU
A3 Mega 8 (H100) 1 8 TCPXO 8 untuk NIC GPU
A3 Ultra 8 (H200) 2 8 RDMA 2 (1 untuk NIC kedua, 1 untuk NIC GPU)
A4 8 (B200) 2 8 RDMA 2 (1 untuk NIC kedua, 1 untuk NIC GPU)
A4X 4 (GB200) 1 4 RDMA 2 (1 untuk NIC kedua, 1 untuk NIC GPU)

VM akselerator TPU

Jenis mesin Jumlah TPU chip Jumlah NIC VPC Tambahan
TPU Trillium (v6e) (ct6e-standard-4t) 4 2 2 (1 untuk NIC ke-2, 1 untuk VNIC tambahan di NIC ke-1)

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.
  • Pastikan cluster Anda menggunakan GKE versi 1.34.1-gke.1829001 atau yang lebih baru.

  • Pastikan cluster Anda memiliki GKE Dataplane V2. Anda dapat mengaktifkan fitur ini saat membuat cluster baru atau mengupdate cluster yang sudah ada.

    • Membuat cluster baru:

      gcloud container clusters create CLUSTER_NAME \
        --cluster-version=CLUSTER_VERSION \
        --enable-dataplane-v2
      

      Ganti kode berikut:

      • CLUSTER_NAME: nama cluster baru.
      • CLUSTER_VERSION: versi cluster Anda, harus 1.34.1-gke.1829001 atau yang lebih baru.
    • Memperbarui cluster yang ada:

      gcloud container clusters update CLUSTER_NAME \
          --enable-dataplane-v2
      

      Ganti CLUSTER_NAME dengan nama cluster Anda.

  • Jika Anda berencana men-deploy workload GPU yang menggunakan RDMA, verifikasi keberadaan resource DeviceClass:

    kubectl get deviceclass mrdma.google.com
    

Membuat node pool dengan profil jaringan default

Untuk membuat jaringan yang secara otomatis menghubungkan semua mesin GPU atau TPU dalam satu zona, buat node pool dengan profil jaringan akselerator auto.

gcloud

Untuk membuat node pool dengan profil jaringan yang dikonfigurasi secara otomatis, jalankan perintah berikut:

gcloud beta container node-pools create NODE_POOL_NAME \
    --accelerator-network-profile=auto \
    --node-locations=ZONE \
    --machine-type=MACHINE_TYPE

Untuk mengetahui informasi selengkapnya tentang cara membuat node pool dengan akselerator, lihat Menjalankan GPU di node pool Autopilot dan Men-deploy workload TPU di Autopilot. Saat Anda mengikuti petunjuk dalam dokumen ini, tambahkan tanda --accelerator-network-profile=auto ke perintah gcloud container node-pools create.

Untuk node pool slice TPU multi-host, Anda juga perlu menambahkan tanda --tpu-topology.

Ganti kode berikut:

  • NODE_POOL_NAME: nama node pool baru.
  • ZONE: zona untuk node pool.
  • MACHINE_TYPE: jenis mesin untuk node, misalnya, a3-ultragpu-8g.

REST

Dalam permintaan ke metode nodePools.create, tentukan kolom accelerator_network_profile:

{
  "nodePool": {
    "name": "NODE_POOL_NAME",
    "machineType": "MACHINE_TYPE",
    ...
    "accelerator_network_profile": "auto"
  }
}

Ganti kode berikut:

  • NODE_POOL_NAME: nama node pool baru.
  • MACHINE_TYPE: jenis mesin untuk node, misalnya, a3-ultragpu-8g.

Menjadwalkan workload yang menggunakan GPU

Bagian berikut menunjukkan cara mengonfigurasi node pool dan workload GPU untuk menggunakan antarmuka jaringan RDMA dengan DRANET yang dikelola GKE. Untuk mengetahui detail selengkapnya, lihat Mengalokasikan resource jaringan menggunakan DRANET yang dikelola GKE.

Mengaktifkan driver DRANET terkelola GKE di node pool GPU

Untuk mengaktifkan driver GKE DRANET di node pool GPU yang mendukung RDMA, tambahkan label cloud.google.com/gke-networking-dra-driver=true saat Anda membuat node pool.

gcloud beta container node-pools create NODE_POOL_NAME \
  --region=REGION \
  --cluster=CLUSTER_NAME \
  --node-locations=NODE_LOCATIONS \
  --accelerator type=ACCELERATOR_TYPE,count=ACCELERATOR_COUNT,gpu-driver-version=DRIVER_VERSION \
  --machine-type=MACHINE_TYPE \
  --num-nodes=NUM_NODES \
  --reservation-affinity=specific \
  --reservation=projects/RESERVATION_PROJECT/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK \
  --accelerator-network-profile=auto \
  --node-labels=cloud.google.com/gke-networking-dra-driver=true

Ganti kode berikut:

  • NODE_POOL_NAME: nama node pool baru.
  • REGION: Google Cloud region untuk cluster Anda.
  • CLUSTER_NAME: nama cluster Anda.
  • ACCELERATOR_TYPE: jenis akselerator GPU:

    Contoh:

    • VM A4: masukkan nvidia-b200.
    • VM Ultra A3: masukkan nvidia-h200-141gb.
  • ACCELERATOR_COUNT: 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 GPU yang akan digunakan. Misalnya default atau latest.

  • MACHINE_TYPE: jenis mesin untuk node pool, misalnya, a3-ultragpu-8g.

  • NUM_NODES: jumlah node untuk node pool. Untuk mulai fleksibel, nilai ini harus ditetapkan ke 0.

  • RESERVATION_PROJECT: project ID pemesanan.

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

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

Perintah ini menggunakan profil jaringan akselerator untuk mengonfigurasi jaringan dan subnet VPC secara otomatis untuk VM akselerator Anda. Atau, Anda dapat menentukan jaringan VPC dan subnet secara eksplisit.

Men-deploy resource RDMA workload

Untuk mengalokasikan resource RDMA untuk Pod, tentukan ResourceClaimTemplate.

  1. Buat ResourceClaimTemplate untuk menentukan cara mengalokasikan perangkat RDMA. Manifes berikut meminta semua perangkat mrdma yang tersedia di node. Simpan manifes sebagai all-mrdma-template.yaml:

    apiVersion: resource.k8s.io/v1
    kind: ResourceClaimTemplate
    metadata:
      name: all-mrdma
    spec:
      spec:
        devices:
          requests:
          - name: req-mrdma
            exactly:
              deviceClassName: mrdma.google.com
              allocationMode: All
    
  2. Terapkan manifes:

    kubectl apply -f all-mrdma-template.yaml
    
  3. Deploy workload Anda dan lihat ResourceClaimTemplate. Manifes berikut men-deploy Pod yang mereferensikan template all-mrdma, yang memberikan akses Pod ke antarmuka RDMA di node. Simpan manifes sebagai agnhost-rdma-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: agnhost-rdma
      namespace: default
      labels:
        app: agnhost
    spec:
      containers:
      - name: agnhost
        image: registry.k8s.io/e2e-test-images/agnhost:2.39
        args: ["netexec", "--http-port", "80"]
        ports:
        - name: agnhost-port
          containerPort: 80
        resources:
          claims:
          - name: rdma
          limits:
            nvidia.com/gpu: 1
      resourceClaims:
      - name: rdma
        resourceClaimTemplateName: all-mrdma
    
  4. Terapkan manifes:

    kubectl apply -f agnhost-rdma-pod.yaml
    
  5. Pastikan antarmuka jaringan yang dialokasikan tambahan terlihat di dalam Pod.

    kubectl exec agnhost-rdma -- ls /sys/class/net
    

    Contoh output berikut menunjukkan antarmuka eth0 dan lo default, serta antarmuka RDMA yang dialokasikan, seperti gpu0rdma0. Jumlah dan nama antarmuka jaringan (NIC) bervariasi berdasarkan jenis mesin node GKE.

    eth0
    gpu0rdma0
    gpu1rdma0
    gpu2rdma0
    gpu3rdma0
    lo
    

Menjadwalkan workload yang menggunakan TPU

Bagian berikut menunjukkan cara mengonfigurasi node pool dan workload TPU untuk menggunakan antarmuka jaringan non-RDMA dengan DRANET yang dikelola GKE. Untuk mengetahui detail selengkapnya, lihat Mengalokasikan resource jaringan menggunakan DRANET yang dikelola GKE.

Memverifikasi DeviceClass jaringan

Pastikan resource DeviceClass untuk jaringan ada di cluster Anda.

kubectl get deviceclass netdev.google.com

Outputnya mirip dengan hal berikut ini:

NAME                AGE
netdev.google.com   2d22h

Mengaktifkan driver DRANET terkelola GKE di node pool slice TPU

Untuk mengaktifkan driver GKE DRANET saat membuat node pool slice TPU, tambahkan label cloud.google.com/gke-networking-dra-driver=true.

gcloud beta container node-pools create NODE_POOL_NAME \
    --location=LOCATION \
    --cluster=CLUSTER_NAME \
    --node-locations=NODE_LOCATIONS \
    --machine-type=MACHINE_TYPE \
    --tpu-topology=TPU_TOPOLOGY \
    --num-nodes=NUM_NODES \
    --accelerator-network-profile=auto \
    --node-labels=cloud.google.com/gke-networking-dra-driver=true

Ganti kode berikut:

  • NODE_POOL_NAME: Nama node pool baru.
  • LOCATION: Google Cloud Region atau zona untuk cluster Anda.
  • CLUSTER_NAME: Nama cluster Anda.
  • NODE_LOCATIONS: Google Cloud Zona untuk node di node pool.
  • MACHINE_TYPE: Jenis mesin yang akan digunakan untuk node. Untuk mengetahui informasi selengkapnya tentang jenis mesin yang kompatibel dengan TPU, lihat Memilih versi TPU.
  • TPU_TOPOLOGY: Topologi TPU, misalnya, 2x4x4. Format topologi bergantung pada versi TPU. Untuk mempelajari lebih lanjut topologi TPU, lihat Memilih topologi.
  • NUM_NODES: Jumlah node di node pool.

Untuk mengetahui informasi selengkapnya, lihat Membuat node pool slice TPU host tunggal.

Men-deploy workload yang mengklaim semua perangkat jaringan

Untuk mengalokasikan perangkat jaringan non-RDMA untuk Pod, tentukan ResourceClaimTemplate.

  1. Buat ResourceClaimTemplate yang mereferensikan netdev.google.com DeviceClass. Manifes berikut meminta semua perangkat jaringan non-RDMA yang tersedia di node.

    Simpan manifes sebagai all-netdev-template.yaml:

    apiVersion: resource.k8s.io/v1
    kind: ResourceClaimTemplate
    metadata:
      name: all-netdev
    spec:
      spec:
        devices:
          requests:
          - name: req-netdev
            exactly:
              deviceClassName: netdev.google.com
              allocationMode: All
    
  2. Terapkan manifes:

    kubectl apply -f all-netdev-template.yaml
    
  3. Deploy workload Anda dan lihat ResourceClaimTemplate. Manifes berikut men-deploy Pod yang menggunakan template all-netdev untuk memberi Pod akses ke semua perangkat jaringan non-RDMA di node. Simpan manifes sebagai netdev-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: agnhost-netdev
      namespace: default
      labels:
        app: agnhost
    spec:
      containers:
      - name: agnhost
        image: registry.k8s.io/e2e-test-images/agnhost:2.39
        args: ["netexec", "--http-port", "80"]
        ports:
        - name: agnhost-port
          containerPort: 80
        resources:
          claims:
          - name: netdev
          limits:
            google.com/tpu: 4
      nodeSelector:
        cloud.google.com/gke-tpu-accelerator: TPU_ACCELERATOR
        cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY
      resourceClaims:
      - name: netdev
        resourceClaimTemplateName: all-netdev
    

    Ganti kode berikut:

    • TPU_ACCELERATOR: Jenis akselerator TPU, misalnya, tpu-v5p-slice.
    • TPU_TOPOLOGY: Topologi TPU, misalnya, 2x4x4.
  4. Terapkan manifes:

    kubectl apply -f netdev-pod.yaml
    
  5. Pastikan antarmuka jaringan yang dialokasikan tambahan terlihat di dalam Pod.

    kubectl exec agnhost-netdev -- ls /sys/class/net
    

    Contoh output berikut menunjukkan antarmuka eth0 dan lo default, beserta perangkat jaringan yang dialokasikan, yang memiliki nama seperti eth1 dan eth2. Jumlah NIC dan namanya akan bervariasi berdasarkan jenis mesin node GKE.

    eth0
    eth1
    eth2
    lo
    

Memecahkan masalah

Untuk memeriksa penyiapan jaringan node pool, jalankan perintah berikut:

gcloud beta container node-pools describe NODE_POOL_NAME \
    --zone=ZONE \
    --cluster=CLUSTER_NAME

Ganti kode berikut:

  • NODE_POOL_NAME: nama node pool Anda.
  • ZONE: zona node pool.
  • CLUSTER_NAME: nama cluster Anda.

Output menampilkan jaringan dan subnetwork tambahan yang terpasang ke kumpulan node.

Langkah berikutnya