Włącz rejestrowanie w przypadku przebiegów szkoleniowych w MLEnable logging in ML training runs

Zestaw SDK języka Python usługi Azure Machine Learning umożliwia rejestrowanie informacji w czasie rzeczywistym przy użyciu domyślnego pakietu rejestrowania języka Python i funkcji specyficznej dla zestawu SDK.The Azure Machine Learning Python SDK lets you log real-time information using both the default Python logging package and SDK-specific functionality. Możesz rejestrować lokalnie i wysyłać dzienniki do obszaru roboczego w portalu.You can log locally and send logs to your workspace in the portal.

Dzienniki mogą ułatwić diagnozowanie błędów i ostrzeżeń lub śledzenie metryk wydajności, takich jak parametry i wydajność modelu.Logs can help you diagnose errors and warnings, or track performance metrics like parameters and model performance. W tym artykule dowiesz się, jak włączyć rejestrowanie w następujących scenariuszach:In this article, you learn how to enable logging in the following scenarios:

  • Interaktywne sesje trenowaniaInteractive training sessions
  • Przesyłanie zadań trenowania przy użyciu polecenia ScriptRunConfigSubmitting training jobs using ScriptRunConfig
  • Natywne ustawienia rejestrowania (logging) języka PythonPython native logging settings
  • Rejestrowanie z dodatkowych źródełLogging from additional sources

Porada

W tym artykule pokazano, jak monitorować proces trenowania modelu.This article shows you how to monitor the model training process. Jeśli interesuje Cię monitorowanie użycia zasobów i zdarzeń z usługi Azure Machine Learning, takich jak przydziały, ukończone przebiegi trenowania lub ukończone wdrożenia modelu, zobacz Monitorowanie usługi Azure Machine Learning.If you're interested in monitoring resource usage and events from Azure Machine learning, such as quotas, completed training runs, or completed model deployments, see Monitoring Azure Machine Learning.

Typy danychData types

Można rejestrować wiele typów danych, w tym wartości skalarne, listy, tabele, obrazy, katalogi itd.You can log multiple data types including scalar values, lists, tables, images, directories, and more. Aby uzyskać więcej informacji oraz przykłady kodu w języku Python dla różnych typów danych, zobacz stronę referencyjną uruchamiania klasy.For more information, and Python code examples for different data types, see the Run class reference page.

Rejestrowanie metryk uruchamianiaLogging run metrics

Użyj następujących metod w interfejsie API rejestrowania, aby mieć wpływ na wizualizacje metryk.Use the following methods in the logging APIs to influence the metrics visualizations. Zanotuj limity usługi dla tych zarejestrowanych metryk.Note the service limits for these logged metrics.

Wartość rejestrowanaLogged Value Przykładowy kodExample code Formatowanie w portaluFormat in portal
Rejestruj tablicę wartości liczbowychLog an array of numeric values run.log_list(name='Fibonacci', value=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]) Wykres liniowy z pojedynczą zmiennąsingle-variable line chart
Rejestruj pojedynczą wartość liczbową o tej samej nazwie metryki wielokrotnie używanej (na przykład w pętli for)Log a single numeric value with the same metric name repeatedly used (like from within a for loop) for i in tqdm(range(-10, 10)): run.log(name='Sigmoid', value=1 / (1 + np.exp(-i))) angle = i / 2.0 Wykres liniowy z pojedynczą zmiennąSingle-variable line chart
Rejestruj wiersz z 2 kolumnami numerycznymi wielokrotnieLog a row with 2 numerical columns repeatedly run.log_row(name='Cosine Wave', angle=angle, cos=np.cos(angle)) sines['angle'].append(angle) sines['sine'].append(np.sin(angle)) Wykres liniowy z dwoma zmiennymiTwo-variable line chart
Tabela dzienników z 2 kolumnami liczbowymiLog table with 2 numerical columns run.log_table(name='Sine Wave', value=sines) Wykres liniowy z dwoma zmiennymiTwo-variable line chart
Obraz dziennikaLog image run.log_image(name='food', path='./breadpudding.jpg', plot=None, description='desert') Ta metoda służy do rejestrowania pliku obrazu lub wykresu matplotlib do uruchomienia.Use this method to log an image file or a matplotlib plot to the run. Te obrazy będą widoczne i porównywalne w rekordzie przebieguThese images will be visible and comparable in the run record

Rejestrowanie przy użyciu MLflowLogging with MLflow

Użyj MLFlowLogger, aby rejestrować metryki.Use MLFlowLogger to log metrics.

from azureml.core import Run
# connect to the workspace from within your running code
run = Run.get_context()
ws = run.experiment.workspace

# workspace has associated ml-flow-tracking-uri
mlflow_url = ws.get_mlflow_tracking_uri()

#Example: PyTorch Lightning
from pytorch_lightning.loggers import MLFlowLogger

mlf_logger = MLFlowLogger(experiment_name=run.experiment.name, tracking_uri=mlflow_url)
mlf_logger._run_id = run.id

Interaktywna sesja rejestrowaniaInteractive logging session

