创建生成式 AI 模型服务终结点
在本文中,你将了解如何创建部署生成式 AI 模型并为其提供服务的模型服务终结点。
Mosaic AI 模型服务支持以下模型:
外部模型。 这些是在 Databricks 外部托管的生成式模型。 可以集中管理为外部模型提供服务的终结点,客户可以为其建立速率限制和访问控制。 示例包括 OpenAI 的 GPT-4、Anthropic 的 Claude 等生成式 AI 模型。
由基础模型 API 提供的最先进的开放基础模型。 这些模型是支持优化推理的特选基础模型体系结构。 基本模型(如 Meta-Llama-3.1-70B-Instruct、GTE-Large 和 Mistral-7B)可用于立即用于 按令牌 付费定价。 使用基本模型或微调模型的生产工作负载可使用预配的吞吐量进行部署,并保证性能。
模型服务为模型服务终结点创建提供了以下选项:
- 服务 UI
- REST API
- MLflow 部署 SDK
若要创建为传统 ML 或 Python 模型提供服务的终结点,请参阅创建自定义模型服务终结点。
要求
- Databricks 工作区位于受支持的区域中。
- 若要使用 MLflow 部署 SDK 创建终结点,必须安装 MLflow 部署客户端。 要安装它,请运行:
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
创建基础模型服务终结点
可以创建一个终结点,该终结点服务于使用基础模型 API 预配吞吐量提供的基础模型的微调变体。 请参阅使用 REST API 创建预配吞吐量终结点。
对于使用基础模型 API 提供的基础模型(按令牌付费),Databricks 会自动提供特定终结点,以访问 Databricks 工作区中支持的模型。 若要访问这些模型,请选择工作区左侧栏中的“服务”选项卡。 基础模型 API 位于终结点列表视图的顶部。
有关查询这些终结点,请参阅 查询生成 AI 模型。
创建外部模型服务终结点
下面介绍如何创建一个终结点,服务于使用 Databricks 外部模型提供的生成式 AI 模型。
Serving UI
- 在“名称”字段中,提供终结点的名称。
- 在“服务的实体”部分中
- 单击 “创建” 。 此时将显示“服务终结点”页,其中“服务终结点状态”显示为“未就绪”。
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。 有关分步指南,请参阅教程:创建外部模型终结点以查询 OpenAI 模型。
还可以根据配置的 external_model
部分中 task
字段所述,为完成和聊天任务创建终结点。 有关每个任务支持的模型和提供程序,请参阅 Mosaic AI Model Serving 中的外部模型。
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,
}
],
}