Memigrasikan GKE Inference Gateway dari v1alpha2 ke v1

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

Dokumen ini ditujukan bagi 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 v1alpha2 GKE Inference Gateway API, jalankan perintah berikut:

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

Output dari perintah ini menentukan apakah Anda perlu bermigrasi:

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

Jalur migrasi

Ada dua jalur untuk bermigrasi dari v1alpha2 ke v1:

  • Migrasi sederhana (dengan periode nonaktif): jalur ini lebih cepat dan sederhana, tetapi mengakibatkan periode nonaktif yang singkat. Jalur ini direkomendasikan jika Anda tidak memerlukan migrasi tanpa periode nonaktif.
  • Migrasi tanpa periode nonaktif: jalur ini ditujukan bagi pengguna yang tidak dapat mentoleransi gangguan layanan apa pun. Hal ini melibatkan menjalankan stack v1alpha2 dan v1 secara berdampingan dan mengalihkan traffic secara bertahap.

Migrasi sederhana (dengan waktu non-operasional)

Bagian ini menjelaskan cara melakukan migrasi sederhana dengan periode nonaktif.

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

    Opsi 1: 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 v1alpha2 InferencePool.
    • Hapus v1alpha2 InferencePool, semua resource InferenceModel yang mengarah ke sana, 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. Instal resource v1: setelah Anda membersihkan resource lama, instal v1 GKE Inference Gateway. Proses ini melibatkan hal-hal berikut:

    1. Instal Definisi Resource Kustom (CRD) v1 yang baru.
    2. Buat v1 InferencePool baru dan resource InferenceObjective yang sesuai. Resource InferenceObjective masih ditentukan di v1alpha2 API.
    3. Buat HTTPRoute baru yang mengarahkan traffic ke v1 InferencePool baru Anda.
  3. Verifikasi 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 periode nonaktif

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

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 henti, CRD v1alpha2 dan v1 akan 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
    

v1 API juga menyediakan nama singkat yang mudah, infpool, yang dapat Anda gunakan untuk mengkueri 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 yang aman dan bertahap.

Setelah menyelesaikan semua langkah di 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 versi GKE yang lebih lama dari 1.34.0-gke.1626000, jalankan perintah berikut untuk menginstal CRD v1 InferencePool dan alfa InferenceObjective:
    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 alfa InferenceObjective 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
    
  3. Buat resource v1alpha2 InferenceObjective.

    Sebagai bagian dari migrasi ke rilis v1.0 Gateway API Inference Extension, kita juga perlu bermigrasi dari API alfa InferenceModel 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 memisahkan traffic. Contoh ini menunjukkan pembagian 50-50.

  1. Perbarui HTTPRoute untuk pembagian traffic.

    Untuk memperbarui HTTPRoute untuk pemisahan 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. Verifikasi bahwa gateway inference-gateway memiliki status PROGRAMMED TRUE.

Tahap 3: Penyelesaian dan pembersihan

Setelah memverifikasi bahwa v1 InferencePool stabil, Anda dapat mengarahkan semua traffic ke v1 InferencePool 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, pastikan 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 sepenuhnya, hapus resource v1alpha2 lama dengan aman.

  4. Periksa sisa sumber daya v1alpha2.

    Setelah Anda 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. Jika masih ada beberapa yang tersisa, Anda dapat melanjutkan proses migrasi untuk akun 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 terlihat seperti 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