Logga & visa mått och loggfiler

Logga realtidsinformation med hjälp av både Python-standardloggningspaketet och Azure Machine Learning Python SDK-specifika funktioner. Du kan logga lokalt och skicka loggar till din arbetsyta i portalen.

Med loggarna kan du diagnostisera fel och varningar, eller spåra prestandamått som parametrar och modellprestanda. I den här artikeln får du lära dig hur du aktiverar loggning i följande scenarier:

  • Loggkörningsmått
  • Interaktiva träningssessioner
  • Skicka träningsjobb med ScriptRunConfig
  • Inbyggda logging-inställningar i Python
  • Loggning från fler källor

Tips

Den här artikeln visar hur du övervakar modellträningsprocessen. Om du vill veta mer om att övervaka resursanvändning och händelser från Azure Machine Learning, till exempel kvoter, slutförda träningskörningar eller slutförda modelldistributioner, kan du läsa Övervakning i Azure Machine Learning.

Datatyper

Du kan logga flera datatyper, inklusive skalära värden, listor, tabeller, bilder, kataloger med mera. Mer information och Python-kodexempel för olika datatyper finns på referenssidan Körningsklass.

Loggningskörningsmått

Använd följande metoder i loggnings-API:erna för att påverka måttvisualiseringarna. Observera tjänstgränserna för dessa loggade mått.

Loggat värde Exempelkod Format i portalen
Logga en matris med numeriska värden run.log_list(name='Fibonacci', value=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]) linjediagram med en variabel
Logga ett enda numeriskt värde med samma måttnamn upprepade gånger (som inifrån en for-loop) for i in tqdm(range(-10, 10)): run.log(name='Sigmoid', value=1 / (1 + np.exp(-i))) angle = i / 2.0 Linjediagram med en variabel
Logga en rad med 2 numeriska kolumner upprepade gånger run.log_row(name='Cosine Wave', angle=angle, cos=np.cos(angle)) sines['angle'].append(angle) sines['sine'].append(np.sin(angle)) Linjediagram med två variabler
Loggtabell med 2 numeriska kolumner run.log_table(name='Sine Wave', value=sines) Linjediagram med två variabler
Loggavbildning run.log_image(name='food', path='./breadpudding.jpg', plot=None, description='desert') Använd den här metoden för att logga en bildfil eller ett matplotlib-diagram i körningen. Dessa avbildningar är synliga och jämförbara i körningsposten

Logga med MLflow

Vi rekommenderar att du loggar dina modeller, mått och artefakter med MLflow eftersom det är öppen källkod och har stöd för lokal portabilitet till molnet. Följande tabell och kodexempel visar hur du använder MLflow för att logga mått och artefakter från dina träningskörningar. Läs mer om MLflows loggningsmetoder och designmönster.

Se till att installera mlflow azureml-mlflow pip-paketen och på din arbetsyta.

pip install mlflow
pip install azureml-mlflow

Ange MLflow-spårnings-URI:n så att den pekar Azure Machine Learning backend för att säkerställa att dina mått och artefakter loggas på din arbetsyta.

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()
Loggat värde Exempelkod Kommentarer
Logga ett numeriskt värde (int eller float) mlflow.log_metric('my_metric', 1)
Logga ett booleskt värde mlflow.log_metric('my_metric', 0) 0 = Sant, 1 = Falskt
Logga en sträng mlflow.log_text('foo', 'my_string') Loggas som en artefakt
Logga numpy-mått eller PIL-bildobjekt mlflow.log_image(img, 'figure.png')
Loggmatlotlib-ritytan eller bildfilen mlflow.log_figure(fig, "figure.png")

Visa körningsmått via SDK

Du kan visa måtten för en tränad modell med hjälp av 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

Du kan också komma åt körningsinformation med hjälp av MLflow via körningsobjektets data- och informationsegenskaper. Mer information finns i dokumentationen om MLflow.entities.Run-objekt.

När körningen är klar kan du hämta den med hjälp av 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)

Du kan visa mått, parametrar och taggar för körningen i datafältet för körningsobjektet.

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

Anteckning

Måttordlistan under mlflow.entities.Run.data.metrics returnerar endast det senast loggade värdet för ett visst måttnamn. Om du till exempel loggar i ordning 1, sedan 2, sedan 3 och sedan 4 till ett mått med namnet finns endast 4 i sample_metric måttordlistan för sample_metric .

Om du vill logga alla mått för ett visst måttnamn kan du använda MlFlowClient.get_metric_history() .

Visa körningsmått i användargränssnittet i Studio

Du kan bläddra bland slutförda körningsposter, inklusive loggade mått, i Azure Machine Learning studio.

Gå till fliken Experiment. Om du vill visa alla körningar i arbetsytan över experiment väljer du fliken Alla körningar. Du kan öka detaljgranska körningar för specifika experiment genom att använda filtret Experiment på den översta menyraden.

För den enskilda experimentvyn väljer du fliken Alla experiment. På instrumentpanelen för experimentkörning kan du se spårade mått och loggar för varje körning.

Du kan också redigera tabellen med körningslistor för att välja flera körningar och visa antingen det sista, lägsta eller högsta loggade värdet för dina körningar. Anpassa dina diagram för att jämföra loggade måttvärden och aggregeringar över flera körningar. Du kan rita flera mått på y-axeln i diagrammet och anpassa x-axeln för att rita dina loggade mått.

Visa och ladda ned loggfiler för en körning

Loggfiler är en viktig resurs för felsökning av Azure ML arbetsbelastningar. När du har skickat ett träningsjobb går du nedåt till en specifik körning för att visa dess loggar och utdata:

  1. Gå till fliken Experiment.
  2. Välj runID för en specifik körning.
  3. Välj Utdata och loggar överst på sidan.
  4. Välj Ladda ned alla för att ladda ned alla dina loggar till en zip-mapp.
  5. Du kan också ladda ned enskilda loggfiler genom att välja loggfilen och välja Ladda ned

Skärmbild av avsnittet Utdata och loggar för en körning.

Tabellerna nedan visar innehållet i loggfilerna i mapparna som visas i det här avsnittet.

Anteckning

Du ser inte nödvändigtvis alla filer för varje körning. Till exempel visas 20_image_build_log*.txt när en ny avbildning har skapats (t.ex. när du ändrar din miljö).

azureml-logs Mappen

Fil Description
20_image_build_log.txt Docker-avbildningsbygglogg för träningsmiljön, valfritt, en per körning. Gäller endast när du uppdaterar din miljö. Annars AML cachelagrade avbildningar igen. Om det lyckas innehåller information om avbildningsregistret för motsvarande avbildning.
55_azureml-execution-<node_id>.txt stdout/stderr-logg för värdverktyget, en per nod. Hämtar avbildningen till beräkningsmålet. Observera att den här loggen bara visas när du har skyddat beräkningsresurser.
65_job_prep #<node_id>.txt stdout/stderr-logg för skript för jobbförberedelse, en per nod. Ladda ned koden till beräkningsmålet och datalager (om så krävs).
70_driver_log(_x).txt stdout/stderr-logg från AML-kontrollskript och kundträningsskript, ett per process. Standardutdata från skriptet. Det är i den här filen som kodens loggar (till exempel utskriftsuttryck) visas. I de flesta fall övervakar du loggarna här.
70_mpi_log.txt MPI-ramverkslogg, valfritt, en per körning. Endast för MPI-körning.
75_job_post #<node_id>.txt stdout/stderr-logg för jobbutgåpsskript, en per nod. Skicka loggar och släpp beräkningsresurserna tillbaka till Azure.
process_info.json visar vilken process som körs på vilken nod.
process_status.json visa processstatus, till exempel om en process inte har startats, körs eller har slutförts.

