نقاط نهاية خدمة الاستعلام للنماذج المخصصة

في هذه المقالة، تعرف على كيفية تنسيق طلبات تسجيل النقاط للنموذج الذي تم تقديمه، وكيفية إرسال هذه الطلبات إلى نقطة نهاية خدمة النموذج. الإرشادات ذات صلة بخدمة النماذج المخصصة، والتي يعرفها Databricks على أنها نماذج التعلم الآلي التقليدية أو نماذج Python المخصصة المحزمة بتنسيق MLflow. يمكن تسجيلها إما في كتالوج Unity أو في سجل نموذج مساحة العمل. ومن الأمثلة على ذلك scikit-learn وXGBoost وPyTorch ونماذج محول Face Hugging. راجع خدمة النموذج مع Azure Databricks لمزيد من المعلومات حول هذه الوظيفة وفئات النموذج المدعومة.

للحصول على طلبات الاستعلام لأحمال عمل الذكاء الاصطناعي و LLM التوليدية، راجع نماذج أساسيات الاستعلام.

الاحتياجات

  • نموذج يخدم نقطة النهاية.
  • بالنسبة إلى MLflow Deployment SDK، يلزم MLflow 2.9 أو أعلى.
  • طلب تسجيل النقاط بتنسيق مقبول.
  • لإرسال طلب تسجيل من خلال واجهة برمجة تطبيقات REST أو MLflow Deployment SDK، يجب أن يكون لديك رمز مميز لواجهة برمجة تطبيقات Databricks.

هام

كأفضل ممارسة أمان لسيناريوهات الإنتاج، توصي Databricks باستخدام رموز OAuth المميزة من جهاز إلى جهاز للمصادقة أثناء الإنتاج.

للاختبار والتطوير، توصي Databricks باستخدام رمز وصول شخصي ينتمي إلى كيانات الخدمة بدلا من مستخدمي مساحة العمل. لإنشاء رموز مميزة لكيانات الخدمة، راجع إدارة الرموز المميزة لكيان الخدمة.

الاستعلام عن الأساليب والأمثلة

توفر خدمة نموذج Databricks الخيارات التالية لإرسال طلبات تسجيل النقاط إلى النماذج المقدمة:

الأسلوب التفاصيل
خدمة واجهة المستخدم حدد نقطة نهاية الاستعلام من صفحة نقطة نهاية العرض في مساحة عمل Databricks. إدراج بيانات إدخال نموذج تنسيق JSON وانقر فوق إرسال طلب. إذا كان النموذج يحتوي على مثال إدخال مسجل، فاستخدم إظهار المثال لتحميله.
واجهة برمجة تطبيقات REST استدعاء النموذج والاستعلام عليه باستخدام واجهة برمجة تطبيقات REST. راجع POST /serving-endpoints/{name}/invocations للحصول على التفاصيل. للحصول على طلبات تسجيل النقاط إلى نقاط النهاية التي تخدم نماذج متعددة، راجع الاستعلام عن نماذج فردية خلف نقطة نهاية.
MLflow Deployments SDK استخدم وظيفة predict() الخاصة ب MLflow Deployments SDK للاستعلام عن النموذج.
الدالة SQL استدعاء استدلال النموذج مباشرة من SQL باستخدام ai_query وظيفة SQL. راجع الاستعلام عن نموذج تم تقديمه باستخدام ai_query().

مثال على تسجيل نقاط Pandas DataFrame

يفترض MODEL_VERSION_URI المثال التالي مثل https://<databricks-instance>/model/iris-classifier/Production/invocations، حيث <databricks-instance> هو اسم مثيل Databricks الخاص بك، ورمز Databricks REST API المميز يسمى DATABRICKS_API_TOKEN.

راجع تنسيقات تسجيل النقاط المدعومة.

واجهة برمجة تطبيقات Rest

تسجيل نموذج يقبل تنسيق الإدخال المقسم لإطار البيانات.

curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
  -H 'Content-Type: application/json' \
  -d '{"dataframe_split": [{
     "columns": ["sepal length (cm)", "sepal width (cm)", "petal length (cm)", "petal width (cm)"],
     "data": [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2]]
    }]
  }'

تسجيل نموذج يقبل مدخلات tensor. يجب تنسيق مدخلات Tensor كما هو موضح في وثائق واجهة برمجة تطبيقات TensorFlow Serving.

curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
   -H 'Content-Type: application/json' \
   -d '{"inputs": [[5.1, 3.5, 1.4, 0.2]]}'

Mlflow deployments sdk

هام

يستخدم predict() المثال التالي واجهة برمجة التطبيقات من MLflow Deployments SDK.


import mlflow.deployments

export DATABRICKS_HOST="https://<workspace_host>.databricks.com"
export DATABRICKS_TOKEN="dapi-your-databricks-token"

client = mlflow.deployments.get_deploy_client("databricks")

response = client.predict(
            endpoint="test-model-endpoint",
            inputs={"dataframe_split": {
                    "index": [0, 1],
                    "columns": ["sepal length (cm)", "sepal width (cm)", "petal length (cm)", "petal width (cm)"],
                    "data": [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2]]
                    }
                }
           )

SQL

هام

يستخدم المثال التالي دالة SQL المضمنة، ai_query. هذه الدالة هي معاينة عامة وقد يتغير التعريف. راجع الاستعلام عن نموذج تم تقديمه باستخدام ai_query().

يستعلم المثال التالي عن النموذج خلف sentiment-analysis نقطة النهاية مع text مجموعة البيانات ويحدد نوع الإرجاع للطلب.

SELECT text, ai_query(
    "sentiment-analysis",
    text,
    returnType => "STRUCT<label:STRING, score:DOUBLE>"
  ) AS predict
FROM
  catalog.schema.customer_reviews

Powerbi

يمكنك تسجيل مجموعة بيانات في Power BI Desktop باستخدام الخطوات التالية:

  1. افتح مجموعة البيانات التي تريد تسجيلها.

  2. انتقل إلى Transform Data.

  3. انقر بزر الماوس الأيمن في اللوحة اليسرى وحدد إنشاء استعلام جديد.

  4. انتقل إلى عرض > المحرر المتقدم.

  5. استبدل نص الاستعلام بمقتطف التعليمات البرمجية أدناه، بعد ملء مناسب DATABRICKS_API_TOKEN و MODEL_VERSION_URI.

    (dataset as table ) as table =>
    let
      call_predict = (dataset as table ) as list =>
      let
        apiToken = DATABRICKS_API_TOKEN,
        modelUri = MODEL_VERSION_URI,
        responseList = Json.Document(Web.Contents(modelUri,
          [
            Headers = [
              #"Content-Type" = "application/json",
              #"Authorization" = Text.Format("Bearer #{0}", {apiToken})
            ],
            Content = {"dataframe_records": Json.FromValue(dataset)}
          ]
        ))
      in
        responseList,
      predictionList = List.Combine(List.Transform(Table.Split(dataset, 256), (x) => call_predict(x))),
      predictionsTable = Table.FromList(predictionList, (x) => {x}, {"Prediction"}),
      datasetWithPrediction = Table.Join(
        Table.AddIndexColumn(predictionsTable, "index"), "index",
        Table.AddIndexColumn(dataset, "index"), "index")
    in
      datasetWithPrediction
    
  6. قم بتسمية الاستعلام باسم النموذج المطلوب.

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

مثال إدخال Tensor

يسجل المثال التالي نموذجا يقبل مدخلات tensor. يجب تنسيق مدخلات Tensor كما هو موضح في مستندات واجهة برمجة تطبيقات TensorFlow Serving. يفترض MODEL_VERSION_URI هذا المثال مثل https://<databricks-instance>/model/iris-classifier/Production/invocations، حيث <databricks-instance> هو اسم مثيل Databricks الخاص بك، ورمز Databricks REST API المميز يسمى DATABRICKS_API_TOKEN.

curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
    -H 'Content-Type: application/json' \
    -d '{"inputs": [[5.1, 3.5, 1.4, 0.2]]}'

تنسيقات تسجيل النقاط المدعومة

بالنسبة للنماذج المخصصة، يدعم Model Serving طلبات تسجيل النقاط في إدخال Pandas DataFrame أو Tensor.

إطار بيانات Pandas

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

  • (مستحسن)dataframe_split التنسيق هو إطار بيانات Pandas متسلسل JSON في split الاتجاه.

    {
      "dataframe_split": {
        "index": [0, 1],
        "columns": ["sepal length (cm)", "sepal width (cm)", "petal length (cm)", "petal width (cm)"],
        "data": [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2]]
      }
    }
    
  • dataframe_records هو JSON-serialized Pandas DataFrame في records الاتجاه.

    إشعار

    لا يضمن هذا التنسيق الاحتفاظ بترتيب الأعمدة، ويفضل split التنسيق على records التنسيق.

    {
      "dataframe_records": [
      {
        "sepal length (cm)": 5.1,
        "sepal width (cm)": 3.5,
        "petal length (cm)": 1.4,
        "petal width (cm)": 0.2
      },
      {
        "sepal length (cm)": 4.9,
        "sepal width (cm)": 3,
        "petal length (cm)": 1.4,
        "petal width (cm)": 0.2
      },
      {
        "sepal length (cm)": 4.7,
        "sepal width (cm)": 3.2,
        "petal length (cm)": 1.3,
        "petal width (cm)": 0.2
      }
      ]
    }
    

تحتوي الاستجابة من نقطة النهاية على الإخراج من النموذج الخاص بك، متسلسلا مع JSON، ملتفا predictions في مفتاح.

{
  "predictions": [0,1,1,1,0]
}

إدخال Tensor

عندما يتوقع النموذج الخاص بك موترات، مثل نموذج TensorFlow أو Pytorch، هناك خياران للتنسيق المدعوم لإرسال الطلبات: instances و inputs.

إذا كان لديك عدة موترات مسماة لكل صف، فيجب أن يكون لديك واحد من كل موتر لكل صف.

  • instances هو تنسيق يستند إلى tensors يقبل tensors بتنسيق الصف. استخدم هذا التنسيق إذا كانت جميع موترات الإدخال لها نفس البعد 0-th. من الناحية المفاهيمية، يمكن ربط كل موتر في قائمة المثيلات بالموترات الأخرى التي تحمل نفس الاسم في بقية القائمة لإنشاء موتر الإدخال الكامل للنموذج، والذي سيكون ممكنا فقط إذا كانت جميع الشدات لها نفس البعد 0-th.

    {"instances": [ 1, 2, 3 ]}
    

    يوضح المثال التالي كيفية تحديد عدة موترات مسماة.

    {
    "instances": [
      {
       "t1": "a",
       "t2": [1, 2, 3, 4, 5],
       "t3": [[1, 2], [3, 4], [5, 6]]
      },
      {
       "t1": "b",
       "t2": [6, 7, 8, 9, 10],
       "t3": [[7, 8], [9, 10], [11, 12]]
      }
    ]
    }
    
  • inputs إرسال استعلامات مع موترات بتنسيق عمودي. يختلف هذا الطلب لأن هناك في الواقع عدد مختلف من مثيلات tensor من t2 (3) من t1 و t3، لذلك لا يمكن تمثيل هذا الإدخال بالتنسيق instances .

    {
    "inputs": {
      "t1": ["a", "b"],
      "t2": [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]],
      "t3": [[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]]
    }
    }
    

الاستجابة من نقطة النهاية بالتنسيق التالي.

{
  "predictions": [0,1,1,1,0]
}

مثال دفتر الملاحظات

راجع دفتر الملاحظات التالي للحصول على مثال حول كيفية اختبار نقطة نهاية Model Serving باستخدام نموذج Python:

اختبار نموذج تقديم دفتر ملاحظات نقطة النهاية

الحصول على دفتر الملاحظات

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