Mengonfigurasi penskalaan otomatis untuk workload LLM pada GPU dengan Google Kubernetes Engine (GKE)


Halaman ini menunjukkan cara menyiapkan infrastruktur penskalaan otomatis menggunakan Horizontal Pod Autoscaler (HPA) GKE untuk men-deploy Gemma model bahasa besar (LLM) dengan framework penayangan Text Generation Interface (TGI) dari Hugging Face.

Untuk mempelajari lebih lanjut cara memilih metrik untuk penskalaan otomatis, lihat Praktik terbaik untuk penskalaan otomatis workload LLM dengan GPU di GKE.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Mengaktifkan 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 gcloud components update.

Menskalakan otomatis menggunakan metrik server

Anda dapat menggunakan metrik performa spesifik per workload yang ditampilkan oleh TGI server inferensi untuk mengarahkan penskalaan otomatis Pod Anda. Untuk mempelajari lebih lanjut metrik server, lihat Metrik server.

Untuk menyiapkan penskalaan otomatis metrik kustom dengan metrik server, ikuti langkah-langkah berikut:

  1. Ekspor metrik dari server TGI ke Cloud Monitoring. Anda akan menggunakan Google Cloud Managed Service for Prometheus, yang menyederhanakan proses deployment dan konfigurasi Prometheus kolektor. Google Cloud Managed Service for Prometheus diaktifkan secara default di Cluster GKE; Anda juga dapat mengaktifkannya secara manual.

    Contoh manifes berikut menunjukkan cara menyiapkan definisi resource PodMonitoring untuk mengarahkan Google Cloud Managed Service for Prometheus untuk melakukan scraping metrik dari Pod Anda di interval berulang 15 detik:

    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: gemma-pod-monitoring
    spec:
      selector:
        matchLabels:
          app: gemma-server
      endpoints:
      - port: 8000
        interval: 15s
    
  2. Instal Adaptor Stackdriver Metrik Kustom. Adaptor ini membuat metrik kustom yang Anda ekspor ke Monitoring yang terlihat oleh HPA pengontrol. Untuk detail selengkapnya, lihat Penskalaan otomatis pod horizontal di Dokumentasi Google Cloud Managed Service for Prometheus.

    Perintah contoh berikut menunjukkan cara menginstal adaptor:

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
    
  3. Menyiapkan resource HPA berbasis metrik kustom. Deploy resource HPA yang didasarkan metrik kustom pilihan Anda. Untuk detail selengkapnya, lihat Penskalaan otomatis pod horizontal di Dokumentasi Google Cloud Managed Service for Prometheus.

    Pilih salah satu tab ini untuk melihat contoh cara mengonfigurasi Resource HorizontalPodAutoscaler dalam manifes Anda:

    Ukuran antrean

    Contoh ini menggunakan metrik server TGI tgi_queue_size, yang mewakili jumlah permintaan dalam antrean.

    Untuk menentukan batas ukuran antrean yang tepat untuk HPA, lihat Praktik terbaik untuk penskalaan otomatis workload inferensi LLM dengan GPU.

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: gemma-server
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: tgi-gemma-deployment
      minReplicas: 1
      maxReplicas: 5
      metrics:
      - type: Pods
        pods:
          metric:
            name: prometheus.googleapis.com|tgi_queue_size|gauge
          target:
            type: AverageValue
            averageValue:  $HPA_AVERAGEVALUE_TARGET
    

    Ukuran batch

    Contoh ini menggunakan metrik server TGI tgi_batch_size, yang mewakili jumlah permintaan dalam batch saat ini.

    Untuk menentukan batas ukuran tumpukan yang tepat untuk HPA, lihat Praktik terbaik untuk penskalaan otomatis workload inferensi LLM dengan GPU.

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: gemma-server
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: tgi-gemma-deployment
      minReplicas: 1
      maxReplicas: 5
      metrics:
      - type: Pods
        pods:
          metric:
            name: prometheus.googleapis.com|tgi_batch_current_size|gauge
          target:
            type: AverageValue
            averageValue:  $HPA_AVERAGEVALUE_TARGET
    

Melakukan penghitungan otomatis menggunakan metrik GPU

Anda dapat menggunakan metrik penggunaan dan performa yang dikeluarkan oleh GPU untuk mengarahkan penskalaan otomatis untuk Pod Anda. Untuk mempelajari lebih lanjut metrik, lihat metrik GPU.

Untuk menyiapkan penskalaan otomatis metrik kustom dengan metrik GPU, ikuti langkah-langkah berikut:

  1. Ekspor metrik GPU ke Cloud Monitoring. Jika GKE Anda cluster memiliki metrik sistem diaktifkan, metrik pemakaian GPU akan otomatis dikirimkan ke Cloud Monitoring melalui metrik sistem container/accelerator/duty_cycle, setiap 60 detik.

    Contoh manifes berikut menunjukkan cara menyiapkan definisi resource PodMonitoring untuk menyerap metrik dari workload NVIDIA DCGM:

    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: nvidia-dcgm-exporter-for-hpa
      namespace: gmp-public
      labels:
        app.kubernetes.io/name: nvidia-dcgm-exporter
        app.kubernetes.io/part-of: google-cloud-managed-prometheus
    spec:
      selector:
        matchLabels:
          app.kubernetes.io/name: nvidia-dcgm-exporter
      endpoints:
        - port: metrics
          interval: 15s
          metricRelabeling:
            - action: keep
              sourceLabels: [__name__]
            - action: replace
              sourceLabels: [__name__]
              targetLabel: __name__
              regex: DCGM_FI_DEV_GPU_UTIL
              replacement: dcgm_fi_dev_gpu_util
    

    Dalam kode, pastikan untuk mengubah nama metrik DCGM yang akan digunakan di HPA menjadi huruf kecil. Hal ini disebabkan karena ada masalah umum di mana HPA tidak berfungsi dengan nama metrik eksternal dalam huruf besar.

  2. Instal Adaptor Stackdriver Metrik Kustom. Adaptor ini membuat metrik kustom yang Anda ekspor ke Monitoring yang terlihat oleh HPA pengontrol. Untuk detail selengkapnya, lihat Penskalaan otomatis pod horizontal di Dokumentasi Google Cloud Managed Service for Prometheus.

    Contoh perintah berikut menunjukkan cara menjalankan penginstalan ini:

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
    
  3. Menyiapkan resource HPA berbasis metrik kustom. Deploy resource HPA berbasis metrik kustom pilihan Anda. Untuk detail selengkapnya, lihat Penskalaan otomatis pod horizontal di Dokumentasi Google Cloud Managed Service for Prometheus.

    • Identifikasi target nilai rata-rata bagi HPA untuk memicu penskalaan otomatis. Anda dapat melakukan ini secara eksperimental; misalnya, menimbulkan peningkatan beban pada server Anda dan mengamati puncak penggunaan GPU. Perhatikan Toleransi HPA, yang ditetapkan secara default ke rentang tanpa tindakan 0,1 di sekitar target untuk meredam osilasi.
    • Sebaiknya gunakan alat locust-load-inference untuk pengujian. Anda juga dapat membuat dasbor kustom Cloud Monitoring untuk memvisualisasikan perilaku metrik.

    Pilih salah satu tab ini untuk melihat contoh cara mengonfigurasi Resource HorizontalPodAutoscaler dalam manifes Anda:

    Siklus tugas (sistem GKE)

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: gemma-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: tgi-gemma-deployment
      minReplicas: 1
      maxReplicas: 5
      metrics:
      - type: External
        external:
          metric:
            name: kubernetes.io|container|accelerator|duty_cycle
            selector:
              matchLabels:
                resource.labels.container_name: inference-server
                resource.labels.namespace_name: default
          target:
            type: AverageValue
            averageValue:  $HPA_AVERAGEVALUE_TARGET
    

    Siklus tugas (DCGM)

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: gemma-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: tgi-gemma-deployment
      minReplicas: 1
      maxReplicas: 5
      metrics:
      - type: External
        external:
          metric:
            name: prometheus.googleapis.com|dcgm_fi_dev_gpu_util|unknown
            selector:
              matchLabels:
                metric.labels.exported_container: inference-server
                metric.labels.exported_namespace: default
          target:
            type: AverageValue
            averageValue:  $HPA_AVERAGEVALUE_TARGET
    

Langkah selanjutnya