logs > azureml Mappen

Fil Description
110_azureml.log
job_prep_azureml.log systemlogg för jobbförberedelse
job_release_azureml.log systemlogg för jobbutgågår

logs > azureml > sidecar > node_id Mappen

När sidovagnen är aktiverad körs jobbförberedelser och jobbutgårskript i sidovagnscontainern. Det finns en mapp för varje nod.

Fil Description
start_cms.txt Logg över processen som startar när Sidovagnscontainer startar
prep_cmd.txt Logg för ContextManagers som anges job_prep.py när körs (en del av det här innehållet strömmas till azureml-logs/65-job_prep )
release_cmd.txt Loggen för ComtextManagers avslutas job_release.py när körs

Andra mappar

För jobbträning i kluster med flera beräkningar finns det loggar för varje nod-IP. Strukturen för varje nod är samma som jobb med en nod. Det finns ytterligare en loggmapp för övergripande körning, stderr och stdout-loggar.

Azure Machine Learning loggar information från olika källor under träningen, till exempel AutoML eller Docker-containern som kör träningsjobbet. Många av dessa loggar är inte dokumenterade. Om du stöter på problem och kontaktar Microsofts support kan de använda loggarna under felsökningen.

Interaktiv loggningssession

Interaktiva loggningssessioner används vanligtvis i miljöer med notebook-filer. Metoden Experiment.start_logging() startar en interaktiv loggningssession. Alla mått som loggas under sessionen läggs till i körningsposten i experimentet. Metoden run.complete() avslutar sessionerna och markerar körningen som slutförd.

ScriptRun-loggar

I det här avsnittet lär du dig att lägga till loggningskod i körningar som skapas vid konfiguration med ScriptRunConfig. Du kan använda ScriptRunConfig-klassen till att kapsla in skript och miljöer för upprepningsbara körningar. Du kan också använda det här alternativet till att visa widgeten för Jupyter Notebooks vid övervakning.

I det här exemplet utförs en parameterrensning av alfavärden och resultaten samlas in med hjälp av metoden run.log().

  1. Skapa ett träningsskript som innehåller loggningslogiken 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))
    
  2. Skicka train.py-skriptet för körning i en användarhanterad miljö. Hela skriptmappen skickas för träningen.

    from azureml.core import ScriptRunConfig
    
    src = ScriptRunConfig(source_directory='./', script='train.py', environment=user_managed_env)
    run = exp.submit(src)

    Parametern show_output aktiverar utförlig loggning så att du kan se information från träningsprocessen, samt information om eventuella fjärresurser eller beräkningsmål. Använd följande kod för att aktivera utförlig loggning när du skickar experimentet.

run = exp.submit(src, show_output=True)

Du kan också använda samma parameter i funktionen wait_for_completion för den resulterande körningen.

run.wait_for_completion(show_output=True)

Intern Python-loggning

Vissa loggar i SDK:n kan innehålla ett fel som uppmanar dig att ange loggningsnivån DEBUG. Om du ska ange loggningsnivån lägger du till nedanstående kod i skriptet.

import logging
logging.basicConfig(level=logging.DEBUG)

Andra loggningskällor

Azure Machine Learning kan också logga information från andra källor under träningen, till exempel automatiserade maskininlärningskörningar eller Docker-containrar som kör jobben. Dessa loggar dokumenteras inte, men om du stöter på problem och kontaktar Microsofts support kan de använda loggarna vid felsökning.

Information om loggning av mått i Azure Machine Learning-designern finns i Loggning av mått i designern

Exempelnotebook-filer

Följande notebook-filer demonstrerar begreppen i den här artikeln:

Lär dig att köra notebook-filer genom att följa artikeln Använda Jupyter-notebooks till att utforska tjänsten.

Nästa steg

Läs de här artiklarna om du vill lära dig mer om att använda Azure Machine Learning: