Delen via


Metrische gegevens, parameters en bestanden vastleggen met MLflow

VAN TOEPASSING OP: Python SDK azure-ai-ml v2 (actueel)

Azure Machine Learning ondersteunt logboekregistratie- en traceringsexperimenten met MLflow Tracking. U kunt modellen, metrische gegevens, parameters en artefacten vastleggen met MLflow, lokaal op uw computer of in een cloudomgeving.

Belangrijk

In tegenstelling tot de Azure Machine Learning SDK v1 is er geen functionaliteit voor logboekregistratie in de Azure Machine Learning SDK voor Python (v2). Als u azure Machine Learning SDK v1 eerder hebt gebruikt, raden we u aan MLflow te gebruiken voor het bijhouden van experimenten. Zie Logboekregistratie migreren van SDK v1 naar MLflow voor specifieke richtlijnen.

Logboeken kunnen u helpen bij het diagnosticeren van fouten en waarschuwingen, of bij het bijhouden van metrische gegevens, zoals parameters en modelprestaties. In dit artikel wordt uitgelegd hoe u logboekregistratie inschakelt in de volgende scenario's:

  • Metrische gegevens, parameters en modellen registreren bij het verzenden van taken.
  • Uitvoeringen bijhouden wanneer u interactief traint.
  • Logboekgegevens asynchroon.
  • Diagnostische informatie over training weergeven.

Tip

In dit artikel leest u hoe u het modeltrainingsproces kunt bewaken. Als u geïnteresseerd bent in het bewaken van resourcegebruik en gebeurtenissen van Azure Machine Learning, zoals quota, voltooide trainingstaken of voltooide modelimplementaties, raadpleegt u Bewaking van Azure Machine Learning.

Vereisten

  • U moet een Azure Machine Learning-werkruimte hebben. Zie Werkruimtebronnen maken als u er nog geen hebt.

  • U moet de mlflow pakketten azureml-mlflow hebben geïnstalleerd. Als u dit niet doet, gebruikt u de volgende opdracht om deze te installeren in uw ontwikkelomgeving:

    pip install mlflow azureml-mlflow
    

    Notitie

    Voor asynchrone logboekregistratie van metrische gegevens moet u versie 2.8.0+ en azureml-mlflow versie 1.55+ hebbenMLflow.

  • Als u externe tracering uitvoert (traceringsexperimenten die buiten Azure Machine Learning worden uitgevoerd), configureert u MLflow om experimenten bij te houden. Zie MLflow configureren voor Azure Machine Learning voor meer informatie.

  • Als u metrische gegevens, parameters, artefacten en modellen in uw experimenten in Azure Machine Learning wilt vastleggen met behulp van MLflow, importeert u MLflow in uw script:

    import mlflow
    

Experimenten configureren

MLflow organiseert de informatie in experimenten en uitvoeringen (in Azure Machine Learning worden uitvoeringen taken genoemd). Er zijn enkele verschillen in het configureren ervan, afhankelijk van hoe u uw code uitvoert:

Wanneer u interactief traint, zoals in een Jupyter Notebook, gebruikt u het volgende patroon:

  1. Het actieve experiment maken of instellen.
  2. Start de taak.
  3. Gebruik logboekregistratiemethoden voor het vastleggen van metrische gegevens en andere informatie.
  4. Beëindig de taak.

Met het volgende codefragment wordt bijvoorbeeld het experiment geconfigureerd en worden er vervolgens logboeken vastgelegd tijdens een taak:

import mlflow
# Set the experiment
mlflow.set_experiment("mlflow-experiment")

# Start the run
mlflow_run = mlflow.start_run()
# Log metrics or other information
mlflow.log_metric('mymetric', 1)
# End run 
mlflow.end_run()

Tip

Technisch gezien hoeft u geen aanroepen te doen start_run() omdat er een nieuwe uitvoering wordt gemaakt als deze niet bestaat en u een logboekregistratie-API aanroept. In dat geval kunt u de mlflow.active_run() uitvoering ophalen die momenteel wordt gebruikt. Zie mlflow.active_run() voor meer informatie.

U kunt ook het contextbeheerparadigma gebruiken:

import mlflow
mlflow.set_experiment("mlflow-experiment")

# Start the run, log metrics, end the run
with mlflow.start_run() as run:
    # Run started when context manager is entered, and ended when context manager exits
    mlflow.log_metric('mymetric', 1)
    mlflow.log_metric('anothermetric',1)
    pass

