دليل النشر

MLflow على VPS: تتبّع تجارب تعلّم الآلة وسجلّ النماذج

انشر على VPS Cloud ←

دليل عملي

MLflow على VPS: تتبّع تجارب تعلّم الآلة وسجلّ النماذج

الذكاء الاصطناعي6 دقائق للقراءةعدد الخطوات: 4

ينتج مشروع تعلّم الآلة سريعًا عشرات التجارب: معدّل تعلّم تغيّر هنا، ومجموعة بيانات نُظّفت هناك، ومقياس دُوّن في زاوية دفتر. بعد ثلاثة أسابيع لا يعرف أحد أي نموذج كان الأدق، ولا بأي شيفرة. MLflow منصة مفتوحة المصدر (برخصة Apache-2.0) تحفظ كل ذلك على خادم مركزي: معاملات كل تشغيل ومقاييسه وملفاته، ونماذج بإصدارات، وتتبّعات تطبيقات LLM. يثبّته هذا الدليل على خادم VPS باستخدام Docker Compose، ويحميه بكلمة مرور، ويربط به شيفرة Python، ثم يضبط الحسابات والنسخ الاحتياطي والتحديثات.

المحتويات· لماذا خادم MLflow1/12
  1. 01لماذا خادم MLflow
  2. 02ما يقدّمه MLflow
  3. 03MLflow مقابل التتبّع اليدوي
  4. 04المتطلبات
  5. 05تثبيت MLflow باستخدام Docker Compose
  6. 06دون --app-name basic-auth يبقى الخادم مفتوحًا
  7. 07أرسل تجاربك من Python
  8. 08تتبّع تطبيق LLM
  9. 09سجلّ النماذج
  10. 10الحسابات والصلاحيات
  11. 11النسخ الاحتياطي والتحديث
  12. 12التثبيت بنقرة واحدة مع ServOrbit

لماذا خادم MLflow

عند تشغيله محليًا، يكتب MLflow نتائجه في مجلد mlruns على جهازك: لا يراها أحد غيرك، وتختفي مع الجهاز. خادم التتبّع يغيّر ذلك. يرسل كل دفتر وكل سكربت تدريب وكل عضو في الفريق عمليات تشغيله إلى المكان نفسه، وتقارنها الواجهة جنبًا إلى جنب.

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

ما يقدّمه MLflow

  • تتبّع التجارب — معاملات ومقاييس وملفات كل تشغيل، تُصفّى وتُقارن في الواجهة.
  • سجلّ النماذج — الإصدارات والأسماء المستعارة والتاريخ، لتعرف بالضبط ما يعمل في الإنتاج.
  • تتبّع LLM — مدخلات ومخرجات وزمن استجابة وخطوات كل طلب في تطبيقات الذكاء الاصطناعي التوليدي.
  • ملفات يقدّمها الخادم — ملفات ورسوم ونماذج تُرفع عبر HTTPS، دون تخزين S3 يحتاج إلى إعداد.
  • تسجيل تلقائي — autolog() لـ scikit-learn وPyTorch وTransformers وXGBoost وOpenAI وLangChain.
  • الحسابات والصلاحيات — حساب لكل شخص، وصلاحيات تُمنح تجربةً تجربةً.

MLflow مقابل التتبّع اليدوي

مرّر الجدول أفقيًا

خادم MLflowدفاتر وجدول بيانات
سجلّ التجاربكل تشغيل يُسجَّل تلقائيًاما تذكّر أحدهم تدوينه
مقارنة نموذجينشاشة واحدة ومقاييس متجاورةنسخ الأرقام يدويًا
الملفات الناتجةمحفوظة مع التشغيل الذي أنشأهامبعثرة على الحواسيب
النموذج في الإنتاجإصدار واسم مستعار في السجلّملف باسم «final_v3»
العمل الجماعيخادم مشترك وحساباتتبادل الملفات

المتطلبات

يكفي خادم VPS بنظام Ubuntu 24.04 وذاكرة 2 غيغابايت للبدء؛ وخطّط لـ 4 غيغابايت ومساحة قرص أكبر إذا كنت تخزّن نماذج كثيرة، لأن الملفات الناتجة هي التي تشغل المساحة. تحتاج إلى Docker مع إضافة Compose، وإلى اسم نطاق يشير إلى الخادم، مع nginx وشهادة HTTPS: ستتصل به سكربتاتك وفريقك.

تثبيت MLflow باستخدام Docker Compose

  1. جهّز المجلد والأسرار

    أنشئ مجلد التطبيق وملف .env يحمل كلمة مرور الحساب admin ومفتاح الجلسة ونطاقك.

    mkdir -p /opt/mlflow && cd /opt/mlflow
    cat > .env <<EOF
    ADMIN_PASSWORD=$(openssl rand -hex 16)
    SECRET_KEY=$(openssl rand -hex 24)
    DOMAIN=mlflow.example.ma
    EOF
    chmod 600 .env
  2. اكتب ملف docker-compose.yml

    الصورة -full هي النسخة الرسمية التي تتضمّن وحدة المصادقة. عند التشغيل يكتب الأمر الملف basic_auth.ini الذي يعرّف الحساب admin، ولا يقبل --allowed-hosts إلا نطاقك والواجهة المحلية. لا يُنشر المنفذ إلا على الواجهة المحلية: وحده nginx يصل إليه. ويوقف MLFLOW_SERVER_ENABLE_JOB_EXECUTION=false منفّذ المهام الخلفية، المستهلك للذاكرة وغير الضروري للتتبّع.

    services:
      mlflow:
        image: ghcr.io/mlflow/mlflow:v3.18.0-full
        restart: unless-stopped
        ports:
          - "127.0.0.1:5000:5000"
        environment:
          ADMIN_PASSWORD: ${ADMIN_PASSWORD}
          DOMAIN: ${DOMAIN}
          MLFLOW_FLASK_SERVER_SECRET_KEY: ${SECRET_KEY}
          MLFLOW_AUTH_CONFIG_PATH: /mlflow/basic_auth.ini
          MLFLOW_SERVER_ENABLE_JOB_EXECUTION: "false"
        entrypoint: ["/bin/sh", "-c"]
        command:
          - >-
            mkdir -p /mlflow/artifacts &&
            printf '[mlflow]\ndefault_permission = NO_PERMISSIONS\ndatabase_uri = sqlite:////mlflow/basic_auth.db\nadmin_username = admin\nadmin_password = %s\nauthorization_function = mlflow.server.auth:authenticate_request_basic_auth\n' "$$ADMIN_PASSWORD" > /mlflow/basic_auth.ini &&
            exec mlflow server --app-name basic-auth --host 0.0.0.0 --port 5000 --workers 2
            --backend-store-uri sqlite:////mlflow/mlflow.db --artifacts-destination /mlflow/artifacts
            --allowed-hosts "$$DOMAIN,localhost:*,127.0.0.1:*"
        volumes:
          - mlflow-data:/mlflow
    
    volumes:
      mlflow-data: {}
  3. شغّل وتحقّق

    يستغرق التشغيل نحو خمس عشرة ثانية. يجيب /health دون مصادقة، أما الواجهة البرمجية فتعيد 401 دون بيانات دخول.

    docker compose up -d
    curl -fsS http://127.0.0.1:5000/health
    curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:5000/api/2.0/mlflow/experiments/search
  4. انشر عبر HTTPS باستخدام nginx

    في ملف vhost الخاص بنطاقك (بشهادة من certbot)، وجّه الطلبات إلى المنفذ المحلي مع تمرير الترويسة Host. ارفع قيمة client_max_body_size: يتجاوز نموذج مرفوع كملف الحدَّ الافتراضي بسرعة.

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 512m;
    }

دون --app-name basic-auth يبقى الخادم مفتوحًا

افتراضيًا لا يملك mlflow server أي مصادقة: يستطيع كل من يصل إلى العنوان قراءة تجاربك وتنزيل نماذجك وحذف كل شيء. أبقِ --app-name basic-auth، ولا تنشر المنفذ 5000 على عنوان IP العام أبدًا، واترك --allowed-hosts على نطاقك وحده: إنها حماية MLflow من هجمات DNS rebinding.

أرسل تجاربك من Python

ثبّت العميل (pip install mlflow) على جهاز التدريب، ثم وجّهه إلى خادمك. تُمرَّر بيانات الدخول عبر متغيّرات البيئة:

import os
import mlflow

os.environ["MLFLOW_TRACKING_USERNAME"] = "admin"
os.environ["MLFLOW_TRACKING_PASSWORD"] = "YOUR_PASSWORD"
mlflow.set_tracking_uri("https://mlflow.example.ma")
mlflow.set_experiment("churn-model")

