Share via


Log & view metrics and log files v1

ÉRVÉNYES:Python SDK azureml v1

Valós idejű adatok naplózása az alapértelmezett Python-naplózási csomag és az Azure Machine Tanulás Python SDK-specifikus funkciók használatával. Naplózhat helyben, és elküldheti a naplókat a portálon lévő munkaterületekre.

A naplókkal diagnosztizálhatja a hibákat és a figyelmeztetéseket, vagy nyomon követheti a teljesítménymetrikákat, például a paramétereket és a modell teljesítményét. Ebben a cikkben azzal fog megismerkedni, hogyan engedélyezheti a naplózást a következő forgatókönyvekben:

  • Naplófuttatási metrikák
  • Interaktív betanítási munkamenetek
  • Betanítási feladatok elküldése a ScriptRunConfig használatával
  • Python natív logging beállításai
  • Naplózás további forrásokból

Tipp.

Ez a cikk a modell betanítási folyamatának monitorozását mutatja be. Ha az Azure Machine Tanulás erőforrás-használatának és eseményeinek monitorozására van szüksége, például kvótákra, befejezett betanítási futtatásokra vagy befejezett modelltelepítésekre, tekintse meg az Azure Machine Tanulás monitorozását.

Adattípusok

Többféle adattípust is naplózhat, például skaláris értékeket, listákat, táblákat, rendszerképeket, könyvtárakat és egyebeket. További információt és a különböző adattípusok Python-kódmintáit a futtatási osztály referenciaoldalán találja.

Naplózási futtatási metrikák

A metrikák vizualizációinak befolyásolásához használja az alábbi módszereket a naplózási API-kban. Figyelje meg ezeknek a naplózott metrikáknak a szolgáltatási korlátait .

Naplózott érték Mintakód Formátum a portálon
Numerikus értékek tömbjének naplózása run.log_list(name='Fibonacci', value=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]) egyváltozós vonaldiagram
Naplózjon egyetlen numerikus értéket ugyanazzal a metrikanévvel, amelyet többször is használnak (például egy cikluson belülről) for i in tqdm(range(-10, 10)): run.log(name='Sigmoid', value=1 / (1 + np.exp(-i))) angle = i / 2.0 Egyváltozós vonaldiagram
Sor naplózása 2 numerikus oszlopmal run.log_row(name='Cosine Wave', angle=angle, cos=np.cos(angle)) sines['angle'].append(angle) sines['sine'].append(np.sin(angle)) Kétváltozós vonaldiagram
Naplótábla 2 numerikus oszloppal run.log_table(name='Sine Wave', value=sines) Kétváltozós vonaldiagram
Naplókép run.log_image(name='food', path='./breadpudding.jpg', plot=None, description='desert') Ezzel a módszerrel naplózhat egy képfájlt vagy egy matplotlib-diagramot a futtatásra. Ezek a képek láthatóak és összehasonlíthatók lesznek a futtatási rekordban

Naplózás MLflow használatával

Javasoljuk, hogy a modelleket, metrikákat és összetevőket az MLflow használatával naplózhassa, mivel az nyílt forráskód, és támogatja a helyi módot a felhő hordozhatóságához. Az alábbi táblázat és kód példák bemutatják, hogyan naplózhatja a metrikákat és összetevőket az MLflow használatával a betanítási futtatásokból. További információ az MLflow naplózási módszereiről és tervezési mintáiról.

Mindenképpen telepítse a csomagokat a mlflow munkaterületre, és azureml-mlflow pipelje be a csomagokat.

pip install mlflow
pip install azureml-mlflow

Állítsa be az MLflow nyomkövetési URI-t úgy, hogy az Azure Machine Tanulás háttérrendszerre mutasson, hogy a metrikákat és összetevőket naplózza a munkaterületre.

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()
Naplózott érték Mintakód Jegyzetek
Numerikus érték naplózása (int vagy float) mlflow.log_metric('my_metric', 1)
Logikai érték naplózása mlflow.log_metric('my_metric', 0) 0 = Igaz, 1 = Hamis
Sztring naplózása mlflow.log_text('foo', 'my_string') Összetevőként naplózva
Log numpy metrics or PIL image objects mlflow.log_image(img, 'figure.png')
Log matlotlib plot or image file mlflow.log_figure(fig, "figure.png")

Futtatási metrikák megtekintése az SDK-val

A betanított modellek metrikáit a következővel run.get_metrics()tekintheti meg: .

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

A futtatási információk az MLflow használatával is elérhetők a futtatási objektum adatain és információtulajdonságain keresztül. További információt az MLflow.entities.Run objektumdokumentációjában talál.

A futtatás befejezése után a MlFlowClient() használatával lekérheti.

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)

A futtatás metrikáit, paramétereit és címkéit a futtatási objektum adatmezőjében tekintheti meg.

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

Megjegyzés:

A metrikák szótára csak mlflow.entities.Run.data.metrics egy adott metrikanév legutóbb naplózott értékét adja vissza. Ha például az 1, majd 2, majd 3, majd 4 sorrendben naplóz egy metrikát, akkor a metrikaszótárban sample_metricsample_metriccsak 4 szerepel.

Ha az összes metrikát egy adott metrikanévhez szeretné naplózni, használhatja MlFlowClient.get_metric_history()a következőt: .

Futtatási metrikák megtekintése a studio felhasználói felületén

Az Azure Machine Tanulás Studióban böngészhet a befejezett futtatási rekordok között, beleértve a naplózott metrikákat is.

Lépjen a Kísérletek lapra. Ha a munkaterület összes futtatását meg szeretné tekinteni a Kísérletek között, válassza a Minden futtatás lapot. A kísérletszűrő felső menüsávján a Kísérlet szűrő alkalmazásával lehatolást végezhet az adott kísérletek futtatásán.

Az egyéni Kísérlet nézethez válassza a Minden kísérlet lapot. A kísérletfuttatási irányítópulton az egyes futtatások nyomon követett metrikái és naplói láthatók.

A futtatási listatáblát több futtatás kijelöléséhez is szerkesztheti, és megjelenítheti a futtatások utolsó, minimális vagy maximális naplózott értékét. A diagramok testreszabásával összehasonlíthatja a naplózott metrikák értékeit és összesítéseit több futtatás között. Több metrikát is ábrázolhat a diagram y tengelyén, és testre szabhatja az x tengelyt a naplózott metrikák ábrázolásához.

Futtatás naplófájljainak megtekintése és letöltése

A naplófájlok alapvető erőforrások az Azure Machine Tanulás számítási feladatainak hibakereséséhez. A betanítási feladat elküldése után lehatolást kell végeznie egy adott futtatáson a naplóinak és kimeneteinek megtekintéséhez:

  1. Lépjen a Kísérletek lapra.
  2. Válassza ki egy adott futtatás runID azonosítóját.
  3. Válassza a Kimenetek és naplók lehetőséget az oldal tetején.
  4. Válassza az Összes letöltése lehetőséget az összes napló zip mappába való letöltéséhez.
  5. Az egyes naplófájlokat a naplófájl kiválasztásával és a Letöltés lehetőség kiválasztásával is letöltheti

Screenshot of Output and logs section of a run.

user_logs mappa

Ez a mappa információkat tartalmaz a felhasználó által létrehozott naplókról. Ez a mappa alapértelmezés szerint meg van nyitva, és a std_log.txt napló van kiválasztva. A std_log.txt fájlban jelennek meg a kód naplói (például nyomtatási utasítások). Ez a fájl naplókat és stderr naplókat tartalmaz stdout a vezérlőszkriptből és a betanítási szkriptből, folyamatonként egyet. Az esetek többségében itt fogja figyelni a naplókat.

system_logs mappa

