& protokolu zobrazit metriky a soubory protokolu

protokoluje informace v reálném čase pomocí výchozího balíčku protokolování pythonu a Azure Machine Learning specifických funkcí sady python SDK. Můžete protokolovat místně a odesílat protokoly do svého pracovního prostoru na portálu.

Protokoly vám pomohou při diagnostice chyb a upozornění a také při sledování metriky výkonu, jako jsou parametry a výkon modelu. V tomto článku se dozvíte, jak povolit protokolování v následujících scénářích:

  • Metriky spuštění protokolu
  • Interaktivní trénovací relace
  • Odesílání trénovacích úloh pomocí ScriptRunConfig
  • Nastavení logging nativní pro Python
  • Protokolování z dalších zdrojů

Tip

V tomto článku se dozvíte, jak monitorovat proces trénování modelu. Pokud vás zajímá monitorování využití prostředků a událostí z Azure Machine Learningu, jako jsou kvóty, dokončená trénovací spuštění nebo dokončená nasazení modelů, přečtěte si téma věnované monitorování služby Azure Machine Learning.

Typy dat

Můžete protokolovat různé datové typy, včetně skalárních hodnot, seznamů, tabulek, obrázků, adresářů a dalších prvků. Další informace a ukázky kódu v Pythonu pro různé datové typy najdete na referenční stránce k třídě Run.

Protokolování spuštění metrik

Pomocí následujících metod v rozhraních API protokolování můžete ovlivnit vizualizace metrik. Poznamenejte si omezení služby pro tyto protokolované metriky.

Hodnota protokolu Příklad kódu Formátování na portálu
Protokolování pole číselných hodnot run.log_list(name='Fibonacci', value=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]) Spojnicový graf s jednou proměnnou
Zaprotokoluje jednu číselnou hodnotu se stejným názvem metriky, který se opakovaně používá (například v rámci smyčky for). for i in tqdm(range(-10, 10)): run.log(name='Sigmoid', value=1 / (1 + np.exp(-i))) angle = i / 2.0 Spojnicový graf s jednou proměnnou
Opakované zaznamenání řádku se dvěma číselnými sloupci run.log_row(name='Cosine Wave', angle=angle, cos=np.cos(angle)) sines['angle'].append(angle) sines['sine'].append(np.sin(angle)) Spojnicový graf se dvěma proměnnými
Tabulka protokolu se dvěma číselnými sloupci run.log_table(name='Sine Wave', value=sines) Spojnicový graf se dvěma proměnnými
Obrázek protokolu run.log_image(name='food', path='./breadpudding.jpg', plot=None, description='desert') Tuto metodu použijte k zaznamenání souboru obrázku nebo matplotlib vykreslení do běhu. Tyto obrázky budou viditelné a srovnatelné v záznamu spuštění.

Protokolování pomocí MLflow

Doporučujeme přihlašovat vaše modely, metriky a artefakty pomocí MLflow jako otevřeného zdroje, který podporuje místní režim pro přenositelnost cloudu. Následující příklady tabulek a kódů ukazují, jak používat MLflow k protokolování metrik a artefaktů z vašich školicích běhů. Přečtěte si další informace o metodách protokolování a vzorcích návrhu MLflow.

Nezapomeňte instalovat mlflow azureml-mlflow balíčky a PIP do svého pracovního prostoru.

pip install mlflow
pip install azureml-mlflow

nastavte identifikátor URI sledování MLflow tak, aby ukazoval na Azure Machine Learning back-end, aby se zajistilo, že se vaše metriky a artefakty protokolují do vašeho pracovního prostoru.

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()
Hodnota protokolu Příklad kódu Poznámky
Protokolovat číselnou hodnotu (int nebo float) mlflow.log_metric('my_metric', 1)
Zaznamenání logické hodnoty mlflow.log_metric('my_metric', 0) 0 = true, 1 = false
Protokolovat řetězec mlflow.log_text('foo', 'my_string') Protokolovat jako artefakt
Protokolovat metriky numpy nebo objekty imagí PIL mlflow.log_image(img, 'figure.png')
Matlotlib nebo obrázekový soubor protokolu mlflow.log_figure(fig, "figure.png")

Zobrazit metriky spuštění prostřednictvím sady SDK

Metriky proučeného modelu můžete zobrazit pomocí 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

K informacím o spouštění můžete přistupovat také pomocí MLflow prostřednictvím vlastností data a info objektu run. Další informace najdete v dokumentaci k objektu MLflow. Entities. Run .

