NVIDIA NIM की मदद से, GKE पर एआई मॉडल डिप्लॉय करना

1. परिचय

इस कोडलैब में, NVIDIA NIM™ माइक्रोसेवाओं का इस्तेमाल करके, Google Kubernetes Engine (GKE) पर कंटेनर में मौजूद एआई मॉडल को डिप्लॉय और मैनेज करने का तरीका बताया जाएगा.

यह ट्यूटोरियल, उन डेवलपर और डेटा साइंटिस्ट के लिए है जो:

  • एआई इन्फ़रेंस डिप्लॉयमेंट को आसान बनाना चाहते हैं: GKE पर प्रोडक्शन में एआई मॉडल को तेज़ी से और आसानी से डिप्लॉय करने के लिए, पहले से बने NIM का इस्तेमाल करने का तरीका जानें.
  • NVIDIA जीपीयू पर परफ़ॉर्मेंस ऑप्टिमाइज़ करना चाहते हैं: अपने GKE क्लस्टर में जीपीयू पर ऑप्टिमाइज़ किए गए इन्फ़रेंस के लिए, NVIDIA TensorRT का इस्तेमाल करने वाले NIM को डिप्लॉय करने का तरीका जानें.
  • एआई इन्फ़रेंस वर्कलोड को स्केल करना चाहते हैं: Kubernetes का इस्तेमाल करके, कंप्यूट संसाधनों को मैनेज करने और ऑटोस्केलिंग की मदद से, मांग के आधार पर NIM डिप्लॉयमेंट को स्केल करने का तरीका जानें.

2. आपको क्या सीखने को मिलेगा

इस ट्यूटोरियल को पूरा करने के बाद, आपको ये काम करने का अनुभव मिलेगा:

  1. GKE पर NIM डिप्लॉय करना: अपने GKE क्लस्टर पर, अलग-अलग इन्फ़रेंस टास्क के लिए, पहले से बना NVIDIA NIM डिप्लॉय करना.
  2. NIM डिप्लॉयमेंट मैनेज करना: डिप्लॉय किए गए NIM को मैनेज करने, उसकी निगरानी करने, और उसे स्केल करने के लिए, kubectl कमांड का इस्तेमाल करना.
  3. इन्फ़रेंस वर्कलोड को स्केल करना: ट्रैफ़िक की मांग के आधार पर, अपने NIM डिप्लॉयमेंट को ऑटोस्केल करने के लिए, Kubernetes की सुविधाओं का इस्तेमाल करना.

3. कॉम्पोनेंट के बारे में जानें

Google Kubernetes Engine (GKE) में जीपीयू

जीपीयू की मदद से, नोड पर चल रहे खास वर्कलोड को तेज़ किया जा सकता है. जैसे, मशीन लर्निंग और डेटा प्रोसेसिंग. GKE, नोड कॉन्फ़िगरेशन के लिए कई तरह के मशीन टाइप के विकल्प उपलब्ध कराता है. इनमें NVIDIA H100, L4, और A100 जीपीयू वाले मशीन टाइप भी शामिल हैं.

NVIDIA NIM

NVIDIA NIM, इन्फ़रेंस के लिए इस्तेमाल की जाने वाली माइक्रोसेवाओं का एक सेट है. इसका इस्तेमाल, किसी भी क्लाउड या डेटा सेंटर पर फ़ाउंडेशन मॉडल को तेज़ी से डिप्लॉय करने के लिए किया जा सकता है. साथ ही, इसकी मदद से अपने डेटा को सुरक्षित रखा जा सकता है.

NVIDIA AI Enterprise

NVIDIA AI Enterprise, क्लाउड-नेटिव सॉफ़्टवेयर प्लैटफ़ॉर्म है. इसकी मदद से, डेटा साइंस पाइपलाइन को तेज़ किया जा सकता है. साथ ही, प्रोडक्शन-ग्रेड को-पायलट और जनरेटिव एआई के अन्य ऐप्लिकेशन को डेवलप और डिप्लॉय किया जा सकता है. यह GCP Marketplace पर उपलब्ध है.

4. ज़रूरी शर्तें

  • प्रोजेक्ट: बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट.
  • अनुमतियां: GKE क्लस्टर और अन्य संबंधित संसाधन बनाने के लिए, ज़रूरी अनुमतियां.
  • Helm: Helm, Kubernetes के लिए पैकेज मैनेजर है.
  • NVIDIA GPU Operator: यह Kubernetes का एक ऐड-ऑन है. इसकी मदद से, जीपीयू उपलब्ध कराने के लिए ज़रूरी NVIDIA के सभी सॉफ़्टवेयर कॉम्पोनेंट को मैनेज करने की प्रोसेस को ऑटोमेट किया जा सकता है.
  • NVIDIA API पासकोड: इस लिंक पर क्लिक करें और खाता बनाने और एपीआई पासकोड जनरेट करने के तरीके से जुड़े निर्देश देखें. NIM कंटेनर डाउनलोड करने के लिए, एपीआई पासकोड की ज़रूरत होगी.
  • NVIDIA जीपीयू: इनमें से कोई एक जीपीयू काम करना चाहिए (कृपया ध्यान दें कि अगर आपके पास ज़रूरी संख्या में जीपीयू नहीं हैं, तो कोटा बढ़ाने का अनुरोध करने के लिए यह तरीका अपनाया जा सकता है)
  • ज़रूरी नहीं - GCloud SDK:** अगर GCP पोर्टल में Cloud Shell का इस्तेमाल नहीं किया जा रहा है, तो कृपया पक्का करें कि Google Cloud SDK इंस्टॉल और कॉन्फ़िगर किया गया हो.
  • ज़रूरी नहीं - kubectl:** अगर GCP पोर्टल में Cloud Shell का इस्तेमाल नहीं किया जा रहा है, तो कृपया पक्का करें कि kubectl कमांड-लाइन टूल इंस्टॉल और कॉन्फ़िगर किया गया हो.

5. जीपीयू वाला GKE क्लस्टर बनाना

  1. Cloud Shell या अपना टर्मिनल खोलें.
  2. ये पैरामीटर तय करें:
    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
    

कृपया ध्यान दें कि इस्तेमाल किए जा रहे Compute Instance और जीपीयू के टाइप के आधार पर, आपको NODE_POOL_MACHINE_TYPE, CLUSTER_MACHINE_TYPE, और GPU_TYPE की वैल्यू बदलनी पड़ सकती हैं.

  1. GKE क्लस्टर बनाएं:
    gcloud container clusters create ${CLUSTER_NAME} \
        --project=${PROJECT_ID} \
        --location=${ZONE} \
        --release-channel=rapid \
        --machine-type=${CLUSTER_MACHINE_TYPE} \
        --num-nodes=1
    
  2. जीपीयू नोड पूल बनाएं:
    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 पासकोड कॉन्फ़िगर करना

NGC API पासकोड की मदद से, NVIDIA NGC से कस्टम इमेज पुल की जा सकती हैं. अपना पासकोड तय करने के लिए:

export NGC_CLI_API_KEY="<YOUR NGC API KEY>"

यह पासकोड, ज़रूरी शर्तें पूरी करने के दौरान जनरेट किया गया था.

7. NVIDIA NIM डिप्लॉय और टेस्ट करना

  1. NIM LLM Helm चार्ट फ़ेच करें:
    helm fetch https://helm.ngc.nvidia.com/nim/charts/nim-llm-1.3.0.tgz --username='$oauthtoken' --password=$NGC_CLI_API_KEY
    
  2. NIM नेमस्पेस बनाएं:
    kubectl create namespace nim
    
  3. सीक्रेट कॉन्फ़िगर करें:
    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 कॉन्फ़िगरेशन सेट अप करें:
    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 डिप्लॉयमेंट लॉन्च किया जा रहा है:
    helm install my-nim nim-llm-1.1.2.tgz -f nim_custom_value.yaml --namespace nim
    
    पुष्टि करें कि NIM पॉड चल रहा है या नहीं:
    kubectl get pods -n nim
    
  6. NIM डिप्लॉयमेंट की जांच करना:
    जब हम इस बात की पुष्टि कर लेंगे कि हमारी NIM सेवा, सही तरीके से डिप्लॉय की गई है, तब हम इन्फ़रेंस के अनुरोध करके देखेंगे कि हमें NIM सेवा से किस तरह का फ़ीडबैक मिलेगा. इसके लिए, हम सेवा पर पोर्ट फ़ॉरवर्डिंग की सुविधा चालू करते हैं, ताकि पोर्ट 8000 पर अपने लोकल होस्ट से NIM को ऐक्सेस किया जा सके:
    kubectl port-forward service/my-nim-nim-llm 8000:8000 -n nim
    
    इसके बाद, हम क्लाउड शेल में कोई दूसरा टर्मिनल या टैब खोलकर, यह अनुरोध कर सकते हैं:
    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 सेवा से चैट पूरी होने का मैसेज मिलता है, तो इसका मतलब है कि सेवा उम्मीद के मुताबिक काम कर रही है!

8. साफ़-सफ़ाई सेवा

GKE क्लस्टर मिटाएं:

gcloud container clusters delete $CLUSTER_NAME --zone=$ZONE

9. आगे क्या करना है

ज़्यादा जानकारी के लिए, ये लेख देखें: