1. Introduzione
Questo codelab pratico ti guiderà nella distribuzione e nella gestione di un modello di AI containerizzato su Google Kubernetes Engine (GKE), sfruttando la potenza dei microservizi NVIDIA NIM™.
Questo tutorial è pensato per sviluppatori e data scientist che vogliono:
- Semplifica il deployment dell'inferenza AI: scopri come utilizzare un NIM predefinito per un deployment più rapido e semplice dei modelli di AI in produzione su GKE.
- Ottimizza le prestazioni sulle GPU NVIDIA: acquisisci esperienza pratica con il deployment di NIM che utilizzano NVIDIA TensorRT per un'inferenza ottimizzata sulle GPU all'interno del cluster GKE.
- Scalare i carichi di lavoro di inferenza AI: scopri come scalare il deployment di NIM in base alla domanda utilizzando Kubernetes per la scalabilità automatica e la gestione delle risorse di calcolo.
2. Cosa imparerai a fare
Al termine di questo tutorial, avrai esperienza con:
- Deployment di NIM su GKE: esegui il deployment di un NVIDIA NIM precompilato per varie attività di inferenza nel tuo cluster GKE.
- Gestione dei deployment NIM: utilizza i comandi kubectl per gestire, monitorare e scalare i NIM di cui è stato eseguito il deployment.
- Scalabilità dei carichi di lavoro di inferenza: utilizza le funzionalità di Kubernetes per la scalabilità automatica dei deployment NIM in base alle esigenze di traffico.
3. Informazioni sui componenti
GPU in Google Kubernetes Engine (GKE)
Le GPU ti consentono di accelerare carichi di lavoro specifici in esecuzione sui tuoi nodi, come machine learning ed elaborazione di dati. GKE offre una gamma di opzioni di tipi di macchine per la configurazione dei nodi, inclusi i tipi di macchine con GPU NVIDIA H100, L4 e A100.
NVIDIA NIM
NVIDIA NIM è un insieme di microservizi di inferenza facili da usare per accelerare il deployment di modelli di base su qualsiasi cloud o data center e contribuire a proteggere i tuoi dati.
NVIDIA AI Enterprise
NVIDIA AI Enterprise è una piattaforma software cloud-native end-to-end che accelera le pipeline di data science e semplifica lo sviluppo e il deployment di copiloti di livello di produzione e altre applicazioni di AI generativa. Disponibile tramite GCP Marketplace.
4. Prerequisiti
- Progetto:un progetto Google Cloud con la fatturazione abilitata.
- Autorizzazioni:autorizzazioni sufficienti per creare cluster GKE e altre risorse correlate.
- Helm: Helm è un gestore di pacchetti per Kubernetes.
- Operatore GPU NVIDIA: un componente aggiuntivo di Kubernetes che automatizza la gestione di tutti i componenti software NVIDIA necessari per il provisioning della GPU.
- Chiave API NVIDIA:fai clic su questo link e segui le istruzioni su come creare un account e generare una chiave API. Per scaricare il container NIM sarà necessaria una chiave API.
- GPU NVIDIA:una delle seguenti GPU dovrebbe funzionare (tieni presente che puoi seguire questi passaggi per richiedere un aumento della quota, se non hai GPU sufficienti)
- (Facoltativo) - SDK GCloud: se non utilizzi Cloud Shell nel portale GCP, assicurati di aver installato e configurato Google Cloud SDK.
- (Facoltativo) - kubectl: se non utilizzi Cloud Shell nel portale GCP, assicurati di aver installato e configurato lo strumento a riga di comando kubectl.
5. Crea un cluster GKE con GPU
- Apri Cloud Shell o il terminale.
- Specifica i seguenti parametri:
export PROJECT_ID=<YOUR PROJECT ID> export REGION=<YOUR REGION> export ZONE=<YOUR ZONE> export CLUSTER_NAME=nim-demo export NODE_POOL_MACHINE_TYPE=g2-standard-16 export CLUSTER_MACHINE_TYPE=e2-standard-4 export GPU_TYPE=nvidia-l4 export GPU_COUNT=1
Tieni presente che potresti dover modificare i valori di NODE_POOL_MACHINE_TYPE, CLUSTER_MACHINE_TYPE e GPU_TYPE in base al tipo di istanza di Compute e alle GPU che utilizzi.
- Crea cluster GKE:
gcloud container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --location=${ZONE} \ --release-channel=rapid \ --machine-type=${CLUSTER_MACHINE_TYPE} \ --num-nodes=1 - Crea il node pool GPU:
gcloud container node-pools create gpupool \ --accelerator type=${GPU_TYPE},count=${GPU_COUNT},gpu-driver-version=latest \ --project=${PROJECT_ID} \ --location=${ZONE} \ --cluster=${CLUSTER_NAME} \ --machine-type=${NODE_POOL_MACHINE_TYPE} \ --num-nodes=1
6. Configura la chiave API NVIDIA NGC
La chiave API NGC ti consente di estrarre immagini personalizzate da NVIDIA NGC. Per specificare la chiave:
export NGC_CLI_API_KEY="<YOUR NGC API KEY>"
Questa è la chiave generata nell'ambito dei prerequisiti.
7. Esegui il deployment e testa NVIDIA NIM
- Recupera il grafico Helm LLM NIM:
helm fetch https://helm.ngc.nvidia.com/nim/charts/nim-llm-1.3.0.tgz --username='$oauthtoken' --password=$NGC_CLI_API_KEY - Crea uno spazio dei nomi NIM:
kubectl create namespace nim - Configura i secret:
kubectl create secret docker-registry registry-secret --docker-server=nvcr.io --docker-username='$oauthtoken' --docker-password=$NGC_CLI_API_KEY -n nim kubectl create secret generic ngc-api --from-literal=NGC_API_KEY=$NGC_CLI_API_KEY -n nim - Configura la configurazione NIM:
cat <<EOF > nim_custom_value.yaml image: repository: "nvcr.io/nim/meta/llama3-8b-instruct" # container location tag: 1.0.0 # NIM version you want to deploy model: ngcAPISecret: ngc-api # name of a secret in the cluster that includes a key named NGC_CLI_API_KEY and is an NGC API key persistence: enabled: true imagePullSecrets: - name: registry-secret # name of a secret used to pull nvcr.io images, see https://kubernetes.io/docs/tasks/ configure-pod-container/pull-image-private-registry/ EOF - Avvio del deployment di NIM:
Verifica che il pod NIM sia in esecuzione:helm install my-nim nim-llm-1.1.2.tgz -f nim_custom_value.yaml --namespace nimkubectl get pods -n nim - Test del deployment di NIM:
una volta verificato che il nostro servizio NIM è stato implementato correttamente, possiamo effettuare richieste di inferenza per vedere che tipo di feedback riceveremo dal servizio NIM. Per farlo, abilitiamo l'inoltro delle porte sul servizio per poter accedere a NIM da localhost sulla porta 8000: Successivamente, possiamo aprire un altro terminale o scheda in Cloud Shell e provare la seguente richiesta:kubectl port-forward service/my-nim-nim-llm 8000:8000 -n nim Se ricevi un completamento della chat dal servizio NIM, significa che il servizio funziona come previsto.curl -X 'POST' \ 'http://localhost:8000/v1/chat/completions' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "messages": [ { "content": "You are a polite and respectful chatbot helping people plan a vacation.", "role": "system" }, { "content": "What should I do for a 4 day vacation in Spain?", "role": "user" } ], "model": "meta/llama3-8b-instruct", "max_tokens": 128, "top_p": 1, "n": 1, "stream": false, "stop": "\n", "frequency_penalty": 0.0 }'
8. Esegui la pulizia
Elimina il cluster GKE:
gcloud container clusters delete $CLUSTER_NAME --zone=$ZONE
9. Passaggi successivi
Per maggiori informazioni, leggi gli articoli seguenti: