向模型服务终结点提供多个模型

本文介绍如何向使用 Azure Databricks 模型服务的服务终结点提供多个模型。

要求

请查看有关创建模型服务终结点的要求

若要了解模型服务终结点的访问控制选项以及终结点管理的最佳做法指南,请参阅服务终结点 ACL

创建终结点并设置初始流量拆分

可以使用 Databricks 机器学习 API 创建模型服务终结点。 终结点可为任何在模型注册表中注册的 Python MLflow 模型提供服务。

下面的 API 示例会创建具有两个模型的单个终结点,并在这些模型之间设置终结点流量拆分。 服务模型 current 托管版本 1 的 model-A 并获取 90% 的终结点流量,而另一个服务模型 challenger 托管版本 1 的 model-B 并获取 10% 的终结点流量。

POST /api/2.0/serving-endpoints

{
   "name":"multi-model"
   "config":{
      "served_entities":[
         {
            "name":"current",
            "entity_name":"model-A",
            "entity_version":"1",
            "workload_size":"Small",
            "scale_to_zero_enabled":true
         },
         {
            "name":"challenger",
            "entity_name":"model-B",
            "entity_version":"1",
            "workload_size":"Small",
            "scale_to_zero_enabled":true
         }
      ],
      "traffic_config":{
         "routes":[
            {
               "served_model_name":"current",
               "traffic_percentage":"90"
            },
            {
               "served_model_name":"challenger",
               "traffic_percentage":"10"
            }
         ]
      }
   }
}

更新服务模型之间的流量拆分

还可更新服务模型之间的流量拆分。 下面的 API 示例将服务模型 current 设置为获取 50% 的终结点流量,将另一个模型 challenger 设置为获取剩余 50% 的流量。

还可使用“编辑配置”按钮,通过 Databricks 机器学习 UI 中的“服务”选项卡进行此更新。

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

{
   "served_entities":[
      {
         "name":"current",
         "entity_name":"model-A",
         "entity_version":"1",
         "workload_size":"Small",
         "scale_to_zero_enabled":true
      },
      {
         "name":"challenger",
         "entity_name":"model-B",
         "entity_version":"1",
         "workload_size":"Small",
         "scale_to_zero_enabled":true
      }
   ],
   "traffic_config":{
      "routes":[
         {
            "served_model_name":"current",
            "traffic_percentage":"50"
         },
         {
            "served_model_name":"challenger",
            "traffic_percentage":"50"
         }
      ]
   }
}

查询终结点后面的单个模型

在某些情况下,可能需要查询终结点后面的单个模型。

为此,可使用以下内容:

POST /serving-endpoints/{endpoint-name}/served-models/{served-model-name}/invocations

此处查询特定的服务模型。 请求格式与查询终结点的格式相同。 查询单个服务模型时,会忽略流量设置。

multi-model 终结点示例的上下文中,如果所有请求都发送到 /serving-endpoints/multi-model/served-models/challenger/invocations,则所有请求都由 challenger 服务模型提供服务。

笔记本:将多个模型打包到一个模型中

为了节省计算成本,还可以将多个模型打包到一个模型中。

将多个 MLflow 模型打包到一个 MLflow 模型笔记本中

获取笔记本