Meerdere modellen leveren aan een model voor eindpunt
In dit artikel wordt beschreven hoe u programmatisch een model voor eindpunten configureert voor het leveren van meerdere modellen en het verkeer tussen deze modellen.
Door meerdere modellen van één eindpunt te leveren, kunt u verkeer splitsen tussen verschillende modellen om de prestaties te vergelijken en A/B-tests te vergemakkelijken. U kunt ook verschillende versies van een model tegelijkertijd bedienen, waardoor u eenvoudiger kunt experimenteren met nieuwe versies, terwijl u de huidige versie in productie houdt.
U kunt een van de volgende modeltypen leveren op een Mozaïek AI Model Serve-eindpunt. U kunt geen verschillende modeltypen in één eindpunt leveren. U kunt bijvoorbeeld geen aangepast model en een extern model in hetzelfde eindpunt leveren.
- Aangepaste modellen
- Generatieve AI-modellen die beschikbaar worden gesteld via de ingerichte doorvoer van Foundation Model-API's
- Externe modellen
Vereisten
Zie de vereisten voor het maken van eindpunten voor het model.
Als u meer wilt weten over opties voor toegangsbeheer voor eindpunten en richtlijnen voor aanbevolen procedures voor eindpuntbeheer, raadpleegt u ACL's voor eindpunten leveren.
Een eindpunt maken en de initiële verkeerssplitsing instellen
Wanneer u model voor eindpunten maakt met behulp van de Databricks Mosaic AI-server-API of de Databricks Mosaic AI-gebruikersinterface, kunt u ook de eerste verkeerssplitsing instellen voor de modellen die u op dat eindpunt wilt gebruiken. De volgende secties bevatten voorbeelden van het instellen van de verkeerssplitsing voor meerdere aangepaste modellen of generatieve AI-modellen die op een eindpunt worden geleverd.
Meerdere aangepaste modellen leveren aan een eindpunt
In het volgende REST API-voorbeeld wordt één eindpunt gemaakt met twee aangepaste modellen in Unity Catalog en wordt het eindpuntverkeer tussen deze modellen ingesteld. De service-entiteit, current
hosts versie 1 van model-A
en krijgt 90% van het eindpuntverkeer, terwijl de andere service-entiteit, challenger
hosts versie 1 van model-B
en 10% van het eindpuntverkeer krijgt.
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"
}
]
}
}
}
Meerdere modellen leveren aan een ingerichte doorvoereindpunt
In het volgende REST API-voorbeeld wordt één eindpunt voor de doorvoer van foundationmodellen gemaakt met twee modellen en wordt het eindpuntverkeer tussen deze modellen ingesteld. Het eindpunt met de naam multi-pt-model
hosts, waarvan versie 2 mistral_7b_instruct_v0_1-2
60% van het eindpuntverkeer krijgt en ook versie 3 mixtral_8x7b_instruct_v0_1-3
host waarvan 40% van het eindpuntverkeer wordt bereikt.
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"
}
]
}
}
}
Meerdere externe modellen leveren aan een eindpunt
U kunt ook meerdere externe modellen configureren in een dienend eindpunt zolang ze allemaal hetzelfde taaktype hebben en elk model een uniek name
model heeft. U kunt niet zowel externe modellen als niet-externe modellen in hetzelfde servereindpunt hebben.
In het volgende voorbeeld wordt een dienend eindpunt gemaakt dat 50% van het verkeer routeert naar gpt-4
door OpenAI en de resterende 50% wordt claude-3-opus-20240229
geleverd door Antropicus.
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}
]
},
}
)
De verkeerssplitsing tussen gediende modellen bijwerken
U kunt ook de verkeerssplitsing tussen gediende modellen bijwerken. In het volgende REST API-voorbeeld wordt het aangeboden model ingesteld, current
om 50% van het eindpuntverkeer en het andere model challenger
op te halen, om het resterende 50% van het verkeer op te halen.
U kunt deze update ook uitvoeren via het tabblad Serveren in de AI-gebruikersinterface van Databricks Mosaic met behulp van de knop Configuratie bewerken.
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"
}
]
}
}
Afzonderlijke modellen achter een eindpunt opvragen
In sommige scenario's wilt u mogelijk afzonderlijke modellen achter het eindpunt opvragen.
U kunt dit doen met behulp van:
POST /serving-endpoints/{endpoint-name}/served-models/{served-model-name}/invocations
Hier wordt een query uitgevoerd op het specifieke aangeboden model. De aanvraagindeling is hetzelfde als het uitvoeren van query's op het eindpunt. Tijdens het uitvoeren van query's op het afzonderlijke servicemodel worden de verkeersinstellingen genegeerd.
In de context van het multi-model
eindpuntvoorbeeld, als alle aanvragen naar /serving-endpoints/multi-model/served-models/challenger/invocations
worden verzonden, worden alle aanvragen geleverd door het challenger
aangeboden model.