1. Wprowadzenie
W tym praktycznym ćwiczeniu pokażemy, jak wdrożyć skonteneryzowany model AI w Google Kubernetes Engine (GKE) i nim zarządzać przy użyciu mikrousług NVIDIA NIM™.
Ten samouczek jest przeznaczony dla programistów i specjalistów ds. analizy danych, którzy chcą:
- uprościć wdrażanie wnioskowania AI: dowiedzieć się, jak używać gotowego NIM do szybszego i łatwiejszego wdrażania modeli AI w środowisku produkcyjnym w GKE;
- zoptymalizować wydajność na procesorach graficznych NVIDIA: zdobyć praktyczne doświadczenie w wdrażaniu NIM, które używają NVIDIA TensorRT do zoptymalizowanego wnioskowania na procesorach graficznych w klastrze GKE;
- skalować zbiory zadań wnioskowania AI: dowiedzieć się, jak skalować wdrożenie NIM na podstawie zapotrzebowania przy użyciu Kubernetes do autoskalowania i zarządzania zasobami obliczeniowymi.
2. Czego się nauczysz
Po ukończeniu tego samouczka będziesz mieć doświadczenie w:
- wdrażaniu NIM w GKE: wdrożysz gotowy NVIDIA NIM do różnych zadań wnioskowania w klastrze GKE;
- zarządzaniu wdrożeniami NIM: użyjesz poleceń kubectl do zarządzania wdrożonym NIM, jego monitorowania i skalowania;
- skalowaniu zbiorów zadań wnioskowania: wykorzystasz funkcje Kubernetes do autoskalowania wdrożeń NIM na podstawie zapotrzebowania na ruch.
3. Poznaj komponenty
Procesory graficzne w Google Kubernetes Engine (GKE)
Procesory graficzne umożliwiają przyspieszenie wykonywania określonych zbiorów zadań na węzłach, takich jak uczenie maszynowe i przetwarzanie danych. GKE oferuje szereg opcji typów maszyn do konfiguracji węzłów, w tym typy maszyn z procesorami graficznymi NVIDIA H100, L4 i A100.
NVIDIA NIM
NVIDIA NIM to zestaw łatwych w użyciu mikrousług wnioskowania, które przyspieszają wdrażanie modeli podstawowych w dowolnej chmurze lub centrum danych i pomagają chronić dane.
NVIDIA AI Enterprise
NVIDIA AI Enterprise to kompleksowa platforma oprogramowania natywnego dla chmury, która przyspiesza potoki analizy danych oraz usprawnia tworzenie i wdrażanie kopilotów klasy produkcyjnej i innych aplikacji generatywnej AI. Dostępna w GCP Marketplace.
4. Wymagania wstępne
- Projekt: projekt Google Cloud z włączonym rozliczeniem.
- Uprawnienia: wystarczające uprawnienia do tworzenia klastrów GKE i innych powiązanych zasobów.
- Helm: Helm to menedżer pakietów dla Kubernetes.
- Operator GPU NVIDIA: dodatek do Kubernetes, który automatyzuje zarządzanie wszystkimi komponentami oprogramowania NVIDIA potrzebnymi do udostępnienia GPU.
- Klucz interfejsu API NVIDIA: kliknij ten link i postępuj zgodnie z instrukcjami, jak utworzyć konto i wygenerować klucz interfejsu API. Do pobrania kontenera NIM będzie potrzebny klucz interfejsu API.
- Procesory graficzne NVIDIA: powinien działać co najmniej 1 z tych procesorów graficznych (jeśli nie masz wystarczającej liczby procesorów graficznych, możesz wykonać te czynności, aby poprosić o zwiększenie limitu)
- Opcjonalnie - pakiet SDK GCloud:** jeśli nie używasz Cloud Shell w portalu GCP, zainstaluj i skonfiguruj pakiet SDK Google Cloud.
- Opcjonalnie - kubectl:** jeśli nie używasz Cloud Shell w portalu GCP, zainstaluj i skonfiguruj narzędzie wiersza poleceń kubectl.
5. Utwórz klaster GKE z procesorami graficznymi
- Otwórz Cloud Shell lub terminal.
- Podaj te parametry:
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
Pamiętaj, że w zależności od typu instancji obliczeniowej i używanych procesorów graficznych może być konieczne zmodyfikowanie wartości NODE_POOL_MACHINE_TYPE, CLUSTER_MACHINE_TYPE i GPU_TYPE.
- Utwórz klaster GKE:
gcloud container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --location=${ZONE} \ --release-channel=rapid \ --machine-type=${CLUSTER_MACHINE_TYPE} \ --num-nodes=1 - Utwórz pulę węzłów 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. Skonfiguruj klucz interfejsu API NVIDIA NGC
Klucz interfejsu API NGC umożliwia pobieranie niestandardowych obrazów z NVIDIA NGC. Aby określić klucz:
export NGC_CLI_API_KEY="<YOUR NGC API KEY>"
Jest to klucz wygenerowany w ramach wymagań wstępnych.
7. Wdróż i przetestuj NVIDIA NIM
- Pobierz wykres Helm NIM LLM:
helm fetch https://helm.ngc.nvidia.com/nim/charts/nim-llm-1.3.0.tgz --username='$oauthtoken' --password=$NGC_CLI_API_KEY - Utwórz przestrzeń nazw NIM:
kubectl create namespace nim - Skonfiguruj obiekty tajne:
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 - Skonfiguruj 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 - Uruchom wdrożenie NIM:
Sprawdź, czy pod NIM jest uruchomiony:helm install my-nim nim-llm-1.1.2.tgz -f nim_custom_value.yaml --namespace nimkubectl get pods -n nim - Testowanie wdrożenia NIM:
Gdy sprawdzimy, że usługa NIM została wdrożona, możemy wysyłać żądania wnioskowania, aby sprawdzić, jakie opinie otrzymamy od usługi NIM. Aby to zrobić, włączamy przekierowanie portów w usłudze, aby móc uzyskać dostęp do NIM z hosta lokalnego na porcie 8000: Następnie możemy otworzyć inny terminal lub kartę w Cloud Shell i wypróbować to żądanie:kubectl port-forward service/my-nim-nim-llm 8000:8000 -n nim Jeśli otrzymasz odpowiedź z usługi NIM, oznacza to, że usługa działa zgodnie z oczekiwaniami.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. Czyszczenie
Usuń klaster GKE:
gcloud container clusters delete $CLUSTER_NAME --zone=$ZONE
9. Co dalej?
Więcej informacji znajdziesz w tych artykułach: