یک مدل هوش مصنوعی در GKE با NVIDIA NIM مستقر کنید

۱. مقدمه

این دوره آموزشی Codelab شما را در استقرار و مدیریت یک مدل هوش مصنوعی کانتینر شده بر روی موتور گوگل کوبرنتیز (GKE) با استفاده از قدرت میکروسرویس‌های NVIDIA NIM™ راهنمایی خواهد کرد.

این آموزش برای توسعه‌دهندگان و دانشمندان داده‌ای طراحی شده است که به دنبال موارد زیر هستند:

  • ساده‌سازی استقرار استنتاج هوش مصنوعی: یاد بگیرید که چگونه از یک NIM از پیش ساخته شده برای استقرار سریع‌تر و آسان‌تر مدل‌های هوش مصنوعی در محیط تولید GKE استفاده کنید.
  • بهینه‌سازی عملکرد در پردازنده‌های گرافیکی NVIDIA: تجربه عملی در استقرار NIM که از NVIDIA TensorRT برای استنتاج بهینه در پردازنده‌های گرافیکی درون خوشه GKE شما استفاده می‌کند، کسب کنید.
  • مقیاس‌بندی حجم کار استنتاج هوش مصنوعی: بررسی کنید که چگونه با استفاده از Kubernetes برای مقیاس‌بندی خودکار و مدیریت منابع محاسباتی، استقرار NIM خود را بر اساس تقاضا مقیاس‌بندی کنید.

۲. آنچه یاد خواهید گرفت

در پایان این آموزش، شما با موارد زیر تجربه خواهید داشت:

  1. استقرار NIM روی GKE: یک NVIDIA NIM از پیش ساخته شده را برای وظایف استنتاج مختلف روی خوشه GKE خود مستقر کنید.
  2. مدیریت استقرارهای NIM: از دستورات kubectl برای مدیریت، نظارت و مقیاس‌بندی NIM مستقر خود استفاده کنید.
  3. مقیاس‌بندی حجم کار استنتاج: از ویژگی‌های Kubernetes برای مقیاس‌بندی خودکار استقرارهای NIM خود بر اساس تقاضای ترافیک استفاده کنید.

۳. اجزا را یاد بگیرید

پردازنده‌های گرافیکی در موتور گوگل کوبرنتیز (GKE)

پردازنده‌های گرافیکی (GPU) به شما امکان می‌دهند بارهای کاری خاصی را که روی گره‌های شما اجرا می‌شوند، مانند یادگیری ماشین و پردازش داده‌ها، تسریع کنید. GKE طیف وسیعی از گزینه‌های نوع ماشین را برای پیکربندی گره ارائه می‌دهد، از جمله انواع ماشین با پردازنده‌های گرافیکی NVIDIA H100، L4 و A100 .

انویدیا NIM

NVIDIA NIM مجموعه‌ای از میکروسرویس‌های استنتاج با کاربرد آسان برای تسریع استقرار مدل‌های پایه در هر ابر یا مرکز داده و کمک به حفظ امنیت داده‌های شما است.

شرکت هوش مصنوعی انویدیا

NVIDIA AI Enterprise یک پلتفرم نرم‌افزاری سرتاسری و مبتنی بر ابر است که خطوط لوله علم داده را تسریع می‌کند و توسعه و استقرار کمک‌پایلوت‌های سطح تولید و سایر برنامه‌های هوش مصنوعی مولد را ساده می‌کند. این نرم‌افزار از طریق GCP Marketplace در دسترس است.

۴. پیش‌نیازها

  • پروژه: یک پروژه گوگل کلود با قابلیت پرداخت.
  • مجوزها: مجوزهای کافی برای ایجاد خوشه‌های GKE و سایر منابع مرتبط.
  • Helm : Helm یک مدیر بسته برای Kubernetes است.
  • NVIDIA GPU Operator : یک افزونه‌ی kubernetes که مدیریت تمام اجزای نرم‌افزاری NVIDIA مورد نیاز برای تأمین GPU را خودکار می‌کند.
  • کلید API انویدیا: روی این لینک کلیک کنید و دستورالعمل‌های مربوط به نحوه ایجاد حساب کاربری و تولید کلید API را دنبال کنید. برای دانلود کانتینر NIM به کلید API نیاز خواهید داشت.
  • پردازنده‌های گرافیکی انویدیا: یکی از پردازنده‌های گرافیکی زیر باید کار کند (لطفاً توجه داشته باشید، اگر پردازنده‌های گرافیکی کافی ندارید، می‌توانید این مراحل را برای درخواست افزایش سهمیه دنبال کنید)
  • اختیاری - GCloud SDK :** در صورتی که از Cloud Shell در پورتال GCP استفاده نمی‌کنید، لطفاً مطمئن شوید که Google Cloud SDK را نصب و پیکربندی کرده‌اید.
  • اختیاری - kubectl :** در صورتی که از Cloud Shell در پورتال GCP استفاده نمی‌کنید، لطفاً مطمئن شوید که ابزار خط فرمان kubectl را نصب و پیکربندی کرده‌اید.

۵. ایجاد یک کلاستر GKE با پردازنده‌های گرافیکی (GPU)

  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 را بر اساس نوع نمونه محاسباتی و پردازنده‌های گرافیکی مورد استفاده تغییر دهید.

  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. ایجاد استخر گره GPU:
    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
    

۶. پیکربندی کلید API انویدیا NGC

کلید API مربوط به NGC به شما امکان می‌دهد تصاویر دلخواه خود را از NVIDIA NGC دریافت کنید. برای مشخص کردن کلید خود:

export NGC_CLI_API_KEY="<YOUR NGC API KEY>"

این کلیدی است که به عنوان بخشی از پیش‌نیازها تولید شده است.

۷. نصب و آزمایش NVIDIA NIM

  1. نمودار هلم LLM NIM را دریافت کنید:
    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 دریافت خواهیم کرد. برای انجام این کار، پورت فورواردینگ را روی سرویس فعال می‌کنیم تا بتوانیم از طریق هاست محلی خود روی پورت ۸۰۰۰ به 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

۹. قدم بعدی چیست؟

برای اطلاعات بیشتر مقالات زیر را بررسی کنید: