1. Giriş
Bu uygulamalı Codelab'de, NVIDIA NIM™ mikro hizmetlerinin gücünü kullanarak Google Kubernetes Engine (GKE) üzerinde container'a alınmış bir yapay zeka modelini dağıtma ve yönetme konusunda size yol gösterilecektir.
Bu eğitim, aşağıdaki amaçlarla hareket eden geliştiriciler ve veri bilimciler için tasarlanmıştır:
- Yapay zeka çıkarımı dağıtımını basitleştirme: GKE'de yapay zeka modellerinin üretime daha hızlı ve kolay dağıtımı için önceden oluşturulmuş bir NIM'yi nasıl kullanacağınızı öğrenin.
- NVIDIA GPU'larda performansı optimize etme: GKE kümenizdeki GPU'larda optimize edilmiş çıkarım için NVIDIA TensorRT'yi kullanan NIM'leri dağıtma konusunda uygulamalı deneyim kazanın.
- Yapay zeka çıkarımı iş yüklerini ölçeklendirme: Otomatik ölçeklendirme ve işlem kaynaklarını yönetmek için Kubernetes'i kullanarak NIM dağıtımınızı talebe göre nasıl ölçeklendireceğinizi öğrenin.
2. Öğrenecekleriniz
Bu eğiticiyi tamamladığınızda aşağıdaki konularda deneyim kazanmış olacaksınız:
- NIM'i GKE'ye dağıtma: Çeşitli çıkarım görevleri için önceden oluşturulmuş bir NVIDIA NIM'i GKE kümenize dağıtın.
- NIM dağıtımlarını yönetme: Dağıtılan NIM'nizi yönetmek, izlemek ve ölçeklendirmek için kubectl komutlarını kullanın.
- Çıkarım iş yüklerini ölçeklendirme: NIM dağıtımlarınızı trafik taleplerine göre otomatik olarak ölçeklendirmek için Kubernetes özelliklerinden yararlanın.
3. Bileşenleri öğrenme
Google Kubernetes Engine'deki (GKE) GPU'lar
GPU'lar, düğümlerinizde çalışan belirli iş yüklerini (ör. makine öğrenimi ve veri işleme) hızlandırmanızı sağlar. GKE, düğüm yapılandırması için NVIDIA H100, L4 ve A100 GPU'ları içeren makine türleri de dahil olmak üzere çeşitli makine türü seçenekleri sunar.
NVIDIA NIM
NVIDIA NIM, temel modellerin herhangi bir bulutta veya veri merkezinde dağıtımını hızlandırmak ve verilerinizin güvenliğini sağlamaya yardımcı olmak için kullanılan, kolayca kullanılabilen bir çıkarım mikro hizmetleri kümesidir.
NVIDIA AI Enterprise
NVIDIA AI Enterprise, uçtan uca bulutta yerel bir yazılım platformudur. Veri bilimi işlem hatlarını hızlandırır ve üretim düzeyinde yardımcı pilotların ve diğer üretken yapay zeka uygulamalarının geliştirilmesini ve dağıtımını kolaylaştırır. GCP Marketplace'te kullanılabilir.
4. Ön koşullar
- Proje: Faturalandırmanın etkinleştirildiği bir Google Cloud projesi.
- İzinler: GKE kümeleri ve diğer ilgili kaynakları oluşturmak için yeterli izinler.
- Helm: Helm, Kubernetes için bir paket yöneticisidir.
- NVIDIA GPU Operator: GPU'nun sağlanması için gereken tüm NVIDIA yazılım bileşenlerinin yönetimini otomatikleştiren bir Kubernetes eklentisi.
- NVIDIA API anahtarı: Bu bağlantıyı tıklayın ve hesap oluşturup API anahtarı oluşturmayla ilgili talimatları uygulayın. NIM kapsayıcısını indirmek için API anahtarı gerekir.
- NVIDIA GPU'lar: Aşağıdaki GPU'lardan biri çalışmalıdır (Yeterli GPU'nuz yoksa kota artışı isteğinde bulunmak için bu adımları uygulayabilirsiniz)
- İsteğe bağlı - GCloud SDK:** GCP portalında Cloud Shell'i kullanmıyorsanız lütfen Google Cloud SDK'nın yüklü ve yapılandırılmış olduğundan emin olun.
- İsteğe bağlı - kubectl:** GCP portalında Cloud Shell'i kullanmıyorsanız lütfen kubectl komut satırı aracının yüklü ve yapılandırılmış olduğundan emin olun.
5. GPU'lu bir GKE kümesi oluşturma
- Cloud Shell'i veya terminalinizi açın.
- Aşağıdaki parametreleri belirtin:
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
NODE_POOL_MACHINE_TYPE, CLUSTER_MACHINE_TYPE ve GPU_TYPE değerlerini, kullandığınız Compute örneği ve GPU türüne göre değiştirmeniz gerekebileceğini lütfen unutmayın.
- GKE kümesi oluşturma:
gcloud container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --location=${ZONE} \ --release-channel=rapid \ --machine-type=${CLUSTER_MACHINE_TYPE} \ --num-nodes=1
- GPU düğüm havuzu oluşturma:
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. NVIDIA NGC API anahtarını yapılandırma
NGC API anahtarı, NVIDIA NGC'den özel görüntüler çekmenize olanak tanır. Anahtarınızı belirtmek için:
export NGC_CLI_API_KEY="<YOUR NGC API KEY>"
Bu, Ön Koşullar kapsamında oluşturulan anahtardır.
7. NVIDIA NIM'i dağıtma ve test etme
- NIM LLM Helm grafiğini getirin:
helm fetch https://helm.ngc.nvidia.com/nim/charts/nim-llm-1.3.0.tgz --username='$oauthtoken' --password=$NGC_CLI_API_KEY
- NIM ad alanı oluşturma:
kubectl create namespace nim
- Gizli anahtarları yapılandırın:
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
- NIM Yapılandırmasını Ayarlama:
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
- NIM dağıtımı başlatılıyor:
NIM kapsülünün çalıştığını doğrulayın:helm install my-nim nim-llm-1.1.2.tgz -f nim_custom_value.yaml --namespace nim
kubectl get pods -n nim
- NIM dağıtımını test etme:
NIM hizmetimizin başarıyla dağıtıldığını doğruladıktan sonra, NIM hizmetinden ne tür geri bildirimler alacağımızı görmek için çıkarım istekleri gönderebiliriz. Bunu yapmak için, hizmette bağlantı noktası yönlendirmeyi etkinleştirerek NIM'e bağlantı noktası 8000'deki localhost'umuzdan erişebiliyoruz: Ardından, Cloud Shell'de başka bir terminal veya sekme açıp aşağıdaki isteği deneyebiliriz:kubectl port-forward service/my-nim-nim-llm 8000:8000 -n nim
NIM hizmetinden bir sohbet tamamlama yanıtı alırsanız hizmetin beklendiği gibi çalıştığı anlamına gelir.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. Temizleme
GKE kümesini silin:
gcloud container clusters delete $CLUSTER_NAME --zone=$ZONE
9. Sırada ne var?
Daha fazla bilgi için aşağıdaki makalelere göz atın: