Menggunakan vLLM di GKE untuk menyajikan inferensi Gemma 3 27B

Tutorial ini menunjukkan cara men-deploy dan menyajikan model bahasa besar (LLM) Gemma 3 27B dengan framework penyajian vLLM. Anda men-deploy Gemma 3 pada satu instance virtual machine (VM) A4 di Google Kubernetes Engine (GKE).

Tutorial ini ditujukan untuk engineer machine learning (ML), administrator dan operator platform, serta spesialis data dan AI yang tertarik menggunakan kemampuan orkestrasi container Kubernetes untuk menangani workload inferensi.

Tujuan

  1. Mengakses Gemma 3 menggunakan Hugging Face.

  2. Menyiapkan lingkungan Anda.

  3. Membuat cluster GKE dalam mode Autopilot.

  4. Membuat secret Kubernetes untuk kredensial Hugging Face.

  5. Men-deploy container vLLM ke cluster GKE Anda.

  6. Berinteraksi dengan Gemma 3 menggunakan curl.

  7. Jalankan pembersihan.

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih, termasuk:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan Kalkulator Harga.

Sebelum memulai

  1. Instal Google Cloud CLI.

  2. Konfigurasi gcloud CLI agar menggunakan identitas gabungan Anda.

    Untuk mengetahui informasi selengkapnya, lihat Login ke gcloud CLI dengan identitas gabungan Anda.

  3. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  4. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Memilih project: Memilih project tidak memerlukan peran IAM tertentu Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih Google Cloud project yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama Google Cloud project Anda.

  5. Pastikan penagihan diaktifkan untuk Google Cloud project Anda.

  6. Aktifkan API yang diperlukan:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

    gcloud services enable container.googleapis.com
  7. Berikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: roles/container.admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Ganti kode berikut:

  8. Login ke atau buat akun Hugging Face.

Mengakses Gemma 3 menggunakan Hugging Face

Untuk menggunakan Hugging Face guna mengakses Gemma 3, lakukan hal berikut:

  1. Login ke Hugging Face
  2. Buat token akses read Hugging Face. Klik Your Profile > Settings > Access tokens > +Create new token
  3. Salin dan simpan nilai token read access. Anda akan menggunakannya nanti dalam tutorial ini.

Menyiapkan lingkungan Anda

Untuk menyiapkan lingkungan Anda, tetapkan variabel lingkungan default:

export PROJECT_ID="YOUR_PROJECT_ID"
export RESERVATION_URL="YOUR_RESERVATION_NAME"
export REGION="YOUR_REGION"
export CLUSTER_NAME="YOUR_CLUSTER_NAME"
export HUGGING_FACE_TOKEN="YOUR_HF_TOKEN"
export NETWORK="YOUR_NETWORK_NAME"
export SUBNETWORK="YOUR_SUBNETWORK_NAME"

gcloud config set project "${PROJECT_ID}"
gcloud config set billing/quota_project "${PROJECT_ID}"

Ganti kode berikut:

  • PROJECT_ID: ID Google Cloud project tempat Anda ingin membuat cluster GKE.

  • RESERVATION_URL: URL pemesanan yang ingin Anda gunakan untuk membuat cluster GKE. Berdasarkan project tempat pemesanan berada, tentukan salah satu nilai berikut:

    • Pemesanan ada di project Anda: RESERVATION_NAME

    • Pemesanan ada di project lain, dan project Anda dapat menggunakan pemesanan tersebut: projects/RESERVATION_PROJECT_ID/reservations/RESERVATION_NAME

  • REGION: region tempat Anda ingin membuat cluster GKE. Anda hanya dapat membuat cluster di region tempat pemesanan Anda berada.

  • CLUSTER_NAME: nama cluster GKE yang akan dibuat.

  • YOUR_HF_TOKEN: token akses Hugging Face yang Anda buat di bagian sebelumnya.

  • NETWORK: jaringan yang digunakan cluster GKE. Tentukan salah satu nilai berikut:

    • Jika Anda membuat jaringan kustom, tentukan nama jaringan Anda.

    • Jika tidak, tentukan default.

  • SUBNETWORK: subnetwork yang digunakan cluster GKE. Tentukan salah satu nilai berikut:

    • Jika Anda membuat subnetwork kustom, tentukan nama subnetwork Anda. Anda hanya dapat menentukan subnetwork yang ada di region yang sama dengan pemesanan.

    • Jika tidak, tentukan default.

Membuat cluster GKE dalam mode Autopilot

Untuk membuat cluster GKE dalam mode Autopilot, jalankan perintah berikut:

gcloud container clusters create-auto $CLUSTER_NAME \
    --project=$PROJECT_ID \
    --region=$REGION \
    --release-channel=rapid \
    --network=$NETWORK \
    --subnetwork=$SUBNETWORK

Pembuatan cluster GKE mungkin memerlukan waktu beberapa saat. Untuk memverifikasi bahwa Google Cloud telah selesai membuat cluster Anda, buka cluster Kubernetes di Google Cloud konsol.

Membuat secret Kubernetes untuk kredensial Hugging Face

Untuk membuat secret Kubernetes untuk kredensial Hugging Face, ikuti langkah-langkah berikut:

  1. Konfigurasi kubectl untuk berkomunikasi dengan cluster GKE Anda:

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --location=$REGION
  2. Buat secret Kubernetes untuk menyimpan token Hugging Face Anda:

    kubectl create secret generic hf-secret \
        --from-literal=hf_api_token=${HUGGING_FACE_TOKEN} \
        --dry-run=client -o yaml | kubectl apply -f -

Men-deploy container vLLM ke cluster GKE Anda

Untuk men-deploy container vLLM guna menyajikan model Gemma 3 27B menggunakan Deployment Kubernetes, ikuti langkah-langkah berikut:

  1. Buat file vllm-3-27b-it.yaml dengan deployment vLLM yang Anda pilih:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: vllm-gemma-deployment
    spec:
      progressDeadlineSeconds: 900
      replicas: 1
      selector:
        matchLabels:
          app: gemma-server
      template:
        metadata:
          labels:
            app: gemma-server
            ai.gke.io/model: gemma-3-27b-it
            ai.gke.io/inference-server: vllm
            examples.ai.gke.io/source: user-guide
        spec:
          containers:
          - name: inference-server
            image: us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:20250801_0916_RC01
            resources:
              requests:
                cpu: "10"
                memory: "128Gi"
                ephemeral-storage: "120Gi"
                nvidia.com/gpu: "8"
              limits:
                cpu: "10"
                memory: "128Gi"
                ephemeral-storage: "120Gi"
                nvidia.com/gpu: "8"
            command: ["python3", "-m", "vllm.entrypoints.openai.api_server"]
            args:
            - --model=$(MODEL_ID)
            - --tensor-parallel-size=8
            - --host=0.0.0.0
            - --port=8000
            - --max-model-len=4096
            - --max-num-seqs=4
            env:
            - name: MODEL_ID
              value: google/gemma-3-27b-it
            - name: HUGGING_FACE_HUB_TOKEN
              valueFrom:
                secretKeyRef:
                  name: hf-secret
                  key: hf_api_token
            volumeMounts:
            - mountPath: /dev/shm
              name: dshm
            livenessProbe:
              httpGet:
                path: /health
                port: 8000
              initialDelaySeconds: 720
              periodSeconds: 10
            readinessProbe:
              httpGet:
                path: /health
                port: 8000
              initialDelaySeconds: 720
              periodSeconds: 5
          volumes:
          - name: dshm
            emptyDir:
                medium: Memory
          nodeSelector:
            cloud.google.com/gke-accelerator: nvidia-b200
            cloud.google.com/reservation-name: $RESERVATION_URL
            cloud.google.com/reservation-affinity: "specific"
            cloud.google.com/gke-gpu-driver-version: latest
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: llm-service
    spec:
      selector:
        app: gemma-server
      type: ClusterIP
      ports:
        - protocol: TCP
          port: 8000
          targetPort: 8000
  2. Terapkan file vllm-3-27b-it.yaml ke cluster GKE Anda:

    envsubst < vllm-3-27b-it.yaml | kubectl apply -f -

    Selama proses deployment, container harus mendownload Gemma 3 dari Hugging Face. Oleh karena itu, deployment container mungkin memerlukan waktu hingga 30 menit.

  3. Tunggu hingga deployment selesai:

    kubectl wait \
        --for=condition=Available \
        --timeout=1800s deployment/vllm-gemma-deployment

Berinteraksi dengan Gemma 3 menggunakan curl

Untuk memverifikasi model Gemma 3 27B yang telah di-deploy dan disesuaikan dengan petunjuk, ikuti langkah-langkah berikut:

  1. Siapkan penerusan port ke Gemma 3:

    kubectl port-forward service/llm-service 8000:8000
  2. Buka jendela terminal baru. Kemudian, Anda dapat melakukan percakapan dengan model Anda menggunakan curl:

    curl http://127.0.0.1:8000/v1/chat/completions \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{
      "model": "google/gemma-3-27b-it",
      "messages": [
        {
          "role": "user",
          "content": "Why is the sky blue?"
        }
      ]
    }' | jq .

    Outputnya mirip dengan hal berikut ini:

    {
      "id": "chatcmpl-e4a2e624bea849d9b09f838a571c4d9e",
      "object": "chat.completion",
      "created": 1741763029,
      "model": "google/gemma-3-27b-it",
      "choices": [
        {
          "index": 0,
          "message": {
            "role": "assistant",
            "reasoning_content": null,
            "content": "Okay, let's break down why the sky appears blue! It's a fascinating phenomenon rooted in physics, specifically something called **Rayleigh scattering**. Here's the explanation: ...",
            "tool_calls": []
          },
          "logprobs": null,
          "finish_reason": "stop",
          "stop_reason": 106
        }
      ],
      "usage": {
        "prompt_tokens": 15,
        "total_tokens": 668,
        "completion_tokens": 653,
        "prompt_tokens_details": null
      },
      "prompt_logprobs": null
    }
    

Jika ingin mengamati performa model, Anda dapat menggunakan integrasi dasbor vLLM di Cloud Monitoring. Dasbor ini membantu Anda melihat metrik performa penting untuk model Anda seperti throughput token, latensi jaringan, dan rasio error. Untuk mengetahui informasi selengkapnya, lihat vLLM dalam dokumentasi Monitoring.

Jalankan pembersihan.

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus resource

  1. Untuk menghapus deployment dan layanan yang ditentukan dalam file vllm-3-27b-it.yaml dan secret Kubernetes dari cluster GKE, jalankan perintah berikut:

    envsubst < vllm-3-27b-it.yaml | kubectl delete -f -
    kubectl delete secret hf-secret
  2. Untuk menghapus cluster GKE Anda, jalankan perintah berikut:

    gcloud container clusters delete $CLUSTER_NAME \
        --region=$REGION \
        --quiet

Menghapus project Anda

Hapus a Google Cloud project:

gcloud projects delete PROJECT_ID

Langkah berikutnya