Sdílet prostřednictvím


Obsluha více modelů do koncového bodu obsluhy modelu

Tento článek popisuje, jak programově nakonfigurovat koncový bod obsluhující model pro obsluhu více modelů a rozdělení provozu mezi nimi.

Obsluha více modelů z jednoho koncového bodu umožňuje rozdělit provoz mezi různé modely a porovnat jejich výkon a usnadnit testování A/B. Můžete také obsluhovat různé verze modelu současně, což usnadňuje experimentování s novými verzemi a zároveň zachovává aktuální verzi v produkčním prostředí.

Na koncovém bodu obsluhy modelu Mosaic AI můžete obsluhovat libovolný z následujících typů modelů. V jednom koncovém bodu nemůžete obsluhovat různé typy modelů. Nemůžete například obsluhovat vlastní model a externí model ve stejném koncovém bodu.

Požadavky

Viz požadavky na model obsluhující vytváření koncových bodů.

Informace o možnostech řízení přístupu pro model obsluhující koncové body a osvědčené postupy pro správu koncových bodů najdete v tématu Obsluha seznamů ACL koncových bodů.

Vytvoření koncového bodu a nastavení počátečního rozdělení provozu

Při vytváření modelů obsluhujících koncové body pomocí rozhraní API pro obsluhu Databricks Mosaic AI nebo uživatelského rozhraní Databricks Mosaic AI můžete také nastavit počáteční rozdělení provozu pro modely, které chcete obsluhovat na daném koncovém bodu. Následující části obsahují příklady nastavení rozdělení provozu pro několik vlastních modelů nebo základních modelů obsluhovaných na koncovém bodu.

Obsluha několika vlastních modelů do koncového bodu

Následující příklad rozhraní REST API vytvoří jeden koncový bod se dvěma vlastními modely v katalogu Unity a nastaví rozdělení provozu koncového bodu mezi tyto modely. Obsluhovaná entita, currenthostuje verzi 1 model-A koncového bodu a získá 90 % provozu koncového bodu, zatímco druhá obsluhovaná entita , challengerhostuje verzi 1 z model-B koncového bodu a získá 10 % provozu koncového bodu.

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

Poskytování více modelů koncovému bodu zřízené propustnosti

Následující příklad rozhraní REST API vytvoří jeden koncový bod zřízené propustnosti rozhraní API základního modelu se dvěma modely a nastaví rozdělení provozu koncových bodů mezi tyto modely. Koncový bod s názvem multi-pt-model, hostuje verzi 2, z mistral_7b_instruct_v0_1-2 níž získá 60 % provozu koncového bodu a také hostuje verzi 3, z mixtral_8x7b_instruct_v0_1-3 níž získá 40 % provozu koncového bodu.


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

Obsluha několika externích modelů do koncového bodu

V koncovém bodu obsluhy můžete také nakonfigurovat více externích modelů , pokud mají všechny stejný typ úlohy a každý model má jedinečný name. Ve stejném koncovém bodu obsluhy nemůžete mít externí modely i ne externí modely.

Následující příklad vytvoří obslužný koncový bod, který směruje 50 % provozu do gpt-4 poskytovaného openAI a zbývajících 50 % do claude-3-opus-20240229 poskytované 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}
            ]
        },
    }
)

Aktualizace rozdělení provozu mezi obsluhované modely

Můžete také aktualizovat rozdělení provozu mezi obsluhované modely. Následující příklad rozhraní REST API nastaví obsloužený model, currentaby získal 50 % provozu koncového bodu a druhý model, challengeraby získal zbývajících 50 % provozu.

Tuto aktualizaci můžete provést také z karty Obsluha v uživatelském rozhraní Databricks Mosaic AI pomocí tlačítka Upravit konfiguraci .

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

Dotazování jednotlivých modelů za koncovým bodem

V některých scénářích můžete chtít za koncovým bodem dotazovat jednotlivé modely.

Můžete to udělat pomocí:

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

Zde se dotazuje konkrétní obsluhovaný model. Formát požadavku je stejný jako dotazování koncového bodu. Při dotazování jednotlivých obsluhovaných modelů se nastavení provozu ignoruje.

V kontextu příkladu koncového multi-model bodu platí, že pokud se všechny požadavky odesílají /serving-endpoints/multi-model/served-models/challenger/invocations, obsluhuje model obsluhy challenger všechny požadavky.