Dela via


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 set den inledande trafikdelningen

När du skapar modellbetjänande ändpunkter med Databricks Mosaic AI-server-API:et eller Databricks Mosaic AI-serverns användargränssnittkan du också set den ursprungliga trafikfördelningen för de modeller du vill hantera på den ändpunkten. Följande avsnitt innehåller exempel på hur du ställer in trafikdelningen för flera anpassade modeller eller grundmodeller som hanteras på en slutpunkt.

Hantera flera anpassade modeller till en slutpunkt

Följande REST API-exempel skapar en enskild slutpunkt med två anpassade modeller i Unity Catalog och anger slutpunktstrafiken som 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}
            ]
        },
    }
)

Update trafikuppdelningen mellan betjänade modeller

Du kan också update trafikuppdelningen mellan betjänade modeller. I följande REST API-exempel ställs den tjänande modellen, current, till get 50% av slutpunktstrafiken och den andra modellen, challenger, till get de återstående 50% av trafiken.

Du kan också göra den här update från fliken Servering i AI-användargränssnittet för Databricks Mosaic 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 multi-modeli slutpunktsexemplet /serving-endpoints/multi-model/served-models/challenger/invocations hanteras alla begäranden av den challenger hanterade modellen.