Po dokončení spuštění je můžete načíst pomocí 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)

Metriky, parametry a značky pro spuštění můžete zobrazit v datovém poli objektu spustit.

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

Poznámka

Slovník metrik v části mlflow.entities.Run.data.metrics pouze vrátí naposledy protokolovaný údaj pro daný název metriky. Pokud se například protokoluje, v pořadí 1, potom 2, potom 3, potom 4 na volanou metriku sample_metric je ve slovníku metrik pro k dispozici pouze 4 sample_metric .

K získání všech metrik protokolovaných pro konkrétní název metriky můžete použít MlFlowClient.get_metric_history() .

Zobrazit metriky spuštění v uživatelském rozhraní studia

v Azure Machine Learning studiumůžete procházet dokončené záznamy spuštění, včetně protokolovaných metrik.

Přejděte na kartu experimenty . Pokud chcete zobrazit všechny vaše běhy v pracovním prostoru mezi experimenty, vyberte kartu všechna spuštění . Můžete přejít k podrobnostem o spuštění pro konkrétní experimenty pomocí filtru experimentů v horním řádku nabídek.

Pro jednotlivé zobrazení experimentů vyberte kartu všechny experimenty . Na řídicím panelu experimentu můžete vidět sledované metriky a protokoly pro každé spuštění.

Můžete také upravit tabulku spustit seznam a vybrat vícenásobná spuštění a zobrazit buď hodnotu v poli Poslední, minimální nebo maximální hodnota protokolu. Přizpůsobte si grafy pro porovnání hodnot protokolovaných metrik a agregací napříč několika spuštěními. Můžete vykreslit více metrik na ose y grafu a přizpůsobit osu x pro vykreslení protokolovaných metrik.

Zobrazení a stažení souborů protokolu pro spuštění

soubory protokolu jsou zásadním prostředkem pro ladění úloh služby Azure ML. Po odeslání školicí úlohy přejdete k podrobnostem konkrétního spuštění a zobrazíte jeho protokoly a výstupy:

  1. Přejděte na kartu experimenty .
  2. Vyberte runID pro konkrétní spuštění.
  3. V horní části stránky vyberte výstupy a protokoly .
  4. Vyberte Stáhnout vše a Stáhněte si všechny protokoly do složky zip.
  5. Jednotlivé soubory protokolů si můžete stáhnout i tak, že vyberete soubor protokolu a vyberete Stáhnout .

Snímek obrazovky s částí výstupu a protokolů běhu

Níže uvedené tabulky zobrazují obsah souborů protokolu ve složkách, které vidíte v této části.

Poznámka

Každý soubor se pro každé spuštění nemusí zobrazovat. Například 20_image_build_log * .txt se zobrazí pouze v případě, že je vytvořen nový obrázek (například při změně prostředí).

azureml-logs složky

Soubor Popis
20_image_build_log.txt Protokol pro vytváření imagí Docker pro školicí prostředí, volitelně, jeden za běhu. Platí pouze při aktualizaci vašeho prostředí. jinak AML znovu použít bitovou kopii v mezipaměti. V případě úspěchu obsahuje podrobnosti o bitové kopii registru pro odpovídající obrázek.
55_azureml-Execution-<node_id # C1.txt stdout/stderr protokol hostitelského nástroje, jeden pro každý uzel. Vyžádá si image do cílového výpočetního prostředí. Poznámka: Tento protokol se zobrazí jenom tehdy, když máte zabezpečené výpočetní prostředky.
65_job_prep-<node_id # C1.txt záznam stdout/stderr skriptu přípravy úlohy, jeden na uzel. Stáhněte si kód do výpočetního cíle a úložiště dat (Pokud se požaduje).
70_driver_log (_x) .txt záznam stdout/stderr z řídicího skriptu AML a školicí skript zákazníka, jeden pro každý proces. Standardní výstup z vašeho skriptu. Tento soubor je místo, kde se zobrazují protokoly kódu (například příkazy Print). Ve většině případů zde budete monitorovat protokoly.
70_mpi_log.txt Protokol MPI Framework, volitelné, jeden za běhu. Pouze ke spuštění MPI.
75_job_post-<node_id # C1.txt stdout/stderr protokol skriptu pro vydání úlohy, jeden pro každý uzel. Odešlete protokoly a vyuvolněte výpočetní prostředky zpátky do Azure.
process_info. JSON zobrazí, který proces je spuštěný na kterém uzlu.
process_status. JSON Zobrazit stav procesu, například pokud proces není spuštěn, spuštěn nebo dokončen.

