مشاركة عبر


الدرس: نشر توليد صور بالذكاء الاصطناعي باستخدام وحدات معالجة الرسومات بدون خادم

في هذا الدرس، تقوم بنشر مولد صور مدعوم بنظام Stable Diffusion باستخدام وحدات معالجة رسومات بدون خادم في Azure Container Apps. يمكنك نشر هذا الحل إما كتطبيق Azure Functions أو كتطبيق حاوية قياسي، حسب احتياجاتك.

توفر وحدات معالجة الرسوميات بدون خادم وصولا عند الطلب إلى موارد الحوسبة الخاصة بوحدة معالجة الرسوميات دون الحاجة لإدارة البنية التحتية. تدفع فقط مقابل وقت بطاقة الرسوميات الذي تستخدمه، ويتدرج الحل تلقائيا إلى الصفر عند الخمول.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • إنشاء بيئة تطبيقات الحاويات مع ملفات تعريف عبء العمل الخاصة بوحدة معالجة الرسومات
  • نشر واجهة برمجة تطبيقات توليد صور بالذكاء الاصطناعي باستخدام وحدات معالجة رسومات بدون خادم
  • اختبر النشر باستخدام طلبات تحويل النص إلى صورة
  • راقب استخدام وحدة معالجة الرسومات وتحسين الأداء
  • تنظيف الموارد لتجنب التكاليف غير الضرورية

المتطلبات

احتياج وصف
اشتراك Azure في حال لم يكن لديك اشتراك Azure، أنشئ حسابًا مجّانيًّا.
حصة وحدة معالجة الرسومات اطلب الوصول إلى حصة GPU. عادة ما تستغرق الموافقة من يوم إلى يومين عمل.
Azure CLI قم بتثبيت Azure CLI الإصدار 2.62.0 أو أحدث.
Azure Developer CLI قم بتثبيت واجهة برمجة زر Azure Developer لنشر مبسط.
دوكر ديسكتوب مطلوب لتطوير الحاويات المحلية. ثبت Docker Desktop.

مهم

اطلب الوصول إلى حصة بطاقة الرسوميات قبل بدء هذا الدرس. يمكنك الاستمرار في القراءة أثناء انتظار الموافقة، لكن النشر يتطلب حصة معتمدة.

للتحقق من تثبيت أدواتك بشكل صحيح، قم بتشغيل الأوامر التالية:

az --version
azd version
docker --version

نظرة عامة على البنية

يستخدم هذا الحل خدمات Azure التالية:

المكون Purpose
تطبيقات حاوية Azure تستضيف تطبيقك مع دعم GPU بدون خادم
ملف عبء عمل وحدة معالجة الرسومات يوفر حساب NVIDIA T4 GPU للاستدلال بالذكاء الاصطناعي
سجل حاويات Azure يخزن صورة الحاوية المخصصة الخاصة بك
تخزين Azure مطلوب لوقت تشغيل وظائف Azure (نشر الوظائف فقط)
Application Insights يوفر المراقبة والتشخيص

يتبع التطبيق تدفق طلبات مباشر. عندما يرسل العميل طلبا، يصل أولا إلى نقطة نهاية مداخل تطبيقات الحاوية. بعد ذلك يعالج تطبيقك الطلب ويمرره إلى نموذج الانتشار المستقر الذي يعمل على وحدة معالجة الرسومات. يقوم النموذج بتوليد الصورة المطلوبة بناء على التوجيه ويعيد الصورة المولدة كرد على العميل.

اعتبارات التكلفة

تستخدم وحدات معالجة الرسوميات بدون خادم الفوترة في الثانية. راجع هذه عوامل التكلفة قبل النشر:

العامل‬ Impact
نوع وحدة معالجة الرسوميات تكلفة NVIDIA T4 أقل من A100
الحد الأدنى من النسخ المتماثلة التعيين على 0 للتطوير (يتدرج إلى صفر عند الخمول)
وقت الانطلاق البارد يستغرق الطلب الأول دقيقة إلى دقيقتين (تحميل النموذج)
مدة الطلب عادة ما يستغرق توليد الصور من 5 إلى 15 ثانية

للحصول على تسعير تفصيلي، انظر Azure Container Apps preciing.

الحصول على التعليمات البرمجية للعينة

قم باستنساخ مستودع العينات الذي يحتوي على تنفيذ Azure Functions:

git clone https://github.com/Azure-Samples/function-on-aca-gpu.git
cd function-on-aca-gpu

يحتوي المستودع على:

الملف Purpose
function_app.py دالة HTTP لتوليد الصور
requirements.txt تبعيات بايثون بما في ذلك مكتبة الموزعات
Dockerfile تعريف صورة الحاوية مع دعم وحدة معالجة الرسوميات
host.json Azure Functions configuration
azure.yaml Azure Developer CLI deployment configuration

النشر باستخدام بوابة Azure

اتبع هذه الخطوات لإنشاء تطبيق حاوية يدعم بطاقة الرسومات ونشر حل توليد الصور باستخدام بوابة Azure.

إنشاء بيئة تطبيقات الحاويات باستخدام وحدة معالجة الرسوميات

  1. في بوابة Azure، ابحث عن تطبيقات الحاويات واخترها.

  2. حدد إنشاء>تطبيق حاوية.

  3. في علامة التبويب Basics ، قم بتكوين الإعدادات التالية:

    الإعداد القيمة‬
    الاشتراك حدد اشتراكك في Azure.
    مجموعة الموارد اختر إنشاء جديد وإدخال rg-gpu-image-gen
    اسم تطبيق الحاوية أدخل ca-image-gen
    مصدر النشر اختر صورة الحاوية
    المنطقة منتخب السويد سنترال
  4. تحت بيئة تطبيقات الحاوية، اختر إنشاء جديد.

  5. في لوحة إنشاء تطبيقات الحاويات ، أدخل cae-gpu-image-gen اسم البيئة.

  6. حدد إنشاء لإنشاء البيئة.

  7. حدد Next: Container >.

قم بتكوين الحاوية باستخدام بطاقة الرسوميات

  1. في تبويب الحاوية ، قم بتكوين الإعدادات التالية:

    الإعداد القيمة‬
    الاسم أدخل gpu-image-gen-container
    مصدر الصورة حدد Docker Hub أو السجلات الأخرى
    نوع الصورة حدد Public
    خادم تسجيل الدخول إلى السجل أدخل mcr.microsoft.com
    الصورة والعلامة أدخل k8se/gpu-quickstart:latest
    ملف عبء العمل اختيار الاستهلاك - حتى 4 معالجات افتراضية، ذاكرة 8 جيجابايت
    الجرافيك لتفعيل بطاقة الرسومات، اختر مربع الاختيار
    نوع وحدة معالجة الرسومات اختر Consumption-GPU-NC8as-T4 واختر الرابط لإضافة الملف الشخصي
  2. حدد Next: Ingress >.

تكوين الدخول

  1. في تبويب Ingress ، قم بضبط الإعدادات التالية:

    الإعداد القيمة‬
    Ingress حدد ‏‫مُمَكّن‬.
    نسبة استخدام الشبكة للدخول اختر قبول حركة المرور من أي مكان
    المنفذ الهدف أدخل 80
  2. حدد "Review + create".

  3. راجع إعداداتك واختر إنشاء (إنشاء).

  4. انتظر حتى يكتمل النشر (حوالي 5 دقائق)، ثم اختر Go to resource.

تحقق من التوزيع

  1. في صفحة نظرة عامة على تطبيق الحاوية، انسخ رابط التطبيق.

  2. افتح رابط URL في المتصفح للوصول إلى واجهة توليد الصور.

Deploy with Azure CLI

يمكنك النشر باستخدام واجهة برمجة Azure Developer (الموصى بها لتطبيق Functions) أو Azure CLI (لمزيد من التحكم في الموارد الفردية).

الخيار أ: نشر كتطبيق Azure Functions مع azd

يوفر واجهة برمجة المطورين Azure أسرع تجربة نشر لتنفيذ Azure Functions.

  1. التنقل إلى المستودع المستنسخ:

    cd function-on-aca-gpu
    
  2. تهيئة ونشر التطبيق:

    azd up
    
  3. عند الطلب، قدم القيم التالية:

    مطالبة القيمة‬
    اسم البيئة أدخل اسما فريدا (على سبيل المثال، gpufunc-dev)
    موقع Azure تحديد swedencentral
    اشتراك Azure حدد اشتراكك

    تستغرق عملية النشر حوالي 15-20 دقيقة.

  4. عند اكتمال النشر، لاحظ عنوان URL لنقطة النهاية المعروض في المخرج.

ينشئ الأمر azd up الموارد التالية:

مورد Purpose
مجموعة الموارد حاوية لجميع الموارد
مجموعة الموارد حاوية لجميع الموارد
بيئة Container Apps يستضيف التطبيق مع ملف عبء عمل بطاقة الرسوميات
سجل الحاوية يخزن صورة الحاوية المخصصة الخاصة بك
حساب التخزين مطلوب لوقت تشغيل Azure Functions
Application Insights المراقبة والتشخيص
تطبيق الدالة واجهة برمجة تطبيقات توليد الصور

الخيار ب: النشر كتطبيق حاوية باستخدام Azure CLI

للحصول على تحكم أكبر في النشر، استخدم Azure CLI لإنشاء كل مورد بشكل فردي.

  1. حدد متغيرات البيئة:

    RESOURCE_GROUP="rg-gpu-image-gen"
    ENVIRONMENT_NAME="cae-gpu-image-gen"
    LOCATION="swedencentral"
    CONTAINER_APP_NAME="ca-image-gen"
    CONTAINER_IMAGE="mcr.microsoft.com/k8se/gpu-quickstart:latest"
    WORKLOAD_PROFILE_NAME="NC8as-T4"
    WORKLOAD_PROFILE_TYPE="Consumption-GPU-NC8as-T4"
    

    يحدد هذا السكربت قيم التكوين المستخدمة طوال فترة النشر. يحدد تكوين WORKLOAD_PROFILE_TYPE بطاقة NVIDIA T4.

  2. أنشئ مجموعة الموارد:

    az group create \
      --name $RESOURCE_GROUP \
      --location $LOCATION \
      --query "properties.provisioningState" \
      --output tsv
    

    تقوم هذه الأوامر بإنشاء مجموعة موارد في مركز السويد، تدعم ملفات تعريف عبء عمل وحدات معالجة الرسوميات. يجب أن يظهر Succeededالإخراج .

  3. إنشاء بيئة تطبيقات الحاويات:

    az containerapp env create \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION \
      --query "properties.provisioningState" \
      --output tsv
    

    هذا الأمر ينشئ البيئة المدارة التي تستضيف تطبيقات الحاويات الخاصة بك. يجب أن يظهر Succeededالإخراج .

  4. أضف ملف عبء عمل وحدة معالجة الرسومات إلى بيئتك:

    az containerapp env workload-profile add \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --workload-profile-name $WORKLOAD_PROFILE_NAME \
      --workload-profile-type $WORKLOAD_PROFILE_TYPE
    

    هذا الأمر يضيف ملف عبء عمل وحدة معالجة رسومات NVIDIA T4 إلى بيئتك. يتيح الملف الشخصي حساب وحدة معالجة الرسومات للحاويات التي تتطلب ذلك.

  5. أنشئ تطبيق الحاوية مع دعم GPU:

    az containerapp create \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --environment $ENVIRONMENT_NAME \
      --image $CONTAINER_IMAGE \
      --target-port 80 \
      --ingress external \
      --cpu 8.0 \
      --memory 56.0Gi \
      --workload-profile-name $WORKLOAD_PROFILE_NAME \
      --query properties.configuration.ingress.fqdn \
      --output tsv
    

    هذا الأمر ينشئ تطبيق الحاوية ويعينه إلى ملف تعريف عبء العمل الخاص بوحدة معالجة الرسوميات. --cpu قيم و --memory تطابق متطلبات ملف T4. يقوم الأمر بإخراج عنوان URL للتطبيق.

  6. انسخ رابط الإخراج للاختبار في القسم التالي.

اختبر واجهة برمجة تطبيقات توليد الصور

ملاحظة

يستغرق الطلب الأول دقيقة إلى دقيقتين أثناء تحميل النموذج (حوالي 5 جيجابايت) وتحميله إلى ذاكرة GPU. تكتمل الطلبات التالية خلال 5-15 ثانية.

تحقق من تشغيل التطبيق

افتح رابط التطبيق في المتصفح. يجب أن ترى واجهة توليد الصور.

توليد صورة باستخدام واجهة المستخدم

  1. في حقل النص، أدخل طلبا مثل:

    A friendly robot chef cooking pasta in a cozy kitchen, digital art style
    
  2. اختر إنشاء صورة.

  3. انتظر حتى تظهر الصورة. الجيل الأول يستغرق وقتا أطول بسبب تحميل النموذج.

إنشاء صورة باستخدام واجهة برمجة التطبيقات (نشر الوظائف)

إذا قمت بنشر نسخة Azure Functions، يمكنك استدعاء واجهة برمجة التطبيقات مباشرة:

curl -X POST "https://<YOUR-FUNCTION-URL>/api/generate" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A friendly robot chef cooking pasta in a cozy kitchen",
    "num_steps": 25
  }'

استبدل <YOUR-FUNCTION-URL> بعنوان URL الفعلي لتطبيق الوظائف. المعامل يتحكم num_steps في جودة الصورة (القيم الأعلى تعطي نتائج أفضل لكنها تستغرق وقتا أطول).

صيغة الرد المتوقعة:

{
  "success": true,
  "image": "iVBORw0KGgoAAAANSUhEUgAA...(base64 PNG data)..."
}

تحتوي الاستجابة على صورة PNG مشفرة في base64 يمكنك فك ترميزها وحفظها.

مراقبة استخدام وحدة معالجة الرسومات

تساعدك المراقبة على فهم استخدام وحدة معالجة الرسومات وتحسين التكاليف.

عرض حالة بطاقة الرسوميات في الجهاز

  1. في مدخل Microsoft Azure، انتقل إلى تطبيق الحاوية الخاص بك.

  2. تحت المراقبة، اختر وحدة التحكم.

  3. اختر النسخة المقلدة والحاوية.

  4. اختر إعادة الاتصال، ثم اختر /bin/bash كأمر بدء التشغيل.

  5. شغل الأمر التالي لعرض حالة وحدة معالجة الرسومات:

    nvidia-smi
    

    يظهر المخرج استخدام ذاكرة GPU، ونسبة الاستخدام، والعمليات الجارية.

View metrics in Azure Monitor

  1. في مدخل Microsoft Azure، انتقل إلى تطبيق الحاوية الخاص بك.

  2. ضمن Monitoring، حدد Metrics.

  3. أضف مقاييس ل:

    • استخدام وحدة المعالجة المركزية
    • استخدام الذاكرة
    • عدد النسخ المتماثلة

للحصول على خيارات الملاحظة التفصيلية، راجع Monitor Azure Container Apps.

تحسين أداء التشغيل البارد

لتقليل وقت التشغيل البارد لأعباء العمل الإنتاجية:

  1. تفعيل بث القطع الأثرية لتسريع سحب صور الحاويات.

  2. اضبط الحد الأدنى للنسخ على 1 للحفاظ على دفء النسخة:

    az containerapp update \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --min-replicas 1
    

    هذا الأمر يحافظ على تشغيل نسخة واحدة دائما، مما يلغي تأخيرات التشغيل البارد لكنه يتحمل تكاليف مستمرة.

لمزيد من تقنيات التحسين، راجع تحسين التشغيل البارد لوحدات معالجة الرسومات بدون خادم.

استكشاف الأخطاء وإصلاحها

مشكلة السبب حل
خطأ "تجاوز حصة GPU" لا توجد حصة معتمدة لوحدة معالجة الرسوميات اطلب حصة بطاقة الرسوميات وانتظر الموافقة
الحاوية تفشل في التشغيل مهلة سحب الصورة تفعيل بث القطع الأثرية أو استخدم صورة قاعدة أصغر
ينتهي انتهاء صلاحية الطلب الأول تحميل النماذج جار انتظر من 2 إلى 3 دقائق وحاول مرة أخرى. هذا التأخير القصير هو سلوك متوقع.
خطأ "CUDA خارج الذاكرة" النموذج يتجاوز ذاكرة وحدة معالجة الرسوميات تقليل حجم الدفعة أو استخدام نسخة أصغر من الطراز
502 بوابة غير صالحة الحاوية غير جاهزة تحقق من سجلات الحاويات؛ تأكد من تكوين مجسات الصحة
توليد الصور البطيء خطوات الاستدلال غير الكافية زيادة num_steps المعلمة (قيم أعلى = جودة أفضل، أبطأ)

لعرض سجلات الحاويات للتصحيح:

az containerapp logs show \
  --name $CONTAINER_APP_NAME \
  --resource-group $RESOURCE_GROUP \
  --follow

يقوم هذا الأمر ببث سجلات فورية من الحاوية، مما يساعدك على تحديد مشاكل بدء التشغيل أو أخطاء وقت التشغيل.

تنظيف الموارد

عندما تنتهي من الموارد، قم بحذفها لتجنب الرسوم المستمرة.

  1. في مدخل Azure، ابحث عن "Resource groups".

  2. اختر مجموعة الموارد التي أنشأتها (على سبيل المثال، rg-gpu-image-gen).

  3. حدد Delete resource group.

  4. لتأكيد الحذف، أدخل اسم مجموعة الموارد.

  5. حدد حذف.

إذا قمت بالنشر باستخدام Azure Developer CLI:

azd down

إذا قمت بالنشر باستخدام Azure CLI:

az group delete --name $RESOURCE_GROUP --yes --no-wait

يعود العلم --no-wait فورا بينما يستمر الحذف في الخلفية.

الخطوات التالية