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

1. परिचय

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

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

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

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

इस ट्यूटोरियल के आखिर तक, आपको इन चीज़ों के बारे में जानकारी मिल जाएगी:

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

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

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

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

5. GPU की सुविधा वाला 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
    

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

  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 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. एनआईएम कॉन्फ़िगरेशन सेटअप करें:
    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. एनआईएम को डिप्लॉय करने की जांच करना:
    जब हम इस बात की पुष्टि कर लेंगे कि हमारी एनआईएम सेवा को सही तरीके से डिप्लॉय किया गया है, तब हम अनुमान लगाने के अनुरोध कर सकते हैं. इससे हमें यह पता चलेगा कि एनआईएम सेवा से हमें किस तरह का सुझाव मिलेगा. इसके लिए, हम सेवा पर पोर्ट फ़ॉरवर्डिंग चालू करते हैं, ताकि हम पोर्ट 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. आगे क्या करना है

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