Menggunakan vLLM di GKE untuk menjalankan inferensi dengan Llama 4

Tutorial ini menunjukkan cara men-deploy dan menyajikan Llama 4 Scout (17Bx16E), model bahasa besar (LLM) 17B, dan menyajikannya menggunakan framework vLLM. Anda men-deploy model ini 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 beban kerja inferensi.

Tujuan

  1. Akses Llama 4 menggunakan Hugging Face.

  2. Siapkan lingkungan Anda.

  3. Buat cluster GKE dalam mode Autopilot.

  4. Buat secret Kubernetes untuk kredensial Hugging Face.

  5. Deploy container vLLM ke cluster GKE Anda.

  6. Berinteraksi dengan Llama 4 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. 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.
  2. Instal Google Cloud CLI.

  3. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

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

    gcloud init
  5. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih 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 Pembuat Project (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 project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  6. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  7. 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
  8. Instal Google Cloud CLI.

  9. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

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

    gcloud init
  11. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih 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 Pembuat Project (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 project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  12. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  13. 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
  14. Memberikan 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:

    • PROJECT_ID: Project ID Anda.
    • USER_IDENTIFIER: ID untuk akun pengguna Anda. Misalnya, myemail@example.com.
    • ROLE: Peran IAM yang Anda berikan ke akun pengguna Anda.
  15. Login atau buat akun Hugging Face.

Mengakses Llama 4 menggunakan Hugging Face

Untuk menggunakan Hugging Face guna mengakses Llama 4, lakukan langkah-langkah berikut:

  1. Tandatangani perjanjian izin untuk menggunakan Llama 4.
  2. Buat token akses read Hugging Face.
  3. Salin dan simpan nilai token akses read. Anda akan menggunakannya nanti dalam tutorial ini.

Menyiapkan lingkungan Anda

Untuk menyiapkan lingkungan Anda, tetapkan variabel berikut:

export PROJECT_ID="YOUR_PROJECT_ID"
export RESERVATION_NAME="YOUR_RESERVATION_NAME"
export REGION="YOUR_CLUSTER_REGION"
export CLUSTER_NAME="YOUR_CLUSTER_NAME"
export HF_TOKEN="YOUR_HUGGING_FACE_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:

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

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

    • Reservasi ada di project Anda: YOUR_RESERVATION_NAME

    • Pemesanan ada di project lain, dan project Anda dapat menggunakan pemesanan tersebut. Tentukan jalur lengkap, yang sering disebut sebagai RESERVATION_URL: projects/YOUR_RESERVATION_PROJECT_ID/reservations/YOUR_RESERVATION_NAME. Ganti YOUR_RESERVATION_PROJECT_ID dengan ID project tempat reservasi bersama dibuat.

      Pastikan project Anda memiliki izin yang diperlukan untuk menggunakan reservasi dari project lain.

  • YOUR_CLUSTER_REGION: region tempat Anda ingin membuat cluster GKE. Anda hanya dapat membuat cluster di region tempat reservasi Anda berada.

  • YOUR_CLUSTER_NAME: nama cluster GKE yang akan dibuat.

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

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

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

    • Jika tidak, tentukan default.

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

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

    • Jika tidak, tentukan default.

Membuat dan mengonfigurasi resource Google Cloud

Ikuti petunjuk di bagian ini untuk membuat resource yang diperlukan.

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 diselesaikan. Untuk memverifikasi bahwa Google Cloud telah selesai membuat cluster Anda, buka Kubernetes clusters di konsol Google Cloud .

Buat secret Kubernetes untuk menyimpan kredensial Hugging Face Anda

Untuk membuat secret Kubernetes guna menyimpan kredensial Hugging Face Anda, lakukan 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 yang berisi token read access Hugging Face yang Anda buat pada langkah sebelumnya:

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

Men-deploy container vLLM ke cluster GKE Anda

Untuk men-deploy container vLLM guna menayangkan model Llama-4-Scout-17B-16E-Instruct, lakukan langkah-langkah berikut:

  1. Buat file vllm-l4-17b.yaml dengan deployment vLLM pilihan Anda:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: vllm-llama4-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: llama4-server
      template:
        metadata:
          labels:
            app: llama4-server
            ai.gke.io/model: llama-4-scout-17b
            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:20250722_0916_RC01
            resources:
              requests:
                cpu: "10"
                memory: "128Gi"
                ephemeral-storage: "240Gi"
                nvidia.com/gpu: "8"
              limits:
                cpu: "10"
                memory: "128Gi"
                ephemeral-storage: "240Gi"
                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: meta-llama/Llama-4-Scout-17B-16E-Instruct
            - name: HUGGING_FACE_HUB_TOKEN
              valueFrom:
                secretKeyRef:
                  name: hf-secret
                  key: hf_api_token
            volumeMounts:
            - mountPath: /dev/shm
              name: dshm
            startupProbe:
              httpGet:
                path: /health
                port: 8000
              failureThreshold: 200
              periodSeconds: 15
            livenessProbe:
              httpGet:
                path: /health
                port: 8000
              initialDelaySeconds: 15
              periodSeconds: 10
            readinessProbe:
              httpGet:
                path: /health
                port: 8000
              initialDelaySeconds: 15
              periodSeconds: 5
          volumes:
          - name: dshm
            emptyDir:
                medium: Memory
          nodeSelector:
            cloud.google.com/gke-accelerator: nvidia-b200
            cloud.google.com/reservation-name: ${RESERVATION_NAME}
            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: llama4-server
      type: ClusterIP
      ports:
        - protocol: TCP
          port: 8000
          targetPort: 8000
    ---
    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: vllm-llama4-monitoring
    spec:
      selector:
        matchLabels:
          app: llama4-server
      endpoints:
      - port: 8000
        path: /metrics
        interval: 30s
  2. Terapkan file vllm-l4-17b.yaml ke cluster GKE Anda:

    envsubst < vllm-l4-17b.yaml | kubectl apply -f -

    Selama proses deployment, container harus mendownload model Llama-4-Scout-17B-16E-Instruct dari Hugging Face. Oleh karena itu, deployment penampung mungkin memerlukan waktu hingga 30 menit untuk diselesaikan.

  3. Untuk melihat status penyelesaian, jalankan perintah berikut:

    kubectl wait \
        --for=condition=Available \
        --timeout=3000s \
        deployment/vllm-llama4-deployment

    Flag--timeout=3000s memungkinkan perintah memantau deployment hingga 50 menit.

Berinteraksi dengan Llama 4 menggunakan curl

Untuk memverifikasi model Llama 4 Scout yang Anda deploy, lakukan langkah-langkah berikut:

  1. Menyiapkan penerusan port ke Llama 4 Scout:

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

    curl http://127.0.0.1:8000/v1/chat/completions \
         -X POST \
         -H "Content-Type: application/json" \
         -d '{
           "model": "meta-llama/Llama-4-Scout-17B-16E-Instruct",
           "messages": [
             {
               "role": "user",
               "content": "Describe a sailboat in one short sentence?"
             }
           ]
         }' | jq .
  3. Output yang Anda lihat akan mirip dengan berikut ini:

    {
          "id": "chatcmpl-ec0ad6310c494a889b17600881c06e3d",
          "object": "chat.completion",
          "created": 1754073279,
          "model": "meta-llama/Llama-4-Scout-17B-16E-Instruct",
          "choices": [
            {
              "index": 0,
              "message": {
                "role": "assistant",
                "content": "A sailboat is a type of watercraft that uses the wind for propulsion, typically featuring a hull, mast, and one or more sails.",
                "refusal": null,
                "annotations": null,
                "audio": null,
                "function_call": null,
                "tool_calls": [],
                "reasoning_content": null
              },
              "logprobs": null,
              "finish_reason": "stop",
              "stop_reason": null
            }
          ],
          "service_tier": null,
          "system_fingerprint": null,
          "usage": {
            "prompt_tokens": 19,
            "total_tokens": 49,
            "completion_tokens": 30,
            "prompt_tokens_details": null
          },
          "prompt_logprobs": null,
          "kv_transfer_params": null
        }
    

Mengamati performa model

Untuk mengamati performa model, Anda dapat menggunakan integrasi dasbor vLLM di Cloud Monitoring. Anda dapat menggunakan dasbor ini untuk melihat metrik performa penting seperti throughput token, latensi permintaan, dan tingkat error.

Untuk mengetahui informasi tentang cara menggunakan Google Cloud Managed Service for Prometheus untuk mengumpulkan metrik dari model Anda, lihat panduan kejelasan vLLM dalam dokumentasi Cloud Monitoring.

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 dalam file vllm-l4-17b.yaml dan secret Kubernetes dari cluster GKE, jalankan perintah berikut:

    kubectl delete -f vllm-l4-17b.yaml
    kubectl delete secret hf-secret
  2. Untuk menghapus cluster GKE, jalankan perintah berikut:

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

Menghapus project Anda

Menghapus Google Cloud project:

gcloud projects delete PROJECT_ID

Langkah berikutnya