Bereitstellen mehrerer Modelle für ein Modell, das Endpunkte bedient
In diesem Artikel wird beschrieben, wie Sie programmgesteuert ein Modell konfigurieren, das Endpunkt für die Bereitstellung mehrerer Modelle und die Aufteilung des Datenverkehrs zwischen ihnen verwendet.
Die Bereitstellung mehrerer Modelle von einem einzelnen Endpunkt ermöglicht es Ihnen, den Datenverkehr zwischen verschiedenen Modellen zu teilen, um ihre Leistung zu vergleichen und A/B-Tests zu vereinfachen. Sie können auch verschiedene Versionen eines Modells gleichzeitig bedienen, wodurch das Experimentieren mit neuen Versionen erleichtert wird und gleichzeitig die aktuelle Version in der Produktion beibehalten wird.
Sie können jeden der folgenden Modelltypen auf einem Mosaik AI Model Serve-Endpunkt bedienen. Sie können in einem einzelnen Endpunkt keine verschiedenen Modelltypen bereitstellen. Sie können z. B. kein benutzerdefiniertes Modell und ein externes Modell im selben Endpunkt bedienen.
- Benutzerdefinierte Modelle
- Generative KI-Modelle, die über foundation Model-APIs bereitgestellten Durchsatz verfügbar gemacht werden
- Externe Modelle
Anforderungen
Siehe die Anforderungen für das Modell zur Endpunkterstellung.
Weitere Informationen zu den Zugriffsteuerungsoptionen für Modellbereitstellungsendpunkte und einen Best Practices-Leitfaden für die Endpunktverwaltung finden Sie unter Zugriffssteuerungslisten für Bereitstellungsendpunkte.
Erstellen eines Endpunkts und Festlegen der anfänglichen Datenverkehrsaufteilung
Wenn Sie Mithilfe der Databricks Mosaik AI-Serve-API oder der Databricks Mosaik AI-Dienst-Benutzeroberfläche Modellbereitstellungsendpunkte erstellen, können Sie auch die anfängliche Datenverkehrsteilung für die Modelle festlegen, die auf diesem Endpunkt bedient werden sollen. Die folgenden Abschnitte enthalten Beispiele zum Festlegen der Datenverkehrsteilung für mehrere benutzerdefinierte Modelle oder generative KI-Modelle, die auf einem Endpunkt bereitgestellt werden.
Bereitstellen mehrerer benutzerdefinierter Modelle an einen Endpunkt
Im folgenden REST-API-Beispiel wird ein einzelner Endpunkt mit zwei benutzerdefinierten Modellen im Unity-Katalog erstellt und der Endpunktdatenverkehr zwischen diesen Modellen aufgeteilt. Die bereitgestellte Entität, current
hoste Version 1 von model-A
und ruft 90 % des Endpunktdatenverkehrs ab, während die andere bereitgestellte Entität, challenger
version 1 von model-B
und ruft 10 % des Endpunktdatenverkehrs ab.
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"
}
]
}
}
}
Bereitstellen mehrerer Modelle an einen bereitgestellten Durchsatzendpunkt
Im folgenden REST-API-Beispiel wird ein einzelner Foundation-Modell-APIs erstellt, der den Durchsatzendpunkt mit zwei Modellen bereitgestellt hat, und der Endpunktdatenverkehr wird zwischen diesen Modellen aufgeteilt. Der Endpunkt mit dem Namen multi-pt-model
, hoste Version 2, von mistral_7b_instruct_v0_1-2
denen 60 % des Endpunktdatenverkehrs erhalten, und hoste version 3 mixtral_8x7b_instruct_v0_1-3
davon 40 % des Endpunktdatenverkehrs.
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"
}
]
}
}
}
Bereitstellen mehrerer externer Modelle an einen Endpunkt
Sie können auch mehrere externe Modelle in einem dienenden Endpunkt konfigurieren, solange alle über denselben Aufgabentyp verfügen und jedes Modell über einen eindeutigen name
. Sie können nicht sowohl externe Modelle als auch nicht externe Modelle im selben Bereitstellungsendpunkt haben.
Im folgenden Beispiel wird ein Dienstendpunkt erstellt, der 50 % des von OpenAI bereitgestellten Datenverkehrs und die verbleibenden 50 % an claude-3-opus-20240229
an Anthropic bereitgestellten Datenverkehr gpt-4
weitergibt.
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}
]
},
}
)
Aktualisieren der Datenverkehrsaufteilung zwischen bereitgestellten Modellen
Sie können auch die Datenverkehrsaufteilung zwischen bereitgestellten Modellen aktualisieren. Im folgenden REST-API-Beispiel wird das bereitgestellte Modell festgelegt, current
um 50 % des Endpunktdatenverkehrs und des anderen Modells abzurufen, challenger
um die verbleibenden 50 % des Datenverkehrs abzurufen.
Sie können dieses Update auch über die Registerkarte Bereitstellung auf der Databricks Mosaik AI-Benutzeroberfläche vornehmen, indem Sie die Schaltfläche Konfiguration bearbeiten verwenden.
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"
}
]
}
}
Abfragen einzelner Modelle hinter einem Endpunkt
In einigen Szenarien möchten Sie möglicherweise einzelne Modelle hinter dem Endpunkt abfragen.
Sie können dazu Folgendes verwenden:
POST /serving-endpoints/{endpoint-name}/served-models/{served-model-name}/invocations
Hier wird das spezifische bereitgestellte Modell abgefragt. Das Anforderungsformat entspricht dem Abfragen des Endpunkts. Beim Abfragen eines einzelnen bereitgestellten Modells werden die Datenverkehrseinstellungen ignoriert.
Wenn im Kontext des Endpunktbeispiels multi-model
alle Anforderungen an /serving-endpoints/multi-model/served-models/challenger/invocations
gesendet werden, werden alle Anforderungen vom bereitgestellten Modell challenger
verarbeitet.