مشروع: تصميم منصة تعلم آلة
مشروع: تصميم منصة تعلم آلة
أتاحت لك الدروس التسعة السابقة كل لبنة بناء رئيسية: خطوط أنابيب الميزات مع اكتشاف انحراف التدريب عن الخدمة، وتتبع التجارب وسجلات النماذج، وجدولة مجموعات GPU، وبوابات CI/CD لترقية النماذج، وأنماط النشر الكاناري والظلي، والمراقبة متعددة الأبعاد في الإنتاج، وعمليات النماذج اللغوية الكبيرة، وضوابط التكلفة والحوكمة. يطلب منك هذا الدرس الأخير تجميع هذه اللبنات في معمارية متماسكة وذات رأي لفريق متوسط الحجم — اثنا عشر مهندس تعلم آلة، وستة مهندسين من MLOps، وأربعون عالم بيانات — يشحنون ثلاثين نموذجًا نشطًا إلى الإنتاج، مع تفويض بالنمو إلى مئة نموذج خلال ثمانية عشر شهرًا.
تصميم منصة تعلم الآلة ليس قرارًا تقنيًا — بل هو عقد تنظيمي وتشغيلي. كل خيار معماري يُنشئ مجموعة من التجريدات التي إما تُسرّع أو تُعيق الفرق المبنية فوقه. أفضل منصات ML الداخلية في Airbnb وLyft وSpotify وDoorDash تشترك في سمة واحدة: فهي تُعيّر الأجزاء المملة (الوصول إلى البيانات، الحوسبة، تتبع التجارب، النشر) حتى يتمكن علماء البيانات من التركيز كليًا على جودة النماذج.
تقسيم المنصة: ست مستويات
تنقسم منصة ML الإنتاجية بوضوح إلى ست مستويات وظيفية. لكل مستوى مالك رئيسي، ومجموعة من العقود التي يعرضها للمستهلكين في اتجاه المصب، ومجموعة من SLOs يجب الوفاء بها.
- مستوى البيانات: استيعاب البيانات الخام، حساب الميزات، مخزن الميزات، وتوليد مجموعات البيانات الصحيحة زمنيًا. SLO: الميزات متاحة في وقت الخدمة بزمن انتظار p99 أقل من 10 مللي ثانية للميزات الآنية؛ يكتمل توليد مجموعة بيانات التدريب في غضون أربع ساعات من الطلب.
- مستوى التجارب: بيئات دفاتر الملاحظات، تتبع التجارب (MLflow أو Weights & Biases)، تنسيق اجتياح المعاملات الفائقة (Optuna، Ray Tune)، وسجل النماذج. SLO: تنجح كتابات بيانات التجارب بنسبة 99.9%؛ أي أثر نموذج مسجل قابل للاسترداد خلال ثلاثين ثانية.
- مستوى التدريب: مجموعة GPU/TPU، جدولة المهام (Kubeflow Pipelines أو Argo Workflows)، قائمة انتظار المهام، معالجة الاستباق في مثيلات الـ Spot، تنسيق التدريب الموزع (Torch DDP / Horovod). SLO: زمن انتظار إطلاق مهمة التدريب أقل من دقيقتين؛ تستأنف المهام المستباقة في غضون عشر دقائق.
- مستوى النشر: وقت تشغيل الخدمة (Triton أو TorchServe أو vLLM للنماذج اللغوية الكبيرة)، خط أنابيب الترقية (staging → canary → production)، متحكم توزيع الحركة، أتمتة التراجع. SLO: يكتمل النشر الإنتاجي في غضون ثلاثين دقيقة من موافقة الترقية؛ يُشغَّل التراجع في غضون دقيقتين من خرق SLO.
- مستوى المراقبة: اكتشاف انحراف البيانات، انحراف التنبؤات، الارتباط بمقاييس الأعمال، محفزات إعادة التدريب، تكامل التنبيه مع PagerDuty/Opsgenie. SLO: تُنشر تقارير الانحراف في غضون خمس عشرة دقيقة من إغلاق نافذة الاستنتاج؛ يُطلق تنبيه الانحراف الحرج في غضون خمس دقائق.
- مستوى الحوكمة: إسناد التكاليف، تطبيق الحصص، سجلات التدقيق، بطاقات النماذج، أدوات التفسيرية (قيم SHAP المخزنة لكل إصدار نموذج)، رسم بياني لسلسلة البيانات. SLO: تقارير التكلفة متاحة في غضون ساعة من نهاية اليوم؛ الاحتفاظ بسجل التدقيق سبع سنوات.
مخطط المعمارية المرجعية
يوضح المخطط أدناه المنصة الكاملة بجميع مستوياتها الست وتدفقات البيانات الحرجة بينها. اقرأه من اليسار إلى اليمين لمسار التدريب، ومن الأسفل إلى الأعلى لمسار الخدمة.
هيكل البنية التحتية كرمز
تعيش المنصة على Kubernetes. النمط الذي يتوسع من ثلاثين إلى مئة نموذج هو مجموعة مشتركة مع عزل فضاء الأسماء لكل فريق، وليس مجموعة لكل نموذج. يحصل كل فريق على فضاء أسماء Kubernetes بـ ResourceQuotas لـ GPU والـ CPU والذاكرة. تُعالج مجموعة عقد مشتركة من مثيلات A100 الـ Spot مهام التدريب؛ بينما تُعالج مجموعة عقد on-demand من مثيلات g5.2xlarge طلبات الاستدلال. يُدير Terraform المجموعة ومجموعات العقد؛ أما مخططات Helm أو طبقات Kustomize فتُدير مكونات المنصة.
خط أنابيب الترقية كرمز
خط أنابيب الترقية هو الحد التعاقدي بين التجريب والإنتاج. يجب أن يُشغَّل من سجل النماذج (وليس من إنسان يفتح PR)، وأن يكون مؤتمتًا بالكامل حتى بوابة الكاناري، وأن يُوقَف بواسطة أي مما يلي: مقاييس التقييم أدنى من العتبة، درجة انحراف البيانات أعلى من 0.2، عدم تطابق المخطط بين أثر السجل وعقد الخدمة، أو غياب بطاقة النموذج.
أنماط الفشل التي يجب التصميم من أجلها
تصميم المنصة لا يعدو كونه جيدًا بمقدار أنماط الفشل فيه. الأنماط التي تُفشل منصات ML على نطاق واسع ليست أعطال الأجهزة الواضحة — يُعالجها Kubernetes. بل هي أعطال الاقتران الخفية التي يجب على مهندس المعمارية التصميم الصريح ضدها:
- بدء بارد لمخزن الميزات عند التراجع: تتراجع من نموذج v4 إلى v3. لكن v3 دُرِّب على ميزات لم تعد موجودة في مخزن الميزات لأن خط أنابيب الميزات تم ترقيته أيضًا. الحل: يخزن سجل النماذج ملف
feature_spec.yamlإلى جانب كل أثر، ويفرض مخزن الميزات سياسة احتفاظ لا تقل عن تسعين يومًا لكل ميزة مسماة. - متتبع التجارب كنقطة فشل وحيدة: إذا توقف خادم تتبع MLflow، تفشل مهام التدريب — أو الأسوأ، تنجح بصمت دون تسجيل. الحل: MLflow في وضع التوافر العالي خلف موازن تحميل مع نسختين من PostgreSQL لـ writer، وقاطع دائرة في غلاف مهمة التدريب يتدهور بشكل رشيق إلى تسجيل SQLite المحلي إذا كان خادم التتبع غير قابل للوصول، ثم يُزامن عند اكتمال المهمة.
- مجاعة حصة GPU: يُرسل أحد الفرق اجتيازًا لخمسمئة تجربة معاملات فائقة على مثيلات Spot. تنضب طاقة Spot. يتم استباق عقد الخدمة عندما تستعيد AWS المجموعة. الحل: فصل صارم بين مجموعات عقد التدريب والخدمة مع مجموعات Spot متمايزة ومعالجات للمقاطعة. الخدمة على مثيلات on-demand فقط. مهام التدريب لها
priorityClassName: batch-low. - بطاقة نموذج قديمة في الإنتاج: يطلب تدقيق تنظيمي استفسارًا عن مصدر بيانات التدريب لنموذج أُدخل الإنتاج قبل أربعة عشر شهرًا. تم تقديم بطاقة النموذج لكنها تشير إلى مسار S3 تم تنظيفه. الحل: بطاقات النماذج كائنات غير قابلة للتغيير مخزنة في السجل ذاته (وليس في تخزين الكائنات)، والحذف مُحجوب بواسطة admission webhook في Kubernetes طالما أن أي نشر إنتاجي يشير إلى إصدار ذلك النموذج.
التوسع من 30 إلى 100 نموذج
ستتعرض منصة الثلاثين نموذجًا التي تصممها اليوم لضغوط متوقعة مع نموها. التغييرات الأكثر أهمية في المنصة عند علامة المئة نموذج هي: (1) كتالوج بيانات وصفية للنماذج — فهرس قابل للبحث لجميع النماذج ومالكيها ومخططات المدخلات/المخرجات وـ SLOs والتكلفة لكل استدلال — لأن إيجاد مالك النموذج يصبح مشكلة تشغيلية حقيقية؛ (2) قالب سير عمل تدريب ذاتي الخدمة يمكن لعلماء البيانات تخصيصه دون لمس YAML، لأن فريق MLOps يصبح عنق زجاجة إذا كان كل نموذج جديد يتطلب عمل خط أنابيب مخصصًا؛ و(3) إسناد تكلفة تلقائي حسب النموذج والفريق مُعروض كملخص أسبوعي، لأن تكاليف GPU المقبولة عند ثلاثين نموذجًا تُهدد الميزانية عند مئة. صمّم هذه القدرات الثلاث في المعمارية الأولية حتى لو لم تُطبقها في اليوم الأول. إعادة تجهيزها لمنصة قائمة أكثر تكلفة بمرتبة كاملة من بناء روابطها مسبقًا.