Ez a mappa az Azure Machine Tanulás által létrehozott naplókat tartalmazza, és alapértelmezés szerint bezárul. A rendszer által létrehozott naplók különböző mappákba vannak csoportosítva a feladat futásidejű szakasza alapján.

Egyéb mappák

Több számítási fürtön végzett feladatok betanításához minden csomópont IP-címéhez naplók tartoznak. Az egyes csomópontok struktúrája megegyezik az egycsomópontos feladatokkal. Van még egy naplómappa az általános végrehajtáshoz, az stderrhez és az stdout naplókhoz.

Az Azure Machine Tanulás a betanítás során különböző forrásokból, például az AutoML-ből vagy a betanítási feladatot futtató Docker-tárolóból naplózza az adatokat. Ezek közül a naplók közül sok nincs dokumentálva. Ha problémákat tapasztal, és kapcsolatba lép a Microsoft ügyfélszolgálatával, előfordulhat, hogy a hibaelhárítás során használhatják ezeket a naplókat.

Interaktív naplózási munkamenet

Az interaktív naplózási munkameneteket általában jegyzetfüzet típusú környezetekben használják. Az Experiment.start_logging() metódus elindít egy interaktív naplózási munkamenetet. A munkamenet során naplózott összes metrika a kísérlet futtatási rekordjába kerül. A run.complete() metódus befejezi a munkameneteket, és befejezettként jelöli meg a futtatást.

ScriptRun naplók

Ebben a szakaszban azt ismertetjük, hogyan adhat meg naplózási kódot a létrehozott futtatásokban a ScriptRunConfig paranccsal való konfiguráláskor. A ScriptRunConfig osztállyal szkripteket és környezeteket ágyazhat be ismételhető futtatásokhoz. Ezzel a lehetőséggel azt is megteheti, hogy megjelenít egy vizuális Jupyter Notebooks-vezérlőt a monitorozáshoz.

Ez a példa paraméteres frissítést végez az alfa értékeken, és az eredményeket a run.log() metódussal rögzíti.

  1. Hozza létre a naplózási logikát tartalmazó train.py betanítási szkriptet.

    # 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. Küldje be a train.py szkriptet a felhasználó által kezelt környezetekben való futtatáshoz. A rendszer a teljes szkriptmappát elküldi a betanításhoz.

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

    A show_output paraméter bekapcsolja a részletes naplózást, amely lehetővé teszi a betanítási folyamat részleteinek, valamint a távoli erőforrásokkal vagy számítási célokkal kapcsolatos információknak a megtekintését. A következő kóddal kapcsolja be a részletes naplózást a kísérlet beküldésekor.

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

    Ugyanezt a paramétert használhatja az eredményül kapott futtatás wait_for_completion függvényén.

    run.wait_for_completion(show_output=True)
    

Natív Python-naplózás

Az SDK egyes naplói olyan hibát tartalmazhatnak, amely arra utasítja, hogy a naplózást állítja DEBUG (hibakeresési) szintre. A naplózási szint beállításához adja a következő kódot a szkripthez.

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

Egyéb naplózási források

Az Azure Machine Learning a betanítás során más forrásokból, például automatizált gépi tanulási futtatásokból vagy a feladatokat futtató Docker-tárolókból származó adatokat is tud naplózni. Ezek a naplók nincsenek dokumentálva, de ha problémákba ütközik, és kapcsolatba lép a Microsoft ügyfélszolgálatával, előfordulhat, hogy a hibaelhárítás során ők tudják használni ezeket a naplókat.

Az Azure Machine Learning-tervező naplózási metrikáiról tervezőben végzett metrikanaplózással kapcsolatos témakörben talál információt.

Példajegyzetfüzetek

A cikkben szereplő fogalmakat a következő jegyzetfüzetek mutatják be:

A szolgáltatás megismerése Jupyter-notebookok használatával cikk útmutatását követve megtanulhatja, hogyan futtathat notebookokat.

További lépések

Ezekben a cikkekben többet tudhat meg az Azure Machine Learning használatáról: