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.
[Empfohlen] Bereitstellen von Basismodellen aus Unity Catalog
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
- Navigieren Sie im Katalog-Explorer zu
system.ai
. - Klicken Sie auf den Namen des Modells, das Sie bereitstellen möchten.
- Klicken Sie auf der Modellseite auf die Schaltfläche Dieses Modell bereitstellen.
- 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 metadata
task
Wert des Schlüssels automatisch fest. Wenn das task
Argument und das metadata
task
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:
- Navigieren Sie zur Bereitstellungs-UI in Ihrem Arbeitsbereich.
- Wählen Sie Bereitstellungsendpunkt erstellen aus.
- 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.
- In der Dropdownliste Nach oben können Sie die maximalen Token pro Sekunde für Ihren Endpunkt konfigurieren.
- Bereitgestellte Durchsatzendpunkte werden automatisch skaliert, sodass Sie Ändern auswählen können, um die Mindesttoken pro Sekunde anzuzeigen, auf die Ihr Endpunkt herunterskalieren kann.
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
Bereitgestellter Durchsatz für das Mistral-Modell-Notebook
Bereitgestellter Durchsatz für das BGE-Modell-Notebook
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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für