Naplómetrikák, paraméterek és fájlok MLflow használatával

A KÖVETKEZŐKRE VONATKOZIK: Python SDK azure-ai-ml v2 (aktuális)

Az Azure Machine Tanulás támogatja a naplózási és nyomkövetési kísérleteket az MLflow Tracking használatával. Az MLflow használatával modelleket, metrikákat, paramétereket és összetevőket naplózhat helyileg a számítógépen vagy felhőkörnyezetben.

Fontos

Az Azure Machine Tanulás SDK 1-ben nem található naplózási funkció az Azure Machine Tanulás Pythonhoz készült SDK -ban (v2). Ha korábban az Azure Machine Tanulás SDK 1-et használta, javasoljuk, hogy az MLflow használatával kövesse nyomon a kísérleteket. További útmutatásért tekintse meg a naplózás áttelepítését az SDK v1-ből az MLflow-ba .

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. Ez a cikk azt ismerteti, hogyan engedélyezheti a naplózást a következő esetekben:

  • Naplómetrikák, paraméterek és modellek a feladatok elküldésekor.
  • Futtatások nyomon követése interaktív betanításkor.
  • Diagnosztikai információk megtekintése a betanításró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ákat, befejezett betanítási feladatokat vagy befejezett modelltelepítéseket, tekintse meg az Azure Machine Tanulás monitorozását.

Előfeltételek

  • Rendelkeznie kell egy Azure Machine Tanulás-munkaterületpel. Ha nem rendelkezik ilyen erőforrással, olvassa el a Munkaterület erőforrásainak létrehozása című témakört.

  • Telepítve kell lennie a csomagoknak és azureml-mlflow a mlflow csomagoknak. Ha nem, a következő paranccsal telepítse őket a fejlesztői környezetben:

    pip install mlflow azureml-mlflow
    
  • Ha távoli nyomkövetést végez (az Azure Machine-Tanulás kívül futó kísérleteket), konfigurálja az MLflow-t a kísérletek nyomon követésére. További információ: MLflow konfigurálása az Azure Machine-Tanulás.

  • Ha metrikákat, paramétereket, összetevőket és modelleket szeretne naplózni az Azure Machine-Tanulás az MLflow használatával végzett kísérleteiben, csak importálja az MLflow-t a szkriptbe:

    import mlflow
    

Kísérletek konfigurálása

Az MLflow kísérletekben és futtatásokban rendszerezi az információkat (az Azure Machine Tanulás a futtatásokat feladatnak nevezzük). A kód futtatásának módjától függően van néhány különbség a konfigurálásukban:

Interaktív betanításkor, például Jupyter Notebookban, használja a következő mintát:

  1. Hozza létre vagy állítsa be az aktív kísérletet.
  2. Indítsa el a feladatot.
  3. Naplózási módszerek használata metrikák és egyéb információk naplózásához.
  4. Fejezd be a feladatot.

A következő kódrészlet például konfigurálja a kísérletet, majd naplózza a feladatot:

import mlflow
# Set the experiment
mlflow.set_experiment("mlflow-experiment")

# Start the run
mlflow_run = mlflow.start_run()
# Log metrics or other information
mlflow.log_metric('mymetric', 1)
# End run 
mlflow.end_run()

Tipp.

Technikailag nem kell meghívnia start_run() , mert létrejön egy új futtatás, ha nem létezik, és meghív egy naplózási API-t. Ebben az esetben lekérheti mlflow.active_run() az éppen használt futtatásokat. További információ: mlflow.active_run().

A környezetkezelői paradigmát is használhatja:

import mlflow
mlflow.set_experiment("mlflow-experiment")

# Start the run, log metrics, end the run
with mlflow.start_run() as run:
    # Run started when context manager is entered, and ended when context manager exits
    mlflow.log_metric('mymetric', 1)
    mlflow.log_metric('anothermetric',1)
    pass

Új futtatás mlflow.start_runindításakor hasznos lehet a paraméter run_namemegjelölése, amely ezután az Azure Machine Tanulás felhasználói felületén futtatás nevére fordítja le, és segít a futtatás gyorsabb azonosításában:

with mlflow.start_run(run_name="iris-classifier-random-forest") as run:
    mlflow.log_metric('mymetric', 1)
    mlflow.log_metric('anothermetric',1)

Az MLflow naplózási API-kkal kapcsolatos további információkért tekintse meg az MLflow referenciát.

Naplóparaméterek

Az MLflow támogatja a kísérletek által használt naplózási paramétereket. A paraméterek bármilyen típusúak lehetnek, és az alábbi szintaxissal naplózhatók:

mlflow.log_param("num_epochs", 20)

Az MLflow emellett kényelmes módot kínál több paraméter naplózására is egy szótár használatával. Több keretrendszer is átadhat paramétereket a modelleknek szótárak használatával, így kényelmesen naplózhatja őket a kísérletben.

params = {
    "num_epochs": 20,
    "dropout_rate": .6,
    "objective": "binary_crossentropy"
}

mlflow.log_params(params)

Naplómetrikák

A metrikák a paraméterekkel ellentétben mindig numerikusak. Az alábbi táblázat bemutatja, hogyan naplózhat konkrét numerikus típusokat:

Naplózott érték Mintakód Jegyzetek
Numerikus érték naplózása (int vagy float) mlflow.log_metric("my_metric", 1)
Numerikus érték naplózása (int vagy float) az idő függvényében mlflow.log_metric("my_metric", 1, step=1) A paraméter step használatával jelezheti a metrikaérték naplózásának lépését. Bármilyen egész szám lehet. Alapértelmezés szerint nulla.
Logikai érték naplózása mlflow.log_metric("my_metric", 0) 0 = Igaz, 1 = Hamis

Fontos

Teljesítménnyel kapcsolatos szempontok: Ha több metrikát (vagy ugyanazon metrika több értékét) kell naplóznia, kerülje a hívásokat mlflow.log_metric a ciklusokban. Jobb teljesítmény érhető el metrikák kötegének naplózásával. Használja azt a metódust mlflow.log_metrics , amely egy szótárt fogad el az összes olyan metrikával, amelyet egyszerre szeretne naplózni, vagy amely MLflowClient.log_batch több típusú elemet is elfogad a naplózáshoz. Példaként tekintse meg a naplógörbéket vagy az értékek listáját.

Naplógörbék vagy értékek listája

A görbék (vagy a numerikus értékek listája) az MLflow használatával többször is naplózhatók ugyanazzal a metrikával. Az alábbi példa bemutatja, hogyan teheti meg:

list_to_log = [1, 2, 3, 2, 1, 2, 3, 2, 1]
from mlflow.entities import Metric
from mlflow.tracking import MlflowClient
import time

client = MlflowClient()
client.log_batch(mlflow.active_run().info.run_id, 
                 metrics=[Metric(key="sample_list", value=val, timestamp=int(time.time() * 1000), step=0) for val in list_to_log])

Naplóképek

Az MLflow két módon támogatja a rendszerképek naplózását. Mindkét módszer a futtatás során összetevőként megőrzi az adott képet.

Naplózott érték Mintakód Jegyzetek
Log numpy metrics or PIL image objects mlflow.log_image(img, "figure.png") img példánynak numpy.ndarrayPIL.Image.Imagevagy . figure.png a futtatás során létrehozott összetevő neve. Nem kell meglévő fájlnak lennie.
Log matlotlib plot or image file mlflow.log_figure(fig, "figure.png") figure.png a futtatás során létrehozott összetevő neve. Nem kell meglévő fájlnak lennie.

Naplófájlok

Az MLflow fájljait általában összetevőknek nevezzük. Az összetevőket többféleképpen naplózhatja a Mlflow-ban:

