Hantera flera modeller till en modell som betjänar slutpunkten
Den här artikeln beskriver hur du programmatiskt konfigurerar en modell som betjänar slutpunkten för att hantera flera modeller och trafiken som delas mellan dem.
Med flera modeller från en enda slutpunkt kan du dela trafik mellan olika modeller för att jämföra deras prestanda och underlätta A/B-testning. Du kan också hantera olika versioner av en modell samtidigt, vilket gör det enklare att experimentera med nya versioner, samtidigt som den aktuella versionen hålls i produktion.
Du kan hantera någon av följande modelltyper på en Mosaic AI Model Serving-slutpunkt. Du kan inte hantera olika modelltyper i en enda slutpunkt. Du kan till exempel inte hantera en anpassad modell och en extern modell i samma slutpunkt.
- Anpassade modeller
- Generativa AI-modeller som görs tillgängliga via Foundation Model API:er som etablerats genom dataflöde
- Externa modeller
Krav
Se Kraven för att skapa en modell som betjänar slutpunkten.
Information om alternativ för åtkomstkontroll för modeller som betjänar slutpunkter och vägledning för bästa praxis för slutpunktshantering finns i Servering av slutpunkts-ACL:er.
Skapa en slutpunkt och ange den inledande trafikdelningen
När du skapar modell som betjänar slutpunkter med hjälp av Api:et för Databricks Mosaic AI-servering eller Databricks Mosaic AI-serveringsgränssnittet kan du också ange den inledande trafikdelningen för de modeller som du vill hantera på slutpunkten. Följande avsnitt innehåller exempel på hur du ställer in trafikdelningen för flera anpassade modeller eller generativa AI-modeller som hanteras på en slutpunkt.
Hantera flera anpassade modeller till en slutpunkt
I följande REST API-exempel skapas en enda slutpunkt med två anpassade modeller i Unity Catalog och slutpunktstrafiken delas mellan dessa modeller. Den betjänade entiteten , current
är värd för version 1 av model-A
och hämtar 90 % av slutpunktstrafiken, medan den andra betjänade entiteten, , challenger
är värd för version 1 av model-B
och hämtar 10 % av slutpunktstrafiken.
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"
}
]
}
}
}
Hantera flera modeller till en etablerad dataflödesslutpunkt
I följande REST API-exempel skapas en enda Foundation Model-API:er som etablerar dataflödesslutpunkten med två modeller och anger slutpunktstrafiken som delas mellan dessa modeller. Slutpunkten med namnet multi-pt-model
, är värd för version 2 av mistral_7b_instruct_v0_1-2
vilken hämtar 60 % av slutpunktstrafiken och är även värd för version 3 mixtral_8x7b_instruct_v0_1-3
av vilken hämtar 40 % av slutpunktstrafiken.
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"
}
]
}
}
}
Hantera flera externa modeller till en slutpunkt
Du kan också konfigurera flera externa modeller i en serverslutpunkt så länge de alla har samma aktivitetstyp och varje modell har en unik name
. Du kan inte ha både externa modeller och icke-externa modeller i samma serveringsslutpunkt.
I följande exempel skapas en serverslutpunkt som dirigerar 50 % av trafiken till gpt-4
som tillhandahålls av OpenAI och de återstående 50 % som claude-3-opus-20240229
tillhandahålls av Anthropic.
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}
]
},
}
)
Uppdatera trafikdelningen mellan betjänade modeller
Du kan också uppdatera trafikdelningen mellan betjänade modeller. I följande REST API-exempel anges den betjänade modellen, , current
för att få 50 % av slutpunktstrafiken och den andra modellen, challenger
, för att få de återstående 50 % av trafiken.
Du kan också göra den här uppdateringen från fliken Servering i Databricks Mosaic AI-användargränssnittet med hjälp av knappen Redigera konfiguration .
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"
}
]
}
}
Fråga efter enskilda modeller bakom en slutpunkt
I vissa scenarier kanske du vill köra frågor mot enskilda modeller bakom slutpunkten.
Du kan göra det med hjälp av:
POST /serving-endpoints/{endpoint-name}/served-models/{served-model-name}/invocations
Här efterfrågas den specifika betjänade modellen. Begärandeformatet är detsamma som att köra frågor mot slutpunkten. När du kör frågor mot den enskilda betjänade modellen ignoreras trafikinställningarna.
Om alla begäranden skickas till /serving-endpoints/multi-model/served-models/challenger/invocations
i slutpunktsexemplet multi-model
hanteras alla begäranden av den challenger
hanterade modellen.