1- مقدمة
سيقدّم لك هذا الدرس التطبيقي حول الترميز تجربة عملية لإرشادك خلال عملية نشر نموذج ذكاء اصطناعي مستند إلى حاوية وإدارته على Google Kubernetes Engine (GKE)، باستخدام إمكانات الخدمات المصغّرة NVIDIA NIM™.
تم تصميم هذا البرنامج التعليمي للمطوّرين وعلماء البيانات الذين يريدون:
- تبسيط عملية نشر استنتاج الذكاء الاصطناعي: تعرَّف على كيفية استخدام NIM جاهز للاستخدام من أجل نشر نماذج الذكاء الاصطناعي في مرحلة الإنتاج على GKE بشكل أسرع وأسهل.
- تحسين الأداء على وحدات معالجة الرسومات من NVIDIA: اكتسِب خبرة عملية في نشر NIM الذي يستخدم NVIDIA TensorRT لتحسين الاستنتاج على وحدات معالجة الرسومات ضمن مجموعة GKE.
- توسيع نطاق أحمال عمل استنتاج الذكاء الاصطناعي: استكشِف كيفية توسيع نطاق عملية نشر NIM استنادًا إلى الطلب باستخدام Kubernetes للتوسيع التلقائي وإدارة موارد الحوسبة.
2. المواضيع التي ستتعرّف عليها
بحلول نهاية هذا البرنامج التعليمي، ستكتسب خبرة في:
- نشر NIM على GKE: يمكنك نشر NVIDIA NIM جاهز للاستخدام لمختلف مهام الاستنتاج على مجموعة GKE.
- إدارة عمليات نشر NIM: استخدِم أوامر kubectl لإدارة NIM الذي تم نشره ومراقبته وتوسيع نطاقه.
- توسيع نطاق أحمال عمل الاستنتاج: استخدِم ميزات Kubernetes للتوسيع التلقائي لعمليات نشر NIM استنادًا إلى طلبات الزيارات.
3. التعرّف على المكوّنات
وحدات معالجة الرسومات في Google Kubernetes Engine (GKE)
تتيح لك وحدات معالجة الرسومات تسريع أحمال عمل معيّنة تعمل على عُقدك، مثل تعلُّم الآلة ومعالجة البيانات. توفّر GKE مجموعة من خيارات أنواع الأجهزة لإعداد العُقد، بما في ذلك أنواع الأجهزة التي تتضمّن وحدات معالجة الرسومات NVIDIA H100 وL4 وA100.
NVIDIA NIM
NVIDIA NIM هي مجموعة من الخدمات المصغّرة للاستنتاج سهلة الاستخدام لتسريع عملية نشر النماذج الأساسية على أي سحابة إلكترونية أو مركز بيانات، ما يساعد في الحفاظ على أمان بياناتك.
NVIDIA AI Enterprise
NVIDIA AI Enterprise هي منصة برامج سحابية متكاملة من البداية إلى النهاية، وتعمل على تسريع مسارات علم البيانات وتبسيط عملية تطوير ونشر الطيارين الآليين وتطبيقات الذكاء الاصطناعي التوليدي الأخرى على مستوى الإنتاج. تتوفّر هذه المنصة من خلال سوق Google Cloud.
4. المتطلبات الأساسية
- المشروع: مشروع Google Cloud مفعّلة فيه الفوترة
- الأذونات: أذونات كافية لإنشاء مجموعات GKE والموارد الأخرى ذات الصلة
- Helm: Helm هو مدير حزم لـ Kubernetes.
- NVIDIA GPU Operator: إضافة Kubernetes تعمل على أتمتة إدارة جميع مكوّنات برامج NVIDIA اللازمة لتوفير وحدة معالجة الرسومات
- مفتاح NVIDIA API: انقر على هذا الرابط واتّبِع التعليمات حول كيفية إنشاء حساب وإنشاء مفتاح واجهة برمجة تطبيقات. سيكون مفتاح واجهة برمجة التطبيقات مطلوبًا لتنزيل حاوية NIM.
- وحدات معالجة الرسومات من NVIDIA: يجب أن تعمل إحدى وحدات معالجة الرسومات التالية (يُرجى العِلم أنّه يمكنك اتّباع هذه الخطوات لطلب زيادة الحصة، إذا لم يكن لديك عدد كافٍ من وحدات معالجة الرسومات)
- اختياري - GCloud SDK:** في حال عدم استخدام Cloud Shell في Google Cloud Console، يُرجى التأكّد من تثبيت Google Cloud SDK وإعداده.
- اختياري - kubectl:** في حال عدم استخدام Cloud Shell في Google Cloud Console، يُرجى التأكّد من تثبيت أداة سطر الأوامر kubectl وإعدادها.
5. إنشاء مجموعة GKE تتضمّن وحدات معالجة الرسومات
- افتح Cloud Shell أو الوحدة الطرفية.
- حدِّد المَعلمات التالية:
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 Engine ووحدات معالجة الرسومات التي تستخدمها.
- إنشاء مجموعة GKE:
gcloud container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --location=${ZONE} \ --release-channel=rapid \ --machine-type=${CLUSTER_MACHINE_TYPE} \ --num-nodes=1 - إنشاء مجموعة أجهزة ذات التخصيص نفسه لوحدة معالجة الرسومات:
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 واختباره
- استرجاع مخطط Helm لـ NIM LLM:
helm fetch https://helm.ngc.nvidia.com/nim/charts/nim-llm-1.3.0.tgz --username='$oauthtoken' --password=$NGC_CLI_API_KEY - إنشاء مساحة اسم NIM:
kubectl create namespace nim - إعداد الأسرار:
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 - إعداد 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 - بدء عملية نشر NIM:
تأكَّد من تشغيل حاوية NIM:helm install my-nim nim-llm-1.1.2.tgz -f nim_custom_value.yaml --namespace nimkubectl get pods -n nim - اختبار عملية نشر NIM:
بعد التأكّد من نشر خدمة NIM بنجاح، يمكننا إرسال طلبات استنتاج لمعرفة نوع الملاحظات التي سنتلقّاها من خدمة NIM. لإجراء ذلك، نفعِّل إعادة توجيه المنفذ على الخدمة لنتمكّن من الوصول إلى NIM من المضيف المحلي على المنفذ 8000: بعد ذلك، يمكننا فتح وحدة طرفية أو علامة تبويب أخرى في Cloud Shell وتجربة الطلب التالي:kubectl port-forward service/my-nim-nim-llm 8000:8000 -n nim إذا تلقّيت إكمال محادثة من خدمة 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 }'
8. تنظيف
احذف مجموعة GKE:
gcloud container clusters delete $CLUSTER_NAME --zone=$ZONE
9. الخطوات التالية
يمكنك الاطّلاع على المقالات التالية لمزيد من المعلومات: