Modelontwikkeling bijhouden met MLflow
Met MLflow-tracering kunt u notebooks en trainingsgegevenssets, parameters, metrische gegevens, tags en artefacten registreren die betrekking hebben op het trainen van een machine learning- of deep learning-model. Zie Zelfstudie: End-to-end ML-modellen in Azure Databricksvoor een voorbeeldnotebook om aan de slag te gaan met MLflow.
MLflow-tracering met experimenten en uitvoeringen
Het modelontwikkelingsproces is iteratief en het kan lastig zijn om uw werk bij te houden tijdens het ontwikkelen en optimaliseren van een model. In Azure Databricks kunt u MLflow-tracering gebruiken om het ontwikkelingsproces van het model bij te houden, inclusief parameterinstellingen of combinaties die u hebt geprobeerd en hoe deze van invloed zijn op de prestaties van het model.
MLflow-tracering maakt gebruik van experimenten en voert uit om de ontwikkeling van uw ML- en Deep Learning-model te registreren en bij te houden. Een run is één keer uitvoeren van modelcode. Tijdens een MLflow-uitvoering kunt u modelparameters en resultaten vastleggen. Een experiment is een verzameling gerelateerde uitvoeringen. In een experiment kunt u uitvoeringen vergelijken en filteren om te begrijpen hoe uw model presteert en hoe de prestaties ervan afhankelijk zijn van de parameterinstellingen, invoergegevens enzovoort.
- Trainingsuitvoeringen organiseren met MLflow-experimenten
- Trainingsresultaten weergeven met MLflow-uitvoeringen
Notitie
Vanaf 27 maart 2024 legt MLflow een quotumlimiet op voor het aantal totale parameters, tags en metrische stappen voor alle bestaande en nieuwe uitvoeringen, en het aantal totale uitvoeringen voor alle bestaande en nieuwe experimenten, zie Resourcelimieten. Als u de uitvoeringen per experimentquotum bereikt, raadt Databricks u aan uitvoeringen te verwijderen die u niet meer nodig hebt met de API voor delete-runs in Python. Als u andere quotumlimieten bereikt, raadt Databricks aan om uw strategie voor logboekregistratie aan te passen om onder de limiet te blijven. Als u een verhoging van deze limiet nodig hebt, neemt u contact op met uw Databricks-accountteam met een korte uitleg van uw use-case, waarom de voorgestelde oplossingen voor risicobeperking niet werken en de nieuwe limiet die u aanvraagt.
MLflow-tracerings-API
De MLflow Tracking-API registreert parameters, metrische gegevens, tags en artefacten van een modeluitvoering. De Tracking-API communiceert met een MLflow-traceringsserver. Wanneer u Databricks gebruikt, registreert een databricks-gehoste traceringsserver de gegevens. De gehoste MLflow-traceringsserver heeft Python-, Java- en R-API's.
MLflow is vooraf geïnstalleerd op Databricks Runtime ML-clusters. Als u MLflow wilt gebruiken in een Databricks Runtime-cluster, moet u de mlflow
bibliotheek installeren. Zie Een bibliotheek installeren in een cluster voor instructies over het installeren van een bibliotheek in een cluster.
Waar MLflow wordt uitgevoerd, worden geregistreerd
Alle MLflow-uitvoeringen worden geregistreerd bij het actieve experiment, dat op een van de volgende manieren kan worden ingesteld:
- Gebruik de opdracht mlflow.set_experiment().
- Gebruik de
experiment_id
parameter in de opdracht mlflow.start_run(). - Stel een van de MLflow-omgevingsvariabelen in MLFLOW_EXPERIMENT_NAME of MLFLOW_EXPERIMENT_ID.
Als er geen actief experiment is ingesteld, worden uitvoeringen vastgelegd in het notebookexperiment.
Als u de resultaten van uw experiment wilt vastleggen op een extern gehoste MLflow Tracking-server in een andere werkruimte dan de server waarin u uw experiment uitvoert, stelt u de tracerings-URI in om naar de externe werkruimte te verwijzen en mlflow.set_tracking_uri()
stelt u het pad in naar uw experiment in de externe werkruimte met behulp van mlflow.set_experiment()
.
mlflow.set_tracking_uri(<uri-of-remote-workspace>)
mlflow.set_experiment("path to experiment in remote workspace")
Als u experimenten lokaal uitvoert en experimentresultaten wilt vastleggen op de Databricks MLflow Tracking-server, geeft u uw Databricks-werkruimte-exemplaar () en het persoonlijke toegangstoken vanDATABRICKS_HOST
Databricks () opDATABRICKS_TOKEN
. Vervolgens kunt u de tracerings-URI instellen om naar de werkruimte mlflow.set_tracking_uri()
te verwijzen en het pad naar uw experiment instellen met behulp van mlflow.set_experiment()
. Zie Persoonlijke toegangstokenverificatie van Azure Databricks uitvoeren voor meer informatie over waar u waarden voor de DATABRICKS_HOST
en DATABRICKS_TOKEN
omgevingsvariabelen kunt vinden.
In het volgende codevoorbeeld ziet u hoe u deze waarden instelt:
os.environ["DATABRICKS_HOST"] = "https://dbc-1234567890123456.cloud.databricks.com" # set to your server URI
os.environ["DATABRICKS_TOKEN"] = "dapixxxxxxxxxxxxx"
mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/your-experiment")
Loggegevens worden toegevoegd aan een experiment
MLflow kan automatisch trainingscode vastleggen die is geschreven in veel machine learning- en deep learning-frameworks. Dit is de eenvoudigste manier om aan de slag te gaan met MLflow-tracering. Zie het voorbeeldnotitieblok.
Gebruik de MLflow-logboekregistratie-API voor meer controle over welke parameters en metrische gegevens worden vastgelegd of om extra artefacten, zoals CSV-bestanden of plots, te registreren. Zie het voorbeeldnotitieblok.
Autologging gebruiken om modelontwikkeling bij te houden
In dit voorbeeldnotitieblok ziet u hoe u autologging gebruikt met scikit-learn-. Zie de MLflow autologging documentatievoor meer informatie over autologging met andere Python-bibliotheken.
Python-notebook voor automatische logboeken van MLflow
de logboekregistratie-API gebruiken om modelontwikkeling bij te houden
In dit voorbeeldnotebook ziet u hoe u de Python-logboekregistratie-APIgebruikt. MLflow heeft ook REST-, R- en Java-API's.
Python-notebook voor MLflow-logboekregistratie-API
Logboekuitvoeringen naar een werkruimte-experiment
Wanneer u een model traint in een Databricks-notebook, worden uitvoeringen standaard vastgelegd in het notebookexperiment. Alleen MLflow-uitvoeringen die in een notebook zijn geïnitieerd, kunnen worden vastgelegd in het notebookexperiment.
MLflow-uitvoeringen die worden gestart vanuit een notebook of vanuit de API's, kunnen worden vastgelegd in een werkruimte-experiment. Als u runs wilt vastleggen in een experiment in de werkruimte, gebruikt u code die vergelijkbaar is met het volgende in uw notebook of API-aanroep:
experiment_name = "/Shared/name_of_experiment/"
mlflow.set_experiment(experiment_name)
Zie Werkruimte-experiment makenvoor instructies voor het maken van een werkruimte-experiment. Zie Notebook-experiment weergeven en Werkruimte-experiment weergeven voor meer informatie over het weergeven van vastgelegde uitvoeringen.
Toegang tot de MLflow-traceringsserver van buiten Azure Databricks
U kunt ook schrijven naar en lezen van de traceringsserver van buiten Azure Databricks, bijvoorbeeld met behulp van de MLflow CLI. Zie Toegang tot de MLflow-traceringsserver van buiten Azure Databricks.
MLflow-uitvoeringen programmatisch analyseren
U kunt via een programma toegang krijgen tot gegevens die met MLflow worden uitgevoerd met behulp van de volgende twee DataFrame-API's:
- De MLflow Python-client search_runs-API retourneert een Pandas DataFrame.
- De gegevensbron van het MLflow-experiment retourneert een Apache Spark DataFrame.
In dit voorbeeld ziet u hoe u de MLflow Python-client gebruikt om een dashboard te bouwen waarmee wijzigingen in metrische evaluatiegegevens in de loop van de tijd worden gevisualiseerd, hoe het aantal uitvoeringen wordt bijgehouden dat door een specifieke gebruiker is gestart en het totale aantal uitvoeringen voor alle gebruikers meet:
Waarom metrische gegevens en uitvoer van modeltraining kunnen variëren
Veel van de algoritmen die in ML worden gebruikt, hebben een willekeurig element, zoals steekproeven of willekeurige initiële omstandigheden binnen het algoritme zelf. Wanneer u een model traint met behulp van een van deze algoritmen, zijn de resultaten mogelijk niet hetzelfde bij elke uitvoering, zelfs niet als u de uitvoering met dezelfde voorwaarden start. Veel bibliotheken bieden een seeding-mechanisme om de initiële voorwaarden voor deze stochastische elementen op te lossen. Er kunnen echter andere bronnen van variatie zijn die niet worden beheerd door zaden. Sommige algoritmen zijn gevoelig voor de volgorde van de gegevens en gedistribueerde ML-algoritmen kunnen ook worden beïnvloed door hoe de gegevens worden gepartitioneerd. Over het algemeen is deze variatie niet significant en niet belangrijk in het ontwikkelingsproces van het model.
Gebruik de PySpark-functies repartition en sortWithinPartitions om variatie te beheren die wordt veroorzaakt door verschillen in volgorde en partitionering.
Voorbeelden van MLflow-tracering
De volgende notebooks laten zien hoe u modelontwikkeling bijhoudt met behulp van MLflow.