Nasadit více modelů na koncový bod pro poskytování modelů

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í.

V koncovém bodu obsluhy modelu 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

Když vytváříte koncové body obsluhy modelů pomocí rozhraní API pro obsluhu modelů nebo uživatelského rozhraní pro obsluhu modelů, můžete také nastavit počáteční rozdělení provozu pro modely, které chcete v daném koncovém bodu obsluhovat. 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.

Nasazení více vlastních modelů na koncový bod

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 meta_llama_v3_1_70b_instruct níž získá 60 % provozu koncového bodu a také hostuje verzi 3, z meta_llama_v3_1_8b_instruct níž získá 40 % provozu koncového bodu.


POST /api/2.0/serving-endpoints
{
   "name":"multi-pt-model"
   "config":
   {
      "served_entities":
      [
         {
            "name":"meta_llama_v3_1_70b_instruct",
            "entity_name":"system.ai.meta_llama_v3_1_70b_instruct",
            "entity_version":"4",
            "min_provisioned_throughput":0,
            "max_provisioned_throughput":2400
         },
         {
            "name":"meta_llama_v3_1_8b_instruct",
            "entity_name":"system.ai.meta_llama_v3_1_8b_instruct",
            "entity_version":"4",
            "min_provisioned_throughput":0,
            "max_provisioned_throughput":1240
         }
      ],
      "traffic_config":
      {
         "routes":
         [
            {
               "served_model_name":"meta_llama_v3_1_8b_instruct",
               "traffic_percentage":"60"
            },
            {
               "served_model_name":"meta_llama_v3_1_70b_instruct",
               "traffic_percentage":"40"
            }
         ]
      }
   }
}

Nasazení více externích modelů v jednom koncovém bodě

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. V jednom koncovém bodu pro obsluhu nemůžete mít současně externí i neexterní 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é na kartě Serving v uživatelském rozhraní Azure Databricks pomocí tlačítka konfigurace Edit.

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 dotazovat jednotlivé modely za koncovým bodem.

Můžete to udělat pomocí:

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

Zde se zadává dotaz na 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 bodu multi-model platí, že pokud jsou všechny požadavky odesílány na /serving-endpoints/multi-model/served-models/challenger/invocations, pak jsou všechny požadavky obslouženy nasazeným modelem challenger.