مشاركة عبر


إدارة نقاط نهاية خدمة النموذج

توضح هذه المقالة كيفية إدارة نقاط نهاية خدمة النموذج باستخدام واجهة مستخدم الخدمة وواجهة برمجة تطبيقات REST. راجع تقديم نقاط النهاية في مرجع واجهة برمجة تطبيقات REST.

لإنشاء نقاط نهاية خدمة النموذج، استخدم أحد الإجراءات التالية:

الحصول على حالة نقطة نهاية النموذج

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

يمكنك استخدام التحقق من حالة نقطة النهاية وتفاصيلها برمجيا باستخدام REST API أو MLflow Deployments SDK

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

GET /api/2.0/serving-endpoints/{name}

ينشئ المثال التالي نقطة نهاية تخدم الإصدار الأول من my-ads-model النموذج المسجل في سجل نموذج كتالوج Unity. يجب توفير اسم النموذج الكامل بما في ذلك الكتالوج الأصلي والمخطط مثل . catalog.schema.example-model

في مثال الاستجابة state.ready التالي، يكون الحقل "READY"، مما يعني أن نقطة النهاية جاهزة لتلقي نسبة استخدام الشبكة. الحقل state.update_state هو NOT_UPDATING ولم pending_config يعد يتم إرجاعه لأنه تم الانتهاء من التحديث بنجاح.

{
  "name": "unity-model-endpoint",
  "creator": "customer@example.com",
  "creation_timestamp": 1666829055000,
  "last_updated_timestamp": 1666829055000,
  "state": {
    "ready": "READY",
    "update_state": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "my-ads-model",
        "entity_name": "myCatalog.mySchema.my-ads-model",
        "entity_version": "1",
        "workload_size": "Small",
        "scale_to_zero_enabled": false,
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "customer@example.com",
        "creation_timestamp": 1666829055000
      }
    ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "my-ads-model",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "permission_level": "CAN_MANAGE"
}

MLflow Deployments SDK

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.get_endpoint(endpoint="chat")
assert endpoint == {
    "name": "chat",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
}

إيقاف نقطة نهاية خدمة نموذج

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

يمكنك إيقاف نقطة نهاية من صفحة تفاصيل نقطة النهاية في واجهة مستخدم الخدمة .

  1. انقر فوق نقطة النهاية التي تريد إيقافها.
  2. انقر فوق إيقاف في الزاوية العلوية اليسرى.

بدلا من ذلك، يمكنك إيقاف نقطة نهاية خدمة برمجيا باستخدام واجهة برمجة تطبيقات REST كما يلي:

POST /api/2.0/serving-endpoints/{name}/config:stop

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

  1. انقر فوق نقطة النهاية التي تريد بدء تشغيلها.
  2. انقر فوق بدء في الزاوية العلوية اليسرى.

بدلا من ذلك، يمكنك بدء نقطة نهاية خدمة متوقفة برمجيا باستخدام واجهة برمجة تطبيقات REST كما يلي:

POST /api/2.0/serving-endpoints/{name}/config:start

حذف نقطة نهاية خدمة نموذج

لتعطيل الخدمة لنموذج، يمكنك حذف نقطة النهاية التي يتم تقديمها عليه.

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

  1. انقر فوق تقديم على الشريط الجانبي.
  2. انقر فوق نقطة النهاية التي تريد حذفها.
  3. انقر فوق قائمة kebab في الأعلى وحدد Delete.

بدلا من ذلك، يمكنك حذف نقطة نهاية خدمة برمجيا باستخدام REST API أو MLflow Deployments SDK

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

DELETE /api/2.0/serving-endpoints/{name}

MLflow Deployments SDK

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
client.delete_endpoint(endpoint="chat")

تصحيح أخطاء نقطة نهاية خدمة النموذج

لتصحيح أي مشكلات في نقطة النهاية، يمكنك إحضار:

  • سجلات إنشاء حاوية خادم النموذج
  • سجلات خادم النموذج

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

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


GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/build-logs
{
  “config_version”: 1  // optional
}

بالنسبة لسجلات خادم النموذج لنموذج خدمة، يمكنك استخدام الطلب التالي:


GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/logs

{
  “config_version”: 1  // optional
}

إدارة الأذونات على نقطة نهاية خدمة النموذج

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

