创建自定义模型服务终结点

本文介绍如何使用 Databricks 模型服务来创建为自定义模型提供服务的模型服务终结点。

该模型服务提供了下列用于为终结点创建提供服务的选项:

  • 服务 UI
  • REST API
  • MLflow 部署 SDK

若要了解如何创建为生成式 AI 模型提供服务的终结点,请参阅创建为终结点提供服务的生成式 AI 模型

要求

  • 工作区必须位于受支持的区域
  • 如果将自定义库或来自专用镜像服务器的库与模型配合使用,请在创建模型终结点之前,参阅将自定义 Python 库与模型服务配合使用
  • 若要使用 MLflow 部署 SDK 创建这些终结点,必须安装 MLflow 部署客户端。 要安装它,请运行:
import mlflow.deployments

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

访问控制

要了解模型服务终结点的访问控制选项以进行终结点管理,请参阅管理模型服务终结点的权限

还可以添加环境变量来存储模型服务的凭据。 请参阅配置从模型服务终结点对资源的访问权限

创建终结点

Serving UI

可以使用服务 UI 为模型服务创建终结点。

  1. 单击边栏中的“服务”以显示服务 UI。

  2. 单击“创建服务终结点”。

    Databricks UI 中的“模型服务”窗格

对于在工作区模型注册表或 Unity 目录中注册的模型:

  1. 在“名称”字段中,提供终结点的名称。

  2. 在“服务的实体”部分中

    1. 单击“实体”字段以打开“选择服务的实体”窗体。
    2. 选择要服务的模型类型。 窗体会根据所选内容动态更新。
    3. 选择要服务的模型和模型版本。
    4. 选择要路由到服务的模型的流量百分比。
    5. 选择要使用的计算大小。 可以将 CPU 或 GPU 计算用于工作负荷。 有关可用 GPU 计算的详细信息,请参阅 GPU 工作负载类型
    6. 选择要使用的计算大小。 可以将 CPU 或 GPU 计算用于工作负荷。 有关可用 GPU 计算的详细信息,请参阅 GPU 工作负载类型
    7. 在“计算横向扩展”下,选择计算横向扩展的大小,该大小对应于此服务的模型可以同时处理的请求数量。 此数字应大致等于 QPS x 模型运行时。
      1. 可用大小包括:(适用于 0-4 个请求)、(适用于 8-16 个请求)、(适用于 16-64 个请求)。
    8. 指明终结点是否应在不使用时缩放为零。
  3. 单击 “创建” 。 此时将显示“服务终结点”页,其中“服务终结点状态”显示为“未就绪”。

    创建模型服务终结点

REST API

可以使用 REST API 创建终结点。 有关终结点配置参数,请参阅 POST /api/2.0/serving-endpoints

以下示例创建一个终结点,该终结点为模型注册表中注册的 ads1 模型的第一个版本提供服务。 若要从 Unity Catalog 指定模型,请提供完整的模型名称,包括父目录和架构,例如 catalog.schema.example-model


POST /api/2.0/serving-endpoints

{
  "name": "workspace-model-endpoint",
  "config":
  {
    "served_entities": [
      {
        "name": "ads-entity"
        "entity_name": "my-ads-model",
        "entity_version": "3",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      },
      {
        "entity_name": "my-ads-model",
        "entity_version": "4",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      }
    ],
    "traffic_config":
    {
      "routes": [
        {
          "served_model_name": "my-ads-model-3",
          "traffic_percentage": 100
        },
        {
          "served_model_name": "my-ads-model-4",
          "traffic_percentage": 20
        }
      ]
    }
  },
  "tags": [
    {
      "key": "team",
      "value": "data science"
    }
  ]
}

以下是示例响应。 终结点的 config_update 状态为 NOT_UPDATING ,服务模型处于 READY 状态。

{
  "name": "workspace-model-endpoint",
  "creator": "user@email.com",
  "creation_timestamp": 1700089637000,
  "last_updated_timestamp": 1700089760000,
  "state": {
    "ready": "READY",
    "config_update": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "ads-entity",
        "entity_name": "my-ads-model-3",
        "entity_version": "3",
        "workload_size": "Small",
        "scale_to_zero_enabled": true,
        "workload_type": "CPU",
      "state": {
        "deployment": "DEPLOYMENT_READY",
        "deployment_state_message": ""
      },
      "creator": "user@email.com",
      "creation_timestamp": 1700089760000
      }
    ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "my-ads-model-3",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "tags": [
    {
      "key": "team",
      "value": "data science"
    }
  ],
  "id": "e3bd3e471d6045d6b75f384279e4b6ab",
  "permission_level": "CAN_MANAGE",
  "route_optimized": false
}

MLflow 部署 SDK

MLflow 部署提供用于创建、更新和删除任务的 API。 面向这些任务的 API 接受与服务终结点的 REST API 相同的参数。 有关终结点配置参数,请参阅 POST /api/2.0/serving-endpoints


from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="workspace-model-endpoint",
    config={
        "served_entities": [
            {
                "name": "ads-entity"
                "entity_name": "my-ads-model",
                "entity_version": "3",
                "workload_size": "Small",
                "scale_to_zero_enabled": true
            }
        ],
        "traffic_config": {
            "routes": [
                {
                    "served_model_name": "my-ads-model-3",
                    "traffic_percentage": 100
                }
            ]
        }
    }
)

也可执行以下操作:

GPU 工作负载类型

GPU 部署与以下包版本兼容:

  • Pytorch 1.13.0 - 2.0.1
  • TensorFlow 2.5.0 - 2.13.0
  • MLflow 2.4.0 及更高版本

若要使用 GPU 部署模型,请在创建终结点或使用 API 进行终结点配置更新时,在终结点配置中包括 workload_type 字段。 若要使用“服务”UI 为 GPU 工作负载配置终结点,请从“计算类型”下拉列表中选择所需的 GPU 类型。

{
  "served_entities": [{
    "name": "ads1",
    "entity_version": "2",
    "workload_type": "GPU_LARGE",
    "workload_size": "Small",
    "scale_to_zero_enabled": false,
  }]
}

下表汇总了支持的可用 GPU 工作负载类型。

GPU 工作负载类型 GPU 实例 GPU 内存
GPU_SMALL 1xT4 16GB
GPU_LARGE 1xA100 80GB
GPU_LARGE_2 2xA100 160GB

修改自定义模型终结点

启用自定义模型终结点后,可根据需要更新计算配置。 如果需要模型的其他资源,此配置将尤其有用。 在为模型服务分配哪些资源方面,工作负载大小和计算配置起着关键作用。

在新配置准备就绪之前,旧配置会一直为预测流量提供服务。 正在进行更新时,无法进行其他更新。 但是,可以从“服务”UI 取消正在进行的更新。

Serving UI

在启用模型终结点后,选择“编辑终结点”以修改终结点的计算配置。

您可以执行下列操作:

  • 有几个工作负载大小可供选择,并且自动缩放会在工作负载大小内自动配置。
  • 指定终结点在不使用时是否应缩减到零。
  • 修改要路由到所服务模型的流量百分比。

选择终结点详细信息页面右上方的“取消更新”可以取消正在进行的配置更新。 此功能仅在“服务”UI 中可用。

REST API

下面是使用 REST API 进行的终结点配置更新示例。 请参阅 PUT /api/2.0/service-endpoints/{name}/config


PUT /api/2.0/serving-endpoints/{name}/config

{
  "name": "unity-catalog-model-endpoint",
  "config":
  {
    "served_entities": [
      {
        "entity_name": "catalog.schema.my-ads-model",
        "entity_version": "5",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      }
    ],
    "traffic_config":
    {
      "routes": [
        {
          "served_model_name": "my-ads-model-5",
          "traffic_percentage": 100
        }
      ]
    }
  }
}

MLflow 部署 SDK

MLflow 部署 SDK 使用与 REST API 相同的参数。有关请求和响应架构详细信息,请参阅 PUT /api/2.0/serving-endpoints/{name}/config

以下代码示例使用 Unity Catalog 模型注册表中的模型:

import mlflow
from mlflow.deployments import get_deploy_client

mlflow.set_registry_uri("databricks-uc")
client = get_deploy_client("databricks")

endpoint = client.create_endpoint(
  name=f"{endpointname}",
  config={
    "served_entities": [
        {
            "entity_name": f"{catalog}.{schema}.{model_name}",
            "entity_version": "1",
            "workload_size": "Small",
            "scale_to_zero_enabled": True
        }
    ],
    "traffic_config": {
        "routes": [
            {
                "served_model_name": f"{model_name}-1",
                "traffic_percentage": 100
            }
        ]
    }
  }
)

为模型终结点评分

若要为模型评分,可以将请求发送到模型服务终结点。

其他资源

笔记本示例

以下笔记本包含可用于启动和运行模型服务终结点的不同 Databricks 注册模型。

可以按照导入笔记本中的说明将模型示例导入工作区。 从其中一个示例中选择并创建模型后, 将其注册到 Unity 目录中,然后按照 模型服务的 UI 工作流 步骤进行操作。

为模型服务笔记本训练和注册 scikit-learn 模型

获取笔记本

为模型服务笔记本训练和注册 HuggingFace 模型

获取笔记本