Naplózott érték Mintakód Jegyzetek
Szöveg naplózása szövegfájlban mlflow.log_text("text string", "notes.txt") A rendszer a futtatás során egy notes.txt nevű szövegfájlban megőrzi a szöveget.
Szótárak naplózása JSON- és YAML-fájlokként mlflow.log_dict(dictionary, "file.yaml" dictionary egy szótárobjektum, amely tartalmazza az összes JSON- vagy YAML-fájlként megőrzendő struktúrát.
Már meglévő triviális fájl naplózása mlflow.log_artifact("path/to/file.pkl") A fájlok mindig a futtatás gyökerében vannak naplózva. Ha artifact_path meg van adva, akkor a rendszer egy mappába naplózza a fájlt az adott paraméterben megadott módon.
Az összes összetevő naplózása egy meglévő mappában mlflow.log_artifacts("path/to/folder") A rendszer a mappastruktúrát a futtatásra másolja, de a jelzett gyökérmappát nem tartalmazza.

Tipp.

Ha nagy méretű fájlokat naplóz a fájllal vagy azokkal log_artifactlog_model, időtúllépési hibákba ütközhet a fájl feltöltése előtt. Fontolja meg az időtúllépési érték növelését a környezeti változó AZUREML_ARTIFACTS_DEFAULT_TIMEOUTmódosításával. Az alapértelmezett érték 300 (másodperc).

Naplómodellek

Az MLflow bevezeti a modellek fogalmát, hogy becsomagolhassa az adott modell működéséhez szükséges összes összetevőt. Az MLflow modelljei mindig tetszőleges számú fájllal rendelkező mappa, a modell létrehozásához használt keretrendszertől függően. A naplózási modellek előnye, hogy a modell összes elemét egyetlen entitásként követik, amely regisztrálható, majd üzembe helyezhető. Ezen felül az MLflow-modellek élvezik a kód nélküli üzembe helyezés előnyeit, és a felelős AI-irányítópulttal is használhatók a studióban. További információ: Összetevőktől modellekig az MLflow-ban.

A modell betanítási futtatásból való mentéséhez használja az log_model() API-t a keretrendszerhez, amellyel dolgozik. Például mlflow.sklearn.log _model(). További információ: MLflow-modellek naplózása. A meglévő modellek MLflow-ba való migrálásával kapcsolatban lásd : Egyéni modellek átalakítása MLflow-ra.

Tipp.

Nagy modellek naplózásakor előfordulhat, hogy a hiba Failed to flush the queue within 300 secondsjelentkezik. Ez általában azt jelenti, hogy a művelet túllépi az időkorlátot a modellösszetevők feltöltése előtt. Fontolja meg az időtúllépési érték növelését a környezeti változó AZUREML_ARTIFACTS_DEFAULT_TIMEOUTmódosításával.

Automatikus naplózás

Az Azure Machine Tanulás és az MLflow használatával a felhasználók automatikusan naplózhatják a metrikákat, a modellparamétereket és a modellösszetevőket a modellek betanításakor. Minden keretrendszer dönti el, hogy mi legyen automatikusan nyomon követve. Számos népszerű gépi tanulási kódtár támogatott. További információ az automatikus naplózásról az MLflow használatával.

Az automatikus naplózás engedélyezéséhez szúrja be a következő kódot a betanítási kód elé:

mlflow.autolog()

Tipp.

Az automatikus naplóval automatikusan naplózott adatok szabályozhatók. Ha például azt jelzi mlflow.autolog(log_models=False), hogy az MLflow mindent naplóz, csak modelleket. Az ilyen vezérlés akkor hasznos, ha manuálisan szeretné naplózni a modelleket, de továbbra is élvezi a metrikák és paraméterek automatikus naplózását. Azt is megfigyelheti, hogy egyes keretrendszerek letilthatják a modellek automatikus naplózását, ha a betanított modell túllép bizonyos határokat. Az ilyen viselkedés a használt íztől függ, és javasoljuk, hogy tekintse meg a dokumentációt, ha ez a helyzet.

Feladatok/futtatások adatainak megtekintése az MLflow használatával

A naplózott adatokat az MLflow.entities.Run objektumon keresztül tekintheti meg az MLflow használatával:

import mlflow

run = mlflow.get_run(run_id="<RUN_ID>")

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

metrics = run.data.metrics
params = run.data.params
tags = run.data.tags

Feljegyzés

A metrikák szótára egy mlflow.get_run adott metrikanév legutóbb naplózott értékét adja vissza, vagy mlflow.search_runs csak a legutóbb naplózott értéket adja vissza. Ha például többször naplóz iteration egy metrikát az 1, majd a 2, majd a 3, majd a 4 értékekkel, híváskor run.data.metrics['iteration']csak 4 lesz visszaadva.

Ha egy adott metrikanévhez tartozó összes metrikát naplózni szeretne, a példa paramok és metrikák lekérése futtatásból című példában leírtak szerint használhatóMlFlowClient.get_metric_history().

Tipp.

Az MLflow egyszerre több futtatásból is lekérheti a metrikákat és paramétereket, így gyors összehasonlítást tesz lehetővé több próbaverzió között. További információ: Query & compare experiments and runs with MLflow.

Az MLflow lekérdezheti a futtatás által naplózott összetevőket. Az összetevők nem érhetők el a futtatási objektummal, és ehelyett az MLflow-ügyfelet kell használni:

client = mlflow.tracking.MlflowClient()
client.list_artifacts("<RUN_ID>")

Ez a módszer felsorolja a futtatás során naplózott összes összetevőt, de az összetevők tárolójában (Azure Machine Tanulás storage) maradnak tárolva. Bármelyik letöltéséhez használja a következő módszert download_artifact:

file_path = client.download_artifacts("<RUN_ID>", path="feature_importance_weight.png")

További információ: Metrikák, paraméterek, összetevők és modellek lekérése.

Feladatok/futtatások adatainak megtekintése a studióban

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

Lépjen a Feladatok lapra . Ha a munkaterületen lévő összes feladatot meg szeretné tekinteni a Kísérletek között, válassza a Minden feladat lapot. Az egyes kísérletekhez tartozó feladatok részletezését a kísérletszűrő felső menüsávján való alkalmazásával végezheti el. Válassza ki a kívánt feladatot a részletek nézet megadásához, majd válassza a Metrikák lapot.

Válassza ki a naplózott metrikákat a diagramok jobb oldalon való megjelenítéséhez. A diagramokat simítással, színmódosítással vagy több metrika egyetlen gráfon való ábrázolásával testre szabhatja. Igény szerint átméretezheti és átrendezheti az elrendezést. Miután létrehozta a kívánt nézetet, mentheti későbbi használatra, és közvetlen hivatkozással megoszthatja a csapattagokkal.

Képernyőkép a metrikák nézetről.

Diagnosztikai naplók 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 Feladatok 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

Képernyőkép egy futtatás Kimenet és naplók szakaszáról.

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 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. A legtöbb esetben itt figyelheti 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árva van. 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 IP-csomóponthoz 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. Ezen 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.

Következő lépések