Express-implementaties voor het leveren van modellen voor eindpunten

Deze pagina beschrijft hoe u snelle uitrol gebruikt op uw modelserving-eindpunten. Express-implementaties verlagen de implementatietijden en houden het model in de serviceomgeving hetzelfde als de modeltrainingsomgeving.

Note

Express-implementaties werden eerder serverloze geoptimaliseerde implementaties genoemd.

Wat zijn express-implementaties?

Express-deployments verpakken en zetten modelartefacten klaar in serverloze notebookomgevingen tijdens de modelregistratie. Dit versnelt de implementatie van eindpunten en zorgt ervoor dat de trainings- en serviceomgevingen consistent blijven.

Bij niet-expresse implementaties worden modelartefacten en -omgevingen tijdens de implementatie verpakt in containers, zodat de serveromgeving mogelijk niet overeenkomt met de omgeving die tijdens de modeltraining wordt gebruikt.

Standaard- versus snelle implementaties

In de volgende tabel worden een standaardimplementatie en een snelle implementatie vergeleken.

Aspect Standaardimplementatie Snelle implementatie
Wanneer de omgeving is gebouwd Een containerimage wordt bij implementatie gebouwd. Artefacten en de omgeving worden verpakt wanneer u het model registreert.
Trainings- en serviceomgeving De ondersteunende omgeving komt mogelijk niet overeen met de trainingsomgeving. De serveromgeving is identiek aan de notebook-omgeving waaruit u zich hebt geregistreerd.
Implementatiesnelheid Langzamer. De uitrol wacht op het bouwen van een containerimage. Sneller. De uitrol slaat het bouwen van de containerimage over.
Registratiesnelheid Standard. Het verpakken duurt hierdoor enkele seconden tot een minuut langer, afhankelijk van de grootte van het model en de omgeving.
Gebeurtenislogboek voor implementatie Toont gebeurtenissen rond het maken van containerimages. Toont geen gebeurtenissen voor het maken van containerimages.

Express-implementaties verplaatsen het eenmalige verpakkingswerk naar de modelregistratie, wat afhankelijk van de grootte van het model en de omgeving enkele seconden tot een minuut toevoegt aan een register_model-aanroep. In ruil daarvoor is de uitrol aanzienlijk sneller: het bouwen van de container-image wordt helemaal overgeslagen. Deze build is ook een veelvoorkomende bron van implementatiefouten (afhankelijkheidsoplossing, buildfouten van installatiekopieën), dus als u deze overslaat, wordt een hele klasse problemen verwijderd. Het gebeurtenislogboek voor de implementatie voor een express-model bevat geen containerbuild-gebeurtenissen.

Requirements

Express-deployment-eindpunten hebben dezelfde vereisten als een modelserving-eindpunt. Raadpleeg Vereisten.

Bovendien:

  • Het model moet een aangepast model zijn
  • Het model moet worden gelogd en geregistreerd in een Serverless Notebook met versie 3 of hoger
  • Het model moet worden gelogd en geregistreerd bij mlflow>=3.12 en databricks-sdk>=0.102.0
  • Het model moet zijn geregistreerd in Unity Catalog. Het leveren van rekenkracht moet overeenkomen met de berekening waaruit het model is geregistreerd. U kunt registreren vanuit een normaal serverloos notebook om op een CPU te worden ingezet, of vanuit serverloze GPU-rekenkracht om op een GPU te worden ingezet.
  • De maximale omgevingsgrootte van het model is 200 GB

Note

Als u een aangepaste LLM op GPU-rekenkracht wilt leveren met behulp van snelle implementaties, raadpleegt u Aangepaste LLM's met aangepaste modelbediening leveren.

Een reranker implementeren op GPU

In deze handleiding wordt BAAI/bge-reranker-base uitgerold, een cross-encoder-reranker die beoordeelt hoe goed een document een query beantwoordt. Hiermee stelt u de omgeving in, legt u logboeken vast en registreert u het model met Express-verpakking, implementeert u het eindpunt en bevraagt u het.

GPU-implementaties mislukken vaak vanwege conflicten met afhankelijkheidsversies, bijvoorbeeld torch en CUDA. Express-implementaties lossen dit op twee manieren op:

  • De vaste, gepubliceerde set bibliotheken die vooraf zijn geïnstalleerd in elke serverloze GPU-omgevingsversie is aanwezig tijdens het leveren precies zoals in het notebook, dezelfde omgevingsversie, dezelfde versies. Deze bibliotheken worden niet opnieuw verpakt.
  • Eventuele extra afhankelijkheden die u in de notebooksessie installeert (bijvoorbeeld met %pip install) worden tijdens de registratie verpakt en tijdens het serveren hersteld.

Samen betekent dit dat een model dat in uw notebook draait, blijft werken wanneer het wordt ingezet.

Stap 1: Een serverloze GPU-notebook instellen

Maak een notebook op serverloze GPU-rekenkracht met een A10 GPU en selecteer omgevingsversie 5, AI-omgeving. De AI-omgeving bevat PyTorch en algemene machine learning-bibliotheken (torch, transformersen andere). Zie Serverloze GPU-omgeving versie 5 (preview) voor de exacte vastgemaakte versies.

Installeer de pakketten waarvoor snelle implementatie is vereist:

# Express deployment requires recent MLflow and Databricks SDK versions.
%pip install "mlflow>=3.12" "databricks-sdk>=0.102.0"
# Install the libraries your model needs. transformers is preinstalled in the
# v5 AI environment; install it explicitly because this model depends on it.
%pip install transformers
%restart_python

U kunt ook afhankelijkheden declareren via een serverloze omgeving, maar installeren in het notebook is het eenvoudigste pad. Ontwikkel op basis van de vastgemaakte versies van de omgeving, zodat de notebookomgeving overeenkomt met de ondersteunende omgeving.

Omdat dit model op een GPU wordt uitgevoerd, moet u het loggen en registreren vanuit een serverloze GPU-runtime. Als u per ongeluk logt vanuit serverloze CPU-compute, wordt het model verpakt met CPU-afhankelijkheden en kan het GPU-servingendpoint niet worden opgestart. Voeg de volgende controle toe om snel te mislukken als het notebook zich niet in een GPU-runtime bevindt:

import os

# This model is intended to be served on GPU, so we must log and register from a Serverless GPU runtime.
if not os.environ.get("DATABRICKS_ACCELERATOR"):
    raise RuntimeError(
        "This model MUST be logged+registered from a serverless GPU runtime, otherwise the correct dependencies will not be packaged for serving."
    )

Note

Deze controle is alleen nodig omdat de reranker wordt uitgevoerd op GPU. Een CPU-model heeft het niet nodig.

Stap 2: Het model registreren met MLflow

Laad de herrankering als een text-classification pijplijn en registreer deze met de systeemeigen mlflow.transformers smaak. De systeemeigen variant neemt de pip-afhankelijkheden van het model automatisch mee en draait op de GPU. U hoeft geen pip_requirements, een task of een entrypoint in te stellen.

import mlflow
from transformers import pipeline

# BAAI/bge-reranker-base is a cross-encoder reranker: it scores how well a document answers a query.
pipe = pipeline("text-classification", model="BAAI/bge-reranker-base")

model_info = mlflow.transformers.log_model(
    transformers_model=pipe,
    name="bge_reranker",
    input_example={
        "text": "What is Databricks?",
        "text_pair": "Databricks is a data and AI company.",
    },
)

Important

Registreer het model niet met het registered_model_name argument van log_model. Dit argument accepteert env_packniet, dus registreert het een niet-express model. Als u snelle implementatie wilt inschakelen, registreert u zich in een afzonderlijke stap bij register_model (stap 3), die accepteert env_pack.

Stap 3: Het model registreren bij Unity Catalog met express-pakketten

Registreer het model bij Unity Catalog en stel de env_pack parameter in om snelle implementatie in te schakelen. Hiermee worden de modelartefacten en de afhankelijkheden die u tijdens de registratie aan de notebooksessie hebt toegevoegd, verpakt, zodat deze opnieuw worden gebruikt boven op de vooraf geïnstalleerde bibliotheken van de omgevingsversie.

import mlflow
from mlflow.utils.env_pack import EnvPackConfig

mlflow.set_registry_uri("databricks-uc")

model_version = mlflow.register_model(
    model_uri=model_info.model_uri,
    name="main.default.bge_reranker",
    env_pack=EnvPackConfig(name="databricks_model_serving"),
)

U kunt de korte tekenreeks env_pack="databricks_model_serving" gebruiken in plaats van EnvPackConfig(name="databricks_model_serving"). Voor werkruimten zonder internettoegang of met aangepaste bibliotheken stelt u deze in install_dependencies=False (zie de env_pack parameter).

Registratie vereist databricks-sdk>=0.102.0. Eerdere versies kunnen een time-out krijgen bij het uploaden van grote modelartefacten.

Stap 4: Een service-eindpunt maken

Implementeer het geregistreerde model met de Azure Databricks SDK. Deze implementatiestap is hetzelfde als voor elk aangepast model. Alleen de registratiestap (stap 3) verschilt voor express.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import (
    EndpointCoreConfigInput,
    ServedEntityInput,
    ServingModelWorkloadType,
)

ENDPOINT_NAME = "bge-reranker-endpoint"

w = WorkspaceClient()
w.serving_endpoints.create_and_wait(
    name=ENDPOINT_NAME,
    config=EndpointCoreConfigInput(
        name=ENDPOINT_NAME,
        served_entities=[
            ServedEntityInput(
                name="bge-reranker",
                entity_name=model_version.name,
                entity_version=model_version.version,
                workload_type=ServingModelWorkloadType.GPU_SMALL,
                workload_size="Small",
                scale_to_zero_enabled=False,
            )
        ],
    ),
)

create_and_wait wordt geblokkeerd totdat het eindpunt gereed is. GPU_SMALL volstaat voor deze reranker. Omdat de service dezelfde omgevingsversie hergebruikt en de afhankelijkheden herstelt die u in het notebook hebt toegevoegd, wordt het aangeboden model uitgevoerd op dezelfde bibliotheekversies die u hebt ontwikkeld, ongeacht het GPU-type.

Terwijl het eindpunt wordt geïmplementeerd, opent u het tabblad Gebeurtenissen van het eindpunt in de gebruikersinterface van de server. Omdat dit een express-implementatie is, worden in het gebeurtenislogboek geen gebeurtenissen voor het maken van containerimages weergegeven (bij een standaardimplementatie worden Container image creation initiated en vervolgens Container image creation finished successfully weergegeven). Wanneer het eindpunt is voltooid, wordt de status Gereed weergegeven.

Stap 5: Het eindpunt opvragen

Een cross-encoder kent een score toe aan een query ten opzichte van een document, dus verstuur de velden text en text_pair. Bevraag met de Databricks SDK of curl programmatisch.

Databricks SDK

w.serving_endpoints.query(
    name=ENDPOINT_NAME,
    dataframe_records=[
        {"text": "What is Databricks?", "text_pair": "Databricks is a data and AI company."},
    ],
)

curl

curl -X POST \
  -u "token:$DATABRICKS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"dataframe_records":[{"text":"What is Databricks?","text_pair":"Databricks is a data and AI company."}]}' \
  https://<workspace-url>/serving-endpoints/bge-reranker-endpoint/invocations

Het eindpunt retourneert een relevantiescore voor elk querydocumentpaar; hogere scores geven een betere overeenkomst aan. Gebruik deze scores om kandidaatdocumenten opnieuw te rangverwerken.

Voorbeeld van notebook

Importeer het volgende notebook om deze stapsgewijze handleiding van begin tot eind te doorlopen.

Express-reranker-startnotebook

Notebook krijgen

De env_pack parameter

In de bovenstaande quickstart ziet u een snelle implementatie voor een GPU-model. Express-implementaties werken ook voor CPU-modellen. In alle gevallen schakelt u snelle implementatie in door env_pack door te geven aan register_model:

import mlflow
from mlflow.utils.env_pack import EnvPackConfig

mlflow.register_model(
    model_info.model_uri,
    model_name,
    env_pack=EnvPackConfig(name="databricks_model_serving"),
)

env_pack verpakt en zet de modelartefacten en de afhankelijkheden klaar die u op het moment van registratie aan de notebooksessie hebt toegevoegd, waardoor registratie langer duurt dan bij een aanroep zonder env_pack.

EnvPackConfig accepteert een install_dependencies parameter (True standaard). Wanneer True, worden de afhankelijkheden van het model geïnstalleerd in de huidige omgeving om te bevestigen dat de omgeving geldig is.

Note

Registratie kan mislukken in werkruimten zonder internettoegang, of wanneer het model afhankelijk is van aangepaste bibliotheken, als install_dependenciesTrue is. Stel in deze gevallen install_dependencies in op False.

U kunt de tekenreeks "databricks_model_serving"EnvPackConfig(...) vervangen door een afkorting. Het is gelijk aan EnvPackConfig(name="databricks_model_serving", install_dependencies=True).