Expressbereitstellungen für Modellbereitstellungsendpunkte

Auf dieser Seite wird beschrieben, wie Sie Express-Bereitstellungen auf Ihren Endpunkten für die Modellbereitstellung verwenden. Express-Bereitstellungen verkürzen die Bereitstellungszeiten und sorgen dafür, dass die Modellbereitstellungsumgebung dieselbe bleibt wie die Modelltrainingsumgebung.

Note

Expressbereitstellungen wurden zuvor als serverlose optimierte Bereitstellungen bezeichnet.

Was sind Expressbereitstellungen?

Express-Bereitstellungen packen Modellartefakte und stellen sie während der Modellregistrierung in serverlosen Notebook-Umgebungen bereit. Dadurch wird die Bereitstellung von Endpunkten beschleunigt, und die Trainings- und Serving-Umgebungen bleiben konsistent.

Bei Nicht-Express-Bereitstellungen werden Modellartefakte und Umgebungen zum Zeitpunkt der Bereitstellung in Container gepackt, sodass die Serving-Umgebung möglicherweise nicht mit der während des Modelltrainings verwendeten übereinstimmt.

Standard- und Expressbereitstellungen

In der folgenden Tabelle wird eine Standardbereitstellung und eine Expressbereitstellung verglichen.

Aspect Standardbereitstellung Express-Bereitstellung
Wenn die Umgebung erstellt wird Ein Container-Image wird zum Zeitpunkt der Bereitstellung erstellt. Artefakte und die Umgebung werden verpackt, wenn Sie das Modell registrieren.
Schulungs- und Dienstumgebung Die Dienstumgebung entspricht möglicherweise nicht der Schulungsumgebung. Die Dienstumgebung ist identisch mit der Notizbuchumgebung, aus der Sie sich registriert haben.
Bereitstellungsgeschwindigkeit Langsamer. Die Bereitstellung wartet auf die Erstellung eines Container-Images. Schneller. Die Bereitstellung überspringt die Erstellung des Container-Images.
Registrierungsgeschwindigkeit Standard. Fügt je nach Modell und Umgebungsgröße beim Packen einige Sekunden bis zu einer Minute hinzu.
Bereitstellungsereignisprotokoll Zeigt Ereignisse zur Erstellung von Container-Images an. Zeigt keine Ereignisse für die Erstellung von Container-Images an.

Express-Bereitstellungen verschieben die einmalige Paketierungsarbeit auf die Modellregistrierung, was je nach Modell- und Umgebungsgröße einem register_model-Aufruf einige Sekunden bis zu einer Minute hinzufügt. Im Gegenzug ist die Bereitstellung deutlich schneller: sie überspringt die Erstellung des Container-Images vollständig. Dieser Build-Schritt ist auch eine häufige Ursache für Fehler bei der Bereitstellung (Probleme bei der Abhängigkeitsauflösung, Fehler beim Erstellen des Images), sodass durch sein Überspringen eine ganze Klasse von Problemen vermieden wird. Das Bereitstellungsereignisprotokoll für ein Expressmodell enthält keine Containerbuildereignisse.

Requirements

Express-Bereitstellungsendpunkte haben dieselben Anforderungen wie ein Endpunkt für die Modellbereitstellung. Siehe Anforderungen.

Außerdem:

  • Das Modell muss ein benutzerdefiniertes Modell sein.
  • Das Modell muss mit Version 3 oder höher in einem serverlosen Notizbuch protokolliert und registriert werden.
  • Das Modell muss protokolliert und mit mlflow>=3.12 und databricks-sdk>=0.102.0 registriert werden.
  • Das Modell muss im Unity-Katalog registriert sein. Die für die Bereitstellung verwendete Recheninstanz muss mit der Recheninstanz übereinstimmen, von der das Modell registriert wurde. Sie können ein Modell aus einem regulären serverlosen Notebook registrieren, um es auf der CPU bereitzustellen, oder aus serverless GPU compute, um es auf der GPU bereitzustellen.
  • Die maximale Umgebungsgröße des Modells beträgt 200 GB.

Note

Um ein benutzerdefiniertes LLM mithilfe von GPU-Compute mit Express-Bereitstellungen bereitzustellen, siehe Benutzerdefinierte LLMs mit Custom Model Serving bereitstellen.

Bereitstellen eines Rerankers auf GPU

Diese Anleitung stellt BAAI/bge-reranker-base, einen Cross-Encoder-Reranker, bereit, der bewertet, wie gut ein Dokument eine Abfrage beantwortet. Es richtet die Umgebung ein, protokolliert und registriert das Modell mit Expresspaketierung, stellt den Endpunkt bereit und fragt es ab.

GPU-Bereitstellungen schlagen häufig aufgrund von Versionskonflikten bei Abhängigkeiten fehl, zum Beispiel zwischen torch und CUDA. Express-Bereitstellungen lösen dies auf zwei Arten:

  • Die festgelegte, veröffentlichte Sammlung von Bibliotheken, die in jeder serverlosen GPU-Umgebungsversion vorinstalliert ist, ist beim Serving genau wie im Notebook vorhanden – gleiche Umgebungsversion, gleiche Versionen. Diese Bibliotheken werden nicht neu verpackt.
  • Alle zusätzlichen Abhängigkeiten, die Sie in der Notizbuchsitzung installieren (z. B. mit %pip install) werden während der Registrierung gepackt und während der Bereitstellung wiederhergestellt.

Zusammen bedeutet dies, dass ein Modell, das in Ihrem Notizbuch ausgeführt wird, weiterhin funktioniert, wenn es bereitgestellt wird.

Schritt 1: Einrichten eines serverlosen GPU-Notizbuchs

Erstellen Sie ein Notizbuch auf serverloser GPU-Berechnung mit einer A10-GPU, und wählen Sie die Umgebungsversion 5, KI-Umgebung aus. Die KI-Umgebung umfasst PyTorch und allgemeine Machine Learning-Bibliotheken (torch, transformersund andere). Die genau angehefteten Versionen finden Sie unter Serverless GPU Environment, Version 5 (Vorschau).

Installieren Sie die Pakete, die die Expressbereitstellung erfordert:

# 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

Sie können Abhängigkeiten auch über eine serverlose Umgebung deklarieren, aber die Installation im Notizbuch ist der einfachste Pfad. Arbeiten Sie mit den festgelegten Versionen der Umgebung, damit die Notebook-Umgebung mit der Bereitstellungsumgebung übereinstimmt.

Da dieses Modell auf GPU bereitgestellt wird, müssen Sie es über eine serverlose GPU-Laufzeit protokollieren und registrieren. Wenn Sie versehentlich aus einer serverlosen CPU-Compute-Umgebung heraus protokollieren, wird das Modell mit CPU-Abhängigkeiten paketiert, und der GPU-Dienstendpunkt lässt sich nicht starten. Fügen Sie die folgende Überprüfung hinzu, damit der Vorgang sofort fehlschlägt, wenn das Notebook nicht in einer GPU-Laufzeitumgebung ausgeführt wird:

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

Diese Überprüfung ist nur erforderlich, da der Reranker auf GPU bereitgestellt wird. Ein CPU-Modell benötigt es nicht.

Schritt 2: Protokollieren des Modells mit MLflow

Laden Sie den Reranker als text-classification-Pipeline und protokollieren Sie ihn mit dem nativen mlflow.transformers-Flavor. Die native Variante erfasst automatisch die pip-Abhängigkeiten des Modells und wird auf der GPU ausgeführt. Sie müssen weder pip_requirements noch einen task oder einen Einstiegspunkt festlegen.

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

Registrieren Sie das Modell nicht mit dem registered_model_name Argument von log_model. Dieses Argument akzeptiert env_pack nicht, daher wird ein Nicht-Express-Modell registriert. Um die Expressbereitstellung zu aktivieren, registrieren Sie sich in einem separaten Schritt mit register_model (Schritt 3), der akzeptiert env_pack.

Schritt 3: Registrieren des Modells im Unity-Katalog mit Expressverpackung

Registrieren Sie das Modell im Unity-Katalog, und legen Sie den Parameter fest, um die env_pack Expressbereitstellung zu aktivieren. Dadurch werden die Modellartefakte und die Abhängigkeiten gebündelt, die Sie während der Registrierung der Notebook-Sitzung hinzugefügt haben, sodass sie bei der Bereitstellung zusätzlich zu den in der Umgebungsversion vorinstallierten Bibliotheken wiederverwendet werden.

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"),
)

Sie können die Zeichenfolgen-Kurzform env_pack="databricks_model_serving" anstelle von EnvPackConfig(name="databricks_model_serving") verwenden. Für Arbeitsbereiche ohne Internetzugriff oder mit benutzerdefinierten Bibliotheken festlegen install_dependencies=False (siehe Parameterenv_pack).

Die Registrierung erfordert databricks-sdk>=0.102.0. Frühere Versionen können beim Hochladen großer Modellartefakte zu Zeitüberschreitungen führen.

Schritt 4: Erstellen eines Dienstendpunkts

Stellen Sie das registrierte Modell mit dem Azure Databricks SDK bereit. Dieser Bereitstellungsschritt ist identisch mit jedem benutzerdefinierten Modell – nur der Registrierungsschritt (Schritt 3) unterscheidet sich für 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 blockiert, bis der Endpunkt bereit ist. GPU_SMALL reicht für diesen Reranker aus. Da die Bereitstellung dieselbe Umgebungsversion wiederverwendet und die Abhängigkeiten wiederhergestellt, die Sie im Notizbuch hinzugefügt haben, wird das bereitgestellte Modell unabhängig vom GPU-Typ für die gleichen Bibliotheksversionen ausgeführt, für die Sie entwickelt haben.

Während der Endpunkt bereitgestellt wird, öffnen Sie in der Serving-Benutzeroberfläche die Registerkarte Ereignisse des Endpunkts. Da es sich um eine Schnellbereitstellung handelt, zeigt das Ereignisprotokoll keine Ereignisse zur Erstellung von Container-Images an (bei einer Standardbereitstellung werden Container image creation initiated gefolgt von Container image creation finished successfully angezeigt). Wenn der Endpunkt beendet ist, wird der Status "Bereit" angezeigt.

Schritt 5: Abfragen des Endpunkts

Ein Cross-Encoder bewertet eine Abfrage im Verhältnis zu einem Dokument, senden Sie daher die Felder text und text_pair. Abfrage programmgesteuert mit dem Databricks SDK oder curl.

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

Der Endpunkt gibt eine Relevanzbewertung für jedes Abfragedokumentpaar zurück. Höhere Ergebnisse deuten auf eine bessere Übereinstimmung hin. Verwenden Sie diese Bewertungen, um Kandidatendokumente neu zu reranken.

Beispiel-Notebook

Importieren Sie das folgende Notebook, um diese Schritt-für-Schritt-Anleitung von Anfang bis Ende durchzuführen.

Express Reranker Starter-Notizbuch

Notebook abrufen

Der env_pack Parameter

Die oben gezeigte Schnellstartanleitung zeigt eine Expressbereitstellung für ein GPU-Modell. Expressbereitstellungen funktionieren auch für CPU-Modelle. In jedem Fall aktivieren Sie die Express-Bereitstellung, indem Sie env_pack an register_model übergeben:

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 paketiert die Modellartefakte und die Abhängigkeiten, die Sie der Notebook-Sitzung zum Zeitpunkt der Registrierung hinzugefügt haben, und stellt sie bereit, weshalb die Registrierung länger dauert als ein Aufruf ohne env_pack.

EnvPackConfig akzeptiert einen install_dependencies Parameter (True standardmäßig). Wenn True werden die Abhängigkeiten des Modells in der aktuellen Umgebung installiert, um zu bestätigen, dass die Umgebung gültig ist.

Note

Die Registrierung kann in Arbeitsbereichen ohne Internetzugriff fehlschlagen oder wenn das Modell auf benutzerdefinierte Bibliotheken angewiesen ist, wenn install_dependenciesTrue ist. In diesen Fällen install_dependencies auf False setzen.

Sie können die Zeichenfolge "databricks_model_serving"EnvPackConfig(...) als Abkürzung ersetzen. Es entspricht EnvPackConfig(name="databricks_model_serving", install_dependencies=True).