with mlflow.start_run():
    mlflow.log_param("learning_rate", 0.01)
    mlflow.log_metric("accuracy", 0.93)
    mlflow.log_artifact("confusion_matrix.png")

يظهر التشغيل في الواجهة فورًا، بمعاملاته ومقاييسه والملف المرفوع. ويسجّل mlflow.sklearn.autolog() أو mlflow.pytorch.autolog() كل ذلك دون سطر إضافي.

تتبّع تطبيق LLM

بالنسبة لمساعد أو وكيل، يسجّل التتبّع كل طلب مع استدعاءاته للنموذج وخطواته ومدّتها. فعّل التسجيل التلقائي لمكتبتك، أو زيّن دوالك الخاصة:

import mlflow

mlflow.set_experiment("support-assistant")
mlflow.openai.autolog()   # every OpenAI client call becomes a trace

@mlflow.trace
def answer(question: str) -> str:
    ...

تظهر التتبّعات في تبويب التجربة: ترى أي استدعاء كان بطيئًا، وأي سياق أُرسل، وبماذا أجاب النموذج.

سجلّ النماذج

عندما تعتمد تجربة، سجّل نموذجها: يحصل على رقم إصدار، ويمكنك إعطاؤه اسمًا مستعارًا مثل production.

mlflow.register_model(f"runs:/{run_id}/model", "churn-model")

تحمّل خدمة الاستدلال عندها models:/churn-model@production: تغيير النموذج يعني نقل الاسم المستعار، دون لمس الشيفرة.

الحسابات والصلاحيات

ينشئ الحساب admin الحسابات الأخرى عبر الواجهة البرمجية:

curl -u admin:YOUR_PASSWORD -X POST https://mlflow.example.ma/api/2.0/mlflow/users/create \
  -H 'Content-Type: application/json' \
  -d '{"username": "sara", "password": "A_LONG_PASSWORD"}'

لا يرى الحساب الجديد أي تجربة حتى تُشارَك معه: تُمنح الصلاحيات (قراءة، تعديل، إدارة) تجربةً تجربةً ونموذجًا نموذجًا. غيّر كلمة مرور admin عبر الواجهة البرمجية users/update-password (مع تمرير القديمة في current_password)، وتبقى الجديدة محفوظة بعد إعادة التشغيل.

النسخ الاحتياطي والتحديث

تقع حالة MLflow كاملة في وحدة التخزين mlflow-data: قاعدة التجارب وقاعدة الحسابات ومجلد الملفات. انسخها احتياطيًا والحاوية متوقّفة، ثم انقل الأرشيف خارج الخادم:

cd /opt/mlflow
docker compose stop
docker run --rm -v mlflow_mlflow-data:/data -v "$PWD":/backup alpine \
  tar czf /backup/mlflow-$(date +%F).tar.gz -C /data .
docker compose start

للتحديث، اقرأ ملاحظات الإصدار أولًا — قد يرحّل التحديث مخطّط القاعدة —، وغيّر وسم الصورة في docker-compose.yml، ثم:

cd /opt/mlflow
docker compose pull && docker compose up -d
docker compose logs --tail 20

التثبيت بنقرة واحدة مع ServOrbit

تثبّت «تطبيقات بنقرة واحدة» من ServOrbit تطبيق MLflow على خادمك دون سطر أوامر: ينشر الحاوية الرسمية، ويولّد كلمة مرور الحساب admin ومفتاح الجلسة، ويفعّل المصادقة على الواجهة والواجهة البرمجية، ويحصر أسماء المضيف المقبولة في عنوانك، وينشر الخادم عبر HTTPS على نطاق فرعي من نطاقك أو على النطاق الفرعي المجاني للخادم (mlflow.{dns_slug}‎.servorbit-dns.com). تظهر كلمة المرور في مساحة العميل، ولا يبقى إلا ربط دفاترك.

تجارب تعلّم الآلة على خادمك الخاص

يكفي خادم VPS من ServOrbit بنظام Ubuntu 24.04 وذاكرة 2 غيغابايت لتشغيل MLflow. تثبيت بنقرة واحدة من مساحة العميل، وHTTPS على نطاقك أو على النطاق الفرعي المجاني للخادم، وكلمة مرور مولَّدة لك.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة