Metrische & logboekbestanden weergeven
Registreer realtime-informatie met behulp van zowel het standaard python-logboekregistratiepakket als Azure Machine Learning python SDK-specifieke functionaliteit. U kunt logboeken lokaal opslaan en logboeken verzenden naar uw werkruimte in de portal.
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 leert u hoe u logboekregistratie inschakelt in de volgende scenario's:
- Metrische gegevens voor het uitvoeren van logboeken
- Interactieve trainingssessies
- Trainingstaken verzenden met behulp van ScriptRunConfig
- Systeemeigen Python-instellingen voor
logging - Logboekregistratie van aanvullende bronnen
Tip
In dit artikel leest u hoe u het modeltrainingsproces kunt bewaken. Zie Azure Machine Learning bewaken als u geïnteresseerd bent in het bewaken van het resourcegebruik en gebeurtenissen van Azure Machine Learning, zoals quota's, voltooide trainingsuitvoeringen of voltooide implementaties van modellen.
Gegevenstypen
U kunt meerdere gegevenstypen vastleggen, waaronder scalaire waarden, lijsten, tabellen, afbeeldingen, directory's en meer. Zie de referentiepagina voor Run-klassen voor meer informatie en Python-codevoorbeelden voor verschillende gegevenstypen.
Metrische gegevens voor het uitvoeren van logboekregistratie
Gebruik de volgende methoden in de API's voor logboekregistratie om de visualisaties van metrische gegevens te beïnvloeden. Noteer de servicelimieten voor deze vastgelegde metrische gegevens.
| Vastgelegde waarde | Voorbeeldcode | Indeling in portal |
|---|---|---|
| Een matrix met numerieke waarden in een logboek maken | run.log_list(name='Fibonacci', value=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]) |
lijndiagram met één variabele |
| Registreer één numerieke waarde met dezelfde metrische naam die herhaaldelijk wordt gebruikt (bijvoorbeeld vanuit een for-lus) | for i in tqdm(range(-10, 10)): run.log(name='Sigmoid', value=1 / (1 + np.exp(-i))) angle = i / 2.0 |
Lijndiagram met één variabele |
| Een rij met twee numerieke kolommen herhaaldelijk aanmelden | run.log_row(name='Cosine Wave', angle=angle, cos=np.cos(angle)) sines['angle'].append(angle) sines['sine'].append(np.sin(angle)) |
Lijndiagram met twee variabelen |
| Logboektabel met 2 numerieke kolommen | run.log_table(name='Sine Wave', value=sines) |
Lijndiagram met twee variabelen |
| Logboekafbeelding | run.log_image(name='food', path='./breadpudding.jpg', plot=None, description='desert') |
Gebruik deze methode om een afbeeldingsbestand of een matplotlib-plot te koppelen aan de run. Deze afbeeldingen zijn zichtbaar en vergelijkbaar in de runrecord |
Logboekregistratie met MLflow
We raden u aan om uw modellen, metrische gegevens en artefacten te registreren met MLflow, omdat deze open source en ondersteuning biedt voor de lokale modus naar de overdraagbaarheid van de cloud. De volgende tabel- en codevoorbeelden laten zien hoe u MLflow gebruikt om metrische gegevens en artefacten van uw trainingsuit runs te loggen. Meer informatie over de logboekregistratiemethoden en ontwerppatronen van MLflow.
Zorg ervoor dat u de mlflow azureml-mlflow pip-pakketten en installeert in uw werkruimte.
pip install mlflow
pip install azureml-mlflow
Stel de MLflow-tracerings-URI in op de back-Azure Machine Learning om ervoor te zorgen dat uw metrische gegevens en artefacten worden geregistreerd in uw werkruimte.
from azureml.core import Workspace
import mlflow
from mlflow.tracking import MlflowClient
ws = Workspace.from_config()
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
mlflow.create_experiment("mlflow-experiment")
mlflow.set_experiment("mlflow-experiment")
mlflow_run = mlflow.start_run()
| Vastgelegde waarde | Voorbeeldcode | Notities |
|---|---|---|
| Een numerieke waarde (int of float) in een logboek maken | mlflow.log_metric('my_metric', 1) |
|
| Een Booleaanse waarde in een logboek maken | mlflow.log_metric('my_metric', 0) |
0 = True, 1 = False |
| Een tekenreeks aanmelden | mlflow.log_text('foo', 'my_string') |
Geregistreerd als een artefact |
| Logboek numpy metrische gegevens of PIL-afbeeldingsobjecten | mlflow.log_image(img, 'figure.png') |
|
| Matlotlib-plot of afbeeldingsbestand in logboek | mlflow.log_figure(fig, "figure.png") |
Metrische gegevens van de run weergeven via de SDK
U kunt de metrische gegevens van een getraind model weergeven met behulp van run.get_metrics() .
from azureml.core import Run
run = Run.get_context()
run.log('metric-name', metric_value)
metrics = run.get_metrics()
# metrics is of type Dict[str, List[float]] mapping metric names
# to a list of the values for that metric in the given run.
metrics.get('metric-name')
# list of metrics in the order they were recorded
U kunt ook toegang krijgen tot gegevens van de run met behulp van MLflow via de gegevens en informatie-eigenschappen van het run-object. Zie de MLflow.entities.Run-objectdocumentatie voor meer informatie.
Nadat de run is voltooid, kunt u deze ophalen met behulp van mlFlowClient().
from mlflow.tracking import MlflowClient
# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
finished_mlflow_run = MlflowClient().get_run(mlflow_run.info.run_id)
U kunt de metrische gegevens, parameters en tags voor de run weergeven in het gegevensveld van het run-object.
metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params
Notitie
De woordenlijst met metrische gegevens mlflow.entities.Run.data.metrics onder retourneert alleen de meest recent geregistreerde waarde voor een bepaalde metrische naam. Als u zich bijvoorbeeld in volgorde, 1, vervolgens 2, vervolgens 3 en vervolgens 4 aanmeldt bij een metriek met de naam , is er slechts 4 aanwezig in de woordenlijst met metrische sample_metric gegevens voor sample_metric .
Als u alle metrische gegevens voor een bepaalde metrische naam wilt laten vastgelegd, kunt u MlFlowClient.get_metric_history() gebruiken.
Metrische gegevens voor uitvoeren weergeven in de studio-gebruikersinterface
U kunt bladeren door voltooide records, inclusief vastgelegde metrische gegevens, in Azure Machine Learning studio.
Navigeer naar het tabblad Experimenten. Selecteer het tabblad Alle runs om al uw runs in uw werkruimte voor experimenten weer te bieden. U kunt inzoomen op de runs voor specifieke experimenten door het filter Experiment toe te passen in de bovenste menubalk.
Selecteer voor de afzonderlijke experimentweergave het tabblad Alle experimenten. Op het dashboard van de experimentrun ziet u metrische gegevens en logboeken voor elke run.
U kunt ook de lijsttabel van de run bewerken om meerdere runs te selecteren en de laatste, minimale of maximale vastgelegde waarde voor uw runs weer te geven. Pas uw grafieken aan om de vastgelegde metrische waarden en statistische gegevens voor meerdere runs te vergelijken. U kunt meerdere metrische gegevens op de y-as van uw grafiek plotten en uw x-as aanpassen om uw vastgelegde metrische gegevens te plotten.
Logboekbestanden voor een run weergeven en downloaden
Logboekbestanden zijn een essentiële resource voor het debuggen van de Azure ML workloads. Nadat u een trainings job hebt verzenden, zoomt u in op een specifieke run om de logboeken en uitvoer ervan weer te geven:
- Navigeer naar het tabblad Experimenten.
- Selecteer de runID voor een specifieke run.
- Selecteer Uitvoer en logboeken bovenaan 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
In de onderstaande tabellen wordt de inhoud van de logboekbestanden weergegeven in de mappen die u in deze sectie ziet.
Notitie
U ziet niet noodzakelijkerwijs elk bestand voor elke run. De 20_image_build_log*.txt wordt bijvoorbeeld alleen weergegeven wanneer er een nieuwe afbeelding wordt gemaakt (bijvoorbeeld wanneer u uw omgeving wijzigt).
azureml-logs Map
| File | Beschrijving |
|---|---|
| 20_image_build_log.txt | Bouwlogboek van Docker-afbeelding voor de trainingsomgeving, optioneel, één per run. Alleen van toepassing bij het bijwerken van uw omgeving. Anders AML de in cache opgeslagen afbeelding opnieuw. Als dit lukt, bevat registergegevens van de afbeelding voor de bijbehorende afbeelding. |
| 55_azureml-execution-<node_id>.txt | stdout/stderr-logboek van hosthulpprogramma, één per knooppunt. Haalt een afbeelding op naar het rekendoel. Opmerking: dit logboek wordt alleen weergegeven wanneer u rekenbronnen hebt beveiligd. |
| 65_job_prep-<node_id>.txt | stdout/stderr-logboek van taakvoorbereidingsscript, één per knooppunt. Download uw code naar rekendoel en gegevensstores (indien aangevraagd). |
| 70_driver_log(_x).txt | stdout/stderr-logboek uit AML besturingsscript en klanttrainingsscript, één per proces. Standaarduitvoer van uw script. Dit bestand is de plek waar de logboeken van uw code (bijvoorbeeld afdruk instructies) worden weer geven. In de meeste gevallen bewaakt u hier de logboeken. |
| 70_mpi_log.txt | MPI-frameworklogboek, optioneel, één per run. Alleen voor MPI-run. |
| 75_job_post-<node_id>.txt | stdout/stderr log of job release script, één per knooppunt. Logboeken verzenden en de rekenbronnen terugsturen naar Azure. |
| process_info.json | laten zien welk proces op welk knooppunt wordt uitgevoerd. |
| process_status.json | processtatus weergeven, bijvoorbeeld als een proces niet is gestart, uitgevoerd of voltooid. |
logs > azureml Map
| File | Beschrijving |
|---|---|
| 110_azureml.log | |
| job_prep_azureml.log | systeemlogboek voor taakvoorbereiding |
| job_release_azureml.log | systeemlogboek voor het vrijgeven van een taak |
logs > azureml > sidecar > node_id Map
Wanneer sidecar is ingeschakeld, worden scripts voor taakvoorbereiding en jobre release uitgevoerd binnen de sidecar-container. Er is één map voor elk knooppunt.
| File | Beschrijving |
|---|---|
| start_cms.txt | Logboek van het proces dat begint wanneer sidecar-container wordt gestart |
| prep_cmd.txt | Logboek voor ContextManagers ingevoerd wanneer wordt uitgevoerd (sommige van deze inhoud job_prep.py wordt gestreamd naar azureml-logs/65-job_prep ) |
| release_cmd.txt | Logboek voor ComtextManagers afgesloten wanneer job_release.py wordt uitgevoerd |
Andere mappen
Voor het trainen van taken op clusters met meerdere berekeningen zijn logboeken aanwezig voor elk knooppunt-IP. De structuur voor elk knooppunt is hetzelfde als taken met één knooppunt. Er is nog een logboekmap voor algemene uitvoering, stderr- en stdout-logboeken.
Azure Machine Learning registreert informatie uit verschillende bronnen tijdens de training, zoals AutoML of de Docker-container waarin de trainings job wordt uitgevoerd. Veel van deze logboeken worden niet gedocumenteerd. Als u problemen ondervindt en contact op kunt nemen met Microsoft Ondersteuning, kunnen ze deze logboeken mogelijk gebruiken tijdens het oplossen van problemen.
Interactieve logboekregistratiesessie
Interactieve logboekregistratiesessies worden doorgaans gebruikt in notebookomgevingen. Met de methode Experiment.start_logging() wordt een interactieve logboekregistratiesessie gestart. Alle metrische gegevens die tijdens de sessie zijn geregistreerd, worden toegevoegd aan het uitvoeringsrecord in het experiment. Met de methode run.complete() worden de sessies beëindigd en de uitvoering als voltooid gemarkeerd.
ScriptRun-logboeken
In dit gedeelte leert u hoe u logboekcode in uitvoeringen toevoegt die zijn gemaakt toen de ScriptRunConfig werd geconfigureerd. Met de klasse ScriptRunConfig-kunt u scripts en omgevingen inkapselen voor herhaalbare uitvoeringen. U kunt deze optie ook gebruiken om een visuele Jupyter Notebook-widget weer te geven voor bewakingsdoeleinden.
In dit voorbeeld wordt een parameteropruiming uitgevoerd op alfawaarden en worden de resultaten vastgelegd met de methode run.log().
Maak een trainingsscript dat de logica voor logboekregistratie bevat,
train.py.# Copyright (c) Microsoft. All rights reserved. # Licensed under the MIT license. from sklearn.datasets import load_diabetes from sklearn.linear_model import Ridge from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split from azureml.core.run import Run import os import numpy as np import mylib # sklearn.externals.joblib is removed in 0.23 try: from sklearn.externals import joblib except ImportError: import joblib os.makedirs('./outputs', exist_ok=True) X, y = load_diabetes(return_X_y=True) run = Run.get_context() X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) data = {"train": {"X": X_train, "y": y_train}, "test": {"X": X_test, "y": y_test}} # list of numbers from 0.0 to 1.0 with a 0.05 interval alphas = mylib.get_alphas() for alpha in alphas: # Use Ridge algorithm to create a regression model reg = Ridge(alpha=alpha) reg.fit(data["train"]["X"], data["train"]["y"]) preds = reg.predict(data["test"]["X"]) mse = mean_squared_error(preds, data["test"]["y"]) run.log('alpha', alpha) run.log('mse', mse) model_file_name = 'ridge_{0:.2f}.pkl'.format(alpha) # save model in the outputs folder so it automatically get uploaded with open(model_file_name, "wb") as file: joblib.dump(value=reg, filename=os.path.join('./outputs/', model_file_name)) print('alpha is {0:.2f}, and mse is {1:0.2f}'.format(alpha, mse))Verzend het script
train.pyvoor uitvoering in een door de gebruiker beheerde omgeving. De volledige scriptmap wordt verzonden voor training.from azureml.core import ScriptRunConfig src = ScriptRunConfig(source_directory='./', script='train.py', environment=user_managed_env)run = exp.submit(src)Met de parameter
show_outputwordt uitgebreide logboekregistratie ingeschakeld, zodat u zowel details van het trainingsproces als informatie over externe resources of rekendoelen kunt bekijken. Gebruik de volgende code om uitgebreide logboekregistratie in te schakelen wanneer u het experiment verzendt.
run = exp.submit(src, show_output=True)
U kunt ook dezelfde parameter gebruiken in de functie wait_for_completion van de resulterende uitvoering.
run.wait_for_completion(show_output=True)
Systeemeigen logboekregistratie van Python
Sommige logboeken in de SDK bevatten mogelijk een foutmelding dat u het logboekregistratieniveau moet instellen op DEBUG (fouten opsporen). Als u het logboekregistratieniveau wilt instellen, voegt u de volgende code toe aan het script.
import logging
logging.basicConfig(level=logging.DEBUG)
Andere bronnen voor logboekregistratie
Met Azure Machine Learning kunnen tijdens de training ook gegevens van andere bronnen worden geregistreerd, zoals geautomatiseerde machine learning-uitvoeringen, of Docker-containers die de taken uitvoeren. Deze logboeken worden niet gedocumenteerd, maar als u problemen ondervindt en contact opneemt met Microsoft-ondersteuning, kunnen ze deze logboeken gebruiken tijdens het oplossen van problemen.
Raadpleeg Hoe kan ik metrische gegevens registreren in de ontwerpfunctie voor informatie over het vastleggen van metrische gegevens in de Azure Machine Learning-ontwerpfunctie
Voorbeeldnotebooks
In de volgende notebooks worden concepten in dit artikel gedemonstreerd:
- how-to-use-azureml/training/train-on-local
- how-to-use-azureml/track-and-monitor-experiments/logging-api
Informatie over het uitvoeren van notebooks vindt u in het artikel Use Jupyter notebooks to explore this service (Jupyter Notebooks gebruiken om deze service te verkennen).
Volgende stappen
Raadpleeg deze artikelen voor meer informatie over het gebruik van Azure Machine Learning:
- Bekijk een voorbeeld van hoe u het beste model registreert en implementeert in de zelfstudie Een afbeeldingsclassificatiemodel trainen met Azure Machine Learning.