Delen via


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_requirementsparameters, 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 het artifacts 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:

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.

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:

  1. Start uw scorecluster met dezelfde Databricks Runtime-versie die tijdens de training wordt gebruikt. Lees het veld uit het databricks_runtimeMLmodel 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.
  2. 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.
  3. 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.
  4. MLflow verwerkt alle aangepaste Python-code die is opgenomen in de code_path parameter in log_model. Deze code wordt toegevoegd aan het Python-pad wanneer de methode van predict() het model wordt aangeroepen. U kunt dit ook handmatig doen door:

    Notitie

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