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
pakkettenazureml-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:
- Het actieve experiment maken of instellen.
- Start de taak.
- Gebruik logboekregistratiemethoden voor het vastleggen van metrische gegevens en andere informatie.
- 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_run
kan het handig zijn om de parameter run_name
aan 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=False
toe.
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=False
Azure 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.Image zijn. 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_TIMEOUT
aan 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 seconds
optreden. 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_TIMEOUT
aan 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.
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:
- Navigeer naar het tabblad Taken .
- Selecteer de runID voor een specifieke uitvoering.
- Selecteer Uitvoer en logboeken boven aan de pagina.
- Selecteer Alles downloaden om al uw logboeken te downloaden naar een zip-map.
- U kunt ook afzonderlijke logboekbestanden downloaden door het logboekbestand te kiezen en Downloaden te selecteren
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.