Men-deploy Ray yang diakselerasi GPU untuk workload AI di GKE


Halaman ini menunjukkan cara menyiapkan dan menjalankan cluster Ray yang mendukung GPU di Google Kubernetes Engine (GKE) untuk menskalakan workload AI/ML Anda.

Mengapa menggunakan Ray?

Dengan menggunakan Ray di GKE, yang difasilitasi oleh KubeRay, Anda dapat menskalakan aplikasi Python dan AI. Ray menangani penskalaan aplikasi, dan GKE mengelola server dan resource yang mendasarinya.

Kombinasi ini mempermudah pengelolaan resource, penyesuaian kapasitas secara otomatis, memastikan keandalan, dan men-deploy aplikasi Anda di berbagai lingkungan. Dengan menghubungkan aplikasi Ray terdistribusi dengan infrastruktur dan alat cloud yang ada di GKE, Anda dapat menyederhanakan operasi dan menyediakan platform yang andal dan skalabel untuk tugas-tugas kompleks menggunakan metode Kubernetes standar.

Untuk mengetahui informasi selengkapnya, lihat postingan blog Why GKE for your Ray AI workloads.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the GKE API.

    Enable the API

  4. Install the Google Cloud CLI.

  5. Configure the gcloud CLI to use your federated identity.

    For more information, see Sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. Instal kubectl: kubectl adalah alat command line utama untuk berinteraksi dengan cluster GKE. Jika Anda menggunakan Cloud Shell, kubectl sudah diinstal. Jika tidak, instal di terminal Anda dengan menjalankan perintah gcloud components install kubectl.

    Untuk memverifikasi penginstalan, jalankan perintah ini: kubectl version --client

  8. Instal Ray: sebaiknya buat dan masukkan lingkungan virtual Python (venv) sebelum menginstal Ray agar Anda dapat mengisolasi dependensinya.
    1. Instal Python.
    2. Buat dan aktifkan lingkungan virtual baru.
    3. Instal versi stabil Ray terbaru dengan menjalankan perintah ini di dalam lingkungan virtual Anda: pip install -U "ray[default]".
    4. Untuk memverifikasi penginstalan, jalankan perintah ini: ray --version. Perhatikan versi Ray (misalnya, 2.44.1) dalam output.
  9. Pastikan project Anda memiliki kuota yang cukup untuk GPU L4. Google Cloud Untuk informasi selengkapnya, lihat Tentang GPU dan Kuota alokasi.

Membuat cluster GKE

Anda dapat men-deploy workload di cluster GKE Autopilot atau Standard. Sebaiknya gunakan cluster Autopilot untuk mendapatkan pengalaman Kubernetes yang terkelola sepenuhnya. Untuk memilih mode operasi GKE yang paling sesuai untuk workload Anda, lihat Memilih mode operasi GKE.

Autopilot

Dalam mode Autopilot, Google mengelola konfigurasi cluster Anda, termasuk penskalaan, keamanan, dan setelan lainnya yang telah dikonfigurasi sebelumnya. Cluster Autopilot dioptimalkan untuk menjalankan sebagian besar workload produksi dan menyediakan resource komputasi berdasarkan manifes Kubernetes Anda.

  1. Di terminal, jalankan perintah gcloud container clusters create-auto berikut:

    gcloud container clusters create-auto my-ray-enabled-cluster \
        --enable-ray-operator \
        --enable-ray-cluster-monitoring \
        --enable-ray-cluster-logging \
        --location=us-central1
    

    Perintah Google Cloud CLI ini membuat cluster Autopilot bernama my-ray-enabled-cluster, dengan setelan berikut:

    • --enable-ray-operator: menginstal Ray Operator di cluster, yang menyederhanakan pengelolaan cluster Ray dalam Kubernetes.
    • --enable-ray-cluster-monitoring: menyiapkan integrasi dengan Cloud Monitoring untuk metrik cluster Ray.
    • --enable-ray-cluster-logging: mengonfigurasi integrasi dengan Cloud Logging untuk mengumpulkan log dari cluster Ray Anda.
    • --location=us-central1: menentukan region geografis tempat cluster GKE akan dibuat. Perhatikan bahwa ketersediaan dan jenis akselerator yang didukung berbeda-beda menurut lokasi. Untuk mengetahui informasi selengkapnya, lihat Region dan zona GPU.

    Cluster Autopilot secara otomatis menyediakan dan menskalakan node (termasuk yang mendukung GPU yang menggunakan class komputasi) berdasarkan permintaan workload, sehingga mengoptimalkan pemanfaatan dan biaya. Penyediaan dan penskalaan resource otomatis ini di cluster Autopilot menyederhanakan pengelolaan resource, dan memungkinkan Anda berfokus pada model, bukan infrastruktur.

    Jika Anda menggunakan cluster GKE Standard, flag dan setelan untuk mengaktifkan Ray mungkin berbeda. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan Ray Operator di GKE.

  2. Konfigurasi kubectl untuk berkomunikasi dengan cluster Anda:

    gcloud container clusters get-credentials my-ray-enabled-cluster \
        --region=us-central1
    

Standar

Dalam mode Standard, Anda memiliki lebih banyak kontrol atas infrastruktur dasar cluster GKE Anda. Anda mengelola node pool, ukuran node, dan konfigurasi lainnya secara langsung, sehingga memungkinkan penyesuaian yang lebih besar. Cluster Standard cocok untuk workload yang memerlukan konfigurasi tertentu atau kontrol ketat atas resource.

  1. Di terminal, jalankan perintah gcloud container clusters create berikut:

    gcloud container clusters create my-ray-enabled-cluster \
        --addons=RayOperator \
        --enable-ray-cluster-monitoring \
        --enable-ray-cluster-logging \
        --region=us-central1 \
        --enable-autoprovisioning \
        --max-cpu=10 \
        --max-memory=64
    

    Perintah Google Cloud CLI ini membuat cluster Standard bernama my-ray-enabled-cluster, dengan setelan berikut:

    • --addons=RayOperator: menginstal Ray Operator di cluster, yang menyederhanakan pengelolaan cluster Ray dalam Kubernetes.
    • --enable-ray-cluster-monitoring: menyiapkan integrasi dengan Cloud Monitoring untuk metrik cluster Ray.
    • --enable-ray-cluster-logging: mengonfigurasi integrasi dengan Cloud Logging untuk mengumpulkan log dari cluster Ray Anda.
    • --region=us-central1: menentukan region geografis tempat cluster GKE akan dibuat. Perhatikan bahwa ketersediaan dan jenis akselerator yang didukung berbeda-beda menurut lokasi. Untuk mengetahui informasi selengkapnya, lihat Region dan zona GPU.
    • --enable-autoprovisioning: membuat dan menghapus node pool secara otomatis serta menskalakan node dalam kumpulan tersebut berdasarkan permintaan workload Anda.
    • --max-cpu: jumlah maksimum core yang dapat diskalakan oleh cluster.
    • --max-memory: jumlah maksimum gigabyte memori yang dapat diskalakan oleh cluster.
  2. Konfigurasi kubectl untuk berkomunikasi dengan cluster Anda:

    gcloud container clusters get-credentials my-ray-enabled-cluster \
        --region=us-central1
    

Instal plugin KubeRay kubectl ray

Plugin kubectl ray menyederhanakan alur kerja Ray umum di Kubernetes. Untuk petunjuk penginstalan terbaru, lihat dokumentasi KubeRay.

  1. Buka halaman rilis dan download biner untuk platform Anda. Misalnya, untuk menginstal plugin kubectl ray versi 1.3.2 di Linux amd64, jalankan perintah berikut:

    curl -LO https://github.com/ray-project/kuberay/releases/download/v1.3.2/kubectl-ray_v1.3.2_linux_amd64.tar.gz
    tar -xvf kubectl-ray_v1.3.2_linux_amd64.tar.gz
    cp kubectl-ray ~/.local/bin
    

    Ganti ~/.local/bin dengan direktori di PATH Anda.

  2. Verifikasi penginstalan Anda:

    kubectl ray version
    

    Jika Anda melihat peringatan seperti KubeRay operator installation cannot be found: no KubeRay operator deployments found in any namespace., Anda dapat mengabaikannya dengan aman. Jika penginstalan berhasil, outputnya adalah versi plugin kubectl ray.

Buat class komputasi kustom di cluster Anda

Kelas komputasi kustom di GKE memungkinkan Anda menentukan persyaratan hardware tertentu, seperti jenis dan jumlah GPU, berdasarkan prioritas. GKE menggunakan prioritas ini saat menyediakan node untuk workload Anda.

Untuk membuat contoh class komputasi kustom untuk panduan ini, ikuti langkah-langkah berikut:

  1. Simpan spesifikasi class komputasi berikut sebagai nvidia-l4-compute-class.yaml:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: gpu-compute-class
    spec:
      priorities:
      - gpu:
          type: nvidia-l4
          count: 1
        spot: true
      - gpu:
          type: nvidia-l4
          count: 1
        spot: false
      nodePoolAutoCreation:
        enabled: true
      whenUnsatisfiable: DoNotScaleUp
    
  2. Buat class komputasi dengan menjalankan perintah ini:

    kubectl apply -f nvidia-l4-compute-class.yaml
    

    Apa yang terjadi setelah Anda menerapkan class komputasi kustom? Setelah menerapkan file YAML class komputasi, GKE akan otomatis menyediakan node dengan satu GPU NVIDIA L4 saat cluster Ray Anda memintanya. Hal ini akan memprioritaskan Spot VM seperti yang ditentukan dalam manifes Anda. Setelan whenUnsatisfiable: DoNotScaleUp menginstruksikan GKE untuk tidak membuat node yang tidak memenuhi persyaratan yang ditentukan.

Membuat dan memverifikasi cluster Ray

Sekarang Anda dapat membuat cluster Ray di cluster GKE.

  1. Buat cluster Ray. Gunakan perintah kubectl ray create cluster untuk menentukan dan membuat cluster Ray. Perintah ini menyederhanakan proses dengan menangani pembuatan resource Kubernetes yang mendasarinya.

      kubectl ray create cluster my-ray-cluster \
          --worker-replicas=1 \
          --worker-cpu=2 \
          --worker-memory=4Gi \
          --worker-gpu=1 \
          --worker-node-selectors="cloud.google.com/compute-class=gpu-compute-class"
    

    Perintah kubectl ray create cluster menggunakan plugin KubeRay untuk menerjemahkan spesifikasi Anda ke dalam definisi resource kustom RayCluster dan mengirimkannya ke Kubernetes API untuk membuat objek RayCluster. Objek ini berfungsi sebagai cetak biru, yang memberi tahu Ray Operator cara menyediakan dan mengelola komponen cluster Ray yang sebenarnya (node head dan pekerja) dalam GKE. Secara default, GKE menjadwalkan Pod head pada node dari seri mesin E2.

    Perintah contoh menggunakan setelan berikut:

    • kubectl ray create cluster my-ray-cluster: menentukan nama cluster Ray yang ingin Anda buat.
    • --worker-node-selectors: memberi tahu Kubernetes untuk menjadwalkan Pod pekerja di node yang diberi label cloud.google.com/compute-class=gpu-compute-class.
  2. Verifikasi status cluster Ray. Gunakan perintah ini untuk memverifikasi bahwa cluster Ray Anda sudah aktif dan berjalan.

    • Periksa resource RayCluster dengan menjalankan perintah ini:

      kubectl ray get cluster
      

      Perintah ini mencantumkan semua cluster Ray di namespace Kubernetes Anda. Anda akan melihat my-ray-cluster tercantum. Mungkin perlu waktu beberapa menit hingga cluster diinisialisasi.

    • Periksa Pod Kubernetes dengan menjalankan perintah ini:

      kubectl get pods
      

      Perintah ini mencantumkan semua Pod yang berjalan di namespace Kubernetes Anda. Anda akan melihat Pod yang terkait dengan cluster Ray Anda:

      • Pod untuk node head Ray, dengan nama seperti my-ray-cluster-head-0.
      • Satu atau beberapa Pod untuk node pekerja Ray, dengan nama seperti my-ray-cluster-worker-group-0-xxxxx. Jumlah Pod pekerja bergantung pada konfigurasi awal cluster Ray dan penskalaan otomatis yang mungkin telah terjadi.

Mengirimkan tugas Ray

Setelah cluster Ray siap, Anda dapat mengirimkan tugas Ray ke cluster Ray yang sedang berjalan di GKE.

Untuk melakukannya, gunakan perintah kubectl ray session untuk memulai sesi interaktif, dan perintah ray job submit untuk memulai eksekusi tugas.

  1. Mulai sesi interaktif Ray. Untuk membuat koneksi lokal ke cluster Ray, jalankan perintah ini:

      kubectl ray session my-ray-cluster
    

    Perintah ini memulai penerusan port antara mesin lokal Anda dan node head Ray di cluster GKE Anda. Perhatikan bahwa terminal Anda akan digunakan saat sesi ini aktif; untuk melanjutkan, buka instance terminal terpisah.

  2. Buat kode contoh untuk dijalankan. Simpan contoh kode berikut ke file bernama sample_code.py.

      import ray
      import os
      import requests
    
      ray.init()
    
      @ray.remote
      class Counter:
          def __init__(self):
              # Used to verify runtimeEnv
              self.name = os.getenv("counter_name")
              assert self.name == "test_counter"
              self.counter = 0
    
          def inc(self):
              self.counter += 1
    
          def get_counter(self):
              return "{} got {}".format(self.name, self.counter)
    
      counter = Counter.remote()
    
      for _ in range(5):
              ray.get(counter.inc.remote())
              print(ray.get(counter.get_counter.remote()))
    
      # Verify that the correct runtime env was used for the job.
      assert requests.__version__ == "2.26.0"
    
  3. Buka terminal baru dan kirimkan tugas Ray.

    1. Buka terminal baru di mesin lokal Anda. Jika Anda membuat lingkungan virtual untuk penginstalan Ray, pastikan Anda mengaktifkannya di terminal baru ini juga.
    2. Buka direktori tempat Anda menyimpan file sample_code.py.
    3. Jalankan perintah berikut:

        ray job submit \
            --working-dir=. \
            --runtime-env-json='{"pip": ["requests==2.26.0"], "env_vars": {"counter_name": "test_counter"}}' \
            --address http://localhost:8265 python sample_code.py
      

      Perintah contoh menggunakan setelan berikut:

      • --working-dir=.: menentukan direktori saat ini sebagai direktori kerja yang akan tersedia untuk tugas Ray di cluster. Idealnya, direktori ini hanya berisi kode sumber aplikasi yang ingin Anda jalankan di Ray. Dalam contoh kita, ini adalah file sample_code.py.
      • --runtime-env-json='{"pip": ["requests==2.26.0"], "env_vars": {"counter_name": "test_counter"}}': menentukan lingkungan runtime untuk tugas. File ini menentukan versi library Python yang diperlukan (requests==2.26.0) dan menetapkan variabel lingkungan (counter_name) untuk eksekusi tugas.
  4. Lihat tugas Ray. Anda dapat memantau tugas dengan salah satu cara berikut:

    • Dasbor Ray: buka browser web Anda, lalu buka http://localhost:8265. URL ini akan membuka dasbor Ray, tempat Anda dapat melihat informasi tentang tugas yang sedang berjalan, termasuk status, log, dan penggunaan resource-nya.
    • Metrics Explorer: gunakan dasbor metrik bawaan di konsol Google Cloud . Untuk mengetahui informasi selengkapnya, lihat Mengumpulkan dan melihat log dan metrik untuk cluster Ray di GKE.
  5. Hentikan sesi Ray. Setelah selesai berinteraksi dengan cluster Ray atau memantau tugas, Anda dapat mengakhiri sesi interaktif dengan menekan Ctrl+C di terminal tempat Anda menjalankan perintah kubectl ray session.

Pembersihan

Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan pada halaman ini, ikuti langkah-langkah berikut.

Jika Anda men-deploy quickstart di project Google Cloud baru, dan tidak lagi memerlukan project tersebut, hapus dengan menyelesaikan langkah-langkah berikut:

  1. Di Google Cloud konsol, buka halaman Manage resources.
  2. Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, masukkan project ID, lalu klik Shut down untuk menghapus project.

Jika Anda tidak membuat project Google Cloud baru, dan jika tidak lagi memerlukan cluster GKE, Anda dapat menghapusnya dengan menjalankan perintah ini:

gcloud container clusters delete my-ray-enabled-cluster \
    --location=us-central1

Langkah berikutnya

  • Jelajahi contoh, praktik terbaik, dan alat tambahan untuk Ray di GKE: Untuk mengetahui informasi selengkapnya, lihat repositori ai-on-gke GitHub.
  • Pelajari lebih lanjut cara menggunakan akselerator di GKE: Gunakan GPU untuk pemrosesan paralel dalam tugas machine learning dan analisis data. Gunakan TPU untuk mempercepat pelatihan dan inferensi model deep learning berskala besar.
  • Pelajari lebih lanjut Ray Operator: Untuk mengetahui informasi selengkapnya tentang cara menggunakan Ray Operator untuk mengelola Deployment Ray, termasuk tugas Ray, lihat Tentang Ray di GKE.
  • Manfaatkan Kueue untuk pengantrean tugas: Pelajari cara Kueue, sistem antrean tugas berbasis Kubernetes, dapat membantu mengelola dan memprioritaskan workload AI/ML Anda, yang dapat meningkatkan pemanfaatan resource. Untuk mengetahui informasi selengkapnya, lihat Mengoptimalkan pemanfaatan resource GKE untuk workload inferensi dan pelatihan AI/ML campuran.