Questa pagina spiega come eseguire la migrazione della configurazione di GKE Inference Gateway dall'
API v1alpha2 in anteprima all'API v1 disponibile a livello generale.
Questo documento è destinato agli amministratori di piattaforme e agli specialisti di networking che utilizzano la versione v1alpha2 di GKE Inference Gateway e vogliono eseguire l'upgrade alla versione v1 per utilizzare le funzionalità più recenti.
Prima di iniziare la migrazione, assicurati di conoscere i concetti e il deployment di GKE Inference Gateway. Ti consigliamo di consultare la pagina Eseguire il deployment di GKE Inference Gateway.
Prima di iniziare
Prima di iniziare la migrazione, determina se devi seguire questa guida.
Verificare la presenza di API v1alpha2 esistenti
Per verificare se utilizzi l'API v1alpha2 di GKE Inference Gateway, esegui i seguenti comandi:
kubectl get inferencepools.inference.networking.x-k8s.io --all-namespaces
kubectl get inferencemodels.inference.networking.x-k8s.io --all-namespaces
L'output di questi comandi determina se devi eseguire la migrazione:
- Se uno dei due comandi restituisce una o più risorse
InferencePooloInferenceModel, significa che utilizzi l'APIv1alpha2e devi seguire questa guida. - Se entrambi i comandi restituiscono
No resources found, significa che non utilizzi l'APIv1alpha2. Puoi procedere con una nuova installazione div1GKE Inference Gateway.
Percorsi di migrazione
Esistono due percorsi per la migrazione da v1alpha2 a v1:
- Migrazione semplice (con tempi di inattività): questo percorso è più veloce e semplice, ma comporta un breve periodo di inattività. È il percorso consigliato se non hai bisogno di una migrazione senza tempi di inattività.
- Migrazione senza tempi di inattività: questo percorso è destinato agli utenti che non possono permettersi interruzioni del servizio. Comporta l'esecuzione di stack
v1alpha2ev1affiancati e lo spostamento graduale del traffico.
Migrazione semplice (con tempi di inattività)
Questa sezione descrive come eseguire una migrazione semplice con tempi di inattività.
Elimina le risorse
v1alpha2esistenti: per eliminare lev1alpha2risorse, scegli una delle seguenti opzioni:Opzione 1: disinstallare utilizzando Helm
helm uninstall HELM_PREVIEW_INFERENCEPOOL_NAMEOpzione 2: eliminare manualmente le risorse
Se non utilizzi Helm, elimina manualmente tutte le risorse associate al deployment
v1alpha2:- Aggiorna o elimina
HTTPRouteper rimuoverebackendRefche rimanda av1alpha2InferencePool. - Elimina
v1alpha2InferencePool, tutte le risorseInferenceModelche rimandano a questa risorsa e il deployment e il servizio Endpoint Picker (EPP) corrispondenti.
Dopo aver eliminato tutte le risorse personalizzate
v1alpha2, rimuovi le definizioni di risorse personalizzate (CRD) dal cluster:kubectl delete -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v0.3.0/manifests.yaml- Aggiorna o elimina
Installa le risorse v1: dopo aver liberato spazio dalle vecchie risorse, installa
v1GKE Inference Gateway. Questa procedura prevede quanto segue:- Installa le nuove definizioni di risorse personalizzate (CRD)
v1. - Crea una nuova risorsa
v1InferencePoole le risorseInferenceObjectivecorrispondenti. La risorsaInferenceObjectiveè ancora definita nell'APIv1alpha2. - Crea una nuova risorsa
HTTPRouteche indirizzi il traffico al nuovov1InferencePool.
- Installa le nuove definizioni di risorse personalizzate (CRD)
Verifica il deployment: dopo qualche minuto, verifica che il nuovo
v1stack gestisca correttamente il traffico.Verifica che lo stato del gateway sia
PROGRAMMED:kubectl get gateway -o wideL'output dovrebbe essere simile a questo:
NAME CLASS ADDRESS PROGRAMMED AGE inference-gateway gke-l7-regional-external-managed <IP_ADDRESS> True 10mVerifica l'endpoint inviando una richiesta:
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}'Assicurati di ricevere una risposta positiva con un codice di risposta
200.
Migrazione senza tempi di inattività
Questo percorso di migrazione è progettato per gli utenti che non possono permettersi interruzioni del servizio. Il seguente diagramma illustra come GKE Inference Gateway facilita la gestione di più modelli di AI generativa, un aspetto fondamentale di una strategia di migrazione senza tempi di inattività.
Distinguere le versioni dell'API con kubectl
Durante la migrazione senza tempi di inattività, nel cluster vengono installate sia le CRD v1alpha2 sia le CRD v1. Questo può creare ambiguità quando utilizzi kubectl per eseguire query sulle risorse InferencePool. Per assicurarti di interagire con la versione corretta, devi utilizzare il nome completo della risorsa:
Per
v1alpha2:kubectl get inferencepools.inference.networking.x-k8s.ioPer
v1:kubectl get inferencepools.inference.networking.k8s.io
L'API v1 fornisce anche un nome breve pratico, infpool, che puoi utilizzare per eseguire query specifiche sulle risorse v1:
kubectl get infpool
Fase 1: deployment v1 affiancato
In questa fase, esegui il deployment del nuovo stack v1 InferencePool insieme allo stack v1alpha2 esistente, il che consente una migrazione graduale e sicura.
Dopo aver completato tutti i passaggi di questa fase, avrai la seguente infrastruttura nel seguente diagramma:
Installa le definizioni di risorse personalizzate (CRD) necessarie nel cluster GKE:
- Per le versioni di GKE precedenti a
1.34.0-gke.1626000, esegui il comando seguente per installare sia le CRDInferencePoolv1 sia le CRDInferenceObjectivealpha:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v1.0.0/manifests.yaml- Per le versioni di GKE
1.34.0-gke.1626000o successive, installa solo la CRDInferenceObjectivealpha eseguendo il comando seguente:
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- Per le versioni di GKE precedenti a
Installa
v1 InferencePool.Utilizza Helm per installare un nuovo
v1 InferencePoolcon un nome di release distinto, ad esempiovllm-llama3-8b-instruct-ga.InferencePooldeve avere come target gli stessi pod del server dei modelli diInferencePoolalpha utilizzandoinferencePool.modelServers.matchLabels.app.Per installare
InferencePool, utilizza il comando seguente: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/inferencepoolSostituisci quanto segue:
MODEL_SERVER_DEPLOYMENT_LABEL: l'etichetta utilizzata dai pod del server dei modelli esistenti (ad esempio,vllm-llama3-8b-instruct-preview).RELEASE: la versione del grafico Helm dell'estensione di inferenza dell'API Gateway v1 che vuoi installare
Crea risorse
v1alpha2 InferenceObjective.Nell'ambito della migrazione alla release v1.0 dell'estensione di inferenza dell'API Gateway, dobbiamo anche eseguire la migrazione dall'API
InferenceModelalpha alla nuova APIInferenceObjective.Applica il seguente YAML per creare le risorse
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
Fase 2: spostamento del traffico
Con entrambi gli stack in esecuzione, puoi iniziare a spostare il traffico da v1alpha2 a v1
aggiornando HTTPRoute per suddividere il traffico. Questo esempio mostra una suddivisione 50-50.
Aggiorna HTTPRoute per la suddivisione del traffico.
Per aggiornare
HTTPRouteper la suddivisione del traffico, esegui il comando seguente: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 --- EOFVerifica e monitora.
Dopo aver applicato le modifiche, monitora le prestazioni e la stabilità del nuovo stack
v1. Verifica che il gatewayinference-gatewayabbia uno statoPROGRAMMEDdiTRUE.
Fase 3: finalizzazione e pulizia
Dopo aver verificato che v1 InferencePool sia stabile, puoi indirizzare tutto il traffico a questa risorsa e dismettere le vecchie risorse v1alpha2.
Sposta il 100% del traffico su
v1 InferencePool.Per spostare il 100% del traffico su
v1 InferencePool, esegui il comando seguente: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 --- EOFEsegui la verifica finale.
Dopo aver indirizzato tutto il traffico allo stack
v1, verifica che gestisca tutto il traffico come previsto.Verifica che lo stato del gateway sia
PROGRAMMED:kubectl get gateway -o wideL'output dovrebbe essere simile a questo:
NAME CLASS ADDRESS PROGRAMMED AGE inference-gateway gke-l7-regional-external-managed <IP_ADDRESS> True 10mVerifica l'endpoint inviando una richiesta:
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 }'Assicurati di ricevere una risposta positiva con un codice di risposta
200.
Esegui la pulizia delle risorse v1alpha2.
Dopo aver verificato che lo stack
v1sia completamente operativo, rimuovi in sicurezza le vecchiev1alpha2risorse.Verifica la presenza di risorse
v1alpha2rimanenti.Ora che hai eseguito la migrazione all'API
InferencePoolv1, puoi eliminare le vecchie CRD in sicurezza. Verifica la presenza di API v1alpha2 esistenti per assicurarti di non avere più risorsev1alpha2in uso. Se ne hai ancora alcune, puoi continuare la procedura di migrazione per queste risorse.Elimina
v1alpha2CRD.Dopo aver eliminato tutte le risorse personalizzate
v1alpha2, rimuovi le definizioni di risorse personalizzate (CRD) dal cluster:kubectl delete -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v0.3.0/manifests.yamlDopo aver completato tutti i passaggi, la tua infrastruttura dovrebbe essere simile al seguente diagramma:
Figura: GKE Inference Gateway che instrada le richieste a diversi modelli di AI generativa in base al nome e alla priorità del modello
Passaggi successivi
- Scopri di più su come eseguire il deployment di GKE Inference Gateway.
- Esplora altre funzionalità di networking di GKE.