NVIDIA NIM এর সাথে GKE-এ একটি AI মডেল স্থাপন করুন

১. ভূমিকা

এই হ্যান্ডস-অন কোডল্যাবটি আপনাকে এনভিডিয়া এনআইএম™ মাইক্রোসার্ভিসের শক্তি ব্যবহার করে গুগল কুবারনেটিস ইঞ্জিন (GKE)-এ একটি কন্টেইনারাইজড এআই মডেল ডেপ্লয় এবং ম্যানেজ করার পদ্ধতি ধাপে ধাপে দেখিয়ে দেবে।

এই টিউটোরিয়ালটি ডেভেলপার এবং ডেটা সায়েন্টিস্টদের জন্য তৈরি করা হয়েছে, যারা নিম্নলিখিত বিষয়গুলো করতে চাইছেন:

  • এআই ইনফারেন্স ডেপ্লয়মেন্ট সহজ করুন: GKE-তে প্রোডাকশনে এআই মডেল দ্রুত ও সহজে ডেপ্লয় করার জন্য কীভাবে একটি প্রি-বিল্ট NIM ব্যবহার করতে হয় তা শিখুন।
  • NVIDIA GPU-তে পারফরম্যান্স অপ্টিমাইজ করুন: আপনার GKE ক্লাস্টারের মধ্যে GPU-গুলিতে অপ্টিমাইজড ইনফারেন্সের জন্য NVIDIA TensorRT ব্যবহার করে এমন NIM ডেপ্লয় করার ক্ষেত্রে হাতে-কলমে অভিজ্ঞতা অর্জন করুন।
  • এআই ইনফারেন্স ওয়ার্কলোড স্কেল করুন: অটোস্কেলিং এবং কম্পিউট রিসোর্স ব্যবস্থাপনার জন্য কুবারনেটিস ব্যবহার করে চাহিদা অনুযায়ী আপনার এনআইএম (NIM) ডেপ্লয়মেন্ট কীভাবে স্কেল করবেন তা জানুন।

২. আপনি যা শিখবেন

এই টিউটোরিয়ালটি শেষে আপনি নিম্নলিখিত বিষয়গুলিতে অভিজ্ঞতা অর্জন করবেন:

  1. GKE-তে NIM স্থাপন: আপনার GKE ক্লাস্টারে বিভিন্ন ইনফারেন্স টাস্কের জন্য একটি প্রি-বিল্ট NVIDIA NIM স্থাপন করুন।
  2. NIM ডেপ্লয়মেন্ট পরিচালনা: আপনার ডেপ্লয় করা NIM পরিচালনা, নিরীক্ষণ এবং স্কেল করতে kubectl কমান্ড ব্যবহার করুন।
  3. ইনফারেন্স ওয়ার্কলোড স্কেলিং: ট্র্যাফিকের চাহিদার উপর ভিত্তি করে আপনার NIM ডেপ্লয়মেন্টগুলো অটোস্কেল করার জন্য Kubernetes-এর ফিচারগুলো ব্যবহার করুন।

৩. উপাদানগুলো সম্পর্কে জানুন

গুগল কুবারনেটিস ইঞ্জিন (GKE)-এ GPU

জিপিইউ (GPU) আপনার নোডগুলিতে চলমান নির্দিষ্ট ওয়ার্কলোড, যেমন মেশিন লার্নিং এবং ডেটা প্রসেসিং-এর গতি বাড়াতে সাহায্য করে। GKE নোড কনফিগারেশনের জন্য বিভিন্ন ধরনের মেশিন টাইপের বিকল্প প্রদান করে, যার মধ্যে NVIDIA H100, L4, এবং A100 জিপিইউ- সহ মেশিন টাইপগুলো অন্তর্ভুক্ত।

এনভিডিয়া এনআইএম

এনভিডিয়া এনআইএম হলো একগুচ্ছ সহজে ব্যবহারযোগ্য ইনফারেন্স মাইক্রোসার্ভিস, যা যেকোনো ক্লাউড বা ডেটা সেন্টারে ফাউন্ডেশন মডেলের ডেপ্লয়মেন্ট ত্বরান্বিত করে এবং আপনার ডেটা সুরক্ষিত রাখতে সাহায্য করে।

এনভিডিয়া এআই এন্টারপ্রাইজ

