Delen via


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.

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, currenthosts versie 1 van model-A en krijgt 90% van het eindpuntverkeer, terwijl de andere service-entiteit, challengerhosts 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-modelhosts, 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 namemodel 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, currentom 50% van het eindpuntverkeer en het andere model challengerop 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/invocationsworden verzonden, worden alle aanvragen geleverd door het challenger aangeboden model.