Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt ondersteuning beschreven voor aangepaste modellen met behulp van Mosaic AI Model Serving. Het bevat informatie over ondersteunde opties voor model logging en rekentypen, hoe u modelafhankelijkheden verpakt voor het aanbieden van modellen, en verwachtingen over het creëren en schalen van endpoints.
Wat zijn aangepaste modellen?
Model serving kan elk Python-model of aangepaste code implementeren als een API op productieniveau met behulp van CPU- of GPU-rekenresources. Databricks verwijst naar dergelijke modellen als aangepaste modellen. Deze ML-modellen kunnen worden getraind met behulp van standaard ML-bibliotheken zoals scikit-learn, XGBoost, PyTorch en HuggingFace-transformaties en kunnen elke Python-code bevatten.
Een aangepast model implementeren:
- Registreer het model of de code in de MLflow-indeling met behulp van ingebouwde MLflow-smaken of pyfunc.
- Nadat het model is geregistreerd, registreert u het in de Unity Catalog (aanbevolen) of het werkruimteregister.
- Hier kunt u een model voor eindpunt maken om uw model te implementeren en er query's op uit te voeren.
Voor een volledige zelfstudie over het bedienen van aangepaste modellen in Databricks, raadpleegt u de zelfstudie Model voor het leveren van modellen.
Databricks biedt ook ondersteuning voor het bedienen van basismodellen voor generatieve AI-toepassingen. Zie Foundation Model-API's en Externe modellen voor ondersteunde modellen en rekenaanbiedingen.
ML-modellen vastleggen
Er zijn verschillende methoden om uw ML-model te registreren voor het leveren van modellen. De volgende lijst bevat een overzicht van de ondersteunde methoden en voorbeelden.
Autologging Deze methode wordt automatisch ingeschakeld wanneer u Databricks Runtime voor ML gebruikt.
import mlflow from sklearn.ensemble import RandomForestRegressor from sklearn.datasets import load_iris iris = load_iris() model = RandomForestRegressor() model.fit(iris.data, iris.target)Log met MLflow's ingebouwde flavors. U kunt deze methode gebruiken als u het model handmatig wilt registreren voor gedetailleerdere controle.
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")Aangepaste logboekregistratie met
pyfunc. U kunt deze methode gebruiken voor het implementeren van willekeurige Python-codemodellen of het implementeren van extra code naast uw model.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())
- Download van HuggingFace. U kunt een model rechtstreeks downloaden van Hugging Face en dat model vastleggen voor de bediening. Zie Notebook-voorbeelden voor voorbeelden.
Voorbeelden van handtekeningen en invoer
Het is raadzaam om een handtekening en invoervoorbeeld toe te voegen aan MLflow. Handtekeningen zijn nodig voor het vastleggen van modellen in de Unity-catalogus.
Hier volgt een voorbeeld van een handtekening:
from mlflow.models.signature import infer_signature
signature = infer_signature(training_data, model.predict(training_data))
mlflow.sklearn.log_model(model, "model", signature=signature)
Hier volgt een invoervoorbeeld:
input_example = {"feature1": 0.5, "feature2": 3}
mlflow.sklearn.log_model(model, "model", input_example=input_example)
Rekentype
Mozaïek AI Model Serving biedt een verscheidenheid aan CPU- en GPU-opties voor het implementeren van uw model. Wanneer u implementeert met een GPU, moet u ervoor zorgen dat uw code is ingesteld, zodat voorspellingen worden uitgevoerd op de GPU, met behulp van de methoden die door uw framework worden geleverd. MLflow doet dit automatisch voor modellen die zijn geregistreerd met de PyTorch- of Transformers-smaken.
| Werkbelastingtype | GPU-exemplaar | Memory |
|---|---|---|
CPU |
4 GB per gelijktijdigheid | |
GPU_SMALL |
1xT4 | 16 GB |
GPU_LARGE |
1xA100 | 80 GB |
GPU_LARGE_2 |
2xA100 | 160 GB |
GPU_LARGE_4 |
4xA100 | 320 GB |
Implementatiecontainer en afhankelijkheden
Tijdens de implementatie wordt een container op productieniveau gebouwd en geïmplementeerd als het eindpunt. Deze container bevat bibliotheken die automatisch zijn vastgelegd of opgegeven in het MLflow-model. De basisinstallatiekopieën kunnen enkele afhankelijkheden op systeemniveau bevatten, maar afhankelijkheden op toepassingsniveau moeten expliciet worden opgegeven in uw MLflow-model.
Als niet alle vereiste afhankelijkheden zijn opgenomen in het model, kunnen er afhankelijkheidsfouten optreden tijdens de implementatie. Wanneer u problemen ondervindt met modelimplementatie, raadt Databricks u aan het model lokaal te testen.
Pakket- en codeafhankelijkheden
Aangepaste of persoonlijke bibliotheken kunnen worden toegevoegd aan uw implementatie. Zie Aangepaste Python-bibliotheken gebruiken met Model Serving.
Voor systeemeigen MLflow-smaakmodellen worden de benodigde pakketafhankelijkheden automatisch vastgelegd.
Voor aangepaste pyfunc modellen kunnen afhankelijkheden expliciet worden toegevoegd. Zie de documentatie voor MLflow-modellen en de documentatie over MLflow Python API voor gedetailleerde informatie over vereisten voor logboekregistratie en best practices.
U kunt pakketafhankelijkheden toevoegen met behulp van:
De
pip_requirementsparameter:mlflow.sklearn.log_model(model, "sklearn-model", pip_requirements = ["scikit-learn", "numpy"])De
conda_envparameter: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)Als u aanvullende vereisten wilt opnemen buiten wat automatisch wordt vastgelegd, gebruikt u
extra_pip_requirements.mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements = ["sklearn_req"])
Als u codeafhankelijkheden hebt, kunnen deze worden opgegeven met behulp van code_path.
mlflow.sklearn.log_model(model, "sklearn-model", code_path=["path/to/helper_functions.py"],)
Zie Voordat de validatiecontroles voor modelimplementatie worden gecontroleerd voor informatie over het valideren en bijwerken van afhankelijkheden vóór de implementatie.
Verwachtingen en beperkingen
Notitie
De informatie in deze sectie is niet van toepassing op eindpunten die basismodellen of externe modellen dienen.
In de volgende secties worden bekende verwachtingen en beperkingen beschreven voor het leveren van aangepaste modellen met behulp van Model Serving.
Verwachtingen bij het aanmaken en bijwerken van eindpunten
- Implementatietijd: het implementeren van een nieuw geregistreerde modelversie omvat het verpakken van het model en de modelomgeving en het inrichten van het modeleindpunt zelf. Dit proces kan ongeveer 10 minuten duren, maar kan langer duren, afhankelijk van de complexiteit, grootte en afhankelijkheden van het model.
- Updates zonder downtime: Azure Databricks voert een update van eindpunten zonder downtime uit door de bestaande eindpuntconfiguratie bij te houden totdat de nieuwe klaar is. Dit vermindert het risico op onderbrekingen voor eindpunten die in gebruik zijn. Tijdens dit updateproces worden zowel de oude als de nieuwe eindpuntconfiguraties gefactureerd totdat de overgang naar de nieuwe configuratie is voltooid.
- Time-out van aanvraag: als modelberekening langer duurt dan 297 seconden, treedt er een time-out op voor aanvragen.
Belangrijk
Databricks voert af en toe systeemupdates en onderhoud van systeemupdates zonder downtime uit op bestaande Model Serving-eindpunten. Tijdens het onderhoud laadt Databricks modellen opnieuw. Als een model niet opnieuw kan worden geladen, wordt de eindpuntupdate gemarkeerd als mislukt en blijft de bestaande eindpuntconfiguratie aanvragen verwerken. Zorg ervoor dat uw aangepaste modellen robuust zijn en op elk gewenst moment opnieuw kunnen laden.
Verwachtingen voor het schalen van eindpunten
Het leveren van eindpunten wordt automatisch geschaald op basis van verkeer en de capaciteit van ingerichte gelijktijdigheidseenheden.
- Ingerichte gelijktijdigheid: het maximum aantal parallelle aanvragen dat het systeem kan verwerken. Maak een schatting van de vereiste gelijktijdigheid met behulp van de formule: ingerichte gelijktijdigheid = query's per seconde (QPS) * uitvoeringstijd (s) van model. Zie Belastingstests voor eindpuntservices om uw gelijktijdigheidsconfiguratie te valideren.
- Schaalgedrag: Eindpunten worden bijna onmiddellijk omhoog geschaald met meer verkeer en om de vijf minuten omlaag geschaald om het gereduceerde verkeer te vinden.
- Schalen naar nul: Schalen naar nul is een optionele functie voor eindpunten waarmee ze na 30 minuten inactiviteit omlaag kunnen schalen naar nul. De eerste aanvraag na het schalen naar nul ervaart een 'koude start', wat leidt tot een hogere latentie. Omhoog schalen van nul duurt meestal 10-20 seconden, maar kan soms minuten duren. Er is geen SLA op schaal van nul latentie.
- Optimalisatie van route: Voor gebruiksscenario's met hoge QPS- en lage latentie is routeoptimalisatie de optimale en aanbevolen optie om de prestaties te verbeteren.
Waarschuwing
Schaal naar nul mag niet worden gebruikt voor productieworkloads waarvoor consistente uptime of gegarandeerde reactietijden zijn vereist. Schakel schaal naar nul uit voor latentiegevoelige toepassingen of eindpunten waarvoor continue beschikbaarheid is vereist.
Beperkingen voor GPU-workload
Hier volgen beperkingen voor het leveren van eindpunten met GPU-workloads:
- Het maken van een containerinstallatiekopie voor GPU-server duurt langer dan het maken van installatiekopieën voor CPU-server vanwege de modelgrootte en verhoogde installatievereisten voor modellen die op GPU worden geleverd.
- Bij het implementeren van zeer grote modellen kan er een time-out optreden bij het implementatieproces als de implementatie van de container-build en -model langer is dan 60 minuten.
- Automatisch schalen voor GPU-server duurt langer dan voor CPU-server.
- GPU-capaciteit wordt niet gegarandeerd bij het schalen naar nul. GPU-eindpunten verwachten mogelijk extra hoge latentie voor de eerste aanvraag na het schalen naar nul.
Anaconda-licentiemelding voor verouderde modellen
Notitie
Deze sectie is alleen van toepassing op modellen die zijn geregistreerd met MLflow v1.17 of eerder (Databricks Runtime 8.3 ML of eerder). Als u een nieuwere versie gebruikt, kunt u deze sectie overslaan.
De volgende kennisgeving is bedoeld voor klanten die afhankelijk zijn van Anaconda met verouderde modellen.
Belangrijk
Anaconda Inc. heeft hun servicevoorwaarden voor anaconda.org kanalen bijgewerkt. Op basis van de nieuwe servicevoorwaarden hebt u mogelijk een commerciële licentie nodig als u afhankelijk bent van de verpakking en distributie van Anaconda. Zie Veelgestelde vragen over Anaconda Commercial Edition voor meer informatie. Uw gebruik van anaconda-kanalen is onderhevig aan hun servicevoorwaarden.
MLflow-modellen die zijn geregistreerd vóór v1.18 (Databricks Runtime 8.3 ML of eerder) zijn standaard vastgelegd met het conda-kanaal defaults (https://repo.anaconda.com/pkgs/) als afhankelijkheid. Vanwege deze licentiewijziging heeft Databricks het gebruik van het defaults kanaal gestopt voor modellen die zijn geregistreerd met MLflow v1.18 en hoger. Het standaardkanaal dat is geregistreerd, is nu conda-forge, die verwijst naar de door de community beheerde https://conda-forge.org/.
Als u een model hebt geregistreerd vóór MLflow v1.18 zonder het defaults kanaal uit te sluiten van de Conda-omgeving voor het model, heeft dat model mogelijk een afhankelijkheid van het defaults kanaal dat u mogelijk niet hebt bedoeld.
Als u handmatig wilt controleren of een model deze afhankelijkheid heeft, kunt u de waarde onderzoeken channel in het conda.yaml bestand dat is verpakt met het geregistreerde model. Een model conda.yaml met een defaults kanaalafhankelijkheid kan er bijvoorbeeld als volgt uitzien:
channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
- mlflow
- scikit-learn==0.23.2
- cloudpickle==1.6.0
name: mlflow-env
Omdat Databricks niet kan bepalen of uw gebruik van de Anaconda-opslagplaats om te communiceren met uw modellen is toegestaan in uw relatie met Anaconda, dwingt Databricks klanten niet om wijzigingen aan te brengen. Als uw gebruik van de Anaconda.com opslagplaats via het gebruik van Databricks is toegestaan volgens de voorwaarden van Anaconda, hoeft u geen actie te ondernemen.
Als u het kanaal wilt wijzigen dat wordt gebruikt in de omgeving van een model, kunt u het model opnieuw registreren bij het modelregister met een nieuw conda.yaml. U kunt dit doen door het kanaal op te geven in de conda_env parameter van log_model().
Zie de MLflow-documentatie voor de modelsmaak waarmee u werkt, bijvoorbeeld log_model() voor meer informatie over de API.
Aanvullende bronnen
- Aangepaste model-service-eindpunten maken
- Query's uitvoeren op eindpunten voor aangepaste modellen
- Debugginggids voor modeluitvoering
- Aangepaste Python-bibliotheken gebruiken met Model Serving
- Aangepaste artefacten verpakken voor modelservering
- Python-code implementeren met Model Serving
- Routeoptimalisatie bij het beheren van eindpunten
- Toegang tot resources configureren vanuit het model dat eindpunten bedient