Megosztás a következőn keresztül:


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 Learning 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 Learning SDK 1-sel ellentétben az Azure Machine Learning SDK for Python (v2) nem rendelkezik naplózási funkcióval. Ha korábban az Azure Machine Learning 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.
  • Naplómetrikák aszinkron módon.
  • 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 Learningből származó erőforrás-használatot és eseményeket, például kvótákat, befejezett betanítási feladatokat vagy befejezett modelltelepítéseket szeretne figyelni, tekintse meg az Azure Machine Learning monitorozását.

Előfeltételek

  • Rendelkeznie kell egy Azure Machine Learning-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
    

    Feljegyzés

    A metrikák aszinkron naplózásához a 2.8.0-s és azureml-mlflow az 1.55-ös verziójúnak kell lennieMLflow.

  • Ha távoli nyomkövetést végez (az Azure Machine Learningen kívül futó nyomkövetési 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 Learninghez.

  • Ha metrikákat, paramétereket, összetevőket és modelleket szeretne naplózni az Azure Machine Learningben az MLflow használatával végzett kísérletekben, egyszerűen 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 Learningben 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 a futtatás nevére lefordítja az Azure Machine Learning felhasználói felületén, é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, és szinkronizálva vagy aszinkron módon naplózhatók. A metrikák naplózása után azonnal használatba vehetők a hívás visszaküldésekor. 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 aszinkron naplózással metrikák kötegével mlflow.log_metric("metric1", 9.42, synchronous=False) vagy naplózásával.

Naplómetrikák aszinkron módon

Az MLflow a metrikák aszinkron naplózását is lehetővé teszi. Az aszinkron metrikanaplózás különösen akkor hasznos, ha több tíz számítási csomóponttal rendelkező nagy betanítási feladatok futnak, és egyidejűleg próbálják naplózni a metrikákat. Akkor is hasznos, ha kevés csomópont próbál nagy számú metrikát naplózni.

Az aszinkron metrikanaplózás lehetővé teszi a metrikák azonnali naplózását, elkerülve, hogy a háttérszolgáltatásban ne várjon rájuk. Ez a megközelítés nagy betanítási rutinokra skálázható, amelyek több százezer metrikaértéket naplóznak, és ez az ajánlott megközelítés.

Az MLflow alapértelmezés szerint szinkron módon naplózza a metrikákat, de ezt a viselkedést bármikor módosíthatja:

import mlflow

mlflow.config.enable_async_logging()

Ugyanez a tulajdonság beállítható egy környezeti változó használatával:

export MLFLOW_ENABLE_ASYNC_LOGGING=True

Adott metrikák aszinkron naplózásához használja az MLflow naplózási API-t, ahogyan általában tenné, de adja hozzá a további paramétert synchronous=False.

import mlflow

with mlflow.start_run():
    # (...)
    mlflow.log_metric("metric1", 9.42, synchronous=False)
    # (...)

Ha ezt használja log_metric(synchronous=False), a rendszer automatikusan visszaadja a vezérlőt a hívónak a művelet elfogadása után; az érték azonban nem érhető el az olvasáshoz. A metrikák aszinkron naplózása garantálja a sorrendet, és a naplózott időbélyeggel együtt megmaradnak.

Fontos

Az Azure Machine Learning még a synchronous=Falsemetrikák sorrendjét is garantálja.

Ha meg kell várnia, hogy egy adott érték megmaradjon a háttérrendszerben, a visszaadott metrikaművelettel megvárhatja azt, ahogy az alábbi példában látható:

import mlflow

with mlflow.start_run():
    # (...)
    run_operation = mlflow.log_metric("metric1", 9.42, synchronous=False)
    # (...)
    run_operation.wait()
    # (...)

Aszinkron módon naplózhat egyszerre egy metrikát, vagy naplózhat egy metrika kötegét, ahogyan az alábbi példában látható:

import mlflow
import time
from mlflow.entities import Metric

with mlflow.start_run() as current_run:
    mlflow_client = mlflow.tracking.MlflowClient()

    metrics = {"metric-0": 3.14, "metric-1": 6.28}
    timestamp = int(time.time() * 1000)
    metrics_arr = [Metric(key, value, timestamp, 0) for key, value in metrics.items()]

    run_operation = mlflow_client.log_batch(
        run_id=current_run.info.run_id,
        metrics=metrics_arr,
        synchronous=False,
    )

A wait() művelet metrikák kötegének naplózásakor is elérhető:

run_operation.wait()

Nem kell meghívnia wait() a rutinokat, ha nincs szüksége azonnali hozzáférésre a metrikaértékekhez. Az Azure Machine Learning automatikusan megvárja, hogy a feladat befejeződjön, és ellenőrizze, hogy van-e függőben lévő metrika, amelyet meg kell őrizni. Mire egy feladat befejeződik az Azure Machine Learningben, az összes metrika biztosan megmarad.

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.ndarray PIL.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_artifact log_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 Learning é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 vagy 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 Learning 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.

A stúdióban lévő feladatokra vagy futtatásokra vonatkozó információk megtekintése

Az Azure Machine Learning 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 Learning 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 Learning által létrehozott és alapértelmezés szerint bezárt naplókat tartalmazza. 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 Learning a betanítás során különböző forrásokból naplózza az információkat, például az AutoML-t vagy a betanítási feladatot futtató Docker-tárolót. 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.