احصل على قائمة الأذونات على نقطة نهاية الخدمة.

databricks permissions get servingendpoints <endpoint-id>

منح المستخدم jsmith@example.com إذن CAN QUERY على نقطة نهاية الخدمة.

databricks permissions update servingendpoints <endpoint-id> --json '{
  "access_control_list": [
    {
      "user_name": "jsmith@example.com",
      "permission_level": "CAN_QUERY"
    }
  ]
}'

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

الحصول على نموذج يقدم مخطط نقطة النهاية

هام

يتوفر دعم لخدمة مخططات استعلام نقطة النهاية في المعاينة العامة. تتوفر هذه الوظيفة في مناطق خدمة النموذج.

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

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

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

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


ACCESS_TOKEN="<endpoint-token>"
ENDPOINT_NAME="<endpoint name>"

curl "https://example.databricks.com/api/2.0/serving-endpoints/$ENDPOINT_NAME/openapi" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json"

تفاصيل استجابة المخطط

الاستجابة هي مواصفات OpenAPI بتنسيق JSON، وعادة ما تتضمن حقولا مثل openapiو infoservers و.paths نظرا لأن استجابة المخطط هي كائن JSON، يمكنك تحليله باستخدام لغات البرمجة الشائعة، وإنشاء تعليمة برمجية للعميل من المواصفات باستخدام أدوات الجهات الخارجية. يمكنك أيضا تصور مواصفات OpenAPI باستخدام أدوات تابعة لجهة خارجية مثل Swagger Editor.

وتشمل الحقول الرئيسية للاستجابة ما يلي:

  • info.title يعرض الحقل اسم نقطة نهاية العرض.
  • servers يحتوي الحقل دائما على كائن واحد، عادة ما url يكون الحقل الذي هو عنوان URL الأساسي لنقطة النهاية.
  • paths يحتوي الكائن في الاستجابة على كافة المسارات المدعومة لنقطة نهاية. المفاتيح في الكائن هي عنوان URL للمسار. يمكن لكل path منها دعم تنسيقات متعددة من المدخلات. يتم سرد هذه الإدخالات في oneOf الحقل.

فيما يلي مثال على استجابة مخطط نقطة النهاية:


{
  "openapi": "3.1.0",
  "info": {
    "title": "example-endpoint",
    "version": "2"
  },
  "servers": [{ "url": "https://example.databricks.com/serving-endpoints/example-endpoint"}],
  "paths": {
    "/served-models/vanilla_simple_model-2/invocations": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "dataframe_split": {
                        "type": "object",
                        "properties": {
                          "columns": {
                            "description": "required fields: int_col",
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "int_col",
                                "float_col",
                                "string_col"
                              ]
                            }
                          },
                          "data": {
                            "type": "array",
                            "items": {
                              "type": "array",
                              "prefixItems": [
                                {
                                  "type": "integer",
                                  "format": "int64"
                                },
                                {
                                  "type": "number",
                                  "format": "double"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            }
                          }
                        }
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "sentiment": {
                            "type": "number",
                            "format": "double",
                            "default": "0.5"
                          }
                        }
                      }
                    },
                    "examples": [
                      {
                        "columns": [
                          "int_col",
                          "float_col",
                          "string_col"
                        ],
                        "data": [
                          [
                            3,
                            10.4,
                            "abc"
                          ],
                          [
                            2,
                            20.4,
                            "xyz"
                          ]
                        ]
                      }
                    ]
                  },
                  {
                    "type": "object",
                    "properties": {
                      "dataframe_records": {
                        "type": "array",
                        "items": {
                          "required": [
                            "int_col",
                            "float_col",
                            "string_col"
                          ],
                          "type": "object",
                          "properties": {
                            "int_col": {
                              "type": "integer",
                              "format": "int64"
                            },
                            "float_col": {
                              "type": "number",
                              "format": "double"
                            },
                            "string_col": {
                              "type": "string"
                            },
                            "becx_col": {
                              "type": "object",
                              "format": "unknown"
                            }
                          }
                        }
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "sentiment": {
                            "type": "number",
                            "format": "double",
                            "default": "0.5"
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "predictions": {
                      "type": "array",
                      "items": {
                        "type": "number",
                        "format": "double"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}