Afhankelijkheden van logboekmodellen
In dit artikel leert u hoe u een model en de bijbehorende afhankelijkheden kunt registreren als modelartefacten, zodat ze beschikbaar zijn in uw omgeving voor productietaken zoals modelservice.
Afhankelijkheden van Python-pakketmodellen vastleggen
MLflow biedt systeemeigen ondersteuning voor sommige Python ML-bibliotheken, where MLflow betrouwbaar afhankelijkheden kan vastleggen voor modellen die gebruikmaken van deze bibliotheken. Zie ingebouwde modelsmaak.
MLflow ondersteunt bijvoorbeeld scikit-learn in de mlflow.sklearn-module en de opdracht mlflow.sklearn.log_model registreert de sklearn-versie. Hetzelfde geldt voor automatisch inloggen met deze ML-bibliotheken. Zie de GitHub-opslagplaats van MLflow voor aanvullende voorbeelden.
Notitie
Om traceringslogboeken in te schakelen voor generatieve AI-workloads, ondersteunt MLflow automatische logboekregistratie van OpenAI.
Voor ML-bibliotheken die kunnen worden geïnstalleerd met pip install PACKAGE_NAME==VERSION
, maar geen ingebouwde MLflow-modelsmaak hebben, kunt u deze pakketten registreren met behulp van de methode mlflow.pyfunc.log_model . Zorg ervoor dat u de vereisten aanmeldt met de exacte bibliotheekversie, f"nltk=={nltk.__version__}"
bijvoorbeeld in plaats van alleen nltk
.
mlflow.pyfunc.log_model
ondersteunt logboekregistratie voor:
- Openbare en aangepaste bibliotheken die zijn verpakt als Python-ei- of Python-wielbestanden.
- Openbare pakketten op PyPI en privé-gehoste pakketten op uw eigen PyPI-server.
Met mlflow.pyfunc.log_model probeert MLflow de afhankelijkheden automatisch uit te stellen. MLflow afgeleid de afhankelijkheden met behulp van mlflow.models.infer_pip_requirements en registreert deze als modelartefact naar een requirements.txt
bestand.
In oudere versies identificeert MLflow soms niet automatisch alle Python-vereisten, met name als de bibliotheek geen ingebouwde modelsmaak is. In deze gevallen kunt u extra afhankelijkheden opgeven met de extra_pip_requirements
parameter in de log_model
opdracht. Zie een voorbeeld van het gebruik van de parameter extra_pip_requirements.
Belangrijk
U kunt ook de gehele set-set van vereisten vervangen door de conda_env
en pip_requirements
parameters, maar dit wordt over het algemeen afgeraden omdat hierdoor de afhankelijkheden die MLflow automatisch detecteert, worden overschreven. Zie een voorbeeld van het gebruik van de pip_requirements
parameter voor het overschrijven van vereisten.
Aangepaste modellogboekregistratie
Wanneer voor scenario's where meer aangepaste modellogboekregistratie nodig is, kunt u het volgende doen:
-
Een aangepast Python-model schrijven. Hierdoor kunt u subklassen
mlflow.pyfunc.PythonModel
gebruiken om initialisatie en voorspelling aan te passen. Deze benadering werkt goed voor het aanpassen van alleen Python-modellen.- Zie het voorbeeld van het N-model toevoegen voor een eenvoudig voorbeeld.
- Zie het voorbeeld van het aangepaste XGBoost-model voor een complexer voorbeeld.
- Schrijf een aangepaste smaak. In dit scenario kunt u logboekregistratie meer aanpassen dan de algemene
pyfunc
smaak, maar hiervoor is meer werk nodig om te implementeren.
Aangepaste Python-code
Mogelijk hebt u Python-codeafhankelijkheden die niet kunnen worden geïnstalleerd met behulp van de %pip install
opdracht, zoals een of meer .py
bestanden.
Wanneer u een model aanmeldt, kunt u MLflow vertellen dat het model deze afhankelijkheden op een opgegeven pad kan vinden met behulp van de code_path
parameter in mlflow.pyfunc.log_model. MLflow slaat alle bestanden of mappen op die worden doorgegeven als code_path
artefacten, samen met het model in een codemap. Bij het laden van het model voegt MLflow deze bestanden of mappen toe aan het Python-pad. Deze route werkt ook met aangepaste Python-wielbestanden, die kunnen worden opgenomen in het model met behulp van code_path
, net als .py
bestanden.
mlflow.pyfunc.log_model( artifact_path=artifact_path,
code_path=[filename.py],
data_path=data_path,
conda_env=conda_env,
)
Afhankelijkheden van niet-Python-pakketmodellen vastleggen
MLflow haalt niet automatisch niet-Python-afhankelijkheden op, zoals Java-pakketten, R-pakketten en systeemeigen pakketten (zoals Linux-pakketten). Voor deze pakketten moet u aanvullende gegevens vastleggen.
- Afhankelijkheid list: Databricks raadt aan om een artefact bij het model te registreren dat deze niet-Python-afhankelijkheden opgeeft. Dit kan een eenvoudig
.txt
bestand zijn.json
. mlflow.pyfunc.log_model kunt u dit extra artefact opgeven met behulp van hetartifacts
argument. - Aangepaste pakketten: Net als voor aangepaste Python-afhankelijkheden hierboven, moet u ervoor zorgen dat de pakketten beschikbaar zijn in uw implementatieomgeving. Voor pakketten op een centrale locatie, zoals Maven Central of uw eigen opslagplaats, moet u ervoor zorgen dat de locatie beschikbaar is tijdens het scoren of leveren van tijd. Voor privépakketten die niet elders worden gehost, kunt u pakketten samen met het model vastleggen als artefacten.
Modellen implementeren met afhankelijkheden
Wanneer u een model implementeert vanuit de MLflow Tracking Server of Model Registry, moet u ervoor zorgen dat de implementatieomgeving de juiste afhankelijkheden heeft geïnstalleerd. Het eenvoudigste pad kan afhankelijk zijn van uw implementatiemodus: batch-/streaming- of onlineservice, en van de typen afhankelijkheden.
Voor alle implementatiemodi raadt Databricks aan om deductie uit te voeren op dezelfde runtimeversie die u tijdens de training hebt gebruikt, omdat de Databricks Runtime waarin u uw model hebt gemaakt, verschillende bibliotheken al is geïnstalleerd. MLflow in Databricks slaat die runtimeversie automatisch op in het MLmodel
metagegevensbestand in een databricks_runtime
veld, zoals databricks_runtime: 10.2.x-cpu-ml-scala2.12
.
Online serveren: Mozaïek AI Model Serving
Databricks biedt Model Serving, where uw MLflow Machine Learning-modellen beschikbaar worden gemaakt als schaalbare REST API-eindpunten.
Voor Python-afhankelijkheden in het requirements.txt
bestand verwerken Databricks en MLflow alles voor openbare PyPI-afhankelijkheden. Als u ook bestanden of Python-wielbestanden hebt opgegeven .py
bij het vastleggen van het model met behulp van het code_path
argument, laadt MLflow deze afhankelijkheden automatisch voor u.
Zie het volgende voor deze modelscenario's:
- Aangepaste Python-bibliotheken gebruiken met Model Serving
- Aangepaste artefacten en bestanden verpakken voor Model Serving
Voor Python-afhankelijkheden in het requirements.txt
bestand verwerken Databricks en MLflow alles voor openbare PyPI-afhankelijkheden. Als u ook bestanden of Python-wielbestanden hebt opgegeven .py
bij het vastleggen van het model met behulp van het code_path
argument, laadt MLflow deze afhankelijkheden automatisch voor u.
Online dienst: systemen van derden of Docker-containers
Als uw scenario moet worden geleverd aan oplossingen van derden of uw eigen Docker-oplossing, kunt u uw model exporteren als een Docker-container.
Databricks raadt het volgende aan voor externe services die automatisch Python-afhankelijkheden afhandelt. Voor niet-Python-afhankelijkheden moet de container echter worden gewijzigd om ze op te nemen.
Docker-integratie van MLflow voor op Docker gebaseerde serveroplossing: MLflow-modellen build-docker
MLflow-integratie van Azure Machine Learning:
Batch- en streamingtaken
Batch- en streamingscores moeten worden uitgevoerd als Databricks-taken. Een notebooktaak volstaat vaak en de eenvoudigste manier om code voor te bereiden is het gebruik van het Databricks-modelregister om een scorenotitieblok te generate.
Hieronder worden het proces en de stappen beschreven die u moet volgen om ervoor te zorgen dat afhankelijkheden dienovereenkomstig worden geïnstalleerd en toegepast:
Start uw scorecluster met dezelfde Databricks Runtime-versie die tijdens de training wordt gebruikt. Lees het veld uit het
databricks_runtime
MLmodel
metagegevensbestand en start een cluster met die runtimeversie.- Dit kan handmatig worden gedaan in de clusterconfiguratie of geautomatiseerd met aangepaste logica. Voor automatisering is de runtimeversie-indeling die u hebt gelezen uit het metagegevensbestand in de Taken-API en clusters-API.
Installeer vervolgens eventuele niet-Python-afhankelijkheden. U kunt het volgende doen om ervoor te zorgen dat uw niet-Python-afhankelijkheden toegankelijk zijn voor uw implementatieomgeving:
- Installeer de niet-Python-afhankelijkheden van uw model handmatig op het Databricks-cluster als onderdeel van de clusterconfiguratie voordat u deductie uitvoert.
- U kunt ook aangepaste logica schrijven in uw scoretaakimplementatie om de installatie van de afhankelijkheden op uw cluster te automatiseren. Ervan uitgaande dat u uw niet-Python-afhankelijkheden hebt opgeslagen als artefacten, zoals beschreven in afhankelijkheden van niet-Python-pakketten, kan deze automatisering bibliotheken installeren met behulp van de Bibliotheken-API. U kunt ook specifieke code schrijven om een initialisatiescript met clusterbereik te generate om de afhankelijkheden te installeren.
Uw scoretaak installeert de Python-afhankelijkheden in de taakuitvoeringsomgeving. In Databricks kunt u met het modelregister een notebook generate voor deductie die dit voor u doet.
- Wanneer u het Databricks-modelregister gebruikt om een scorenotebook te generate, bevat het notebook code voor het installeren van de Python-afhankelijkheden in het
requirements.txt
-bestand van het model. Voor uw notebooktaak voor batch- of streamingscores initialiseert deze code uw notebookomgeving, zodat de modelafhankelijkheden zijn geïnstalleerd en gereed zijn voor uw model.
- Wanneer u het Databricks-modelregister gebruikt om een scorenotebook te generate, bevat het notebook code voor het installeren van de Python-afhankelijkheden in het
MLflow verwerkt alle aangepaste Python-code die is opgenomen in de
code_path
parameter inlog_model
. Deze code wordt toegevoegd aan het Python-pad wanneer de methode vanpredict()
het model wordt aangeroepen. U kunt dit ook handmatig doen door:-
Mlflow.pyfunc.spark_udf aanroepen met het
env_manager=['virtualenv'/'conda']
argument. - De vereisten extraheren met behulp van mlflow.pyfunc.get_model_dependencies en installeren met behulp van %pip install.
Notitie
Als u bestanden of Python-wielbestanden hebt opgegeven
.py
bij het vastleggen van het model met behulp van hetcode_path
argument, laadt MLflow deze afhankelijkheden automatisch voor u.-
Mlflow.pyfunc.spark_udf aanroepen met het