Mengelola perangkat GPU dengan alokasi resource dinamis

Alokasi resource dinamis adalah API Kubernetes yang memungkinkan Anda meminta dan berbagi resource, seperti GPU, di seluruh Pod dan container dalam cluster bare metal Google Distributed Cloud Anda. Driver pihak ketiga mengelola perangkat ini, dan Kubernetes mengalokasikannya secara dinamis, seperti volume penyimpanan. Workload AI Anda tidak perlu menargetkan node tertentu atau meminta jumlah perangkat terpasang yang tepat. Dokumen ini menunjukkan cara mengonfigurasi workload GPU untuk menggunakan alokasi resource dinamis.

Sebelum memulai

Sebelum mengonfigurasi workload GPU untuk menggunakan alokasi resource dinamis, pastikan prasyarat berikut terpenuhi:

  • Cluster bare metal Anda menggunakan versi 1.33.0 atau yang lebih baru.
  • Sistem operasi Anda adalah Ubuntu 22.04 atau Red Hat Enterprise Linux (RHEL) 9.4.
  • Anda telah mengupdate cluster untuk mengaktifkan alokasi resource dinamis seperti yang dijelaskan dalam Mengaktifkan alokasi resource dinamis.
  • Anda memiliki setidaknya satu mesin node dengan GPU terpasang dan driver GPU NVIDIA terinstal. Untuk mengetahui informasi selengkapnya, lihat Menginstal atau meng-uninstal Operator GPU NVIDIA yang dipaketkan.
  • Jika Anda menggunakan operator GPU NVIDIA yang dipaketkan, versi 1.33.0 atau yang lebih baru akan mengaktifkan Container Device Interface (CDI) secara default. Jika Anda menggunakan operator GPU yang diinstal secara manual, pastikan CDI diaktifkan di ClusterPolicy.
  • Anda telah mengikuti petunjuk di Driver DRA NVIDIA untuk GPU guna menginstal driver DRA NVIDIA di semua node yang terpasang GPU.

Membuat workload GPU yang menggunakan alokasi resource dinamis

Agar workload GPU Anda dapat memanfaatkan alokasi resource dinamis untuk meminta GPU, workload tersebut harus berada dalam namespace bersama dengan ResourceClaim yang menjelaskan permintaan alokasi perangkat GPU. Workload Anda harus mereferensikan ResourceClaim agar Kubernetes dapat menetapkan resource GPU.

Langkah-langkah berikut menyiapkan lingkungan tempat workload Anda menggunakan alokasi resource dinamis untuk meminta resource GPU:

  1. Untuk membuat resource yang terkait dengan alokasi resource dinamis, buat Namespace baru di cluster Anda:

    cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f -
    apiVersion: v1
    kind: Namespace
    metadata:
      name: NAMESPACE_NAME
    EOF
    

    Ganti kode berikut:

    • CLUSTER_KUBECONFIG: jalur file kubeconfig cluster pengguna.

    • NAMESPACE_NAME dengan nama untuk namespace alokasi resource dinamis Anda.

  2. Buat ResourceClaim untuk menjelaskan permintaan akses GPU:

    cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f -
    apiVersion: resource.k8s.io/v1beta1
    kind: ResourceClaim
    metadata:
      namespace: NAMESPACE_NAME
      name: RESOURCE_CLAIM_NAME
    spec:
        devices:
          requests:
          - name: gpu
            deviceClassName: gpu.nvidia.com
    EOF
    

    Ganti RESOURCE_CLAIM_NAME dengan nama klaim resource Anda untuk permintaan GPU.

  3. Buat workload yang merujuk ke ResourceClaim yang dibuat pada langkah sebelumnya.

    Contoh workload berikut menunjukkan cara mereferensikan ResourceClaim bernama gpu-claim di namespace dra-test. Container di Pod pod1 adalah sampel arsitektur perangkat terpadu komputasi (CUDA) NVIDIA yang dirancang untuk menjalankan workload CUDA di GPU. Jika Pod pod1 berhasil diselesaikan, hal ini menunjukkan bahwa kemampuan alokasi resource dinamis berfungsi dengan baik dan alokasi resource dinamis siap mengelola resource GPU di cluster Anda.

    Ubuntu

    1. Gunakan perintah berikut untuk menerapkan manifes ke cluster Anda:

      cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f -
      apiVersion: v1
      kind: Pod
      metadata:
        name: pod1
        namespace: dra-test
      spec:
        restartPolicy: OnFailure
        resourceClaims:
          - name: gpu
            resourceClaimName: gpu-claim
        containers:
          - name: ctr0
            image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0
            resources:
              claims:
                - name: gpu
          - name: ctr1
            image: nvcr.io/nvidia/k8s/cuda-sample:devicequery
            resources:
              claims:
                - name: gpu
      EOF
      

    RHEL

    1. Gunakan perintah berikut untuk menerapkan manifes ke cluster Anda:

      cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f -
      apiVersion: v1
      kind: Pod
      metadata:
        name: pod1
        namespace: dra-test
      spec:
        restartPolicy: OnFailure
      
        resourceClaims:
          - name: gpu
            resourceClaimName: gpu-claim
        containers:
          - name: ctr0
            image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0
            resources:
              claims:
                - name: gpu
          - name: ctr1
            image: nvcr.io/nvidia/k8s/cuda-sample:devicequery
            resources:
              claims:
                - name: gpu
      EOF
      

Batasan

Pertimbangkan batasan berikut saat Anda menggunakan alokasi resource dinamis:

  • Saat Anda menggunakan OS RHEL dengan versi operator GPU NVIDIA yang didukung, Container Device Interface (CDI) akan menangani injeksi perangkat dan pelabelan SELinux secara otomatis. Anda tidak perlu menggunakan konfigurasi kebijakan SELinux manual atau menetapkan pod securityContext.

  • Fitur ini menggunakan grup API resource.k8s.io/v1beta1, yang berbeda dari grup Kubernetes API open source untuk fitur ini, resource.k8s.io/v1. Grup API open source v1 menyediakan lebih banyak fitur dan stabilitas yang lebih baik daripada grup API v1beta1.

Langkah berikutnya