NVIDIA NIM ile GKE'ye yapay zeka modeli dağıtma

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:

  1. 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.
  2. 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.
  3. Çı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

  1. Cloud Shell'i veya terminalinizi açın.
  2. 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.

  1. 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
    
  2. 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

  1. 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
    
  2. NIM ad alanı oluşturma:
    kubectl create namespace nim
    
  3. 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
    
  4. 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
    
  5. NIM dağıtımı başlatılıyor:
    helm install my-nim nim-llm-1.1.2.tgz -f nim_custom_value.yaml --namespace nim
    
    NIM kapsülünün çalıştığını doğrulayın:
    kubectl get pods -n nim
    
  6. 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:
    kubectl port-forward service/my-nim-nim-llm 8000:8000 -n nim
    
    Ardından, Cloud Shell'de başka bir terminal veya sekme açıp aşağıdaki isteği deneyebiliriz:
    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
    }'
    
    NIM hizmetinden bir sohbet tamamlama yanıtı alırsanız hizmetin beklendiği gibi çalıştığı anlamına gelir.

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: