创建基础模型服务终结点

在本文中,你将了解如何创建为基础模型提供服务的模型服务终结点。

Databricks 模型服务支持以下基础模型:

  • 基础模型 API 提供的最先进的开放模型。 这些模型是支持优化推理的特选基础模型体系结构。 Llama-2-70B-chat、BGE-Large 和 Mistral-7B 等基本模型可按每标记付费定价立即使用。 使用基本模型或微调模型的生产工作负载可使用预配的吞吐量进行部署,并保证性能
  • 外部模型。 这些模型托管在 Databricks 外部。 可以集中管理为外部模型提供服务的终结点,客户可以为其建立速率限制和访问控制。 示例包括 OpenAI 的 GPT-4、Anthropic 的 Claude 等基础模型。

模型服务为模型服务终结点创建提供了以下选项:

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

若要创建为传统 ML 或 Python 模型提供服务的终结点,请参阅创建自定义模型服务终结点

要求

  • Databricks 工作区位于受支持的区域中。
  • 若要使用 MLflow 部署 SDK 创建终结点,必须安装 MLflow 部署客户端。 要安装它,请运行:
import mlflow.deployments

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

创建基础模型服务终结点

下面介绍如何创建一个终结点,服务于使用 Databricks 外部模型提供的基础模型。 有关服务于使用基础模型 API 提供的模型的微调变体的终结点,请参阅使用 REST API 创建预配的吞吐量终结点

服务 UI

  1. 在“名称”字段中,提供终结点的名称。
  2. 在“服务的实体”部分中
    1. 单击“实体”字段以打开“选择服务的实体”窗体。
    2. 选择“外部模型”。
    3. 选择想要使用的模型提供程序。
    4. 单击“确认”
    5. 提供想要使用的外部模型的名称。 窗体会根据所选内容动态更新。 请参阅可用的外部模型
    6. 选择任务类型。 提供的任务有聊天、完成和嵌入。
    7. 提供用于访问所选模型提供程序的配置详情。 这通常是引用你希望终结点用来访问此模型的个人访问令牌的机密。
  3. 单击 “创建” 。 此时将显示“服务终结点”页,其中“服务终结点状态”显示为“未就绪”。

创建模型服务终结点

REST API

重要

用于创建为服务基础模型提供服务的服务终结点的 REST API 参数目前为公共预览版

以下示例创建一个终结点,该终结点提供 OpenAI 提供的 text-embedding-ada-002 模型的第一个版本。

有关终结点配置参数,请参阅 POST /api/2.0/serving-endpoints

{
  "name": "openai_endpoint",
  "config":{
    "served_entities": [
      {
        "name": "openai_embeddings",
        "external_model":{
          "name": "text-embedding-ada-002",
          "provider": "openai",
          "task": "llm/v1/embeddings",
          "openai_config":{
            "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
          }
        }
      }
    ]
  },
  "rate_limits": [
    {
      "calls": 100,
      "key": "user",
      "renewal_period": "minute"
    }
  ],
  "tags": [
    {
      "key": "team",
      "value": "gen-ai"
    }
  ]
}

以下是示例响应。

{
  "name": "openai_endpoint",
  "creator": "user@email.com",
  "creation_timestamp": 1699617587000,
  "last_updated_timestamp": 1699617587000,
  "state": {
    "ready": "READY"
  },
  "config": {
    "served_entities": [
      {
        "name": "openai_embeddings",
        "external_model": {
          "provider": "openai",
          "name": "text-embedding-ada-002",
          "task": "llm/v1/embeddings",
          "openai_config": {
            "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
          }
        },
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "user@email.com",
        "creation_timestamp": 1699617587000
      }
  ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "openai_embeddings",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "tags": [
    {
      "key": "team",
      "value": "gen-ai"
    }
  ],
  "id": "69962db6b9db47c4a8a222d2ac79d7f8",
  "permission_level": "CAN_MANAGE",
  "route_optimized": false
}

MLflow 部署 SDK

以下内容使用 OpenAI text-embedding-ada-002 创建了一个用于签入的终结点。

对于基础模型终结点,必须为要使用的模型提供程序提供 API 密钥。 有关请求和响应架构的详细信息,请参阅 REST API 中的 POST /api/2.0/serving-endpoints

还可以根据配置的 external_model 部分中 task 字段所述,为完成和聊天任务创建终结点。 有关每个任务支持的模型和提供程序,请参阅 Databricks 模型服务中的外部模型


from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="chat",
    config={
        "served_entities": [
            {
                "name": "completions",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/scope/key}}",
                    },
                },
            }
        ],
    },
)
assert endpoint == {
    "name": "chat",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
}

更新基础模型终结点

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

在新配置准备就绪之前,旧配置会一直为预测流量提供服务。 正在进行更新时,无法进行其他更新。 在“服务”UI 中,可以通过选择终结点详细信息页面右上角的“取消更新”来取消正在进行的配置更新。 此功能仅在“服务”UI 中可用。

当终结点配置中存在 external_model 时,服务实体列表只能有一个 served_entity 对象。 具有 external_model 的现有终结点无法更新,不再具有 external_model。 如果在没有 external_model 的情况下创建终结点,则无法对其进行更新以添加 external_model

REST API

若要更新基础模型终结点,请参阅 REST API 更新配置文档,了解有关请求和响应架构的详细信息。

{
  "name": "openai_endpoint",
  "served_entities":[
    {
      "name": "openai_chat",
      "external_model":{
        "name": "gpt-4",
        "provider": "openai",
        "task": "llm/v1/chat",
        "openai_config":{
          "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
        }
      }
    }
  ]
}

MLflow 部署 SDK

若要更新基础模型终结点,请参阅 REST API 更新配置文档,了解有关请求和响应架构的详细信息。

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.update_endpoint(
    endpoint="chat",
    config={
        "served_entities": [
            {
                "name": "chats",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/scope/key}}",
                    },
                },
            }
        ],
    },
)
assert endpoint == {
    "name": "chats",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
  }

rate_limits = client.update_endpoint(
    endpoint="chat",
    config={
        "rate_limits": [
            {
                "key": "user",
                "renewal_period": "minute",
                "calls": 10,
            }
        ],
    },
)
assert rate_limits == {
    "rate_limits": [
        {
            "key": "user",
            "renewal_period": "minute",
            "calls": 10,
        }
    ],
}

其他资源