Menyajikan LLM di GKE dengan strategi penyediaan GPU yang hemat biaya dan memiliki ketersediaan tinggi

Panduan ini menunjukkan cara mengoptimalkan biaya untuk workload penayangan LLM di GKE. Tutorial ini menggunakan kombinasi VM mulai fleksibel, Spot VM, dan ComputeClass untuk inferensi yang hemat biaya.

Panduan ini menggunakan Mixtral 8x7b sebagai contoh LLM yang dapat Anda deploy.

Panduan ini ditujukan untuk engineer Machine Learning (ML), admin dan operator Platform, serta spesialis Data dan AI yang tertarik untuk menggunakan kemampuan orkestrasi container Kubernetes untuk menyajikan LLM. Untuk mengetahui informasi selengkapnya tentang peran umum dan contoh tugas yang kami referensikan dalam konten, lihat Peran dan tugas pengguna GKE umum. Google Cloud

Harga mulai fleksibel

Flex-start direkomendasikan jika workload Anda memerlukan penyediaan sumber daya secara dinamis sesuai kebutuhan, hingga tujuh hari dengan reservasi jangka pendek, tanpa pengelolaan kuota yang rumit, dan akses yang hemat biaya. Flex-start didukung oleh Dynamic Workload Scheduler dan ditagih menggunakan harga Dynamic Workload Scheduler:

  • Diskon (hingga 53%) untuk vCPU, GPU, dan TPU.
  • Anda membayar sesuai penggunaan.

Latar belakang

Bagian ini menjelaskan teknik yang tersedia yang dapat Anda gunakan untuk mendapatkan resource komputasi, termasuk akselerator GPU, berdasarkan persyaratan beban kerja AI/ML Anda. Teknik ini disebut strategi ketersediaan akselerator di GKE.

GPU

Unit pemrosesan grafis (GPU) memungkinkan Anda mempercepat workload tertentu seperti machine learning dan pemrosesan data. GKE menawarkan node yang dilengkapi dengan GPU canggih ini untuk mengoptimalkan performa tugas machine learning dan pemrosesan data. GKE menyediakan berbagai opsi jenis mesin untuk konfigurasi node, termasuk jenis mesin dengan GPU NVIDIA H100, A100, dan L4.

Untuk mengetahui informasi selengkapnya, lihat Tentang GPU di GKE.

Flex-start

Flex-start, yang didukung oleh Dynamic Workload Scheduler, adalah opsi konsumsi GPU di mana GKE mempertahankan permintaan GPU Anda dan otomatis menyediakan VM Flex-start saat kapasitas tersedia. Pertimbangkan untuk menggunakan flex-start untuk workload yang memerlukan kapasitas GPU dalam waktu terbatas, hingga tujuh hari, dan tidak memiliki tanggal mulai tetap. Untuk mengetahui informasi selengkapnya, lihat flex-start.

Spot VM

Anda dapat menggunakan GPU dengan Spot VM jika workload Anda dapat menoleransi seringnya gangguan node. Penggunaan Spot VM atau flex-start mengurangi harga GPU yang berjalan. Penggunaan Spot VM yang dipadukan dengan flex-start memberikan opsi penggantian jika kapasitas Spot VM tidak tersedia.

Untuk mengetahui informasi selengkapnya, lihat Menggunakan Spot VM dengan node pool GPU.

ComputeClasses

Anda dapat meminta GPU menggunakan ComputeClass. ComputeClass memungkinkan Anda menentukan hierarki konfigurasi node untuk diprioritaskan GKE selama keputusan penskalaan node, sehingga workload berjalan di hardware yang Anda pilih. Untuk mengetahui informasi selengkapnya, lihat Tentang ComputeClass kustom.

Sebelum memulai

  • Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  • In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • Verify that billing is enabled for your Google Cloud project.

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • Verify that billing is enabled for your Google Cloud project.

Mendapatkan akses ke model

Jika Anda belum memilikinya, buat token Hugging Face baru:

  1. Klik Profil Anda > Setelan > Token Akses.
  2. Pilih New Token.
  3. Tentukan namanya sesuai dengan pilihan Anda, dan berikan peran minimal Read.
  4. Pilih Generate a token.

Membuat ComputeClass

Di bagian ini, Anda akan membuat ComputeClass kustom. ComputeClass menentukan jenis dan hubungan antara beberapa resource komputasi yang digunakan oleh workload Anda.

  1. Di konsol Google Cloud , luncurkan sesi Cloud Shell dengan mengklik Ikon aktivasi Cloud Shell Aktifkan Cloud Shell di konsolGoogle Cloud . Sesi akan terbuka di panel bawah konsol Google Cloud .
  2. Buat file manifes dws-flex-start.yaml:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: dws-model-inference-class
    spec:
      priorities:
        - machineType: g2-standard-24
          spot: true
        - machineType: g2-standard-24
          flexStart:
            enabled: true
            nodeRecycling:
              leadTimeSeconds: 3600
      nodePoolAutoCreation:
        enabled: true
    
  3. Terapkan manifes dws-flex-start.yaml:

    kubectl apply -f dws-flex-start.yaml
    

GKE men-deploy mesin g2-standard-24 dengan akselerator L4. GKE menggunakan ComputeClasses untuk membuat Spot VM menjadi prioritas pertama, dan VM mulai fleksibel menjadi prioritas kedua.

