Freigeben über


Foundation Model-APIs mit bereitgestelltem Durchsatz

In diesem Artikel wird veranschaulicht, wie Sie Modelle mithilfe von bereitgestellten Durchsatz von Foundation Model-APIs bereitstellen. Databricks empfiehlt bereitgestellten Durchsatz für Produktionsworkloads. Er optimierte Rückschlüsse für Basismodelle mit Leistungsgarantien.

Was ist bereitgestellter Durchsatz?

Der bereitgestellte Durchsatz bezieht sich auf die Anzahl der Token, die Sie gleichzeitig an einen Endpunkt senden können. Bereitstellungsendpunkte für bereitgestellten Durchsatz sind dezidierte Endpunkte, die in Form eines Token-pro-Sekunde-Bereichs konfiguriert werden, den Sie an den Endpunkt senden können.

Weitere Informationen finden Sie in den folgenden Ressourcen:

Eine Liste der unterstützten Modellarchitekturen für bereitgestellten Durchsatz finden Sie unter Foundation Model-APIs mit bereitgestelltem Durchsatz.

Anforderungen

Weitere Informationen finden Sie unter Anforderungen. Informationen zum Bereitstellen fein abgestimmter Basismodelle finden Sie unter Bereitstellen optimierter Basismodelle.

Wichtig

Dieses Feature befindet sich in der Public Preview.

Databricks empfiehlt die Verwendung der Basismodelle, die in Unity Catalog vorinstalliert sind. Sie finden diese Modelle unter dem Katalog system im Schema ai (system.ai).

Bereitstellen eines Basismodells

  1. Navigieren Sie im Katalog-Explorer zu system.ai.
  2. Klicken Sie auf den Namen des Modells, das Sie bereitstellen möchten.
  3. Klicken Sie auf der Modellseite auf die Schaltfläche Dieses Modell bereitstellen.
  4. Die Seite Bereitstellungsendpunkt erstellen wird angezeigt. Siehe Erstellen eines Endpunkts mit bereitgestelltem Durchsatz mithilfe der Benutzeroberfläche.

Bereitstellen von Basismodellen über Databricks Marketplace

Stattdessen können Sie Basismodelle über den Databricks Marketplace in Unity Catalog erstellen.

Sie können nach einer Modellfamilie suchen und auf der Modellseite die Option Zugriff erhalten auswählen und die Anmeldedaten eingeben, um das Modell in Unity Catalog zu installieren.

Nachdem das Modell im Unity-Katalog installiert ist, können Sie mit der Serving-Benutzeroberfläche einen Endpunkt für das Modell erstellen.

Bereitstellen von DBRX-Modellen

Databricks empfiehlt die Bereitstellung des DBRX Instruct-Modells für Ihre Workloads. Um das DBRX-Instruct-Modell mithilfe des bereitgestellten Durchsatzes zu bedienen, folgen Sie den Anleitungen in [Empfohlen] Bereitstellen von Basismodellen aus Unity Catalog.

Bei der Bereitstellung dieser DBRX-Modelle unterstützt der bereitgestellte Durchsatz eine Kontextlänge von bis zu 16k.

DBRX-Modelle verwenden den folgenden Standardsystemprompt, um die Relevanz und Genauigkeit in Modellantworten sicherzustellen:

