Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ta strona opisuje, jak używać wdrożeń ekspresowych na endpointach obsługi modeli. Wdrożenia ekspresowe obniżają czas wdrażania i utrzymują środowisko obsługujące model tak samo jak środowisko trenowania modelu.
Note
Wdrożenia ekspresowe były wcześniej nazywane wdrożeniami zoptymalizowanymi pod kątem bezserwerowym.
Co to są wdrożenia ekspresowe?
Wdrożenia Express pakietują i przygotowują artefakty modelu w bezserwerowych środowiskach notebooków podczas rejestracji modelu. Przyspiesza to wdrażanie punktów końcowych i zapewnia spójność środowisk trenowania i obsługi.
W przypadku wdrożeń nieekspresowych artefakty modelu i środowiska są pakowane do kontenerów w czasie wdrażania, więc środowisko serwujące może nie być zgodne z tym, które było używane podczas trenowania modelu.
Wdrożenia standardowe i ekspresowe
W poniższej tabeli porównaliśmy standardowe wdrożenie i wdrożenie ekspresowe.
| Aspekt | Wdrażanie standardowe | Wdrożenie ekspresowe |
|---|---|---|
| Gdy środowisko jest kompilowane | Obraz kontenera jest kompilowany w czasie wdrażania. | Artefakty i środowisko są pakowane podczas rejestrowania modelu. |
| Środowisko trenowania i obsługi | Środowisko obsługujące może nie być zgodne ze środowiskiem trenowania. | Środowisko serwujące jest identyczne ze środowiskiem notatnika, z którego dokonano rejestracji. |
| Szybkość wdrażania | Wolniej. Wdrożenie czeka na kompilację obrazu kontenera. | Szybciej. Wdrożenie pomija kompilację obrazu kontenera. |
| Szybkość rejestracji | Standard | Wydłuża proces pakowania o od kilku sekund do minuty, w zależności od modelu i wielkości środowiska. |
| Dziennik zdarzeń wdrażania | Pokazuje zdarzenia tworzenia obrazu kontenera. | Nie pokazuje zdarzeń tworzenia obrazu kontenera. |
Wdrożenia ekspresowe przenoszą jednorazowy etap pakowania na etap rejestracji modelu, co wydłuża wywołanie register_model o od kilku sekund do minuty, w zależności od rozmiaru modelu i środowiska. W zamian wdrożenie jest znacznie szybsze: całkowicie pomija kompilację obrazu kontenera. Ta kompilacja jest również typowym źródłem niepowodzeń wdrażania (rozwiązywanie zależności, błędy kompilacji obrazu), dlatego pomijanie tej kompilacji spowoduje usunięcie całej klasy problemów. Dziennik zdarzeń wdrażania dla modelu ekspresowego nie zawiera zdarzeń kompilacji kontenera.
Requirements
Punkty końcowe wdrożenia ekspresowego mają takie same wymagania jak punkt końcowy obsługujący model. Zobacz Wymagania.
Dodatkowo:
- Model musi być modelem niestandardowym
- Model musi być rejestrowany i zarejestrowany w notesie bezserwerowym przy użyciu wersji 3 lub nowszej
- Model musi zostać zalogowany i zarejestrowany w
mlflow>=3.12idatabricks-sdk>=0.102.0 - Model musi być zarejestrowany w Unity Catalog. Zasoby obliczeniowe używane do obsługi modelu muszą odpowiadać zasobom obliczeniowym, przy użyciu których model został zarejestrowany. Możesz zarejestrować się z zwykłego notesu bezserwerowego do obsługi procesora CPU lub z bezserwerowego procesora GPU do obsługi na procesorze GPU.
- Maksymalny rozmiar środowiska modelu wynosi 200 GB
Note
Aby udostępnić niestandardowy model LLM na infrastrukturze GPU przy użyciu wdrożeń ekspresowych, zobacz Udostępnianie niestandardowych modeli LLM za pomocą funkcji Custom Model Serving.
Wdróż model rerankujący na GPU
W tym przewodniku opisano wdrożenie BAAI/bge-reranker-base, rankera ponownie porządkującego typu cross-encoder, który ocenia, jak trafnie dokument odpowiada na zapytanie. Konfiguruje środowisko, rejestruje zdarzenia i rejestruje model przy użyciu pakowania ekspresowego, wdraża punkt końcowy i wysyła do niego zapytania.
Wdrożenia procesora GPU często kończą się niepowodzeniem z powodu konfliktów wersji zależności, na przykład torch i CUDA. Wdrożenia ekspresowe rozwiązują to na dwa sposoby:
- Stały, opublikowany zestaw bibliotek wstępnie zainstalowanych w każdej wersji bezserwerowego środowiska GPU jest dostępny podczas serwowania dokładnie tak samo jak w notatniku — ta sama wersja środowiska, te same wersje bibliotek. Te biblioteki nie są ponownie pakowane.
- Wszystkie dodatkowe zależności zainstalowane w sesji notatnika (na przykład za pomocą
%pip install) są pakowane podczas rejestracji i przywracane podczas udostępniania.
Łącznie oznacza to, że model, który działa w Twoim notebooku, nadal działa po wdrożeniu.
Krok 1: Skonfiguruj bezserwerowy notatnik GPU
Utwórz notes na bezserwerowych obliczeniach procesora GPU przy użyciu procesora GPU A10 i wybierz środowisko w wersji 5, środowisko sztucznej inteligencji. Środowisko sztucznej inteligencji obejmuje biblioteki PyTorch i typowe biblioteki uczenia maszynowego (torch, transformersi inne). Aby uzyskać dokładne przypięte wersje, zobacz Środowisko bezserwerowego procesora GPU w wersji 5 (wersja zapoznawcza).
Zainstaluj pakiety, których wdrożenie ekspresowe wymaga:
# 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
Zależności można również zadeklarować za pośrednictwem środowiska bezserwerowego, ale instalowanie w notesie jest najprostszą ścieżką. Twórz w oparciu o przypięte wersje środowiska, aby środowisko notatnika było zgodne ze środowiskiem wdrożeniowym.
Ponieważ ten model jest obsługiwany na procesorze GPU, należy zarejestrować go w środowisku uruchomieniowym bezserwerowego procesora GPU. Jeśli przypadkowo zarejestrujesz model przy użyciu bezserwerowego środowiska obliczeniowego CPU, model zostanie spakowany z zależnościami CPU, a punkt końcowy udostępniania na GPU nie uruchomi się. Dodaj następujące sprawdzenie, aby szybko zakończyć się niepowodzeniem, jeśli notes nie znajduje się w środowisku uruchomieniowym procesora GPU:
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
Ta kontrola jest wymagana tylko dlatego, że reranker jest obsługiwany na procesorze GPU. Model procesora tego nie potrzebuje.
Krok 2. Rejestrowanie modelu za pomocą biblioteki MLflow
Załaduj reranker jako pipeline text-classification i zaloguj go za pomocą natywnego flavoru mlflow.transformers. Wersja natywna automatycznie wykrywa zależności pip modelu i uruchamia się na GPU. Nie trzeba ustawiać pip_requirements, , taskani punktu wejścia.
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
Nie rejestruj modelu za pomocą argumentu registered_model_name elementu log_model. Ten argument nie akceptuje env_pack, więc rejestruje model bez wyrażenia. Aby włączyć wdrażanie ekspresowe, zarejestruj się w oddzielnym kroku za pomocą register_model (krok 3), który obsługuje env_pack.
Krok 3: Zarejestruj model w Unity Catalog przy użyciu pakietowania ekspresowego
Zarejestruj model w usłudze Unity Catalog i ustaw parametr env_pack, aby włączyć szybkie wdrażanie. Spowoduje to skonfigurowanie artefaktów modelu i zależności dodanych do sesji notesu podczas rejestracji, dzięki czemu usługa ponownie używa ich na podstawie wstępnie zainstalowanych bibliotek wersji środowiska.
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"),
)
Możesz użyć skrótu ciągu znaków env_pack="databricks_model_serving" zamiast EnvPackConfig(name="databricks_model_serving"). W przypadku obszarów roboczych bez dostępu do internetu lub z bibliotekami niestandardowymi ustaw install_dependencies=False (zobacz parametr env_pack).
Rejestracja wymaga databricks-sdk>=0.102.0. We wcześniejszych wersjach podczas przesyłania dużych artefaktów modelu może dochodzić do przekroczenia limitu czasu.
Krok 4. Tworzenie punktu końcowego obsługującego
Wdróż zarejestrowany model przy użyciu zestawu AZURE DATABRICKS SDK. Ten krok wdrażania jest taki sam jak w przypadku dowolnego modelu niestandardowego — tylko krok rejestracji (krok 3) różni się w przypadku modelu ekspresowego.
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 blokuje, dopóki punkt końcowy nie będzie gotowy.
GPU_SMALL jest wystarczająca dla tego mechanizmu przeregowywania. Ponieważ udostępnianie ponownie wykorzystuje tę samą wersję środowiska i przywraca zależności dodane w notatniku, udostępniony model działa z użyciem tych samych wersji bibliotek, z których korzystano podczas jego tworzenia, niezależnie od typu procesora GPU.
Podczas wdrażania punktu końcowego otwórz kartę Zdarzenia tego punktu końcowego w interfejsie użytkownika Serving. Ponieważ jest to wdrożenie ekspresowe, dziennik zdarzeń nie pokazuje zdarzeń tworzenia obrazu kontenera (standardowe wdrożenie pokazuje Container image creation initiated po nim Container image creation finished successfully). Po zakończeniu działania punktu końcowego jego stan to Gotowe.
Krok 5. Wykonywanie zapytań względem punktu końcowego
Koder krzyżowy ocenia zapytanie względem dokumentu, więc wyślij text i text_pair pola. Wykonuj zapytania programowo przy użyciu pakietu Databricks SDK lub narzędzia 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
Punkt końcowy zwraca ocenę istotności dla każdej pary dokumentów zapytań; wyższe wyniki wskazują lepsze dopasowanie. Użyj tych wyników, aby ponownie uszeregować dokumenty kandydujące.
Przykładowy notatnik
Zaimportuj poniższy notatnik, aby przejść przez ten samouczek od początku do końca.
Notatnik startowy Express Reranker
Parametr env_pack
W powyższym przewodniku Szybki start przedstawiono ekspresowe wdrożenie modelu procesora GPU. Wdrożenia ekspresowe działają również dla modeli procesora CPU. W każdym przypadku włączasz szybkie wdrażanie, przekazując element env_pack do 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 pakuje i przygotowuje artefakty modelu oraz zależności dodane do sesji notatnika w momencie rejestracji, dlatego proces rejestracji trwa dłużej niż wywołanie bez env_pack.
EnvPackConfig przyjmuje parametr install_dependencies (domyślnie True). Gdy True, zależności modelu są instalowane w bieżącym środowisku, aby potwierdzić, że środowisko jest prawidłowe.
Note
Rejestracja może zakończyć się niepowodzeniem w obszarach roboczych bez dostępu do Internetu lub gdy model zależy od bibliotek niestandardowych, jeśli install_dependencies ma wartość True. W takich przypadkach ustaw install_dependencies na False.
Możesz użyć ciągu "databricks_model_serving" zamiast EnvPackConfig(...) jako skrótu. Jest odpowiednikiem EnvPackConfig(name="databricks_model_serving", install_dependencies=True).