خدمة نموذج مع راي سيرف على AKS

في هذا المقال، تقوم بنشر نموذج الطقس Aurora المضبوط بدقة كنقطة نهاية HTTP دائمة باستخدام Ray Serve على خدمة Azure Kubernetes ‏(AKS). تستخدم هذه الطريقة موردا من RayService للخدمة طويلة الأمد وليست تحت سيطرة القبول من قبل Kueue.

هام

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

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

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

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

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

cd <path-to-cloned-repo>/AKS/examples/kueue-and-ray-on-aks/3-workloads/online-serving
export AZURE_STORAGE_ACCOUNT_NAME=$(terraform -chdir=../../1-infrastructure/terraform output -raw storage_account_name)
export AURORA_RUN_ID=<your-aurora-finetune-job-name>
source env.example

Note

AURORA_RUN_ID هو JOB_NAME من جولة Aurora المكتملة الخاصة بك. يمكنك العثور عليه مع:

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

نشر الخدمة

نشر خدمة Ray:

./submit-service.sh

يقوم السكربت بإنشاء خريطة تكوين من كود التطبيق الخدم، ويعرض ملف RayService عبر envsubst، ويطبقه. يقوم مشغل KubeRay بإنشاء عنقود Ray وينشر تطبيق Serve.

نصيحة

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

Note

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

تحقق من النشر

راقب حتى تبلغ راي سيرفيس عن التشغيل:

kubectl -n ray get rayservice ${SERVICE_NAME} -w

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

NAME           SERVICE STATUS   NUM SERVE ENDPOINTS
aurora-serve   Running          1

اختبار نقطة النهاية

قم بنقل خدمة الخدمة وإرسال طلبات الاختبار:

kubectl -n ray port-forward svc/${SERVICE_NAME}-serve-svc 8000:8000

فحص الصحة:

curl http://localhost:8000${ROUTE_PREFIX}

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

{"status":"ok","gpu_name":"NVIDIA A100-SXM4-80GB","run_id":"<your-run-id>","adapter":"checkpoints/<your-run-id>/last.safetensors"}

طلب التوقعات الطقسية:

curl -X POST http://localhost:8000${ROUTE_PREFIX} \
  -H 'Content-Type: application/json' \
  -d '{"init_file": "init-2021-01-01-00z.npz", "lead_hours": 6}'

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

{
  "init_file": "init-2021-01-01-00z.npz",
  "lead_hours": 6,
  "surface_variables": {
    "2t":  {"shape": [1,1,52,100], "mean": 298.76, "min": 272.0, "max": 302.0},
    "10u": {"shape": [1,1,52,100], "mean": -2.21,  "min": -18.0, "max": 15.38},
    "10v": {"shape": [1,1,52,100], "mean": 0.92,   "min": -13.88,"max": 18.88},
    "msl": {"shape": [1,1,52,100], "mean": 101320.07, "min": 100352.0, "max": 101888.0}
  },
  "gpu_name": "NVIDIA A100-SXM4-80GB",
  ...
}

تتضمن الاستجابة إحصائيات ملخصة لكل متغير (الشكل، المتوسط، الأدنى، القصوى) لكل متغير سطحي في التوقعات.

مرجع التكوين

المتغير افتراضي الوصف
AZURE_STORAGE_ACCOUNT_NAME (مطلوب) حساب التخزين من الوحدة 1
AURORA_RUN_ID (مطلوب) JOB_NAME من جولة أورورا المكتملة من الضبط الدقيق
AURORA_INPUT_CONTAINER aurora حاوية مع بيانات init
AURORA_ADAPTER_CONTAINER aurora حاوية مع نقطة تفتيش LoRA
AURORA_INIT_FILE init-2021-01-01-00z.npz ملف init الافتراضي للطلبات
AURORA_LEAD_HOURS 6 وقت التوقع الافتراضي (يجب أن يكون مضاعفا ل6 ساعات)
AURORA_LORA_RANK 8 رتبة LoRA (يجب أن تتناسب مع التدريب الأساسي)
AURORA_REQUIRE_GPU_NAME A100 فحص اسم بطاقة الرسوميات (فارغ لتخطي)
SERVICE_NAME aurora-serve اسم مورد RayService
ROUTE_PREFIX /aurora بادئة مسار HTTP لنقطة نهاية الخدمة
CONFIGMAP_NAME aurora-serve-scripts اسم خريطة التكوين التي تحتوي على سكريبت التقديم

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

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

kubectl -n ray delete rayservice ${SERVICE_NAME}
kubectl -n ray delete configmap ${CONFIGMAP_NAME}

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