Skapa anpassade modellserverslutpunkter

Den här artikeln beskriver hur du skapar modellserverslutpunkter som hanterar anpassade modeller med databricks-modellservering.

Modellservern innehåller följande alternativ för att skapa slutpunkter:

  • Användargränssnittet för servering
  • REST-API
  • SDK för MLflow-distributioner

Information om hur du skapar slutpunkter som hanterar generativa AI-grundmodeller finns i Skapa grundmodell som betjänar slutpunkter.

Krav

  • Din arbetsyta måste finnas i en region som stöds.
  • Om du använder anpassade bibliotek eller bibliotek från en privat speglingsserver med din modell kan du läsa Använda anpassade Python-bibliotek med modellservern innan du skapar modellslutpunkten.
  • Om du vill skapa slutpunkter med MLflow Deployments SDK måste du installera MLflow-distributionsklienten. Installera den genom att köra:
import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")

Åtkomstkontroll

Information om alternativ för åtkomstkontroll för modell som betjänar slutpunkter för slutpunktshantering finns i Hantera behörigheter för din modell som betjänar slutpunkten.

Du kan också lägga till miljövariabler för att lagra autentiseringsuppgifter för modellservering. Se Konfigurera åtkomst till resurser från modellserverslutpunkter

Skapa en slutpunkt

Serveringsgränssnitt

Du kan skapa en slutpunkt för modell som betjänar med användargränssnittet för servering .

  1. Klicka på Servering i sidopanelen för att visa användargränssnittet för servering.

  2. Klicka på Skapa serverdelsslutpunkt.

    Modellvisningsfönstret i Databricks-användargränssnittet

För modeller som registrerats i arbetsytans modellregister eller modeller i Unity Catalog:

  1. I fältet Namn anger du ett namn för slutpunkten.

  2. I avsnittet Serverade entiteter

    1. Klicka i fältet Entitet för att öppna formuläret Välj hanterad entitet .
    2. Välj den typ av modell som du vill hantera. Formuläret uppdateras dynamiskt baserat på ditt val.
    3. Välj vilken modell- och modellversion du vill hantera.
    4. Välj procentandelen trafik som ska dirigeras till din betjänade modell.
    5. Välj vilken storleksberäkning som ska användas. Du kan använda CPU- eller GPU-beräkningar för dina arbetsbelastningar. Mer information om tillgängliga GPU-beräkningar finns i GPU-arbetsbelastningstyper .
    6. Under Beräkna utskalning väljer du storleken på beräkningsskalningen som motsvarar antalet begäranden som den här hanterade modellen kan bearbeta samtidigt. Det här talet ska vara ungefär lika med QPS x modellkörningstid.
      1. Tillgängliga storlekar är Små för 0–4 begäranden, Mellan 8–16 begäranden och Stor för 16–64 begäranden.
    7. Ange om slutpunkten ska skalas till noll när den inte används.
  3. Klicka på Skapa. Sidan Serveringsslutpunkter visas med tillståndet Serveringsslutpunkt som visas som Inte redo.

    Skapa en modell som betjänar slutpunkten

Rest API

Du kan skapa slutpunkter med hjälp av REST-API:et. Se POST /api/2.0/serving-endpoints för slutpunktskonfigurationsparametrar .

I följande exempel skapas en slutpunkt som hanterar den första versionen av ads1 modellen som är registrerad i modellregistret. Ange en modell från Unity Catalog genom att ange det fullständiga modellnamnet inklusive den överordnade katalogen och schemat, till exempel . catalog.schema.example-model


POST /api/2.0/serving-endpoints

{
  "name": "workspace-model-endpoint",
  "config":{
    "served_entities": [
      {
        "name": "ads-entity"
        "entity_name": "my-ads-model",
        "entity_version": "3",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      },
      {
        "entity_name": "my-ads-model",
        "entity_version": "4",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      }
    ],
    "traffic_config":{
      "routes": [
        {
          "served_model_name": "my-ads-model-3",
          "traffic_percentage": 100
        },
        {
          "served_model_name": "my-ads-model-4",
          "traffic_percentage": 20
        }
      ]
    }
  },
  "tags": [
    {
      "key": "team",
      "value": "data science"
    }
  ]
}

Följande är ett exempelsvar. Slutpunktens config_update tillstånd är NOT_UPDATING och den betjänade modellen är i ett READY tillstånd.

{
  "name": "workspace-model-endpoint",
  "creator": "user@email.com",
  "creation_timestamp": 1700089637000,
  "last_updated_timestamp": 1700089760000,
  "state": {
    "ready": "READY",
    "config_update": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "ads-entity",
        "entity_name": "my-ads-model-3",
        "entity_version": "3",
        "workload_size": "Small",
        "scale_to_zero_enabled": true,
        "workload_type": "CPU",
      "state": {
        "deployment": "DEPLOYMENT_READY",
        "deployment_state_message": ""
      },
      "creator": "user@email.com",
      "creation_timestamp": 1700089760000
      }
    ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "my-ads-model-3",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "tags": [
    {
      "key": "team",
      "value": "data science"
    }
  ],
  "id": "e3bd3e471d6045d6b75f384279e4b6ab",
  "permission_level": "CAN_MANAGE",
  "route_optimized": false
}

Mlflow-distributioner sdk

MLflow-distributioner tillhandahåller ett API för att skapa, uppdatera och ta bort uppgifter. API:erna för dessa uppgifter accepterar samma parametrar som REST-API:et för att betjäna slutpunkter. Se POST /api/2.0/serving-endpoints för slutpunktskonfigurationsparametrar .


from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="workspace-model-endpoint",
    config={
        "served_entities": [
            {
                "name": "ads-entity"
                "entity_name": "my-ads-model",
                "entity_version": "3",
                "workload_size": "Small",
                "scale_to_zero_enabled": true
            }
        ],
        "traffic_config": {
            "routes": [
                {
                    "served_model_name": "my-ads-model-3",
                    "traffic_percentage": 100
                }
            ]
        }
    }
)

Du kan även:

GPU-arbetsbelastningstyper

GPU-distributionen är kompatibel med följande paketversioner:

  • Pytorch 1.13.0 - 2.0.1
  • TensorFlow 2.5.0 - 2.13.0
  • MLflow 2.4.0 och senare

Om du vill distribuera dina modeller med hjälp av GPU:er inkluderar workload_type du fältet i slutpunktskonfigurationen när slutpunkten skapas eller som en uppdatering av slutpunktskonfigurationen med hjälp av API:et. Om du vill konfigurera slutpunkten för GPU-arbetsbelastningar med användargränssnittet för servering väljer du önskad GPU-typ i listrutan Beräkningstyp .

{
  "served_entities": [{
    "name": "ads1",
    "entity_version": "2",
    "workload_type": "GPU_LARGE",
    "workload_size": "Small",
    "scale_to_zero_enabled": false,
  }]
}

I följande tabell sammanfattas de tillgängliga GPU-arbetsbelastningstyper som stöds.

GPU-arbetsbelastningstyp GPU-instans GPU-minne
GPU_SMALL 1xT4 16 GB
GPU_LARGE 1xA100 80 GB
GPU_LARGE_2 2xA100 160 GB

Ändra en anpassad modellslutpunkt

När du har aktiverat en slutpunkt för en anpassad modell kan du uppdatera beräkningskonfigurationen efter behov. Den här konfigurationen är särskilt användbar om du behöver ytterligare resurser för din modell. Arbetsbelastningens storlek och beräkningskonfiguration spelar en viktig roll i vilka resurser som allokeras för att betjäna din modell.

Tills den nya konfigurationen är klar fortsätter den gamla konfigurationen att betjäna förutsägelsetrafik. Det pågår en uppdatering, men det går inte att göra någon annan uppdatering.

Serveringsgränssnitt

När du har aktiverat en modellslutpunkt väljer du Redigera slutpunkt för att ändra beräkningskonfigurationen för slutpunkten.

Du kan göra följande:

  • Välj mellan några arbetsbelastningsstorlekar och automatisk skalning konfigureras automatiskt inom arbetsbelastningsstorleken.
  • Ange om slutpunkten ska skalas ned till noll när den inte används.
  • Ändra procentandelen av trafiken så att den dirigeras till din betjänade modell.

Rest API

Följande är ett exempel på en slutpunktskonfigurationsuppdatering med hjälp av REST-API:et. Se PUT /api/2.0/serving-endpoints/{name}/config.


PUT /api/2.0/serving-endpoints/{name}/config

{
  "name": "workspace-model-endpoint",
  "config":{
    "served_entities": [
      {
        "name": "ads-entity"
        "entity_name": "my-ads-model",
        "entity_version": "5",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      }
    ],
    "traffic_config":{
      "routes": [
        {
          "served_model_name": "my-ads-model-5",
          "traffic_percentage": 100
        }
      ]
    }
  }
}

Mlflow-distributioner sdk

SDK:n för MLflow-distributioner använder samma parametrar som REST-API:et, se PUT /api/2.0/serving-endpoints/{name}/config för information om begäran och svarsschema.

Följande kodexempel använder en modell från Unity Catalog-modellregistret:

import mlflow
from mlflow.deployments import get_deploy_client

mlflow.set_registry_uri("databricks-uc")
client = get_deploy_client("databricks")

endpoint = client.create_endpoint(
  name=f"{endpointname}",
  config={
    "served_entities": [
        {
            "entity_name": f"{catalog}.{schema}.{model_name}",
            "entity_version": "1",
            "workload_size": "Small",
            "scale_to_zero_enabled": True
        }
    ],
    "traffic_config": {
        "routes": [
            {
                "served_model_name": f"{model_name}-1",
                "traffic_percentage": 100
            }
        ]
    }
  }
)

Du kan även:

Bedömning av en modellslutpunkt

Skicka begäranden till den modell som betjänar slutpunkten för att bedöma din modell.

Ytterligare resurser

Notebook-exempel

Följande notebook-filer innehåller olika Databricks-registrerade modeller som du kan använda för att komma igång med modellserverslutpunkter.

Modellexemplen kan importeras till arbetsytan genom att följa anvisningarna i Importera en notebook-fil. När du har valt och skapat en modell från ett av exemplen registrerar du den i MLflow Model Registry och följer sedan arbetsflödesstegen för användargränssnittet för modellservering.

Träna och registrera en scikit-learn-modell för modell som betjänar notebook-filer

Hämta notebook-fil

Träna och registrera en HuggingFace-modell för modell som betjänar notebook-filen

Hämta notebook-fil