Wanneer u een nieuwe uitvoering start, mlflow.start_runkan het handig zijn om de parameter run_nameaan te geven, die vervolgens wordt omgezet in de naam van de uitvoering in de gebruikersinterface van Azure Machine Learning en u helpt de uitvoering sneller te identificeren:

with mlflow.start_run(run_name="iris-classifier-random-forest") as run:
    mlflow.log_metric('mymetric', 1)
    mlflow.log_metric('anothermetric',1)

Zie de MLflow-verwijzing voor meer informatie over MLflow-logboekregistratie-API's.

Logboekparameters

MLflow ondersteunt de logboekparameters die door uw experimenten worden gebruikt. Parameters kunnen van elk type zijn en kunnen worden geregistreerd met behulp van de volgende syntaxis:

mlflow.log_param("num_epochs", 20)

MLflow biedt ook een handige manier om meerdere parameters te registreren door ze allemaal aan te geven met behulp van een woordenlijst. Verschillende frameworks kunnen ook parameters doorgeven aan modellen met behulp van woordenlijsten en daarom is dit een handige manier om ze in het experiment aan te melden.

params = {
    "num_epochs": 20,
    "dropout_rate": .6,
    "objective": "binary_crossentropy"
}

mlflow.log_params(params)

Metrische logboekgegevens

Metrische gegevens, in tegenstelling tot parameters, zijn altijd numeriek en kunnen synchroon of asynchroon worden vastgelegd. Wanneer metrische gegevens worden geregistreerd, zijn ze onmiddellijk beschikbaar voor verbruik bij het retourneren van aanroepen. In de volgende tabel wordt beschreven hoe u specifieke numerieke typen kunt registreren:

Vastgelegde waarde Voorbeeldcode Opmerkingen
Een numerieke waarde registreren (int of float) mlflow.log_metric("my_metric", 1)
Een numerieke waarde (int of float) in de loop van de tijd registreren mlflow.log_metric("my_metric", 1, step=1) Gebruik de parameter step om de stap aan te geven waarmee u de metrische waarde wilt vastleggen. Dit kan een geheel getal zijn. De standaardwaarde is nul.
Een Booleaanse waarde vastleggen mlflow.log_metric("my_metric", 0) 0 = Waar, 1 = Onwaar

Belangrijk

Prestatieoverwegingen: als u meerdere metrische gegevens (of meerdere waarden voor dezelfde metrische gegevens) moet registreren, vermijdt u aanroepen naar mlflow.log_metric in lussen. Betere prestaties kunnen worden bereikt met behulp van asynchrone logboekregistratie met mlflow.log_metric("metric1", 9.42, synchronous=False) of door een batch met metrische gegevens te registreren.

Logboekgegevens asynchroon

MLflow maakt ook logboekregistratie van metrische gegevens op een asynchrone manier mogelijk. Asynchrone metrische logboekregistratie is met name handig in gevallen waarin grote trainingstaken met tientallen rekenknooppunten mogelijk worden uitgevoerd en gelijktijdig proberen metrische gegevens te registreren. Het is ook handig wanneer een klein aantal knooppunten probeert een groot aantal metrische gegevens te registreren.

Met asynchrone metrische logboekregistratie kunt u metrische gegevens onmiddellijk registreren door te voorkomen dat ze in de back-endservice worden gerealiseerd. Deze benadering wordt geschaald naar grote trainingsroutines waarmee honderdduizenden metrische waarden worden vastgelegd en dit is de aanbevolen benadering.

MLflow registreert metrische gegevens synchroon standaard, maar u kunt dit gedrag op elk gewenst moment wijzigen:

import mlflow

mlflow.config.enable_async_logging()

Dezelfde eigenschap kan worden ingesteld met behulp van een omgevingsvariabele:

export MLFLOW_ENABLE_ASYNC_LOGGING=True

Als u specifieke metrische gegevens asynchroon wilt registreren, gebruikt u de MLflow-logboekregistratie-API zoals u dat gewoonlijk zou doen, maar voegt u de extra parameter synchronous=Falsetoe.

import mlflow

with mlflow.start_run():
    # (...)
    mlflow.log_metric("metric1", 9.42, synchronous=False)
    # (...)

Wanneer u dit gebruikt log_metric(synchronous=False), wordt het besturingselement automatisch teruggezet naar de aanroeper zodra de bewerking is geaccepteerd. De waarde is echter niet beschikbaar voor het lezen van inmediately. Asynchrone logboekregistratie van metrische gegevens garandeert de volgorde en ze blijven behouden met de tijdstempel van wanneer ze zijn geregistreerd.

Belangrijk

Zelfs met synchronous=FalseAzure Machine Learning wordt de volgorde van metrische gegevens gegarandeerd.

Als u moet wachten tot een bepaalde waarde in de back-end behouden blijft, kunt u de metrische bewerking gebruiken die wordt geretourneerd om erop te wachten, zoals wordt weergegeven in het volgende voorbeeld:

import mlflow

with mlflow.start_run():
    # (...)
    run_operation = mlflow.log_metric("metric1", 9.42, synchronous=False)
    # (...)
    run_operation.wait()
    # (...)

U kunt asynchroon één metrische gegevens tegelijk registreren of een batch met metrische gegevens registreren, zoals wordt weergegeven in het volgende voorbeeld:

import mlflow
import time
from mlflow.entities import Metric

with mlflow.start_run() as current_run:
    mlflow_client = mlflow.tracking.MlflowClient()

    metrics = {"metric-0": 3.14, "metric-1": 6.28}
    timestamp = int(time.time() * 1000)
    metrics_arr = [Metric(key, value, timestamp, 0) for key, value in metrics.items()]

    run_operation = mlflow_client.log_batch(
        run_id=current_run.info.run_id,
        metrics=metrics_arr,
        synchronous=False,
    )

De wait() bewerking is ook beschikbaar bij het vastleggen van een batch met metrische gegevens:

run_operation.wait()

U hoeft uw routines niet aan te roepen wait() als u geen directe toegang nodig hebt tot de metrische waarden. Azure Machine Learning wacht automatisch wanneer de taak bijna is voltooid om te zien of er nog metrische gegevens in behandeling zijn om te worden bewaard. Wanneer een taak is voltooid in Azure Machine Learning, blijven alle metrische gegevens gegarandeerd behouden.

Logboekcurven of lijst met waarden

Curven (of een lijst met numerieke waarden) kunnen worden vastgelegd met MLflow door dezelfde metrische waarde meerdere keren te registreren. In het volgende voorbeeld ziet u hoe u dit doet:

list_to_log = [1, 2, 3, 2, 1, 2, 3, 2, 1]
from mlflow.entities import Metric
from mlflow.tracking import MlflowClient
import time

client = MlflowClient()
client.log_batch(mlflow.active_run().info.run_id, 
                 metrics=[Metric(key="sample_list", value=val, timestamp=int(time.time() * 1000), step=0) for val in list_to_log])

Logboekafbeeldingen

MLflow ondersteunt twee manieren om installatiekopieën te registreren. Beide manieren behouden de opgegeven installatiekopieën als artefact in de uitvoering.

Vastgelegde waarde Voorbeeldcode Opmerkingen
Log numpy metrics or PIL image objects mlflow.log_image(img, "figure.png") img moet een instantie van numpy.ndarray of PIL.Image.Imagezijn. figure.png is de naam van het artefact dat wordt gegenereerd in de uitvoering. Het hoeft geen bestaand bestand te zijn.
Matplotlib-diagram of afbeeldingsbestand van logboek mlflow.log_figure(fig, "figure.png") figure.png is de naam van het artefact dat wordt gegenereerd in de uitvoering. Het hoeft geen bestaand bestand te zijn.

Logboekbestanden

Over het algemeen worden bestanden in MLflow artefacten genoemd. U kunt artefacten op meerdere manieren registreren in Mlflow:

