Freigeben über


Foundation Model-APIs mit bereitgestelltem Durchsatz

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

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

Anforderungen

Weitere Informationen finden Sie unter Anforderungen.

Bei der Bereitstellung optimierter Basismodelle gilt Folgendes:

  • Ihr Modell muss mit MLflow 2.11 oder höher ODER Databricks Runtime 15.0 ML oder höher protokolliert werden.
  • Databricks empfiehlt die Verwendung von Modellen in Unity Catalog zum schnelleren Hochladen und Herunterladen großer Modelle.

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.

Feinabgestimmte Basismodelle protokollieren

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. Im Folgenden wird gezeigt, wie Sie Ihren Code so einrichten, dass ein MLflow-Modell im Unity-Katalog protokolliert wird:

mlflow.set_registry_uri('databricks-uc')
CATALOG = "ml"
SCHEMA = "llm-catalog"
MODEL_NAME = "mpt" # or "bge"
registered_model_name = f"{CATALOG}.{SCHEMA}.{MODEL_NAME}"

Sie können Ihr Modell mit der MLflow transformers-Variante protokollieren und das Aufgabenargument mit der entsprechenden Modelltypschnittstelle aus den folgenden Optionen angeben:

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

Diese Argumente geben die API-Signatur an, die für den Modellbereitstellungsendpunkt verwendet wird, und Modelle, die auf diese Weise protokolliert werden, sind für den bereitgestellten Durchsatz berechtigt.

Vom Paket protokollierte sentence_transformers Modelle unterstützen auch die Definition des "llm/v1/embeddings" Endpunkttyps.

Bei Modellen, die mit MLflow 2.12 oder höher protokolliert werden, legt das log_model Argument task den metadatatask Wert des Schlüssels automatisch fest. Wenn das task Argument und das metadatatask Argument auf unterschiedliche Werte festgelegt sind, wird ein Exception ausgelöst.

Im Folgenden sehen Sie ein Beispiel für das Protokollieren eines Textvervollständigen-Sprachmodells, das mit MLflow 2.12 oder höher protokolliert wird:

model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-instruct",torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-instruct")
with mlflow.start_run():
    components = {
        "model": model,
        "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="model",
        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"])},
        task="llm/v1/completions",
        registered_model_name=registered_model_name
    )

Für Modelle, die mit MLflow 2.11 oder höher protokolliert werden, können Sie die Schnittstelle für den Endpunkt mithilfe der folgenden Metadatenwerte angeben:

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

Im Folgenden sehen Sie ein Beispiel für das Protokollieren eines Textvervollständigen-Sprachmodells, das mit MLflow 2.11 oder höher protokolliert wird:

model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-instruct",torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-instruct")
with mlflow.start_run():
    components = {
        "model": model,
        "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="model",
        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"])},
        task="llm/v1/completions",
        metadata={"task": "llm/v1/completions"},
        registered_model_name=registered_model_name
    )

Der bereitgestellte Durchsatz unterstützt auch das kleine und große BGE-Einbettungsmodell. Im Folgenden finden Sie ein Beispiel dafür, wie Sie das Modell BAAI/bge-small-en-v1.5 protokollieren, damit es mit MLflow 2.11 oder höher bereitgestellt werden kann:

model = AutoModel.from_pretrained("BAAI/bge-small-en-v1.5")
tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-small-en-v1.5")
with mlflow.start_run():
    components = {
        "model": model,
        "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="bge-small-transformers",
        task="llm/v1/embeddings",
        metadata={"task": "llm/v1/embeddings"},  # not needed for MLflow >=2.12.1
        registered_model_name=registered_model_name
    )

Beim Protokollieren eines optimierten BGE-Modells müssen Sie auch model_type Metadatenschlüssel angeben:

metadata={
    "task": "llm/v1/embeddings",
    "model_type": "bge-large"  # Or "bge-small"
}

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. Für berechtigte Modelle zeigt die Benutzeroberfläche für die bereitgestellte Entität 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.

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 = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiUrl().get()
API_TOKEN = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiToken().get()

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

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 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.

Zusätzliche Ressourcen