Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird die Unterstützung für benutzerdefinierte Modelle mit Mosaik AI Model Serving beschrieben. Es enthält Details zu unterstützten Modellprotokollierungsoptionen und Computing-Typen, zum Bereitstellen von Modellabhängigkeiten für die Bereitstellung sowie zu Erwartungen an das Erstellen und Skalieren von Endpunkten.
Was sind benutzerdefinierte Modelle?
Model Serving kann jedes Python-Modell oder benutzerdefinierten Code als API auf Produktionsniveau mithilfe von CPU- oder GPU-Computeressourcen bereitstellen. Databricks bezeichnet solche Modelle als benutzerdefinierte Modelle. Diese ML-Modelle können mit ML-Standardbibliotheken wie scikit-learn, XGBoost, PyTorch und HuggingFace-Transformatoren trainiert werden und können jeden Python-Code enthalten.
So stellen Sie ein benutzerdefiniertes Modell bereit:
- Protokollieren Sie das Modell oder den Code im MLflow-Format, indem Sie entweder systemeigene integrierte MLflow-Varianten oder Pyfunc verwenden.
- Registrieren Sie das Modell anschließend im Unity Catalog (empfohlen) oder in der Arbeitsbereichsregistrierung.
- Jetzt können Sie einen Modellbereitstellungsendpunkt erstellen, um Ihr Modell bereitzustellen und abzufragen.
- Weitere Informationen finden Sie unter Erstellen von benutzerdefinierten Modellbereitstellungsendpunkten.
- Siehe Abfragen von Bereitstellungsendpunkten für benutzerdefinierte Modelle.
Ein vollständiges Tutorial zum Bereitstellen von benutzerdefinierten Modellen auf Databricks finden Sie im Modellbereitstellungstutorial.
Databricks unterstützt auch die Bereitstellung von Foundation-Modellen für generative KI-Anwendungen, siehe Foundation Model-APIs und externe Modelle für unterstützte Modelle und Computeangebote.
Protokollieren von ML-Modellen
Es gibt verschiedene Methoden zum Protokollieren Ihres ML-Modells für die Modellbereitstellung. In der folgenden Liste sind die unterstützten Methoden und Beispiele zusammengefasst.
Automatische Protokollierung: Diese Methode wird automatisch aktiviert, wenn Databricks Runtime für ML verwendet wird.
import mlflow from sklearn.ensemble import RandomForestRegressor from sklearn.datasets import load_iris iris = load_iris() model = RandomForestRegressor() model.fit(iris.data, iris.target)Protokollieren Sie mit den integrierten Varianten von MLflow. Sie können diese Methode verwenden, wenn Sie das Modell manuell protokollieren möchten, um eine detailliertere Steuerung zu erhalten.
import mlflow from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_iris iris = load_iris() model = RandomForestClassifier() model.fit(iris.data, iris.target) with mlflow.start_run(): mlflow.sklearn.log_model(model, "random_forest_classifier")Benutzerdefinierte Protokollierung mit
pyfunc: Sie können diese Methode verwenden, um beliebige Python-Codemodelle bereitzustellen oder zusätzlichen Code zusammen mit Ihrem Modell bereitzustellen.import mlflow import mlflow.pyfunc class Model(mlflow.pyfunc.PythonModel): def predict(self, context, model_input): return model_input * 2 with mlflow.start_run(): mlflow.pyfunc.log_model("custom_model", python_model=Model())
- Downloaden von HuggingFace. Sie können ein Modell direkt von Hugging Face herunterladen und dieses Modell zur Bereitstellung protokollieren. Beispiele finden Sie unter Notebookbeispiele.
Signatur- und Eingabebeispiele
Das Hinzufügen eines Signatur- und Eingabebeispiels zu MLflow wird empfohlen. Signaturen sind für die Protokollierung von Modellen im Unity Catalog erforderlich.
Nachfolgend sehen Sie ein Signaturbeispiel:
from mlflow.models.signature import infer_signature
signature = infer_signature(training_data, model.predict(training_data))
mlflow.sklearn.log_model(model, "model", signature=signature)
Nachfolgend sehen Sie ein Eingabebeispiel:
input_example = {"feature1": 0.5, "feature2": 3}
mlflow.sklearn.log_model(model, "model", input_example=input_example)
Computetyp
Mosaic AI Model Serving bietet eine Vielzahl von CPU- und GPU-Optionen für die Bereitstellung Ihres Modells. Bei der Bereitstellung mit einer GPU müssen Sie sicherstellen, dass Ihr Code so eingerichtet ist, dass Vorhersagen auf der GPU ausgeführt werden, indem Sie die von Ihrem Framework bereitgestellten Methoden verwenden. MLflow führt dies automatisch für Modelle aus, die mit den PyTorch- oder Transformers-Varianten protokolliert werden.
| Workloadtyp | GPU-Instanz | Gedächtnis |
|---|---|---|
CPU |
4 GB pro Parallelität | |
GPU_SMALL |
1xT4 | 16 GB |
GPU_LARGE |
1xA100 | 80 GB |
GPU_LARGE_2 |
2xA100 | 160 GB |
GPU_LARGE_4 |
4xA100 | 320 GB |
Bereitstellungscontainer und Abhängigkeiten
Während der Bereitstellung wird ein Container auf Produktionsniveau erstellt und als Endpunkt bereitgestellt. Dieser Container enthält Bibliotheken, die automatisch erfasst oder im MLflow-Modell angegeben werden. Das Basisimage kann einige Abhängigkeiten auf Systemebene enthalten, aber Abhängigkeiten auf Anwendungsebene müssen explizit im MLflow-Modell angegeben werden.
Wenn nicht alle erforderlichen Abhängigkeiten im Modell enthalten sind, treten möglicherweise Abhängigkeitsfehler während der Bereitstellung auf. Wenn Modellbereitstellungsprobleme auftreten, empfiehlt Databricks, das Modell lokal zu testen.
Paket- und Codeabhängigkeiten
Benutzerdefinierte oder private Bibliotheken können Ihrer Bereitstellung hinzugefügt werden. Siehe Verwenden benutzerdefinierter Python-Bibliotheken mit Model Serving.
Bei nativen MLflow-Modellvarianten werden die erforderlichen Paketabhängigkeiten automatisch erfasst.
Für benutzerdefinierte pyfunc/Modelle können Abhängigkeiten explizit hinzugefügt werden. Ausführliche Informationen zu Protokollierungsanforderungen und bewährten Methoden finden Sie in der Dokumentation zu MLflow-Modellen und in der MLflow Python-API-Referenz.
So können Sie Paketabhängigkeiten hinzufügen:
Mithilfe des
pip_requirements-Parameters:mlflow.sklearn.log_model(model, "sklearn-model", pip_requirements = ["scikit-learn", "numpy"])Mithilfe des
conda_env-Parameters:conda_env = { 'channels': ['defaults'], 'dependencies': [ 'python=3.7.0', 'scikit-learn=0.21.3' ], 'name': 'mlflow-env' } mlflow.sklearn.log_model(model, "sklearn-model", conda_env = conda_env)Verwenden Sie
extra_pip_requirements, um zusätzliche Anforderungen, die nicht automatisch erfasst werden, einzuschließen.mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements = ["sklearn_req"])
Wenn Sie über Codeabhängigkeiten verfügen, können diese mithilfe von code_path angegeben werden.
mlflow.sklearn.log_model(model, "sklearn-model", code_path=["path/to/helper_functions.py"],)
Informationen zum Überprüfen und Aktualisieren von Abhängigkeiten vor der Bereitstellung finden Sie unter Vorabbereitstellungsüberprüfung für model Serving.
Erwartungen und Einschränkungen
Hinweis
Die Informationen in diesem Abschnitt gelten nicht für Endpunkte, die Basismodelle oder externe Modelle bereitstellen.
In den folgenden Abschnitten werden bekannte Erwartungen und Einschränkungen für die Bereitstellung von benutzerdefinierten Modellen mithilfe von Model Serving beschrieben.
Erwartungen an die Erstellung und Aktualisierung von Endpunkten
- Bereitstellungszeit: Das Bereitstellen einer neu registrierten Modellversion umfasst das Packen des Modells und seiner Modellumgebung und die Bereitstellung des Modellendpunkts selbst. Dieser Vorgang kann ungefähr 10 Minuten dauern, kann jedoch je nach Modellkomplexität, Größe und Abhängigkeiten länger dauern.
- Updates ohne Ausfallzeiten: Azure Databricks führt ein Zero-Downtime-Update von Endpunkten durch, indem die vorhandene Endpunktkonfiguration aktualisiert wird, bis die neue bereit ist. Dadurch wird das Risiko von Unterbrechungen für verwendete Endpunkte reduziert. Während dieses Updatevorgangs werden Sie sowohl für die alten als auch für die neuen Endpunktkonfigurationen in Rechnung gestellt, bis der Übergang abgeschlossen ist.
- Anforderungszeitüberschreitung: Wenn die Modellberechnung länger als 297 Sekunden dauert, laufen die Anforderungen ab.
Wichtig
Databricks führt gelegentlich Systemupdates ohne Downtime und Wartung auf vorhandenen Modellbereitstellungsendpunkten durch. Während der Wartung lädt Databricks Modelle neu. Wenn ein Modell nicht erneut geladen werden kann, wird das Endpunktupdate als fehlgeschlagen markiert, und die vorhandene Endpunktkonfiguration bedient weiterhin Anforderungen. Stellen Sie sicher, dass Ihre angepassten Modelle robust sind und jederzeit neu geladen werden können.
Erwartungen an die Endpunktskalierung
Die Bereitstellung von Endpunkten wird basierend auf dem Datenverkehr und der Kapazität der bereitgestellten Parallelitätseinheiten automatisch skaliert.
- Bereitgestellte Parallelität: Die maximale Anzahl paralleler Anforderungen, die das System verarbeiten kann. Sie können die erforderliche bereitgestellte Parallelität mithilfe der folgenden Formel schätzen: bereitgestellte Parallelität = Abfragen pro Sekunde (QPS) * Modellausführungszeit (s). Informationen zum Überprüfen der Parallelitätskonfiguration finden Sie unter "Load testing for serving endpoints".
- Skalierungsverhalten: Endpunkte skalieren bei erhöhtem Datenverkehr fast sofort hoch, und sie skalieren alle fünf Minuten nach unten, um sich dem reduzierten Datenverkehr anzupassen.
- Skalierung auf Null: Die Skalierung auf Null ist ein optionales Feature für Endpunkte, mit dem sie nach 30 Minuten Inaktivität auf Null skalieren können. Die erste Anforderung nach dem Skalieren auf Null hat einen "Kaltstart", was zu einer höheren Latenz führt. Die Skalierung von Null dauert in der Regel 10 bis 20 Sekunden, kann aber manchmal Minuten dauern. Es gibt keine SLA im Maßstab von null Latenz.
- Routenoptimierung: Für hohe QPS- und niedrige Latenzfälle ist die Routenoptimierung die optimale und empfohlene Option, um die Leistung zu verbessern.
- Serverlose optimierte Bereitstellungen: Verwenden Sie für eine schnellere Endpunktbereitstellungsgeschwindigkeit serverlose optimierte Bereitstellungen.
Warnung
Skalierung auf Null sollte nicht für Produktionsworkloads verwendet werden, die konsistente Uptime- oder garantierte Reaktionszeiten erfordern. Deaktivieren Sie bei latenzempfindlichen Anwendungen oder Endpunkten, die eine kontinuierliche Verfügbarkeit erfordern, die Skalierung auf Null.
Einschränkungen der GPU-Workload
Die folgenden Einschränkungen gelten für die Bereitstellung von Endpunkten mit GPU-Workloads:
- Das Erstellen von Containerimages für GPU-Bereitstellungen dauert aufgrund der Modellgröße und erhöhter Installationsanforderungen für Modelle, die auf der GPU bereitgestellt werden, länger als die Imageerstellung für die CPU-Bereitstellung.
- Bei der Bereitstellung sehr großer Modelle kann es zu einem Timeout im Bereitstellungsprozess kommen, wenn der Containeraufbau und die Modellbereitstellung eine Dauer von 60 Minuten überschreiten, oder der Containeraufbau kann mit der Fehlermeldung "Kein Speicherplatz mehr auf dem Gerät" aufgrund von Speicherbeschränkungen fehlschlagen. Verwenden Sie für große Sprachmodelle stattdessen Foundation Model-APIs .
- Die automatische Skalierung dauert für die GPU-Bereitstellung länger als für die CPU-Bereitstellung.
- Die GPU-Kapazität wird beim Skalieren auf Null nicht garantiert. GPU-Endpunkte erwarten bei der ersten Anfrage nach der Skalierung auf Null möglicherweise eine besonders lange Wartezeit.
Anaconda-Lizenzierungshinweis für Ältere Modelle
Hinweis
Dieser Abschnitt gilt nur für Modelle, die mit MLflow v1.17 oder früher protokolliert werden (Databricks Runtime 8.3 ML oder früher). Wenn Sie eine neuere Version verwenden, können Sie diesen Abschnitt überspringen.
Der folgende Hinweis richtet sich an Kunden, die mit älteren Modellen auf Anaconda vertrauen.
Wichtig
Anaconda Inc. hat die Vertragsbedingungen für die Kanäle von anaconda.org aktualisiert. Basierend auf den neuen Nutzungsbedingungen benötigen Sie möglicherweise eine kommerzielle Lizenz, wenn Sie sich auf die Verpackung und Verteilung von Anaconda verlassen. Weitere Informationen finden Sie unter Anaconda Commercial Edition FAQ (Häufig gestellte Fragen zu Anaconda Commercial Edition). Jegliche Nutzung von Anaconda-Kanälen unterliegt den Anaconda-Vertragsbedingungen.
MLflow-Modelle, die vor v1.18 (Databricks Runtime 8.3 ML oder früher) wurden standardmäßig mit dem conda-defaults Kanal (https://repo.anaconda.com/pkgs/) als Abhängigkeit protokolliert. Aufgrund dieser Lizenzänderung hat Databricks die Verwendung des defaults-Kanals für Modelle beendet, die mit MLflow v1.18 und höher protokolliert werden. Der protokollierte Standardkanal ist jetzt conda-forge, der auf die verwaltete Community https://conda-forge.org/ verweist.
Wenn Sie ein Modell vor MLflow v1.18 protokolliert haben, ohne den Kanal defaults aus der conda-Umgebung für das Modell auszuschließen, hat dieses Modell möglicherweise eine Abhängigkeit vom Kanal defaults, den die Sie möglicherweise nicht beabsichtigt haben.
Um manuell zu überprüfen, ob ein Modell diese Abhängigkeit aufweist, können Sie den Wert von channel in der Datei conda.yaml untersuchen, die mit dem protokollierten Modell gepackt ist. Ein Modell conda.yaml mit einer defaults Kanalabhängigkeit kann z. B. wie folgt aussehen:
channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
- mlflow
- scikit-learn==0.23.2
- cloudpickle==1.6.0
name: mlflow-env
Da Databricks nicht bestimmen kann, ob Ihre Verwendung des Anaconda-Repositorys für die Interaktion mit Ihren Modellen gemäß Ihrer Beziehung mit Anaconda zulässig ist, erzwingt Databricks keine Änderungen von der Kundschaft. Wenn Ihre Nutzung des Anaconda.com Repo durch die Verwendung von Databricks unter den Bedingungen von Anaconda zulässig ist, müssen Sie keine Maßnahmen ergreifen.
Wenn Sie den in der Umgebung eines Modells verwendeten Kanal ändern möchten, können Sie das Modell mit einem neuen conda.yaml erneut im Modellregister registrieren. Dazu geben Sie den Kanal im conda_env-Parameter von log_model() an.
Weitere Informationen zur log_model()-API finden Sie in der MLflow-Dokumentation für die Modellvariante, mit der Sie arbeiten, zum Beispiel log_model für scikit-learn.
Weitere Informationen zu conda.yaml-Dateien finden Sie in der MLflow-Dokumentation.
Zusätzliche Ressourcen
- Erstellen von benutzerdefinierten Modellbereitstellungsendpunkten
- Abfragen von Bereitstellungsendpunkten für benutzerdefinierte Modelle
- Debugginghandbuch für die Modellbereitstellung
- Verwenden benutzerdefinierter Python-Bibliotheken mit der Modellbereitstellung
- Packen von benutzerdefinierten Artefakten für die Modellbereitstellung
- Bereitstellen von Python-Code mit Model Serving
- Routenoptimierung für die Bereitstellung von Endpunkten
- Serverlose optimierte Bereitstellungen für modellbasierte Endpunkte
- Konfigurieren des Zugriffs auf Ressourcen über Modellbereitstellungsendpunkte