將多個模型服務至服務端點的模型
本文說明如何以程式設計方式設定服務端點的模型,以提供多個模型,以及它們之間的流量分割。
從單一端點提供多個模型可讓您分割不同模型之間的流量,以比較其效能並加速 A/B 測試。 您也可以同時提供不同版本的模型,讓試驗新版本更容易,同時將目前的版本保留在生產環境中。
您可以在馬賽克 AI 模型服務端點上提供下列任何模型類型。 您無法在單一端點中提供不同的模型類型。 例如,您無法在相同的端點中提供自定義模型和外部模型。
- 自訂模型
- 透過基礎模型 API 布建輸送量提供的行用 AI 模型
- 外部模型
需求
若要了解用於模型服務端點的存取控制選項和端點管理的最佳做法指導,請參閱服務端點 ACL。
建立端點並設定初始流量分割
當您使用 Databricks 馬賽克 AI 服務 API 或 Databricks 馬賽克 AI 服務 UI 建立模型服務端點時,您也可以為您想要在該端點上服務的模型設定初始流量分割。 下列各節提供為端點上提供之多個自定義模型或產生式 AI 模型設定流量分割的範例。
將多個自定義模型服務至端點
下列 REST API 範例會在 Unity 目錄中建立具有兩個自定義模型的單一端點,並設定這些模型之間的端點流量分割。 服務實體 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":"catalog.schema.model-A",
"entity_version":"1",
"workload_size":"Small",
"scale_to_zero_enabled":true
},
{
"name":"challenger",
"entity_name":"catalog.schema.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"
}
]
}
}
}
將多個模型提供至布建的輸送量端點
下列 REST API 範例會建立具有兩個模型的單一基礎模型 API 布建輸送量端點,並設定這些模型之間的端點流量分割。 名為 multi-pt-model
的端點 ,主機第 2 mistral_7b_instruct_v0_1-2
版會取得 60% 的端點流量,同時裝載第 3 mixtral_8x7b_instruct_v0_1-3
版,其中會取得 40% 的端點流量。
POST /api/2.0/serving-endpoints
{
"name":"multi-pt-model"
"config":
{
"served_entities":
[
{
"name":"mistral_7b_instruct_v0_1-2",
"entity_name":"system.ai.mistral_7b_instruct_v0_1",
"entity_version":"2",
"min_provisioned_throughput":0,
"max_provisioned_throughput":1940
},
{
"name":"mixtral_8x7b_instruct_v0_1-3",
"entity_name":"system.ai.mixtral_8x7b_instruct_v0_1",
"entity_version":"3",
"min_provisioned_throughput":0,
"max_provisioned_throughput":1240
}
],
"traffic_config":
{
"routes":
[
{
"served_model_name":"mistral_7b_instruct_v0_1-2",
"traffic_percentage":"60"
},
{
"served_model_name":"mixtral_8x7b_instruct_v0_1-3",
"traffic_percentage":"40"
}
]
}
}
}
將多個外部模型服務至端點
您也可以在服務端點中設定多個 外部模型 ,只要它們都有相同的工作類型,而且每個模型都有唯 name
一的 。 你不能在相同的服務端點中同時具有外部模型和非外部模型。
下列範例會建立服務端點,以路由傳送 OpenAI 所提供的 50% 流量gpt-4
,以及由人類學提供的其餘 50%。claude-3-opus-20240229
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
name="mix-chat-endpoint",
config={
"served_entities": [
{
"name": "served_model_name_1",
"external_model": {
"name": "gpt-4",
"provider": "openai",
"task": "llm/v1/chat",
"openai_config": {
"openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}"
}
}
},
{
"name": "served_model_name_2",
"external_model": {
"name": "claude-3-opus-20240229",
"provider": "anthropic",
"task": "llm/v1/chat",
"anthropic_config": {
"anthropic_api_key": "{{secrets/my_anthropic_secret_scope/anthropic_api_key}}"
}
}
}
],
"traffic_config": {
"routes": [
{"served_model_name": "served_model_name_1", "traffic_percentage": 50},
{"served_model_name": "served_model_name_2", "traffic_percentage": 50}
]
},
}
)
更新服務模型之間的流量分割
您也可以更新服務模型之間的流量分割。 下列 REST API 範例會將服務模型 current
設定為 ,以取得 50% 的端點流量和其他模型, challenger
以取得其餘 50% 的流量。
您也可以使用 [編輯組態] 按鈕,從 Databricks Mosaic AI UI 中的 [服務] 索引標籤進行此更新。
PUT /api/2.0/serving-endpoints/{name}/config
{
"served_entities":
[
{
"name":"current",
"entity_name":"catalog.schema.model-A",
"entity_version":"1",
"workload_size":"Small",
"scale_to_zero_enabled":true
},
{
"name":"challenger",
"entity_name":"catalog.schema.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
服務模型會提供所有要求。