Memigrasikan GKE Inference Gateway dari v1alpha2 ke v1

Halaman ini menjelaskan cara memigrasikan penyiapan GKE Inference Gateway dari API pratinjau v1alpha2 ke API v1 yang tersedia secara umum.

Dokumen ini ditujukan untuk administrator platform dan spesialis jaringan yang menggunakan GKE Inference Gateway versi v1alpha2 dan ingin mengupgrade ke versi v1 untuk menggunakan fitur terbaru.

Sebelum memulai migrasi, pastikan Anda memahami konsep dan deployment GKE Inference Gateway. Sebaiknya tinjau Men-deploy GKE Inference Gateway.

Sebelum memulai

Sebelum memulai migrasi, tentukan apakah Anda perlu mengikuti panduan ini.

Memeriksa API v1alpha2 yang ada

Untuk memeriksa apakah Anda menggunakan GKE Inference Gateway API v1alpha2, jalankan perintah berikut:

kubectl get inferencepools.inference.networking.x-k8s.io --all-namespaces
kubectl get inferencemodels.inference.networking.x-k8s.io --all-namespaces

Output perintah ini menentukan apakah Anda perlu bermigrasi:

  • Jika salah satu perintah menampilkan satu atau beberapa resource InferencePool atau InferenceModel, Anda menggunakan API v1alpha2 dan harus mengikuti panduan ini.
  • Jika kedua perintah menampilkan No resources found, Anda tidak menggunakan API v1alpha2. Anda dapat melanjutkan dengan penginstalan baru GKE Inference Gateway v1.

Jalur migrasi

Ada dua jalur untuk bermigrasi dari v1alpha2 ke v1:

  • Migrasi sederhana (dengan waktu non-operasional): jalur ini lebih cepat dan sederhana, tetapi menyebabkan waktu non-operasional singkat. Jalur ini direkomendasikan jika Anda tidak memerlukan migrasi tanpa waktu non-operasional.
  • Migrasi tanpa waktu non-operasional: jalur ini ditujukan untuk pengguna yang tidak dapat mengalami gangguan layanan. Jalur ini melibatkan menjalankan stack v1alpha2 dan v1 secara berdampingan dan secara bertahap mengalihkan traffic.

Migrasi sederhana (dengan waktu non-operasional)

Bagian ini menjelaskan cara melakukan migrasi sederhana dengan waktu non-operasional.

  1. Menghapus resource v1alpha2 yang ada: untuk menghapus v1alpha2 resource, pilih salah satu opsi berikut:

    Opsi 1: Meng-uninstal menggunakan Helm

    helm uninstall HELM_PREVIEW_INFERENCEPOOL_NAME
    

    Opsi 2: Menghapus resource secara manual

    Jika Anda tidak menggunakan Helm, hapus semua resource yang terkait dengan deployment v1alpha2 secara manual:

    • Perbarui atau hapus HTTPRoute untuk menghapus backendRef yang mengarah ke InferencePool v1alpha2.
    • Hapus InferencePool v1alpha2, resource InferenceModel apa pun yang mengarah ke resource tersebut, serta Deployment dan Layanan Endpoint Picker (EPP) yang sesuai.

    Setelah semua resource kustom v1alpha2 dihapus, hapus Definisi Resource Kustom (CRD) dari cluster Anda:

    kubectl delete -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v0.3.0/manifests.yaml
    
  2. Menginstal resource v1: setelah Anda membersihkan resource lama, instal v1 GKE Inference Gateway. Proses ini melibatkan hal berikut:

    1. Menginstal Definisi Resource Kustom (CRD) v1 baru.
    2. Membuat InferencePool v1 baru dan resource InferenceObjective yang sesuai. Resource InferenceObjective masih ditentukan dalam API v1alpha2.
    3. Membuat HTTPRoute baru yang mengarahkan traffic ke InferencePool v1 baru.
  3. Memverifikasi deployment: setelah beberapa menit, verifikasi bahwa stack v1 baru Anda melayani traffic dengan benar.

    1. Konfirmasi bahwa status Gateway adalah PROGRAMMED:

      kubectl get gateway -o wide
      

      Output-nya akan terlihat seperti ini:

      NAME                CLASS                            ADDRESS        PROGRAMMED   AGE
      inference-gateway   gke-l7-regional-external-managed   <IP_ADDRESS>   True         10m
      
    2. Verifikasi endpoint dengan mengirim permintaan:

      IP=$(kubectl get gateway/inference-gateway -o jsonpath='{.status.addresses[0].value}')
      PORT=80
      curl -i ${IP}:${PORT}/v1/completions -H 'Content-Type: application/json' -d '{"model": "<var>YOUR_MODEL</var>","prompt": "<var>YOUR_PROMPT</var>","max_tokens": 100,"temperature": 0}'
      
    3. Pastikan Anda menerima respons yang berhasil dengan kode respons 200.

Migrasi tanpa waktu non-operasional

Jalur migrasi ini dirancang untuk pengguna yang tidak dapat mengalami gangguan layanan. Diagram berikut mengilustrasikan cara GKE Inference Gateway memfasilitasi penyajian beberapa model AI generatif, yang merupakan aspek utama dari strategi migrasi tanpa waktu non-operasional.

Merutekan permintaan ke model yang berbeda berdasarkan nama model dan Prioritas
Gambar: GKE Inference Gateway merutekan permintaan ke berbagai model AI generatif berdasarkan nama dan prioritas model

Membedakan versi API dengan kubectl

Selama migrasi tanpa waktu non-operasional, CRD v1alpha2 dan v1 diinstal di cluster Anda. Hal ini dapat menimbulkan ambiguitas saat menggunakan kubectl untuk membuat kueri resource InferencePool. Untuk memastikan Anda berinteraksi dengan versi yang benar, Anda harus menggunakan nama resource lengkap:

  • Untuk v1alpha2:

    kubectl get inferencepools.inference.networking.x-k8s.io
    
  • Untuk v1:

    kubectl get inferencepools.inference.networking.k8s.io
    

API v1 juga menyediakan nama pendek yang praktis, infpool, yang dapat Anda gunakan untuk membuat kueri resource v1 secara khusus:

kubectl get infpool

Tahap 1: Deployment v1 berdampingan

Pada tahap ini, Anda men-deploy stack InferencePool v1 baru bersama dengan stack v1alpha2 yang ada, yang memungkinkan migrasi bertahap yang aman.

Setelah menyelesaikan semua langkah pada tahap ini, Anda akan memiliki infrastruktur berikut dalam diagram berikut:

Merutekan permintaan ke model yang berbeda berdasarkan nama model dan Prioritas
Gambar: GKE Inference Gateway merutekan permintaan ke berbagai model AI generatif berdasarkan nama dan prioritas model
  1. Instal Definisi Resource Kustom (CRD) yang diperlukan di cluster GKE Anda:

    • Untuk GKE versi sebelum 1.34.0-gke.1626000, jalankan perintah berikut untuk menginstal CRD InferencePool v1 dan InferenceObjective alfa:
    kubectl apply -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v1.0.0/manifests.yaml
    
    • Untuk GKE versi 1.34.0-gke.1626000 atau yang lebih baru, instal hanya CRD InferenceObjective alfa dengan menjalankan perintah berikut:
    kubectl apply -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/raw/v1.0.0/config/crd/bases/inference.networking.x-k8s.io_inferenceobjectives.yaml
    
  2. Instal v1 InferencePool.

    Gunakan Helm untuk menginstal v1 InferencePool baru dengan nama rilis yang berbeda, seperti vllm-llama3-8b-instruct-ga. InferencePool harus menargetkan pod Server Model yang sama dengan InferencePool alfa menggunakan inferencePool.modelServers.matchLabels.app.

    Untuk menginstal InferencePool, gunakan perintah berikut:

    helm install vllm-llama3-8b-instruct-ga \
    --set inferencePool.modelServers.matchLabels.app=MODEL_SERVER_DEPLOYMENT_LABEL \
    --set provider.name=gke \
    --version RELEASE \
    oci://registry.k8s.io/gateway-api-inference-extension/charts/inferencepool
    

    Ganti kode berikut:

    • MODEL_SERVER_DEPLOYMENT_LABEL: label yang digunakan oleh Pod Server Model yang ada (misalnya, vllm-llama3-8b-instruct-preview).
    • RELEASE: versi chart Helm Ekstensi Inferensi Gateway API v1 yang ingin Anda instal
  3. Buat resource v1alpha2 InferenceObjective.

    Sebagai bagian dari migrasi ke rilis v1.0 Ekstensi Inferensi Gateway API, kita juga perlu bermigrasi dari API InferenceModel alfa ke API InferenceObjective baru.

    1. Terapkan YAML berikut untuk membuat resource InferenceObjective:

      kubectl apply -f - <<EOF
      ---
      apiVersion: inference.networking.x-k8s.io/v1alpha2
      kind: InferenceObjective
      metadata:
        name: food-review
      spec:
        priority: 2
        poolRef:
          group: inference.networking.k8s.io
          name: vllm-llama3-8b-instruct-ga
      ---
      apiVersion: inference.networking.x-k8s.io/v1alpha2
      kind: InferenceObjective
      metadata:
        name: base-model
      spec:
        priority: 2
        poolRef:
          group: inference.networking.k8s.io
          name: vllm-llama3-8b-instruct-ga
      ---
      EOF
      

Tahap 2: Pengalihan traffic

Dengan kedua stack berjalan, Anda dapat mulai mengalihkan traffic dari v1alpha2 ke v1 dengan memperbarui HTTPRoute untuk membagi traffic. Contoh ini menunjukkan pembagian 50-50.

  1. Perbarui HTTPRoute untuk pembagian traffic.

    Untuk memperbarui HTTPRoute untuk pembagian traffic, jalankan perintah berikut:

    kubectl apply -f - <<EOF
    ---
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: llm-route
    spec:
      parentRefs:
      - group: gateway.networking.k8s.io
        kind: Gateway
        name: inference-gateway
      rules:
      - backendRefs:
        - group: inference.networking.x-k8s.io
          kind: InferencePool
          name: vllm-llama3-8b-instruct-preview
          weight: 50
        - group: inference.networking.k8s.io
          kind: InferencePool
          name: vllm-llama3-8b-instruct-ga
          weight: 50
    ---
    EOF
    
  2. Verifikasi dan pantau.

    Setelah menerapkan perubahan, pantau performa dan stabilitas stack v1 baru. Pastikan gateway inference-gateway memiliki status PROGRAMMED TRUE.

Tahap 3: Finalisasi dan pembersihan

Setelah memverifikasi bahwa v1 InferencePool stabil, Anda dapat mengarahkan semua traffic ke resource tersebut dan menonaktifkan resource v1alpha2 lama.

  1. Alihkan 100% traffic ke v1 InferencePool.

    Untuk mengalihkan 100 persen traffic ke v1 InferencePool, jalankan perintah berikut:

    kubectl apply -f - <<EOF
    ---
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: llm-route
    spec:
      parentRefs:
      - group: gateway.networking.k8s.io
        kind: Gateway
        name: inference-gateway
      rules:
      - backendRefs:
        - group: inference.networking.k8s.io
          kind: InferencePool
          name: vllm-llama3-8b-instruct-ga
          weight: 100
    ---
    EOF
    
  2. Lakukan verifikasi akhir.

    Setelah mengarahkan semua traffic ke stack v1, verifikasi bahwa stack tersebut menangani semua traffic seperti yang diharapkan.

    1. Konfirmasi bahwa status Gateway adalah PROGRAMMED:

      kubectl get gateway -o wide
      

      Output-nya akan terlihat seperti ini:

      NAME                CLASS                              ADDRESS           PROGRAMMED   AGE
      inference-gateway   gke-l7-regional-external-managed   <IP_ADDRESS>   True                     10m
      
    2. Verifikasi endpoint dengan mengirim permintaan:

      IP=$(kubectl get gateway/inference-gateway -o jsonpath='{.status.addresses[0].value}')
      PORT=80
      curl -i ${IP}:${PORT}/v1/completions -H 'Content-Type: application/json' -d '{
      "model": "YOUR_MODEL",
      "prompt": "YOUR_PROMPT",
      "max_tokens": 100,
      "temperature": 0
      }'
      
    3. Pastikan Anda menerima respons yang berhasil dengan kode respons 200.

  3. Bersihkan resource v1alpha2.

    Setelah mengonfirmasi bahwa stack v1 beroperasi penuh, hapus resource lama v1alpha2 dengan aman.

  4. Periksa resource v1alpha2 yang tersisa.

    Setelah bermigrasi ke v1 InferencePool API, Anda dapat menghapus CRD lama dengan aman. Periksa API v1alpha2 yang ada untuk memastikan Anda tidak lagi menggunakan resource v1alpha2 yang digunakan. Jika masih ada beberapa yang tersisa, Anda dapat melanjutkan proses migrasi untuk resource tersebut.

  5. Hapus CRD v1alpha2

    Setelah semua resource kustom v1alpha2 dihapus, hapus Definisi Resource Kustom (CRD) dari cluster Anda:

    kubectl delete -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v0.3.0/manifests.yaml
    

    Setelah menyelesaikan semua langkah, infrastruktur Anda akan menyerupai diagram berikut:

    Merutekan permintaan ke model yang berbeda berdasarkan nama model dan Prioritas
    Gambar: GKE Inference Gateway merutekan permintaan ke berbagai model AI generatif berdasarkan nama dan prioritas model

Langkah berikutnya