Interaktywne sesje rejestrowania są zwykle używane w środowiskach notesów.Interactive logging sessions are typically used in notebook environments. Metoda Experiment.start_logging() uruchamia interaktywną sesję rejestrowania.The method Experiment.start_logging() starts an interactive logging session. Wszystkie metryki zarejestrowane w trakcie sesji są dodawane do rekordu przebiegu w eksperymencie.Any metrics logged during the session are added to the run record in the experiment. Metoda run.complete() kończy sesje i oznacza przebieg jako zakończony.The method run.complete() ends the sessions and marks the run as completed.

Dzienniki ScriptRunScriptRun logs

W tej sekcji dowiesz się, jak dodać kod rejestrowania w ramach przebiegów utworzonych podczas konfigurowania za pomocą klasy ScriptRunConfig.In this section, you learn how to add logging code inside of runs created when configured with ScriptRunConfig. Do hermetyzowania skryptów i środowisk na potrzeby powtarzalnych przebiegów można użyć klasy ScriptRunConfig.You can use the ScriptRunConfig class to encapsulate scripts and environments for repeatable runs. Możesz również użyć tej opcji, aby wyświetlić widżet notesów Jupyter Notebook na potrzeby monitorowania.You can also use this option to show a visual Jupyter Notebooks widget for monitoring.

Ten przykład wykonuje czyszczenie parametrów nad wartościami alfa i przechwytuje wyniki przy użyciu metody run.log().This example performs a parameter sweep over alpha values and captures the results using the run.log() method.

  1. Utwórz skrypt trenowania zawierający logikę rejestrowania, skrypt train.py.Create a training script that includes the logging logic, 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. Prześlij skrypt train.py w celu uruchomienia go w środowisku zarządzanym przez użytkownika.Submit the train.py script to run in a user-managed environment. Na potrzeby trenowania jest przesyłany cały folder skryptu.The entire script folder is submitted for training.

    [! Notes — Python [] (~/MachineLearningNotebooks/how-to-use-azureml/training/train-on-local/train-on-local.ipynb? Name = SRC)][!notebook-python[] (~/MachineLearningNotebooks/how-to-use-azureml/training/train-on-local/train-on-local.ipynb?name=src)]

    [! Notes — Python [] (~/MachineLearningNotebooks/how-to-use-azureml/training/train-on-local/train-on-local.ipynb? Name = Run)][!notebook-python[] (~/MachineLearningNotebooks/how-to-use-azureml/training/train-on-local/train-on-local.ipynb?name=run)]

    Parametr show_output włącza pełne rejestrowanie, które umożliwia wyświetlenie szczegółowych informacji z procesu trenowania, a także informacji o wszelkich zasobach zdalnych lub docelowych obiektach obliczeniowych.The show_output parameter turns on verbose logging, which lets you see details from the training process as well as information about any remote resources or compute targets. Użyj poniższego kodu, aby włączyć pełne rejestrowanie podczas przesyłania eksperymentu.Use the following code to turn on verbose logging when you submit the experiment.

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

Można również użyć tego samego parametru w funkcji wait_for_completion w wynikowym przebiegu.You can also use the same parameter in the wait_for_completion function on the resulting run.

run.wait_for_completion(show_output=True)

Natywne rejestrowanie w języku PythonNative Python logging

Niektóre dzienniki w zestawie SDK mogą zawierać błąd, który powoduje ustawienie poziomu rejestrowania na DEBUGOWANIE.Some logs in the SDK may contain an error that instructs you to set the logging level to DEBUG. Aby ustawić poziom rejestrowania, dodaj następujący kod do skryptu.To set the logging level, add the following code to your script.

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

Dodatkowe źródła rejestrowaniaAdditional logging sources

Usługa Azure Machine Learning może również rejestrować informacje z innych źródeł podczas trenowania, takich jak przebiegi zautomatyzowanego uczenia maszynowego lub kontenery platformy Docker, które uruchamiają zadania.Azure Machine Learning can also log information from other sources during training, such as automated machine learning runs, or Docker containers that run the jobs. Te dzienniki nie są udokumentowane, ale jeśli wystąpią problemy i skontaktujesz się z pomocą techniczną firmy Microsoft, być może będą oni mogli wykorzystać te dzienniki podczas rozwiązywania problemów.These logs aren't documented, but if you encounter problems and contact Microsoft support, they may be able to use these logs during troubleshooting.

Informacje dotyczące rejestrowania metryk w projektancie usługi Azure Machine Learning znajdują się w temacie Sposób rejestrowania metryk w projektancieFor information on logging metrics in Azure Machine Learning designer, see How to log metrics in the designer

Przykładowe notesyExample notebooks

W poniższych notesach przedstawiono pojęcia opisane w tym artykule:The following notebooks demonstrate concepts in this article:

Instrukcję uruchamiania notesów znajdziesz w artykule Use Jupyter notebooks to explore this service (Eksplorowanie tej usługi za pomocą notesów Jupyter).Learn how to run notebooks by following the article Use Jupyter notebooks to explore this service.

Następne krokiNext steps

Zobacz następujące artykuły, aby dowiedzieć się więcej na temat korzystania z usługi Azure Machine Learning:See these articles to learn more on how to use Azure Machine Learning: