Mengonfigurasi penskalaan otomatis untuk beban kerja LLM di GPU dengan Google Kubernetes Engine (GKE)


Halaman ini menunjukkan cara menyiapkan infrastruktur penskalaan otomatis menggunakan Horizontal Pod Autoscaler (HPA) GKE untuk men-deploy model bahasa besar (LLM) Gemma 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.
  • 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 gcloud components update.

Penskalaan otomatis menggunakan metrik server

Anda dapat menggunakan metrik performa khusus beban kerja yang dikeluarkan oleh server inferensi TGI untuk mengarahkan penskalaan otomatis untuk Pod Anda. Untuk mempelajari metrik ini lebih lanjut, 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 menggunakan Google Cloud Managed Service for Prometheus, yang menyederhanakan deployment dan konfigurasi kolektor Prometheus. Google Cloud Managed Service for Prometheus diaktifkan secara default di cluster GKE Anda; Anda juga dapat mengaktifkannya secara manual.

    Contoh manifes berikut menunjukkan cara menyiapkan definisi resource PodMonitoring untuk mengarahkan Google Cloud Managed Service for Prometheus untuk mengambil metrik dari Pod Anda dengan 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 terlihat oleh pengontrol HPA. Untuk mengetahui detail selengkapnya, lihat Penskalaan otomatis pod horizontal dalam dokumentasi Google Cloud Managed Service for Prometheus.

    Contoh perintah 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. Siapkan resource HPA berbasis metrik kustom. Deploy resource HPA yang didasarkan pada metrik kustom pilihan Anda. Untuk mengetahui detail selengkapnya, lihat Penskalaan otomatis pod horizontal dalam 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 nilai minimum ukuran antrean yang tepat untuk HPA, lihat Praktik terbaik untuk menskalakan beban kerja inferensi LLM secara otomatis 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 nilai minimum ukuran batch yang tepat untuk HPA, lihat Praktik terbaik untuk menskalakan beban kerja inferensi LLM secara otomatis 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
    

Penskalaan otomatis menggunakan metrik GPU

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

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

  1. Ekspor metrik GPU ke Cloud Monitoring. Jika cluster GKE Anda mengaktifkan metrik sistem, cluster tersebut akan otomatis mengirimkan metrik penggunaan GPU 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 DCGM NVIDIA:

    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 karena ada masalah umum saat HPA tidak berfungsi dengan nama metrik eksternal huruf besar.

  2. Instal Adaptor Stackdriver Metrik Kustom. Adaptor ini membuat metrik kustom yang Anda ekspor ke Monitoring terlihat oleh pengontrol HPA. Untuk mengetahui detail selengkapnya, lihat Penskalaan otomatis pod horizontal dalam 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. Siapkan resource HPA berbasis metrik kustom. Deploy resource HPA berdasarkan metrik kustom pilihan Anda. Untuk mengetahui detail selengkapnya, lihat Penskalaan otomatis pod horizontal dalam dokumentasi Google Cloud Managed Service for Prometheus.

    • Identifikasi target nilai rata-rata untuk HPA guna memicu penskalaan otomatis. Anda dapat melakukannya secara eksperimental; misalnya, menghasilkan beban yang meningkat di server dan mengamati puncak penggunaan GPU. Perhatikan toleransi HPA, yang secara default ditetapkan ke rentang tanpa tindakan 0,1 di sekitar nilai 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