توزيع نماذج مخصصة

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

ما هي النماذج المخصصة؟

يمكن لخدمة النموذج نشر أي نموذج Python كواجهة برمجة تطبيقات على مستوى الإنتاج. تشير Databricks إلى نماذج مثل النماذج المخصصة. يمكن تدريب نماذج التعلم الآلي هذه باستخدام مكتبات التعلم الآلي القياسية مثل scikit-learn وXGBoost وPyTorch ومحولات HuggingFace ويمكن أن تتضمن أي رمز Python.

لنشر نموذج مخصص،

  1. سجل النموذج أو التعليمات البرمجية بتنسيق MLflow، باستخدام نكهات MLflow المضمنة الأصلية أو pyfunc.
  2. بعد تسجيل النموذج، قم بتسجيله في كتالوج Unity (مستحسن) أو سجل مساحة العمل.
  3. من هنا، يمكنك إنشاء نموذج يخدم نقطة نهاية لنشر النموذج الخاص بك والاستعلام عنه.
    1. راجع إنشاء نقاط نهاية خدمة نموذج مخصص
    2. راجع نقاط نهاية خدمة الاستعلام للنماذج المخصصة.

للحصول على برنامج تعليمي كامل حول كيفية خدمة النماذج المخصصة على Databricks، راجع البرنامج التعليمي لخدمة النموذج.

يدعم Databricks أيضا خدمة النماذج الأساسية لتطبيقات الذكاء الاصطناعي التوليدية، راجع واجهات برمجة تطبيقات نموذج المؤسسة والنماذج الخارجية للنماذج المدعومة وعروض الحوسبة.

هام

إذا كنت تعتمد على Anaconda، فراجع إشعار شروط الخدمة للحصول على معلومات إضافية.

نماذج التعلم الآلي من السجل

هناك طرق مختلفة لتسجيل نموذج التعلم الآلي الخاص بك لخدمة النموذج. تلخص القائمة التالية الأساليب والأمثلة المدعومة.

  • التسجيل التلقائي يتم تمكين هذا الأسلوب تلقائيا عند استخدام Databricks Runtime ل ML.

    import mlflow
    from sklearn.ensemble import RandomForestRegressor
    from sklearn.datasets import load_iris
    
    iris = load_iris()
    model = RandomForestRegressor()
    model.fit(iris.data, iris.target)
    
  • سجل باستخدام نكهات MLflow المضمنة. يمكنك استخدام هذا الأسلوب إذا كنت تريد تسجيل النموذج يدويا للحصول على تحكم أكثر تفصيلا.

    import mlflow
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.datasets import load_iris
    
    iris = load_iris()
    model = RandomForestClassifier()
    model.fit(iris.data, iris.target)
    
    with mlflow.start_run():
        mlflow.sklearn.log_model(model, "random_forest_classifier")
    
  • تسجيل مخصص باستخدام pyfunc. يمكنك استخدام هذا الأسلوب لنشر نماذج التعليمات البرمجية python العشوائية أو نشر تعليمات برمجية إضافية جنبا إلى جنب مع النموذج الخاص بك.

      import mlflow
      import mlflow.pyfunc
    
      class Model(mlflow.pyfunc.PythonModel):
          def predict(self, context, model_input):
              return model_input * 2
    
      with mlflow.start_run():
          mlflow.pyfunc.log_model("custom_model", python_model=Model())
    

أمثلة التوقيع والإدخل

يوصى بإضافة توقيع ومثال إدخال إلى MLflow. التواقيع ضرورية لتسجيل النماذج في كتالوج Unity.

فيما يلي مثال على التوقيع:

from mlflow.models.signature import infer_signature

signature = infer_signature(training_data, model.predict(training_data))
mlflow.sklearn.log_model(model, "model", signature=signature)

فيما يلي مثال على الإدخال:


input_example = {"feature1": 0.5, "feature2": 3}
mlflow.sklearn.log_model(model, "model", input_example=input_example)

نوع الحساب

إشعار

خدمة نموذج GPU في المعاينة العامة.

توفر خدمة نموذج Databricks مجموعة متنوعة من خيارات وحدة المعالجة المركزية (CPU) وGPU لنشر النموذج الخاص بك. عند النشر باستخدام وحدة معالجة الرسومات، من الضروري التأكد من إعداد التعليمات البرمجية الخاصة بك بحيث يتم تشغيل التنبؤات على وحدة معالجة الرسومات، باستخدام الأساليب التي يوفرها إطار العمل الخاص بك. يقوم MLflow بذلك تلقائيا للنماذج المسجلة باستخدام نكهات PyTorch أو المحولات.

نوع حمل العمل مثيل وحدة معالجة الرسومات الذاكرة
CPU 4 غيغابايت لكل تزامن
GPU_SMALL 1xT4 16 غيغابايت
GPU_LARGE 1xA100 80gb
GPU_LARGE_2 2xA100 160gb

حاوية النشر والتبعيات

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

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

تبعيات الحزمة والرمز

يمكن إضافة مكتبات مخصصة أو خاصة إلى التوزيع. راجع استخدام مكتبات Python المخصصة مع خدمة النموذج.

بالنسبة لنماذج النكهة الأصلية MLflow، يتم التقاط تبعيات الحزمة الضرورية تلقائيا.

بالنسبة للنماذج المخصصة pyfunc ، يمكن إضافة التبعيات بشكل صريح.

يمكنك إضافة تبعيات الحزمة باستخدام:

  • المعلمة pip_requirements :

    mlflow.sklearn.log_model(model, "sklearn-model", pip_requirements = ["scikit-learn", "numpy"])
    
  • المعلمة conda_env :

    
    conda_env = {
        'channels': ['defaults'],
        'dependencies': [
            'python=3.7.0',
            'scikit-learn=0.21.3'
        ],
        'name': 'mlflow-env'
    }
    
    mlflow.sklearn.log_model(model, "sklearn-model", conda_env = conda_env)
    
  • لتضمين متطلبات إضافية تتجاوز ما يتم التقاطه تلقائيا، استخدم extra_pip_requirements.

    mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements = ["sklearn_req"])
    

إذا كان لديك تبعيات التعليمات البرمجية، يمكن تحديدها باستخدام code_path.

  mlflow.sklearn.log_model(model, "sklearn-model", code_path=["path/to/helper_functions.py"],)

التحقق من صحة التبعية

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

هناك اثنين من واجهات برمجة التطبيقات للتحقق من صحة ما قبل التوزيع واجهة برمجة تطبيقات MLflow Python وMLflow CLI.

يمكنك تحديد ما يلي باستخدام أي من واجهات برمجة التطبيقات هذه.

  • model_uri النموذج الذي يتم نشره لخدمة النموذج.
  • أحد الإجراءات التالية:
    • input_data بالتنسيق المتوقع لاستدعاء mlflow.pyfunc.PyFuncModel.predict() النموذج.
    • input_path الذي يعرف ملفا يحتوي على بيانات الإدخال التي سيتم تحميلها واستخدامها لاستدعاء إلى predict.
  • في content_typecsv أو json تنسيق.
  • اختياري output_path لكتابة التنبؤات إلى ملف. إذا حذفت هذه المعلمة، تتم طباعة التنبؤات إلى stdout.
  • مدير بيئة، ، env_managerيستخدم لبناء البيئة لخدمة:
    • الافتراضي هو virtualenv. يوصى به لخدمة التحقق من الصحة.
    • local متوفر، ولكن يحتمل أن يكون عرضة للخطأ لخدمة التحقق من الصحة. تستخدم بشكل عام فقط لتصحيح الأخطاء السريع.
  • ما إذا كنت تريد تثبيت الإصدار الحالي من MLflow الموجود في بيئتك مع البيئة الظاهرية باستخدام install_mlflow. يتم تعيين هذا الإعداد افتراضيا إلى False.
  • ما إذا كان يجب تحديث واختبار إصدارات مختلفة من تبعيات الحزمة لاستكشاف الأخطاء وإصلاحها أو تصحيح الأخطاء. يمكنك تحديد هذا كقائمة من تجاوزات تبعية السلسلة أو الإضافات باستخدام وسيطة التجاوز، pip_requirements_override.

على سبيل المثال:

import mlflow

run_id = "..."
model_uri = f"runs:/{run_id}/model"

mlflow.models.predict(
  model_uri=model_uri,
  input_data={"col1": 34.2, "col2": 11.2, "col3": "green"},
  content_type="json",
  env_manager="virtualenv",
  install_mlflow=False,
  pip_requirements_override=["pillow==10.3.0", "scipy==1.13.0"],
)

تحديثات التبعية

إذا كانت هناك أي مشكلات في التبعيات المحددة مع نموذج مسجل، يمكنك تحديث المتطلبات باستخدام MLflow CLI أو mlflow.models.model.update_model_requirements() في واجهة برمجة تطبيقات MLflow Python دون الحاجة إلى تسجيل نموذج آخر.

يوضح المثال التالي كيفية تحديث pip_requirements.txt النموذج المسجل في مكانه.

يمكنك تحديث التعريفات الموجودة بإصدارات حزمة محددة أو إضافة متطلبات غير موجودة إلى pip_requirements.txt الملف. يقع هذا الملف ضمن البيانات الاصطناعية لنموذج MLflow في الموقع المحدد model_uri .

from mlflow.models.model import update_model_requirements

update_model_requirements(
  model_uri=model_uri,
  operation="add",
  requirement_list=["pillow==10.2.0", "scipy==1.12.0"],
)

التوقعات والقيود

تصف الأقسام التالية التوقعات والقيود المعروفة لخدمة النماذج المخصصة باستخدام خدمة النموذج.

توقعات إنشاء نقطة النهاية وتحديثها

إشعار

لا تنطبق المعلومات الموجودة في هذا القسم على نقاط النهاية التي تخدم نماذج الأساس.

يتضمن نشر إصدار نموذج مسجل حديثا حزم النموذج وبيئة النموذج الخاصة به وتوفير نقطة نهاية النموذج نفسه. قد تستغرق هذه العملية حوالي 10 دقائق.

يقوم Azure Databricks بإجراء تحديث لنقاط النهاية دون توقف عن العمل عن طريق الاحتفاظ بتكوين نقطة النهاية الحالية حتى تصبح نقطة النهاية الجديدة جاهزة. يؤدي القيام بذلك إلى تقليل مخاطر الانقطاع لنقاط النهاية قيد الاستخدام.

إذا استغرق حساب النموذج أكثر من 120 ثانية، فستنفد مهلة الطلبات. إذا كنت تعتقد أن حساب النموذج الخاص بك سيستغرق أكثر من 120 ثانية، فتواصل مع فريق حساب Azure Databricks.

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

توقعات تحجيم نقطة النهاية

إشعار

لا تنطبق المعلومات الموجودة في هذا القسم على نقاط النهاية التي تخدم نماذج الأساس.

يتم توسيع نطاق خدمة نقاط النهاية تلقائيا استنادا إلى حركة المرور وسعة وحدات التزامن المتوفرة.

  • التزامن المقدم: الحد الأقصى لعدد الطلبات المتوازية التي يمكن للنظام التعامل معها. تقدير التزامن المطلوب باستخدام الصيغة: التزامن المقدم = الاستعلامات في الثانية (QPS) * وقت تنفيذ النموذج (s).
  • سلوك التحجيم: يتم توسيع نطاق نقاط النهاية على الفور تقريبا مع زيادة نسبة استخدام الشبكة وتقليلها كل خمس دقائق لمطابقة نسبة استخدام الشبكة المنخفضة.
  • المقياس إلى الصفر: يمكن أن تتدرج نقاط النهاية إلى الصفر بعد 30 دقيقة من عدم النشاط. يواجه الطلب الأول بعد التحجيم إلى الصفر "بداية باردة"، مما يؤدي إلى زمن انتقال أعلى. بالنسبة للتطبيقات الحساسة لزمن الانتقال، ضع في اعتبارك استراتيجيات لإدارة هذه الميزة بفعالية.

قيود حمل عمل GPU

فيما يلي قيود لخدمة نقاط النهاية مع أحمال عمل GPU:

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

تحديث ترخيص Anaconda

الإشعار التالي مخصص للعملاء الذين يعتمدون على Anaconda.

هام

تحديث Anaconda Inc. لشروط الخدمة الخاصة بهم لقنوات anaconda.org. بناء على شروط الخدمة الجديدة، قد تحتاج إلى ترخيص تجاري إذا كنت تعتمد على حزم وتوزيع Anaconda. راجع الأسئلة المتداولة حول Anaconda Commercial Edition لمزيد من المعلومات. يخضع استخدامك لأي قنوات Anaconda لشروط الخدمة الخاصة بها.

تم تسجيل نماذج MLflow التي تم تسجيلها قبل الإصدار 1.18 (Databricks Runtime 8.3 ML أو إصدار سابق) بشكل افتراضي باستخدام قناة conda defaults (https://repo.anaconda.com/pkgs/) كتبعية. وبسبب تغيير الترخيص هذا، أوقف Databricks استخدام القناة defaults للنماذج التي تم تسجيلها باستخدام MLflow v1.18 وما فوق. القناة الافتراضية المسجلة هي الآن conda-forge، والتي تشير إلى المجتمع المدار https://conda-forge.org/.

إذا قمت بتسجيل نموذج قبل MLflow v1.18 دون استبعاد defaults القناة من بيئة conda للنموذج، فقد يكون لهذا النموذج تبعية على القناة defaults التي قد لا تكون قد قصدتها. لتأكيد ما إذا كان النموذج يحتوي على هذه التبعية يدويا، يمكنك فحص channel القيمة في conda.yaml الملف الذي تم حزمه مع النموذج المسجل. على سبيل المثال، قد يبدو النموذج conda.yaml مع defaults تبعية القناة كما يلي:

channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
    - mlflow
    - scikit-learn==0.23.2
    - cloudpickle==1.6.0
      name: mlflow-env

نظرا لأن Databricks لا يمكنها تحديد ما إذا كان استخدامك لمستودع Anaconda للتفاعل مع نماذجك مسموحا به في إطار علاقتك ب Anaconda، فإن Databricks لا يجبر عملائها على إجراء أي تغييرات. إذا كان استخدامك Anaconda.com repo من خلال استخدام Databricks مسموحا به بموجب شروط Anaconda، فلن تحتاج إلى اتخاذ أي إجراء.

إذا كنت ترغب في تغيير القناة المستخدمة في بيئة النموذج، يمكنك إعادة تسجيل النموذج في سجل النموذج باستخدام جديد conda.yaml. يمكنك القيام بذلك عن طريق تحديد القناة في معلمة conda_envlog_model().

لمزيد من المعلومات حول log_model() واجهة برمجة التطبيقات، راجع وثائق MLflow لنكهة النموذج التي تعمل معها، على سبيل المثال، log_model ل scikit-learn.

لمزيد من المعلومات حول conda.yaml الملفات، راجع وثائق MLflow.

الموارد الإضافية