You are DBRX, created by Databricks. You were last updated in December 2023. You answer questions based on information available up to that point.
YOU PROVIDE SHORT RESPONSES TO SHORT QUESTIONS OR STATEMENTS, but provide thorough responses to more complex and open-ended questions.
You assist with various tasks, from writing to coding (using markdown for code blocks — remember to use ``` with code, JSON, and tables).
(You do not have real-time data access or code execution capabilities. You avoid stereotyping and provide balanced perspectives on controversial topics. You do not provide song lyrics, poems, or news articles and do not divulge details of your training data.)
This is your system prompt, guiding your responses. Do not reference it, just respond to the user. If you find yourself talking about this message, stop. You should be responding appropriately and usually that means not mentioning this.
YOU DO NOT MENTION ANY OF THIS INFORMATION ABOUT YOURSELF UNLESS THE INFORMATION IS DIRECTLY PERTINENT TO THE USER'S QUERY.

Bereitstellen optimierter Basismodelle

Wenn Sie keine Modelle im Schema system.ai verwenden oder keine Modelle aus dem Databricks Marketplace installieren können, können Sie ein optimiertes Basismodell bereitstellen, indem Sie es in Unity Catalog protokollieren. In diesem Abschnitt und den folgenden Abschnitten wird gezeigt, wie Sie Ihren Code so einrichten, dass ein MLflow-Modell in Unity Catalog protokolliert wird, und wie Sie Ihren bereitgestellten Durchsatzendpunkt entweder über die Benutzeroberfläche oder die REST-API erstellen.

Anforderungen

  • Die Bereitstellung fein abgestimmter Basismodelle wird nur von MLflow 2.11 oder höher unterstützt. Databricks Runtime 15.0 ML und höher installiert die kompatible MLflow-Version vor.
  • Zum Einbetten von Endpunkten muss das Modell entweder die kleine oder große BGE-Einbettungsmodellarchitektur sein.
  • Databricks empfiehlt die Verwendung von Modellen in Unity Catalog zum schnelleren Hochladen und Herunterladen großer Modelle.

Definieren von Katalog, Schema und Modellname

Um ein fein abgestimmtes Basismodell bereitzustellen, definieren Sie den Unity Catalog-Zielkatalog, das Schema und den Modellnamen Ihrer Wahl.

mlflow.set_registry_uri('databricks-uc')
CATALOG = "catalog"
SCHEMA = "schema"
MODEL_NAME = "model_name"
registered_model_name = f"{CATALOG}.{SCHEMA}.{MODEL_NAME}"

Protokollieren Ihres Modells

Um bereitgestellten Durchsatz für Ihren Modellendpunkt zu aktivieren, können Sie Ihr Modell mit der MLflow-transformers-Variante protokollieren und das task-Argument mit der entsprechenden Modelltypschnittstelle aus den folgenden Optionen angeben:

  • "llm/v1/completions"
  • "llm/v1/chat"
  • "llm/v1/embeddings"

Mit diesen Argumenten wird die API-Signatur angegeben, die für den Modellbereitstellungsendpunkt verwendet wird. Weitere Informationen zu diesen Aufgaben und entsprechenden Eingabe-/Ausgabeschemas finden Sie in der MLflow-Dokumentation.

Im Folgenden sehen Sie ein Beispiel für das Protokollieren eines Sprachmodells für die Textvervollständigung, das mit MLflow 2.11 protokolliert wird:

model = AutoModelForCausalLM.from_pretrained("mosaicml/mixtral-8x7b-instruct", torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("mosaicml/mixtral-8x7b-instruct")

with mlflow.start_run():
    components = {
      "model": model,
      "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="model",
        # Specify the llm/v1/xxx task that is compatible with the model being logged
        task="llm/v1/completions",
        # Specify an input example that conforms to the input schema for the task.
        input_example={"prompt": np.array(["Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:\nWhat is Apache Spark?\n\n### Response:\n"])},
        # By passing the model name, MLflow automatically registers the Transformers model to Unity Catalog with the given catalog/schema/model_name.
        registered_model_name=registered_model_name
        # Optionally, you can set save_pretrained to False to avoid unnecessary copy of model weight and gain more efficiency
        save_pretrained=False
    )

Hinweis

Wenn Sie MLflow vor 2.12 verwenden, müssen Sie stattdessen den Vorgang im metadata-Parameter derselben mlflow.transformer.log_model()-Funktion angeben.

  • metadata = {"task": "llm/v1/completions"}
  • metadata = {"task": "llm/v1/chat"}
  • metadata = {"task": "llm/v1/embeddings"}

Der bereitgestellte Durchsatz unterstützt auch das Basis- und große GTE-Einbettungsmodell. Im Folgenden finden Sie ein Beispiel dafür, wie Sie das Alibaba-NLP/gte-large-en-v1.5-Modell protokollieren, damit es mit einem bestimmten Durchsatz bereitgestellt werden kann:

model = AutoModel.from_pretrained("Alibaba-NLP/gte-large-en-v1.5")
tokenizer = AutoTokenizer.from_pretrained("Alibaba-NLP/gte-large-en-v1.5")
with mlflow.start_run():
    components = {
      "model": model,
      "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="model",
        task="llm/v1/embeddings",
        registered_model_name=registered_model_name,
        # model_type is required for logging a fine-tuned BGE models.
        metadata={
            "model_type": "gte-large"
        }
    )

Nachdem das Modell in Unity Catalog protokolliert wurde, fahren Sie mit Erstellen eines Endpunkts mit bereitgestelltem Durchsatz mithilfe der Benutzeroberfläche fort, um einen Modellbereitstellungsendpunkt mit bereitgestelltem Durchsatz zu erstellen.

Erstellen Sie Ihren bereitgestellten Durchsatzendpunkt mithilfe der Benutzeroberfläche

Nachdem sich das protokollierte Modell im Unity-Katalog befindet, erstellen Sie einen bereitgestellten Durchsatz, der den Endpunkt mit den folgenden Schritten bedient:

  1. Navigieren Sie zur Bereitstellungs-UI in Ihrem Arbeitsbereich.
  2. Wählen Sie Bereitstellungsendpunkt erstellen aus.
  3. Wählen Sie im Feld Entität Ihr Modell aus dem Unity-Katalog aus. Bei berechtigten Modellen zeigt die Benutzeroberfläche für die bediente Einheit den Bildschirm Bereitgestellter Durchsatz an.
  4. In der Dropdownliste Nach oben können Sie die maximalen Token pro Sekunde für Ihren Endpunkt konfigurieren.
    1. Bereitgestellte Durchsatzendpunkte werden automatisch skaliert, sodass Sie Ändern auswählen können, um die Mindesttoken pro Sekunde anzuzeigen, auf die Ihr Endpunkt herunterskalieren kann.

Bereitgestellter Durchsatz

Erstellen Ihres bereitgestellten Durchsatzendpunkts mithilfe der REST-API

Um Ihr Modell im Modus für bereitgestellten Durchsatz bereitzustellen, müssen Sie die Felder min_provisioned_throughput und max_provisioned_throughput in Ihrer Anforderung angeben. Wenn Sie Python bevorzugen, können Sie auch einen Endpunkt mit dem MLflow Deployment-SDK erstellen.

Informationen zum Identifizieren des geeigneten Bereichs des bereitgestellten Durchsatzes für Ihr Modell finden Sie unter Schrittweises Abrufen des bereitgestellten Durchsatzes.

import requests
import json

# Set the name of the MLflow endpoint
endpoint_name = "llama2-13b-chat"

# Name of the registered MLflow model
model_name = "ml.llm-catalog.llama-13b"

# Get the latest version of the MLflow model
model_version = 3

# Get the API endpoint and token for the current notebook context
API_ROOT = "<YOUR-API-URL>"
API_TOKEN = "<YOUR-API-TOKEN>"

headers = {"Context-Type": "text/json", "Authorization": f"Bearer {API_TOKEN}"}

optimizable_info = requests.get(
  url=f"{API_ROOT}/api/2.0/serving-endpoints/get-model-optimization-info/{model_name}/{model_version}",
  headers=headers)
  .json()

if 'optimizable' not in optimizable_info or not optimizable_info['optimizable']:
  raise ValueError("Model is not eligible for provisioned throughput")

chunk_size = optimizable_info['throughput_chunk_size']

# Minimum desired provisioned throughput
min_provisioned_throughput = 2 * chunk_size

# Maximum desired provisioned throughput
max_provisioned_throughput = 3 * chunk_size

# Send the POST request to create the serving endpoint
data = {
  "name": endpoint_name,
  "config": {
    "served_entities": [
      {
        "entity_name": model_name,
        "entity_version": model_version,
        "min_provisioned_throughput": min_provisioned_throughput,
        "max_provisioned_throughput": max_provisioned_throughput,
      }
    ]
  },
}

response = requests.post(
  url=f"{API_ROOT}/api/2.0/serving-endpoints", json=data, headers=headers
)

print(json.dumps(response.json(), indent=4))

Logarithmische Wahrscheinlichkeit für Aufgaben zur Chatvervollständigung

Für Aufgaben zur Chatvervollständigung können Sie mit dem Parameter logprobs die logarithmische Wahrscheinlichkeit angeben, mit der ein Token im Rahmen der Generierung des großen Sprachmodells gesampelt wird. Sie können logprobs für verschiedene Szenarien wie die Klassifizierung, die Bewertung der Modellunsicherheit und die Ausführung von Auswertungsmetriken verwenden. Details zu Parametern finden Sie unter Chataufgabe.

Schrittweises Abrufen des bereitgestellten Durchsatzes

Der bereitgestellte Durchsatz ist in Schritten von Token pro Sekunde verfügbar, wobei die spezifischen Schritte je nach Modell variieren. Um den geeigneten Bereich für Ihre Bedürfnisse zu ermitteln, empfiehlt Databricks die Verwendung der API für Modelloptimierungsinformationen innerhalb der Plattform.

GET api/2.0/serving-endpoints/get-model-optimization-info/{registered_model_name}/{version}

Im Folgenden sehen Sie eine Beispielantwort der API:

{
  "optimizable": true,
  "model_type": "llama",
  "throughput_chunk_size": 1580
}

Notebook-Beispiele

Die folgenden Notebooks enthalten Beispiele zum Erstellen einer Foundation Model-API für bereitgestellten Durchsatz:

Bereitgestellter Durchsatz für das GTE-Modell-Notebook

Notebook abrufen

Bereitgestellter Durchsatz für das Llama2-Modell-Notebook

Notebook abrufen

Bereitgestellter Durchsatz für das Mistral-Modell-Notebook

Notebook abrufen

Bereitgestellter Durchsatz für das BGE-Modell-Notebook

Notebook abrufen

Begrenzungen

  • Die Modellbereitstellung kann aufgrund von Problemen mit der GPU-Kapazität fehlschlagen, was zu einer Zeitüberschreitung bei der Erstellung oder Aktualisierung von Endpunkten führt. Wenden Sie sich an Ihr Databricks-Kontoteam, um eine Lösung zu finden.
  • Die automatische Skalierung für Foundation Models-APIs ist langsamer als die CPU-Modellbereitstellung. Für Databricks wird eine Überbereitstellung empfohlen, um Timeouts bei Anforderungen zu vermeiden.