logs > azureml složky

Soubor Popis
110_azureml. log
job_prep_azureml. log systémový protokol pro přípravu úlohy
job_release_azureml. log systémový protokol pro uvolnění úlohy

logs > azureml > sidecar > node_id složky

Když je povolený postranní vozík, skripty pro přípravu úlohy a uvolnění úlohy se spustí v rámci kontejneru na vozíku. Pro každý uzel existuje jedna složka.

Soubor Popis
start_cms.txt Protokol procesu, který se spustí při spuštění kontejneru postranního vozíku
prep_cmd.txt Protokol pro ContextManagers zadaný při job_prep.py spuštění (u některých z těchto obsahů se streamuje azureml-logs/65-job_prep )
release_cmd.txt Protokol pro ComtextManagers se ukončil při job_release.py spuštění.

Další složky

Pro úlohy školení ve více výpočetních clusterech jsou k dispozici protokoly pro každou IP adresu uzlu. Struktura pro každý uzel je stejná jako úloha s jedním uzlem. K dispozici je ještě jedna složka protokolů pro celkové spuštění, stderr a protokoly STDOUT.

Azure Machine Learning protokolovat informace z různých zdrojů během školení, jako je AutoML nebo kontejner docker, který spouští školicí úlohu. Mnohé z těchto protokolů nejsou dokumentovány. Pokud narazíte na problémy a kontaktujte podporu Microsoftu, můžou při řešení potíží používat tyto protokoly.

Interaktivní relace protokolování

Interaktivní relace protokolování se obvykle používají v prostředích poznámkových bloků. Interaktivní relace protokolování se pouštějí pomocí metody Experiment.start_logging(). Všechny metriky zaznamenávané během relace se přidají do záznamu spuštění v experimentu. Metoda run.complete() ukončí relace a označí běh jako dokončený.

Protokoly ScriptRun

V této části se dozvíte, jak přidat kód protokolování do běhů vytvořených při využití konfigurace pomocí třídy ScriptRunConfig. K zapouzdření skriptů a prostředí pro opakovatelná spouštění můžete využít třídu ScriptRunConfig. Tuto možnost můžete také využít pro zobrazení vizuálního widgetu pro Jupyter Notebook pro monitorování.

V tomto příkladu se provede uklizení parametrů přes hodnoty alfa a k zaznamenání výsledků se použije metoda run. log ().

  1. Vytvořte trénovací skript, který obsahuje logiku protokolování: 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. Odešlete skript train.py pro spuštění v prostředí spravovaném uživatelem. K trénování se odešle celá složka skriptu.

    [! notebook-Python [] (~/MachineLearningNotebooks/how-to-use-azureml/training/train-on-local/train-on-local.ipynb? název = src)]

    [! notebook-Python [] (~/MachineLearningNotebooks/how-to-use-azureml/training/train-on-local/train-on-local.ipynb? název = run)]

    Parametr show_output zapne podrobné protokolování, které vám umožní zobrazit podrobnosti z procesu trénování a také informace o všech vzdálených prostředcích nebo cílových výpočetních objektech. Pomocí následujícího kódu zapněte podrobné protokolování při odeslání experimentu.

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

Ve výsledném běhu můžete použít také stejný parametr ve funkci wait_for_completion.

run.wait_for_completion(show_output=True)

Nativní protokolování v Pythonu

Některé protokoly v sadě SDK mohou obsahovat chybu, která dává pokyn k nastavení úrovně protokolování na ladění. Pokud chcete nastavit úroveň protokolování, přidejte do skriptu následující kód.

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

Další zdroje protokolování

Azure Machine Learning může během trénování protokolovat také informace z jiných zdrojů, jako jsou například spuštění automatizovaného strojové učení nebo kontejnery Docker, které spouští úlohy. Tyto protokoly nejsou zdokumentované, ale pokud narazíte na problémy a kontaktujete podporu Microsoftu, dají se tyto protokoly využít při řešení potíží.

Informace o protokolování metrik v designeru služby Azure Machine Learning najdete v tématu věnovaném postupu při protokolování metrik v designeru.

Příklady poznámkových bloků

Následující poznámkové bloky ukazují koncepty popsané v tomto článku:

Postupujte podle pokynů v článku věnovaném využití poznámkových bloků Jupyter k prozkoumání této služby a zjistěte, jak provozovat poznámkové bloky.

Další kroky

Další informace o tom, jak používat Azure Machine Learning, najdete v těchto článcích: