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

1. परिचय

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

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

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

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

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

  1. GKE पर NIM को डिप्लॉय करना: अलग-अलग अनुमान लगाने के टास्क के लिए, पहले से बनाए गए NVIDIA NIM को अपने GKE क्लस्टर पर डिप्लॉय करें.
  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 ऑपरेटर: यह Kubernetes का एक ऐड-ऑन है. यह जीपीयू को चालू करने के लिए ज़रूरी NVIDIA के सभी सॉफ़्टवेयर कॉम्पोनेंट को मैनेज करने की प्रोसेस को अपने-आप पूरा करता है.
  • NVIDIA API key: इस लिंक पर क्लिक करें. इसके बाद, खाता बनाने और एपीआई पासकोड जनरेट करने के निर्देशों का पालन करें. 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
    
    पुष्टि करें कि एनआईएम पॉड चल रहा है या नहीं:
    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. आगे क्या करना है

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