تدريب ماجستير في القانون مع راي على AKS

في هذا المقال، تقدم RayJob الذي يضبط Qwen2.5-7B-Instruct على مجموعة بيانات viggo NLG باستخدام LLaMA-Factory وRay Train الموزع. تستخدم المهمة أربعة عمال مع بطاقة رسومات واحدة لكل منهم، وتقرأ بيانات التدريب من مساحة تخزين Azure Blob، وترفع محول LoRA المدرب للاستنتاج في المراحل النهائية.

هام

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

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

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

  • تم نشر البنية التحتية بعد بنية النشر لبنية راي وكوي على نظام AKS.
  • Kueue queues التي تم تهيئة Configure Kueue queues for Ray workloads على AKS.
  • تتوفر على الأقل أربع وحدات معالجة رسومات A100 في المجموعة (يستخدم هذا المثال أربعة عمال لكل وحدة معالجة رسومات واحدة).
  • يتم رفع مجموعة بيانات Viggo إلى تخزين blob في llm-pipeline/data/ (يتم ذلك تلقائيا بواسطة وحدة Terraform في البنية التحتية).
  • envsubst تم تثبيت (gettext الحزمة على لينكس، brew install gettext على macOS).

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

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

cd <path-to-cloned-repo>/AKS/examples/kueue-and-ray-on-aks/3-workloads/llm-training
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، ويطبقه. يعترف Kuuee بالمهمة عندما تتوفر أربع وحدات معالجة رسومات في قائمة الانتظار المكونة.

نصيحة

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

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

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

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

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

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

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

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

تتبع جذوع رأس الكبسولة:

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

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

تحقق من تحميل محول LoRA:

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

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

Name                                       Blob Type    Blob Tier    Length    Content Type
-----------------------------------------  -----------  -----------  --------  ------------------------
lora/latest.txt                            BlockBlob    Hot          86        application/octet-stream
lora/<job-name>/rng_state_3.pth            BlockBlob    Hot          14725     application/octet-stream

تحقق من كتابة latest.txt المؤشر (يستخدم في مثال الاستدلال الدفعي للاكتشاف التلقائي):

az storage blob download -c llm-pipeline -n lora/latest.txt \
  --account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login

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

azure://llm-pipeline@<storage-account>.blob.core.windows.net/lora/<job-name>

مرجع التكوين

المتغير افتراضي الوصف
AZURE_STORAGE_ACCOUNT_NAME (مطلوب) حساب التخزين من الوحدة 1
NUM_WORKERS 4 نسخ عامل GPU (4 × 1 GPU لكل واحد)
QUEUE_NAME default اسم Kueue LocalQueue
LLM_DATA_CONTAINER llm-pipeline حاوية Blob لبيانات الإدخال
LLM_LORA_CONTAINER llm-pipeline حاوية Blob لرفع LoRA
CONFIGMAP_NAME llm-training-scripts اسم لخريطة التهيئة التي تحمل سكريبت التدريب

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

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

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

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