Hantera flera modeller till en modell som betjänar slutpunkten

Den här artikeln beskriver hur du programmatiskt konfigurerar en modell som betjänar slutpunkten för att hantera flera modeller och trafiken som delas mellan dem.

Med flera modeller från en enda slutpunkt kan du dela trafik mellan olika modeller för att jämföra deras prestanda och underlätta A/B-testning. Du kan också hantera olika versioner av en modell samtidigt, vilket gör det enklare att experimentera med nya versioner, samtidigt som den aktuella versionen hålls i produktion.

Du kan hantera någon av följande modelltyper på en Mosaic AI Model Serving-slutpunkt. Du kan inte hantera olika modelltyper i en enda slutpunkt. Du kan till exempel inte hantera en anpassad modell och en extern modell i samma slutpunkt.

Krav

Se Kraven för att skapa en modell som betjänar slutpunkten.

Information om alternativ för åtkomstkontroll för modeller som betjänar slutpunkter och vägledning för bästa praxis för slutpunktshantering finns i Servering av slutpunkts-ACL:er.

Skapa en slutpunkt och ange den inledande trafikdelningen

När du skapar modell som betjänar slutpunkter med hjälp av Api:et för Databricks Mosaic AI-servering eller Databricks Mosaic AI-serveringsgränssnittet kan du också ange den inledande trafikdelningen för de modeller som du vill hantera på slutpunkten. Följande avsnitt innehåller exempel på hur du ställer in trafikdelningen för flera anpassade modeller eller generativa AI-modeller som hanteras på en slutpunkt.

Hantera flera anpassade modeller till en slutpunkt

I följande REST API-exempel skapas en enda slutpunkt med två anpassade modeller i Unity Catalog och slutpunktstrafiken delas mellan dessa modeller. Den betjänade entiteten , currentär värd för version 1 av model-A och hämtar 90 % av slutpunktstrafiken, medan den andra betjänade entiteten, , challengerär värd för version 1 av model-B och hämtar 10 % av slutpunktstrafiken.

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"
            }
         ]
      }
   }
}

Hantera flera modeller till en etablerad dataflödesslutpunkt

I följande REST API-exempel skapas en enda Foundation Model-API:er som etablerar dataflödesslutpunkten med två modeller och anger slutpunktstrafiken som delas mellan dessa modeller. Slutpunkten med namnet multi-pt-model, är värd för version 2 av mistral_7b_instruct_v0_1-2 vilken hämtar 60 % av slutpunktstrafiken och är även värd för version 3 mixtral_8x7b_instruct_v0_1-3 av vilken hämtar 40 % av slutpunktstrafiken.


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"
            }
         ]
      }
   }
}

Hantera flera externa modeller till en slutpunkt

Du kan också konfigurera flera externa modeller i en serverslutpunkt så länge de alla har samma aktivitetstyp och varje modell har en unik name. Du kan inte ha både externa modeller och icke-externa modeller i samma serveringsslutpunkt.

I följande exempel skapas en serverslutpunkt som dirigerar 50 % av trafiken till gpt-4 som tillhandahålls av OpenAI och de återstående 50 % som claude-3-opus-20240229 tillhandahålls av 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}
            ]
        },
    }
)

Uppdatera trafikdelningen mellan betjänade modeller

Du kan också uppdatera trafikdelningen mellan betjänade modeller. I följande REST API-exempel anges den betjänade modellen, , currentför att få 50 % av slutpunktstrafiken och den andra modellen, challenger, för att få de återstående 50 % av trafiken.

Du kan också göra den här uppdateringen från fliken Servering i Databricks Mosaic AI-användargränssnittet med hjälp av knappen Redigera konfiguration .

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"
         }
      ]
   }
}

Fråga efter enskilda modeller bakom en slutpunkt

I vissa scenarier kanske du vill köra frågor mot enskilda modeller bakom slutpunkten.

Du kan göra det med hjälp av:

POST /serving-endpoints/{endpoint-name}/served-models/{served-model-name}/invocations

Här efterfrågas den specifika betjänade modellen. Begärandeformatet är detsamma som att köra frågor mot slutpunkten. När du kör frågor mot den enskilda betjänade modellen ignoreras trafikinställningarna.

Om alla begäranden skickas till /serving-endpoints/multi-model/served-models/challenger/invocationsi slutpunktsexemplet multi-model hanteras alla begäranden av den challenger hanterade modellen.