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

1. مقدمه

این Codelab عملی شما را از طریق استقرار و مدیریت یک مدل AI کانتینری در Google Kubernetes Engine (GKE) با استفاده از قدرت میکروسرویس‌های NIM™ NVIDIA راهنمایی می‌کند.

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

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

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

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

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

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 مورد نیاز برای ارائه GPU را خودکار می کند.
  • کلید NVIDIA API: روی این پیوند کلیک کنید و دستورالعمل‌های نحوه ایجاد حساب کاربری و ایجاد یک کلید API را دنبال کنید. برای دانلود کانتینر NIM به یک کلید API نیاز است.
  • پردازنده‌های گرافیکی NVIDIA: یکی از پردازنده‌های گرافیکی زیر باید کار کند (لطفاً توجه داشته باشید، اگر پردازنده‌های گرافیکی کافی ندارید، می‌توانید این مراحل را برای درخواست افزایش سهمیه دنبال کنید)
  • اختیاری - GCloud SDK :** اگر از Cloud Shell در پورتال GCP استفاده نمی‌کنید، لطفاً مطمئن شوید که Google Cloud SDK را نصب و پیکربندی کرده‌اید.
  • اختیاری - kubectl :** اگر از Cloud Shell در پورتال GCP استفاده نمی‌کنید، لطفاً مطمئن شوید که ابزار خط فرمان 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
    

لطفاً توجه داشته باشید که ممکن است مجبور شوید مقادیر NODE_POOL_MACHINE_TYPE، CLUSTER_MACHINE_TYPE و GPU_TYPE را بر اساس نوع نمونه محاسباتی و 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. استخر گره 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
    

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. تنظیم پیکربندی 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 pod در حال اجرا است:
    kubectl get pods -n nim
    
  6. آزمایش استقرار NIM:
    هنگامی که تأیید کردیم که سرویس NIM ما با موفقیت اجرا شده است، می‌توانیم درخواست‌های استنباط کنیم تا ببینیم چه نوع بازخوردی از سرویس NIM دریافت خواهیم کرد. برای انجام این کار، انتقال پورت در سرویس را فعال می کنیم تا بتوانیم از Localhost خود در پورت 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. بعدی چه خواهد شد

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