1. مقدمة
سيرشدك هذا الدرس التطبيقي العملي حول الترميز إلى كيفية نشر نموذج ذكاء اصطناعي مستند إلى حاوية وإدارته على Google Kubernetes Engine (GKE)، وذلك باستخدام إمكانات خدمات NVIDIA NIM™ المصغّرة.
تم تصميم هذا البرنامج التعليمي للمطوّرين وعلماء البيانات الذين يبحثون عن:
- تبسيط عملية نشر استنتاجات الذكاء الاصطناعي: تعرَّف على كيفية استخدام حزمة NIM مُنشأة مسبقًا لنشر نماذج الذكاء الاصطناعي في مرحلة الإنتاج على GKE بشكل أسرع وأسهل.
- تحسين الأداء على وحدات معالجة الرسومات من NVIDIA: يمكنك اكتساب خبرة عملية في نشر NIM التي تستخدم NVIDIA TensorRT للاستدلال المحسّن على وحدات معالجة الرسومات ضمن مجموعة GKE.
- توسيع نطاق أحمال عمل استنتاج الذكاء الاصطناعي في Scale AI: تعرَّف على كيفية توسيع نطاق نشر NIM استنادًا إلى الطلب باستخدام Kubernetes للتوسيع التلقائي وإدارة موارد الحوسبة.
2. ما ستتعلمه
في نهاية هذا البرنامج التعليمي، ستكون لديك خبرة في:
- نشر NIM على GKE: يمكنك نشر حزمة NVIDIA NIM مُنشأة مسبقًا لتنفيذ مهام استنتاج مختلفة على مجموعة GKE.
- إدارة عمليات نشر NIM: استخدِم أوامر kubectl لإدارة عمليات نشر NIM ومراقبتها وتوسيع نطاقها.
- توسيع أحجام العمل الخاصة بالاستدلال: استخدِم ميزات Kubernetes لتوسيع عمليات نشر NIM تلقائيًا استنادًا إلى متطلبات الزيارات.
3- التعرّف على المكوّنات
وحدات معالجة الرسومات في Google Kubernetes Engine (GKE)
تتيح لك وحدات معالجة الرسومات (GPU) تسريع أحمال العمل المحدّدة التي يتم تشغيلها على العُقد، مثل تعلُّم الآلة ومعالجة البيانات. توفّر خدمة 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: انقر على هذا الرابط واتّبِع التعليمات حول كيفية إنشاء حساب وإنشاء مفتاح واجهة برمجة تطبيقات. سيكون مفتاح واجهة برمجة التطبيقات مطلوبًا لتنزيل حاوية NIM.
- وحدات معالجة الرسومات من NVIDIA: يجب أن تعمل إحدى وحدات معالجة الرسومات أدناه (يُرجى العِلم أنّه يمكنك اتّباع هذه الخطوات لطلب زيادة الحصة، إذا لم تتوفّر لديك وحدات معالجة رسومات كافية)
- اختياري - حزمة تطوير البرامج (SDK) من GCloud:** في حال عدم استخدام Cloud Shell في "بوابة Google Cloud"، يُرجى التأكّد من تثبيت حزمة تطوير البرامج (SDK) من Google Cloud وإعدادها.
- اختياري - kubectl:** في حال عدم استخدام Cloud Shell في "بوابة Google Cloud Platform"، يُرجى التأكّد من تثبيت أداة سطر الأوامر kubectl وإعدادها.
5- إنشاء مجموعة GKE باستخدام وحدات معالجة الرسومات
- افتح Cloud Shell أو نافذة Terminal.
- حدِّد المَعلمات التالية:
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" ووحدات معالجة الرسومات التي تستخدمها.
- إنشاء مجموعة GKE:
gcloud container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --location=${ZONE} \ --release-channel=rapid \ --machine-type=${CLUSTER_MACHINE_TYPE} \ --num-nodes=1
- أنشئ مجموعة عقد لوحدة معالجة الرسومات (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
يتيح لك مفتاح NGC API استرداد صور مخصّصة من NVIDIA NGC. لتحديد مفتاحك، اتّبِع الخطوات التالية:
export NGC_CLI_API_KEY="<YOUR NGC API KEY>"
هذا هو المفتاح الذي تم إنشاؤه كجزء من المتطلبات الأساسية.
7. نشر NVIDIA NIM واختباره
- احصل على مخطط Helm الخاص بنموذج NIM اللغوي الكبير:
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 nim
kubectl 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- الخطوات التالية
يمكنك الاطّلاع على المقالات التالية للحصول على مزيد من المعلومات: