Questo tutorial mostra come eseguire il deployment e pubblicare un modello linguistico di grandi dimensioni (LLM) utilizzando le GPU su Google Kubernetes Engine (GKE) con NVIDIA Triton Inference Server e TensorFlow Serving Questo fornisce una base per comprendere ed esplorare l'implementazione pratica di LLM per l'inferenza in un ambiente Kubernetes gestito. Esegui il deployment di un container predefinito in un cluster GKE con una singola GPU L4 Tensor Core e prepari l'infrastruttura GKE per eseguire l'inferenza online.
Questo tutorial è rivolto a ML engineer, amministratori e operatori di piattaforme e specialisti di dati e AI che vogliono ospitare un modello di machine learning (ML) preaddestrato su un cluster GKE. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui viene fatto riferimento nei contenuti di Google Cloud consulta Ruoli utente e attività comuni di GKE.
Prima di leggere questa pagina, assicurati di avere familiarità con quanto segue:
Crea un bucket Cloud Storage
Crea un bucket Cloud Storage per archiviare il modello preaddestrato che verrà pubblicato.
In Cloud Shell, esegui questo comando:
gcloud storage buckets create gs://$GSBUCKET
Configura il cluster per accedere al bucket utilizzando Workload Identity Federation for GKE
Per consentire al cluster di accedere al bucket Cloud Storage, procedi nel seguente modo:
- Crea un Google Cloud service account.
- Crea un ServiceAccount Kubernetes nel cluster.
- Associa il service account Kubernetes al service account Google Cloud .
Crea un Google Cloud service account
Nella console Google Cloud , vai alla pagina Crea service account:
Nel campo ID service account, inserisci
gke-ai-sa
.Fai clic su Crea e continua.
Nell'elenco Ruolo, seleziona il ruolo Cloud Storage > Servizio di raccolta Storage Insights.
Fai clic su
Aggiungi un altro ruolo.Nell'elenco Seleziona un ruolo, seleziona il ruolo Cloud Storage > Storage Object Admin.
Fai clic su Continua, poi su Fine.
Crea un ServiceAccount Kubernetes nel tuo cluster
In Cloud Shell:
Crea uno spazio dei nomi Kubernetes:
kubectl create namespace gke-ai-namespace
Crea un ServiceAccount Kubernetes nello spazio dei nomi:
kubectl create serviceaccount gpu-k8s-sa --namespace=gke-ai-namespace
Associa il service account Kubernetes al service account Google Cloud
In Cloud Shell, esegui questi comandi:
Aggiungi un binding IAM al service account Google Cloud :
gcloud iam service-accounts add-iam-policy-binding gke-ai-sa@PROJECT_ID.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-ai-namespace/gpu-k8s-sa]"
Il flag
--member
fornisce l'identità completa di Kubernetes ServiceAccount in Google Cloud.Annota il service account Kubernetes:
kubectl annotate serviceaccount gpu-k8s-sa \ --namespace gke-ai-namespace \ iam.gke.io/gcp-service-account=gke-ai-sa@PROJECT_ID.iam.gserviceaccount.com
Esegui il deployment del server di inferenza online
Ogni framework di inferenza online prevede di trovare il modello ML preaddestrato in un formato specifico. La sezione seguente mostra come eseguire il deployment del server di inferenza a seconda del framework che vuoi utilizzare:
Triton
In Cloud Shell, copia il modello ML preaddestrato nel bucket Cloud Storage:
gcloud storage cp src/triton-model-repository gs://$GSBUCKET --recursive
Esegui il deployment del framework utilizzando un deployment. Un deployment è un oggetto API Kubernetes che ti consente di eseguire più repliche di pod distribuite tra i nodi di un cluster:
envsubst < src/gke-config/deployment-triton.yaml | kubectl --namespace=gke-ai-namespace apply -f -
Verifica che GKE abbia eseguito il deployment del framework:
kubectl get deployments --namespace=gke-ai-namespace
Quando il framework è pronto, l'output è simile al seguente:
NAME READY UP-TO-DATE AVAILABLE AGE triton-deployment 1/1 1 1 5m29s
Esegui il deployment dei servizi per accedere al deployment:
kubectl apply --namespace=gke-ai-namespace -f src/gke-config/service-triton.yaml
Verifica che l'IP esterno sia assegnato:
kubectl get services --namespace=gke-ai-namespace
L'output è simile al seguente:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 60m triton-server LoadBalancer 34.118.227.176 35.239.54.228 8000:30866/TCP,8001:31035/TCP,8002:30516/TCP 5m14s
Prendi nota dell'indirizzo IP per
triton-server
nella colonna EXTERNAL-IP.Verifica che il servizio e il deployment funzionino correttamente:
curl -v EXTERNAL_IP:8000/v2/health/ready
L'output è simile al seguente:
... < HTTP/1.1 200 OK < Content-Length: 0 < Content-Type: text/plain ...
TF Serving
In Cloud Shell, copia il modello ML preaddestrato nel bucket Cloud Storage:
gcloud storage cp src/tfserve-model-repository gs://$GSBUCKET --recursive
Esegui il deployment del framework utilizzando un deployment. Un deployment è un oggetto API Kubernetes che ti consente di eseguire più repliche di pod distribuite tra i nodi di un cluster:
envsubst < src/gke-config/deployment-tfserve.yaml | kubectl --namespace=gke-ai-namespace apply -f -
Verifica che GKE abbia eseguito il deployment del framework:
kubectl get deployments --namespace=gke-ai-namespace
Quando il framework è pronto, l'output è simile al seguente:
NAME READY UP-TO-DATE AVAILABLE AGE tfserve-deployment 1/1 1 1 5m29s
Esegui il deployment dei servizi per accedere al deployment:
kubectl apply --namespace=gke-ai-namespace -f src/gke-config/service-tfserve.yaml
Verifica che l'IP esterno sia assegnato:
kubectl get services --namespace=gke-ai-namespace
L'output è simile al seguente:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 60m tfserve-server LoadBalancer 34.118.227.176 35.239.54.228 8500:30003/TCP,8000:32194/TCP 5m14s
Prendi nota dell'indirizzo IP per
tfserve-server
nella colonna EXTERNAL-IP.Verifica che il servizio e il deployment funzionino correttamente:
curl -v EXTERNAL_IP:8000/v1/models/mnist
Sostituisci
EXTERNAL_IP
con il tuo indirizzo IP esterno.L'output è simile al seguente:
... < HTTP/1.1 200 OK < Content-Type: application/json < Date: Thu, 12 Oct 2023 19:01:19 GMT < Content-Length: 154 < { "model_version_status": [ { "version": "1", "state": "AVAILABLE", "status": { "error_code": "OK", "error_message": "" } } ] }
Pubblica il modello
Triton
Crea un ambiente virtuale Python in Cloud Shell.
python -m venv ./mnist_client source ./mnist_client/bin/activate
Installa i pacchetti Python richiesti.
pip install -r src/client/triton-requirements.txt
Testa il server di inferenza Triton caricando un'immagine:
cd src/client python triton_mnist_client.py -i EXTERNAL_IP -m mnist -p ./images/TEST_IMAGE.png
Sostituisci quanto segue:
EXTERNAL_IP
: Il tuo indirizzo IP esterno.TEST_IMAGE
: il nome del file corrispondente all'immagine che vuoi testare. Puoi utilizzare le immagini archiviate insrc/client/images
.
A seconda dell'immagine utilizzata, l'output è simile al seguente:
Calling Triton HTTP Service -> Prediction result: 7
TF Serving
Crea un ambiente virtuale Python in Cloud Shell.
python -m venv ./mnist_client source ./mnist_client/bin/activate
Installa i pacchetti Python richiesti.
pip install -r src/client/tfserve-requirements.txt
Testa TensorFlow Serving con alcune immagini.
cd src/client python tfserve_mnist_client.py -i EXTERNAL_IP -m mnist -p ./images/TEST_IMAGE.png
Sostituisci quanto segue:
EXTERNAL_IP
: Il tuo indirizzo IP esterno.TEST_IMAGE
: un valore compreso tra0
e9
. Puoi utilizzare le immagini archiviate insrc/client/images
.
A seconda dell'immagine che utilizzi, otterrai un output simile a questo:
Calling TensorFlow Serve HTTP Service -> Prediction result: 5
Osserva le prestazioni del modello
Triton
Per osservare il rendimento del modello, puoi utilizzare l'integrazione della dashboard Triton in Cloud Monitoring. Con questa dashboard puoi visualizzare metriche sul rendimento critiche come il throughput dei token, la latenza delle richieste e i tassi di errore.
Per utilizzare la dashboard Triton, devi abilitare Google Cloud Managed Service per Prometheus, che raccoglie le metriche da Triton, nel cluster GKE. Triton espone le metriche nel formato Prometheus per impostazione predefinita; non è necessario installare un esportatore aggiuntivo.
Puoi quindi visualizzare le metriche utilizzando la dashboard Triton. Per informazioni sull'utilizzo di Google Cloud Managed Service per Prometheus per raccogliere le metriche dal modello, consulta le indicazioni sull'osservabilità di Triton nella documentazione di Cloud Monitoring.TF Serving
Per osservare il rendimento del modello, puoi utilizzare l'integrazione della dashboard TF Serving in Cloud Monitoring. Con questa dashboard puoi visualizzare metriche sul rendimento critiche come il throughput dei token, la latenza delle richieste e i tassi di errore.
Per utilizzare la dashboard TF Serving, devi abilitare Google Cloud Managed Service per Prometheus, che raccoglie le metriche da TF Serving, nel tuo cluster GKE.
Puoi quindi visualizzare le metriche utilizzando la dashboard TF Serving. Per informazioni sull'utilizzo di Google Cloud Managed Service per Prometheus per raccogliere metriche dal tuo modello, consulta le indicazioni sull'osservabilità di TF Serving nella documentazione di Cloud Monitoring.