Freigeben über


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.

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, currenthoste Version 1 von model-A und ruft 90 % des Endpunktdatenverkehrs ab, während die andere bereitgestellte Entität, challengerversion 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, currentum 50 % des Endpunktdatenverkehrs und des anderen Modells abzurufen, challengerum 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.