Vastgelegde waarde Voorbeeldcode Opmerkingen
Logboektekst in een tekstbestand mlflow.log_text("text string", "notes.txt") Tekst blijft behouden in de uitvoering in een tekstbestand met de naam notes.txt.
Logboekwoordenlijsten als JSON- en YAML-bestanden mlflow.log_dict(dictionary, "file.yaml" dictionary is een woordenlijstobject met alle structuur die u wilt behouden als een JSON- of YAML-bestand.
Een triviaal bestand registreren dat al bestaat mlflow.log_artifact("path/to/file.pkl") Bestanden worden altijd vastgelegd in de hoofdmap van de uitvoering. Als artifact_path dit is opgegeven, wordt het bestand geregistreerd in een map zoals aangegeven in die parameter.
Alle artefacten in een bestaande map vastleggen mlflow.log_artifacts("path/to/folder") Mapstructuur wordt gekopieerd naar de uitvoering, maar de aangegeven hoofdmap is niet opgenomen.

Tip

Wanneer u grote bestanden aanmeldt met log_artifact of log_model, kunnen er time-outfouten optreden voordat het uploaden van het bestand is voltooid. Overweeg om de time-outwaarde te verhogen door de omgevingsvariabele AZUREML_ARTIFACTS_DEFAULT_TIMEOUTaan te passen. De standaardwaarde is 300 (seconden).

Logboekmodellen

MLflow introduceert het concept van modellen als een manier om alle artefacten te verpakken die nodig zijn om een bepaald model te laten functioneren. Modellen in MLflow zijn altijd een map met een willekeurig aantal bestanden, afhankelijk van het framework dat wordt gebruikt om het model te genereren. Logboekregistratiemodellen hebben het voordeel dat alle elementen van het model worden bijgehouden als één entiteit die kan worden geregistreerd en vervolgens kan worden geïmplementeerd. Bovendien profiteren MLflow-modellen van het voordeel van implementatie zonder code en kunnen ze worden gebruikt met het verantwoordelijke AI-dashboard in studio. Zie Van artefacten naar modellen in MLflow voor meer informatie.

Als u het model wilt opslaan vanuit een trainingsuitvoering, gebruikt u de log_model() API voor het framework waarmee u werkt. Bijvoorbeeld mlflow.sklearn.log_model(). Zie MLflow-modellen vastleggen voor meer informatie. Zie Aangepaste modellen converteren naar MLflow voor het migreren van bestaande modellen naar MLflow.

Tip

Wanneer u grote modellen aanmeldt, kan de fout Failed to flush the queue within 300 secondsoptreden. Meestal betekent dit dat er een time-out optreedt voordat het uploaden van de modelartefacten is voltooid. Overweeg om de time-outwaarde te verhogen door de omgevingsvariabele AZUREML_ARTIFACTS_DEFAULT_TIMEOUTaan te passen.

Automatische logboekregistratie

Met Azure Machine Learning en MLflow kunnen gebruikers automatisch metrische gegevens, modelparameters en modelartefacten registreren bij het trainen van een model. Elk framework bepaalt wat automatisch voor u moet worden bijgehouden. Er worden verschillende populaire machine learning-bibliotheken ondersteund. Meer informatie over automatische logboekregistratie met MLflow.

Als u automatische logboekregistratie wilt inschakelen , voegt u de volgende code in vóór uw trainingscode:

mlflow.autolog()

Tip

U kunt bepalen wat automatisch wordt geregistreerd met autolog. Als u bijvoorbeeld aangeeft mlflow.autolog(log_models=False), registreert MLflow alles behalve modellen voor u. Dergelijke controle is handig in gevallen waarin u modellen handmatig wilt vastleggen, maar toch wilt profiteren van automatische logboekregistratie van metrische gegevens en parameters. Merk ook op dat sommige frameworks automatische logboekregistratie van modellen kunnen uitschakelen als het getrainde model buiten specifieke grenzen gaat. Dit gedrag is afhankelijk van de gebruikte smaak en we raden u aan de documentatie te bekijken als dit uw geval is.

Informatie over taken of uitvoeringen weergeven met MLflow

U kunt de vastgelegde gegevens bekijken met behulp van MLflow via het object MLflow.entities.Run :

import mlflow

run = mlflow.get_run(run_id="<RUN_ID>")

U kunt de metrische gegevens, parameters en tags voor de uitvoering bekijken in het gegevensveld van het uitvoeringsobject.

metrics = run.data.metrics
params = run.data.params
tags = run.data.tags

Notitie

De woordenlijst met metrische gegevens die wordt geretourneerd door mlflow.get_run of mlflow.search_runs retourneert alleen de laatst vastgelegde waarde voor een bepaalde metrische naam. Als u bijvoorbeeld een metrische waarde die meerdere keren wordt aangeroepen iteration met waarden , 1, dan 2, dan 3, dan 4, wordt slechts 4 geretourneerd bij het aanroepen run.data.metrics['iteration'].

Als u alle metrische gegevens wilt ophalen die zijn geregistreerd voor een bepaalde metrische naam, kunt u deze gebruiken MlFlowClient.get_metric_history() zoals wordt uitgelegd in het voorbeeld parameters en metrische gegevens ophalen van een uitvoering.

Tip

MLflow kan metrische gegevens en parameters ophalen uit meerdere uitvoeringen tegelijk, waardoor snelle vergelijkingen mogelijk zijn voor meerdere proefversies. Zie Query & compare experiments and runs with MLflow (Query & compare experimenten and runs with MLflow) voor meer informatie.

MLflow kan query's uitvoeren op elk artefact dat is vastgelegd door een uitvoering. Artefacten kunnen niet worden geopend met behulp van het uitvoeringsobject zelf en in plaats daarvan moet de MLflow-client worden gebruikt:

client = mlflow.tracking.MlflowClient()
client.list_artifacts("<RUN_ID>")

Deze methode bevat alle artefacten die zijn vastgelegd in de uitvoering, maar ze blijven opgeslagen in het artefactarchief (Azure Machine Learning-opslag). Als u een van deze wilt downloaden, gebruikt u de methode download_artifact:

file_path = client.download_artifacts("<RUN_ID>", path="feature_importance_weight.png")

Raadpleeg voor meer informatie metrische gegevens, parameters, artefacten en modellen ophalen.

Informatie weergeven over taken of uitvoeringen in de studio

U kunt in de Azure Machine Learning-studio door voltooide taakrecords bladeren, inclusief vastgelegde metrische gegevens.

Navigeer naar het tabblad Taken . Als u al uw taken in uw werkruimte in experimenten wilt weergeven, selecteert u het tabblad Alle taken . U kunt inzoomen op taken voor specifieke experimenten door het filter Experiment toe te passen op de bovenste menubalk. Selecteer de gewenste taak om de detailweergave in te voeren en selecteer vervolgens het tabblad Metrische gegevens .

Selecteer de vastgelegde metrische gegevens om grafieken aan de rechterkant weer te geven. U kunt de grafieken aanpassen door vloeiender te maken, de kleur te wijzigen of meerdere metrische gegevens in één grafiek te tekenen. U kunt ook het formaat van de indeling wijzigen en opnieuw rangschiken zoals u wilt. Nadat u de gewenste weergave hebt gemaakt, kunt u deze opslaan voor toekomstig gebruik en deze delen met uw teamleden via een directe koppeling.

Schermopname van de weergave metrische gegevens.

Diagnostische logboeken weergeven en downloaden

Logboekbestanden zijn een essentiële resource voor het opsporen van fouten in de Azure Machine Learning-workloads. Nadat u een trainingstaak hebt verzonden, zoomt u in op een specifieke uitvoering om de logboeken en uitvoer ervan weer te geven:

  1. Navigeer naar het tabblad Taken .
  2. Selecteer de runID voor een specifieke uitvoering.
  3. Selecteer Uitvoer en logboeken boven aan de pagina.
  4. Selecteer Alles downloaden om al uw logboeken te downloaden naar een zip-map.
  5. U kunt ook afzonderlijke logboekbestanden downloaden door het logboekbestand te kiezen en Downloaden te selecteren

Schermopname van de sectie Uitvoer en logboeken van een uitvoering.

map user_logs

Deze map bevat informatie over de door de gebruiker gegenereerde logboeken. Deze map is standaard geopend en het std_log.txt logboek is geselecteerd. In de std_log.txt worden de logboeken van uw code (bijvoorbeeld afdrukinstructies) weergegeven. Dit bestand bevat stdout logboeken en stderr logboeken van uw besturingsscript en trainingsscript, één per proces. In de meeste gevallen bewaakt u de logboeken hier.

map system_logs

Deze map bevat de logboeken die door Azure Machine Learning worden gegenereerd en deze standaard worden gesloten. De logboeken die door het systeem worden gegenereerd, worden gegroepeerd in verschillende mappen, op basis van de fase van de taak in de runtime.

Andere mappen

Voor takentraining op clusters met meerdere berekeningen zijn logboeken aanwezig voor elk IP-knooppunt. De structuur voor elk knooppunt is hetzelfde als taken met één knooppunt. Er is nog een map met logboeken voor algemene uitvoering, stderr en stdout-logboeken.

Azure Machine Learning registreert gegevens uit verschillende bronnen tijdens de training, zoals AutoML of de Docker-container waarmee de trainingstaak wordt uitgevoerd. Veel van deze logboeken worden niet gedocumenteerd. Als u problemen ondervindt en contact op neemt met Microsoft Ondersteuning, kunnen ze deze logboeken mogelijk gebruiken tijdens het oplossen van problemen.