এনভিডিয়া এআই এন্টারপ্রাইজ হলো একটি এন্ড-টু-এন্ড, ক্লাউড-নেটিভ সফটওয়্যার প্ল্যাটফর্ম যা ডেটা সায়েন্স পাইপলাইনকে ত্বরান্বিত করে এবং প্রোডাকশন-গ্রেড কো-পাইলট ও অন্যান্য জেনারেটিভ এআই অ্যাপ্লিকেশনের উন্নয়ন ও স্থাপনকে সুবিন্যস্ত করে। এটি জিসিপি মার্কেটপ্লেস-এর মাধ্যমে উপলব্ধ।

৪. পূর্বশর্তসমূহ

  • প্রজেক্ট: বিলিং সুবিধাযুক্ত একটি গুগল ক্লাউড প্রজেক্ট।
  • অনুমতি: GKE ক্লাস্টার এবং অন্যান্য সংশ্লিষ্ট রিসোর্স তৈরি করার জন্য পর্যাপ্ত অনুমতি।
  • হেলম : হেলম হলো কুবারনেটিসের একটি প্যাকেজ ম্যানেজার।
  • এনভিডিয়া জিপিইউ অপারেটর : একটি কুবারনেটিস অ্যাড-অন যা জিপিইউ প্রোভিশন করার জন্য প্রয়োজনীয় সমস্ত এনভিডিয়া সফটওয়্যার কম্পোনেন্টের ব্যবস্থাপনাকে স্বয়ংক্রিয় করে।
  • এনভিডিয়া এপিআই কী: এই লিঙ্কে ক্লিক করুন এবং একটি অ্যাকাউন্ট তৈরি ও এপিআই কী জেনারেট করার জন্য নির্দেশাবলী অনুসরণ করুন। এনআইএম কন্টেইনার ডাউনলোড করার জন্য একটি এপিআই কী প্রয়োজন হবে।
  • এনভিডিয়া জিপিইউ: নিচের জিপিইউগুলোর মধ্যে যেকোনো একটি কাজ করবে (অনুগ্রহ করে মনে রাখবেন, আপনার কাছে পর্যাপ্ত জিপিইউ না থাকলে কোটা বৃদ্ধির অনুরোধ করার জন্য আপনি এই ধাপগুলো অনুসরণ করতে পারেন)।
  • ঐচ্ছিক - গুগল ক্লাউড এসডিকে :** যদি আপনি জিসিপি পোর্টালে ক্লাউড শেল ব্যবহার না করেন, তবে অনুগ্রহ করে নিশ্চিত করুন যে আপনার গুগল ক্লাউড এসডিকে ইনস্টল এবং কনফিগার করা আছে।
  • ঐচ্ছিক - kubectl :** যদি আপনি GCP পোর্টালে ক্লাউড শেল ব্যবহার না করেন, তাহলে অনুগ্রহ করে নিশ্চিত করুন যে আপনার kubectl কমান্ড-লাইন টুলটি ইনস্টল এবং কনফিগার করা আছে।

৫. জিপিইউ ব্যবহার করে একটি GKE ক্লাস্টার তৈরি করুন

  1. ক্লাউড শেল অথবা আপনার টার্মিনাল খুলুন।
  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-এর মান পরিবর্তন করতে হতে পারে।

  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
    

৬. এনভিডিয়া এনজিসি এপিআই কী কনফিগার করুন

এনজিসি এপিআই কী আপনাকে এনভিডিয়া এনজিসি থেকে কাস্টম ইমেজ পুল করার সুযোগ দেয়। আপনার কী নির্দিষ্ট করতে:

export NGC_CLI_API_KEY="<YOUR NGC API KEY>"

পূর্বশর্তসমূহের অংশ হিসেবে এই কী-টি তৈরি করা হয়েছিল।

৭. এনভিডিয়া এনআইএম স্থাপন ও পরীক্ষা করুন

  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 পরিষেবা থেকে একটি চ্যাট সমাপ্তি বার্তা পান, তার মানে পরিষেবাটি প্রত্যাশা অনুযায়ী কাজ করছে!

৮. পরিচ্ছন্নতা

GKE ক্লাস্টারটি মুছে ফেলুন:

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

৯. এরপর কী?

আরও তথ্যের জন্য নিম্নলিখিত নিবন্ধগুলি দেখুন: