& 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í
loggingnativní 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:
- Přejděte na kartu experimenty .
- Vyberte runID pro konkrétní spuštění.
- V horní části stránky vyberte výstupy a protokoly .
- Vyberte Stáhnout vše a Stáhněte si všechny protokoly do složky zip.
- Jednotlivé soubory protokolů si můžete stáhnout i tak, že vyberete soubor protokolu a vyberete Stáhnout .
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 ().
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))Odešlete skript
train.pypro 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_outputzapne 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:
- how-to-use-azureml/training/train-on-local
- how-to-use-azureml/track-and-monitor-experiments/logging-api
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:
- Příklad postupu při registraci nejvhodnějšího modelu a jeho nasazení najdete v kurzu Trénování modelu klasifikace obrázků s Azure Machine Learning.