Men-deploy workload LLM

  1. Buat Secret Kubernetes yang berisi token Hugging Face menggunakan perintah berikut:

    kubectl create secret generic model-inference-secret \
        --from-literal=HUGGING_FACE_TOKEN=HUGGING_FACE_TOKEN \
        --dry-run=client -o yaml | kubectl apply -f -
    

    Ganti HUGGING_FACE_TOKEN dengan token akses Hugging Face Anda.

  2. Buat file bernama mixtral-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: inference-mixtral-ccc
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: llm
      template:
        metadata:
          labels:
            app: llm
        spec:
          nodeSelector:
            cloud.google.com/compute-class: dws-model-inference-class
          containers:
          - name: llm
            image: us-docker.pkg.dev/deeplearning-platform-release/gcr.io/huggingface-text-generation-inference-cu124.2-3.ubuntu2204.py311
            resources:
              requests:
                cpu: "5"
                memory: "40Gi"
                nvidia.com/gpu: "2"
              limits:
                cpu: "5"
                memory: "40Gi"
                nvidia.com/gpu: "2"
            env:
            - name: MODEL_ID
              value: mistralai/Mixtral-8x7B-Instruct-v0.1
            - name: NUM_SHARD
              value: "2"
            - name: PORT
              value: "8080"
            - name: QUANTIZE
              value: bitsandbytes-nf4
            - name: HUGGING_FACE_HUB_TOKEN
              valueFrom:
                secretKeyRef:
                  name: model-inference-secret
                  key: HUGGING_FACE_TOKEN
            volumeMounts:
              - mountPath: /dev/shm
                name: dshm
              - mountPath: /tmp
                name: ephemeral-volume
          volumes:
            - name: dshm
              emptyDir:
                  medium: Memory
            - name: ephemeral-volume
              ephemeral:
                volumeClaimTemplate:
                  metadata:
                    labels:
                      type: ephemeral
                  spec:
                    accessModes: ["ReadWriteOnce"]
                    storageClassName: "premium-rwo"
                    resources:
                      requests:
                        storage: 100Gi
    

    Dalam manifes ini, kolom mountPath disetel ke /tmp, karena merupakan jalur tempat variabel lingkungan HF_HOME di Deep Learning Container (DLC) untuk Text Generation Inference (TGI) disetel, bukan jalur /data default yang disetel dalam image default TGI. Model yang didownload akan disimpan di direktori ini.

  3. Deploy model:

    kubectl apply -f  mixtral-deployment.yaml
    

    GKE menjadwalkan Pod baru untuk di-deploy, yang memicu penskalaan otomatis node pool untuk menambahkan node kedua sebelum men-deploy replika kedua model.

  4. Verifikasi status model:

    watch kubectl get deploy inference-mixtral-ccc
    

    Jika model berhasil di-deploy, output-nya akan mirip dengan berikut ini:

    NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
    inference-mixtral-ccc  1/1     1            1           10m
    

    Untuk keluar dari smartwatch, tekan CTRL + C.

  5. Tunggu hingga container didownload dan mulai menyajikan model:

    watch "kubectl logs $(kubectl get pods -l app=llm -o custom-columns=:metadata.name --no-headers) | tail"
    

    Untuk keluar dari smartwatch, tekan CTRL + C.

  6. Lihat kumpulan node yang disediakan GKE:

    kubectl get nodes -L cloud.google.com/gke-nodepool
    

    Outputnya mirip dengan hal berikut ini:

      NAME                                                  STATUS   ROLES    AGE   VERSION               GKE-NODEPOOL
      gke-flex-na-nap-g2-standard--0723b782-fg7v   Ready    <none>   10m   v1.32.3-gke.1152000   nap-g2-standard-24-spot-gpu2-1gbdlbxz
      gke-flex-nap-zo-default-pool-09f6fe53-fzm8   Ready    <none>   32m   v1.32.3-gke.1152000   default-pool
      gke-flex-nap-zo-default-pool-09f6fe53-lv2v   Ready    <none>   32m   v1.32.3-gke.1152000   default-pool
      gke-flex-nap-zo-default-pool-09f6fe53-pq6m   Ready    <none>   32m   v1.32.3-gke.1152000   default-pool
    

    Nama node pool yang dibuat menunjukkan jenis mesin. Dalam kasus ini, GKE menyediakan Spot VM.

  7. Mengekspos model:

    kubectl expose deployment/inference-mixtral-ccc --port 8080 --name=llm-service
    

Berinteraksi dengan model menggunakan curl

Bagian ini menunjukkan cara melakukan pengujian inferensi dasar untuk memverifikasi model yang di-deploy.

  1. Menyiapkan penerusan port ke model:

    kubectl port-forward service/llm-service 8080:8080
    

    Outputnya mirip dengan hal berikut ini:

    Forwarding from 127.0.0.1:8080 -> 8080
    
  2. Dalam sesi terminal baru, mulai percakapan dengan model Anda menggunakan curl:

    curl http://localhost:8080/v1/completions \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{
        "model": "mixtral-8x7b-instruct-gptq",
        "prompt": "<s>[INST]Who was the first president of the United States?[/INST]",
        "max_tokens": 40}'
    

    Outputnya akan terlihat mirip seperti berikut:

    George Washington was a Founding Father and the first president of the United States, serving from 1789 to 1797.
    

Pembersihan

Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan di halaman ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

  1. Di Konsol Google Cloud , buka halaman Manage resources.

    Buka Kelola resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource satu per satu

  1. Hapus resource Kubernetes yang Anda buat dari panduan ini:

    kubectl delete deployment inference-mixtral-ccc
    kubectl delete service llm-service
    kubectl delete computeclass dws-model-inference-class
    kubectl delete secret model-inference-secret
    
  2. Hapus cluster:

    gcloud container clusters delete CLUSTER_NAME
    

Langkah berikutnya