Obsluha více modelů do koncového bodu obsluhy modelu
Tento článek popisuje, jak programově nakonfigurovat koncový bod obsluhující model pro obsluhu více modelů a rozdělení provozu mezi nimi.
Obsluha více modelů z jednoho koncového bodu umožňuje rozdělit provoz mezi různé modely a porovnat jejich výkon a usnadnit testování A/B. Můžete také obsluhovat různé verze modelu současně, což usnadňuje experimentování s novými verzemi a zároveň zachovává aktuální verzi v produkčním prostředí.
Na koncovém bodu obsluhy modelu Mosaic AI můžete obsluhovat libovolný z následujících typů modelů. V jednom koncovém bodu nemůžete obsluhovat různé typy modelů. Nemůžete například obsluhovat vlastní model a externí model ve stejném koncovém bodu.
- Vlastní modely
- Generování modelů AI zpřístupněných prostřednictvím rozhraní API základního modelu zřízené propustnosti
- Externí modely
Požadavky
Viz požadavky na model obsluhující vytváření koncových bodů.
Informace o možnostech řízení přístupu pro model obsluhující koncové body a osvědčené postupy pro správu koncových bodů najdete v tématu Obsluha seznamů ACL koncových bodů.
Vytvoření koncového bodu a nastavení počátečního rozdělení provozu
Při vytváření modelů obsluhujících koncové body pomocí rozhraní API pro obsluhu Databricks Mosaic AI nebo uživatelského rozhraní Databricks Mosaic AI můžete také nastavit počáteční rozdělení provozu pro modely, které chcete obsluhovat na daném koncovém bodu. Následující části obsahují příklady nastavení rozdělení provozu pro několik vlastních modelů nebo základních modelů obsluhovaných na koncovém bodu.
Obsluha několika vlastních modelů do koncového bodu
Následující příklad rozhraní REST API vytvoří jeden koncový bod se dvěma vlastními modely v katalogu Unity a nastaví rozdělení provozu koncového bodu mezi tyto modely. Obsluhovaná entita, current
hostuje verzi 1 model-A
koncového bodu a získá 90 % provozu koncového bodu, zatímco druhá obsluhovaná entita , challenger
hostuje verzi 1 z model-B
koncového bodu a získá 10 % provozu koncového bodu.
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"
}
]
}
}
}
Poskytování více modelů koncovému bodu zřízené propustnosti
Následující příklad rozhraní REST API vytvoří jeden koncový bod zřízené propustnosti rozhraní API základního modelu se dvěma modely a nastaví rozdělení provozu koncových bodů mezi tyto modely. Koncový bod s názvem multi-pt-model
, hostuje verzi 2, z mistral_7b_instruct_v0_1-2
níž získá 60 % provozu koncového bodu a také hostuje verzi 3, z mixtral_8x7b_instruct_v0_1-3
níž získá 40 % provozu koncového bodu.
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"
}
]
}
}
}
Obsluha několika externích modelů do koncového bodu
V koncovém bodu obsluhy můžete také nakonfigurovat více externích modelů , pokud mají všechny stejný typ úlohy a každý model má jedinečný name
. Ve stejném koncovém bodu obsluhy nemůžete mít externí modely i ne externí modely.
Následující příklad vytvoří obslužný koncový bod, který směruje 50 % provozu do gpt-4
poskytovaného openAI a zbývajících 50 % do claude-3-opus-20240229
poskytované 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}
]
},
}
)
Aktualizace rozdělení provozu mezi obsluhované modely
Můžete také aktualizovat rozdělení provozu mezi obsluhované modely. Následující příklad rozhraní REST API nastaví obsloužený model, current
aby získal 50 % provozu koncového bodu a druhý model, challenger
aby získal zbývajících 50 % provozu.
Tuto aktualizaci můžete provést také z karty Obsluha v uživatelském rozhraní Databricks Mosaic AI pomocí tlačítka Upravit konfiguraci .
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"
}
]
}
}
Dotazování jednotlivých modelů za koncovým bodem
V některých scénářích můžete chtít za koncovým bodem dotazovat jednotlivé modely.
Můžete to udělat pomocí:
POST /serving-endpoints/{endpoint-name}/served-models/{served-model-name}/invocations
Zde se dotazuje konkrétní obsluhovaný model. Formát požadavku je stejný jako dotazování koncového bodu. Při dotazování jednotlivých obsluhovaných modelů se nastavení provozu ignoruje.
V kontextu příkladu koncového multi-model
bodu platí, že pokud se všechny požadavky odesílají /serving-endpoints/multi-model/served-models/challenger/invocations
, obsluhuje model obsluhy challenger
všechny požadavky.