شغل الاستدلال الدفعي مع راي على AKS

في هذا المقال، تقدم وظيفة RayJob التي تشغل استنتاج دفعات vLLM غير المتصلة باستخدام محول LoRA الذي ينتج بواسطة مثال تدريب نموذج اللغة الكبيرة. تقرأ الوظيفة تقسيم اختبار viggo ومحول LoRA من مساحة تخزين Azure Blob، وتولد توقعات على وحدة معالجة رسومات واحدة، وترفع النتائج.

هام

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

تتحمل Microsoft مسؤولية بناء الحزم مفتوحة المصدر التي ننشرها على AKS. تتضمن هذه المسؤولية امتلاك ملكية كاملة لعملية البناء والمسح الضوئي والتوقيع والتحقق من الصحة وإصلاحها، بالإضافة إلى التحكم في الثنائيات في صور الحاوية. لمزيد من المعلومات، راجع إدارة الثغرات الأمنية لتغطية دعم AKSوAKS.

المتطلبات الأساسية

تعيين متغيرات البيئة

انتقل إلى مثال الاستدلال الدفعي في المستودع المستنسخ وقم بتكوين المتغيرات الضرورية في البيئة:

cd <path-to-cloned-repo>/AKS/examples/kueue-and-ray-on-aks/3-workloads/batch-inference
export AZURE_STORAGE_ACCOUNT_NAME=$(terraform -chdir=../../1-infrastructure/terraform output -raw storage_account_name)
source env.example

Note

إذا قمت بتكوين طوابير الفرق (الخيار B)، قم بتعيين export QUEUE_NAME=team-a أو export QUEUE_NAME=team-b قبل تشغيل source env.example. الإعداد الافتراضي QUEUE_NAME=default يعمل فقط مع تكوين الطابور الواحد (الخيار A).

قدم عبء العمل

قدم استنتاج الدفعة RayJob:

./submit.sh

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

نصيحة

قم بتشغيل ./submit.sh --dry-run التحقق من صحة البيان المعروض دون تطبيقه على العنقود.

مراقبة التقدم

ابحث عن اسم الوظيفة وصدر إذا كنت في هيكل جديد:

export JOB_NAME=$(kubectl -n ray get rayjob --no-headers -o custom-columns=":metadata.name" | grep batch-inference)

شاهد حالة راي جوب وقبول كوي:

kubectl -n ray get rayjob ${JOB_NAME} -w
kubectl -n ray get workload -w

الإنتاج المتوقع عند اكتمال المهمة:

NAME                         JOB STATUS   DEPLOYMENT STATUS   START TIME             END TIME               AGE
batch-inference-xxxxxxxxxx   SUCCEEDED    Complete            2026-01-01T00:00:00Z   2026-01-01T00:09:00Z   9m
NAME                                      QUEUE     RESERVED IN     ADMITTED   FINISHED   AGE
rayjob-batch-inference-xxxxxxxxxx-xxxxx   default   cluster-queue   True       True       9m

تتبع سجلات العامل:

kubectl -n ray logs -l ray.io/cluster=$(kubectl -n ray get rayjob ${JOB_NAME} -o jsonpath='{.status.rayClusterName}') -f --tail=100

التحقق من النتائج

قائمة ملفات التنبؤ في تخزين الكتل:

az storage blob list -c llm-pipeline --prefix "inference/${JOB_NAME}/" \
  --account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login -o table

الإخراج المتوقع:

Name                                                 Blob Type    Blob Tier    Length    Content Type
---------------------------------------------------  -----------  -----------  --------  ------------------------
inference/<job-name>/metrics.json                    BlockBlob    Hot          128       application/octet-stream
inference/<job-name>/predictions.jsonl               BlockBlob    Hot          411777    application/octet-stream

قم بتحميل وفحص التوقعات:

az storage blob download -c llm-pipeline \
  -n "inference/${JOB_NAME}/predictions.jsonl" \
  --account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login \
  --file /tmp/predictions.jsonl
head -1 /tmp/predictions.jsonl | python3 -m json.tool

الإخراج المتوقع:

{
    "input": "I'm wondering, have you played any games you found genuinely shocking?",
    "expected": "request(specifier[shocking])",
    "generated": "request_explanation"
}

مرجع التكوين

المتغير افتراضي الوصف
AZURE_STORAGE_ACCOUNT_NAME (مطلوب) حساب التخزين من الوحدة 1
JOB_NAME batch-inference-<timestamp> اسم فريد لوظيفة راي
QUEUE_NAME default اسم Kueue LocalQueue
LLM_DATA_CONTAINER llm-pipeline حاوية blob مع بيانات اختبار viggo
LLM_LORA_CONTAINER llm-pipeline حاوية Blob مع محولات LoRA
CONFIGMAP_NAME batch-inference-scripts اسم خريطة التهيئة التي تحمل سكريبت الاستدلال

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

حذف RayJob وخريطة الإعدادات الخاصة به:

kubectl -n ray delete rayjob ${JOB_NAME}
kubectl -n ray delete configmap ${CONFIGMAP_NAME}

لإزالة جميع البنية التحتية، انظر نشر البنية التحتية — تنظيف الموارد.

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