Mengelola perangkat GPU dengan alokasi resource dinamis

Halaman ini menjelaskan cara mengonfigurasi workload GPU untuk menggunakan alokasi resource dinamis di cluster bare metal Google Distributed Cloud Anda. Alokasi resource dinamis adalah Kubernetes API yang memungkinkan Anda meminta dan membagikan resource generik, seperti GPU, di antara Pod dan container. Driver pihak ketiga mengelola resource ini.

Dengan alokasi resource dinamis, Kubernetes menjadwalkan Pod berdasarkan konfigurasi perangkat yang dirujuk. Operator aplikasi tidak perlu memilih node tertentu dalam workload mereka dan tidak perlu memastikan bahwa setiap Pod meminta jumlah perangkat yang terpasang ke node tersebut. Proses ini mirip dengan mengalokasikan volume untuk penyimpanan.

Kemampuan ini membantu Anda menjalankan workload AI dengan mengalokasikan resource GPU secara dinamis dan tepat dalam cluster bare metal, sehingga meningkatkan pemanfaatan resource dan performa untuk workload yang berat.

Halaman ini ditujukan untuk Admin, arsitek, dan Operator yang mengelola siklus proses infrastruktur teknologi dasar. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten, lihat Peran dan tugas pengguna GKE Enterprise umum. Google Cloud

Sebelum memulai

Sebelum mengonfigurasi workload GPU untuk menggunakan alokasi resource dinamis, verifikasi bahwa 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 NVIDIA GPU Operator yang dibundel.
  • Anda telah mengikuti petunjuk di Driver NVIDIA DRA untuk GPU untuk menginstal driver NVIDIA DRA di semua node yang terhubung ke 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 di 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 mereferensikan ResourceClaim yang dibuat pada langkah sebelumnya.

    Contoh workload berikut menunjukkan cara mereferensikan ResourceClaim bernama gpu-claim di namespace dra-test. Container di pod1 Pod adalah sampel Compute Unified Device Architecture (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. Download dan instal modul kebijakan SELinux nvidia_container_t, yang diperlukan untuk mengakses GPU.

      Untuk mengetahui informasi selengkapnya, lihat repositori dgx-selinux NVIDIA.

    2. 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
        securityContext:
          seLinuxOptions:
            type: nvidia_container_t
        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, kebijakan SELinux dapat mengganggu container yang mencoba mengakses GPU. Untuk mengetahui informasi selengkapnya, lihat Cara menggunakan GPU dalam container di RHEL 8 bare metal.

  • Fitur ini menggunakan grup API resource.k8s.io/v1beta1, yang berbeda dengan grup API Kubernetes 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