Lekérdezés > kísérletek és futtatások összehasonlítása az MLflow használatával
Az Azure Machine Learningben végzett kísérletek és feladatok (vagy futtatások) lekérdezhetők az MLflow használatával. Nem kell külön SDK-t telepítenie a betanítási feladatokon belüli folyamatok kezeléséhez, így zökkenőmentesebb átmenetet hozhat létre a helyi futtatások és a felhő között a felhőspecifikus függőségek eltávolításával. Ebben a cikkben megtudhatja, hogyan kérdezhet le és hasonlíthat össze kísérleteket és futtathat a munkaterületen az Azure Machine Learning és az MLflow SDK használatával a Pythonban.
Az MLflow lehetővé teszi a következőt:
- Kísérletek létrehozása, lekérdezése, törlése és keresése egy munkaterületen.
- Futtatások lekérdezése, törlése és keresése egy munkaterületen.
- Metrikák, paraméterek, összetevők és modellek nyomon követése és lekérése a futtatásokból.
A nyílt forráskódú MLflow és az MLflow közötti részletes összehasonlítása az Azure Machine Learninghez való csatlakozáskor: Támogatási mátrix a futtatások és kísérletek lekérdezéséhez az Azure Machine Learningben.
Feljegyzés
Az Azure Machine Learning Python SDK v2 nem biztosít natív naplózási vagy nyomkövetési képességeket. Ez nem csak a naplózásra, hanem a naplózott metrikák lekérdezésére is vonatkozik. Ehelyett az MLflow használatával kezelheti a kísérleteket és futtatásokat. Ez a cikk bemutatja, hogyan kezelhetők az MLflow kísérletek és futtatások az Azure Machine Learningben.
A kísérleteket az MLflow REST API használatával is lekérdezheti és keresheti. Az MLflow REST használata az Azure Machine Learningdel című cikkből megtudhatja, hogyan használhatja fel.
Előfeltételek
Telepítse az MLflow SDK-csomagot
mlflow
és az MLflow-hoz készült Azure Machine Learningazureml-mlflow
beépülő modult:pip install mlflow azureml-mlflow
Tipp.
Használhatja a
mlflow-skinny
csomagot, amely egy egyszerű MLflow-csomag SQL Storage, kiszolgáló, felhasználói felület vagy adatelemzési függőségek nélkül.mlflow-skinny
Azoknak a felhasználóknak ajánlott, akiknek elsősorban az MLflow nyomkövetési és naplózási képességeire van szükségük a funkciók teljes csomagjának importálása nélkül, beleértve az üzembe helyezéseket is.Egy Azure Machine Learning-munkaterület. Munkaterület létrehozásához tekintse meg a Gépi tanulási erőforrások létrehozása oktatóanyagot. Tekintse át az MLflow-műveletek munkaterületen való végrehajtásához szükséges hozzáférési engedélyeket.
Ha távoli nyomkövetést végez (azaz nyomon követi az Azure Machine Learningen kívül futó kísérleteket), konfigurálja az MLflow-t úgy, hogy az az Azure Machine Learning-munkaterület nyomkövetési URI-jára mutasson. Az MLflow munkaterülethez való csatlakoztatásáról további információt az MLflow konfigurálása az Azure Machine Learninghez című témakörben talál.
Lekérdezési és keresési kísérletek
Az MLflow használatával kísérleteket kereshet a munkaterületen belül. Lásd az alábbi példákat:
Az összes aktív kísérlet lekérése:
mlflow.search_experiments()
Feljegyzés
Az MLflow (<2.0) régebbi verzióiban használja inkább a metódust
mlflow.list_experiments()
.Szerezze be az összes kísérletet, beleértve az archivált kísérleteket is:
from mlflow.entities import ViewType mlflow.search_experiments(view_type=ViewType.ALL)
Adott kísérlet lekérése név szerint:
mlflow.get_experiment_by_name(experiment_name)
Adott kísérlet lekérése azonosító alapján:
mlflow.get_experiment('1234-5678-90AB-CDEFG')
Keresési kísérletek
A search_experiments()
Mlflow 2.0 óta elérhető metódus lehetővé teszi, hogy olyan kísérleteket keressen, amelyek megfelelnek a feltételeknek a használatával filter_string
.
Több kísérlet lekérése az azonosítójuk alapján:
mlflow.search_experiments(filter_string="experiment_id IN (" "'CDEFG-1234-5678-90AB', '1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')" )
Az adott idő elteltével létrehozott összes kísérlet lekérése:
import datetime dt = datetime.datetime(2022, 6, 20, 5, 32, 48) mlflow.search_experiments(filter_string=f"creation_time > {int(dt.timestamp())}")
Az összes kísérlet lekérése egy adott címkével:
mlflow.search_experiments(filter_string=f"tags.framework = 'torch'")
Lekérdezések és keresések futtatása
Az MLflow lehetővé teszi a futtatások keresését bármely kísérletben, beleértve egyszerre több kísérletet is. A metódus mlflow.search_runs()
elfogadja az argumentumot experiment_ids
, és experiment_name
jelzi, hogy mely kísérletekben szeretne keresni. Azt is jelezheti search_all_experiments=True
, hogy a munkaterület összes kísérletében szeretne-e keresni:
Kísérlet neve szerint:
mlflow.search_runs(experiment_names=[ "my_experiment" ])
Kísérletazonosító szerint:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ])
Keresés a munkaterület összes kísérletében:
mlflow.search_runs(filter_string="params.num_boost_round='100'", search_all_experiments=True)
Figyelje meg, hogy experiment_ids
támogatja a kísérletek tömbjének biztosítását, így szükség esetén több kísérletben is kereshet. Ez akkor lehet hasznos, ha egy modell futásait szeretné összehasonlítani, amikor különböző kísérletekben (például különböző személyek vagy különböző projekt iterációk) naplózzák.
Fontos
Ha experiment_ids
, experiment_names
vagy search_all_experiments
nincs megadva, akkor az MLflow alapértelmezés szerint keres az aktuális aktív kísérletben. Az aktív kísérletet a következővel mlflow.set_experiment()
állíthatja be: .
Az MLflow alapértelmezés szerint Pandas Dataframe
formátumban adja vissza az adatokat, ami hasznos lehet a futtatások elemzésének további feldolgozásakor. A visszaadott adatok az alábbi oszlopokat tartalmazzák:
- Alapvető információk a futtatásról.
- Az oszlop nevével
params.<parameter-name>
rendelkező paraméterek. - Metrikák (mindegyik utolsó naplózott értéke) az oszlop nevével
metrics.<metric-name>
.
A rendszer minden metrikát és paramétert a lekérdezés futtatásakor is visszaad. A több értéket (például veszteséggörbét vagy PR-görbét) tartalmazó metrikák esetében azonban a rendszer csak a metrika utolsó értékét adja vissza. Ha egy adott metrika összes értékét le szeretné kérni, használja a metódust mlflow.get_metric_history
. Példa: Paramok és metrikák lekérése futtatásból .
Rendelésfuttatások
Alapértelmezés szerint a kísérletek csökkenő sorrendben start_time
vannak, vagyis a kísérlet várólistára helyezésének időpontja az Azure Machine Learningben. Ezt az alapértelmezett beállítást azonban a paraméterrel order_by
módosíthatja.
A sorrend attribútumok szerint fut, például
start_time
:mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], order_by=["attributes.start_time DESC"])
A rendelésfuttatások és az eredmények korlátozása. Az alábbi példa a kísérlet utolsó egyszeri futtatását adja vissza:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], max_results=1, order_by=["attributes.start_time DESC"])
A sorrend az attribútum
duration
szerint fut:mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], order_by=["attributes.duration DESC"])
Tipp.
attributes.duration
nem szerepel az MLflow OSS-ben, de az Azure Machine Learningben van megadva a kényelem érdekében.A sorrend a metrika értékei alapján fut:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ]).sort_values("metrics.accuracy", ascending=False)
Figyelmeztetés
A
order_by
paramétertorder_by
tartalmazómetrics.*
params.*
tags.*
kifejezések használata jelenleg nem támogatott. Ehelyett használja aorder_values
Pandas metódusát a példában látható módon.
Szűrőfuttatások
A paraméterrel filter_string
megkeresheti a hiperparaméterek adott kombinációjával rendelkező futtatást is. A params
futtatás paramétereinek elérése, metrics
a futtatásban naplózott metrikák elérése és attributes
a futtatási információk részleteinek elérése. Az MLflow támogatja az AND kulcsszóhoz csatlakoztatott kifejezéseket (a szintaxis nem támogatja az OR függvényt):
A keresés egy paraméter értéke alapján fut:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="params.num_boost_round='100'")
Figyelmeztetés
Csak operátorok
=
,like
és!=
a szűrésparameters
is támogatott.A keresés egy metrika értéke alapján fut:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="metrics.auc>0.8")
A keresés egy adott címkével fut:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="tags.framework='torch'")
Adott felhasználó által létrehozott keresések:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.user_id = 'John Smith'")
A keresés sikertelen volt. A lehetséges értékek szűrése állapot szerint:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.status = 'Failed'")
Adott időpont után létrehozott keresések:
import datetime dt = datetime.datetime(2022, 6, 20, 5, 32, 48) mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string=f"attributes.creation_time > '{int(dt.timestamp())}'")
Tipp.
A kulcs
attributes
esetében az értékeknek mindig sztringeknek kell lenniük, ezért idézőjelek között kell kódolniuk.Az egy óránál hosszabb ideig tartó keresések:
duration = 360 * 1000 # duration is in milliseconds mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string=f"attributes.duration > '{duration}'")
Tipp.
attributes.duration
nem szerepel az MLflow OSS-ben, de az Azure Machine Learningben van megadva a kényelem érdekében.Olyan keresések futnak, amelyek egy adott készletben rendelkeznek az azonosítóval:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.run_id IN ('1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')")
Szűrési futtatások állapot szerint
Ha állapot szerint szűri a futtatásokat, az MLflow egy másik konvencióval adja meg a futtatás lehetséges állapotát az Azure Machine Learninghez képest. Az alábbi táblázat a lehetséges értékeket mutatja be:
Az Azure Machine Learning-feladat állapota | MLFlow-k attributes.status |
Értelmezés |
---|---|---|
Nem kezdődött el | Scheduled |
A feladatot/futtatási feladatot az Azure Machine Learning kapta. |
Feldolgozási sor | Scheduled |
A feladat/futtatás futásra van ütemezve, de még nem indult el. |
Előkészítése | Scheduled |
A feladat/futtatás még nem kezdődött el, de a rendszer kiosztott egy számítást a végrehajtásához, és előkészíti a környezetet és a bemeneteket. |
Futó | Running |
A feladat/futtatás jelenleg aktív végrehajtás alatt áll. |
Befejeződött | Finished |
A feladat/futtatás hiba nélkül befejeződött. |
Sikertelen | Failed |
A feladat/futtatás hibákkal fejeződött be. |
Visszavont | Killed |
A feladatot/futtatásokat a felhasználó megszakította, vagy a rendszer leállt. |
Példa:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ],
filter_string="attributes.status = 'Failed'")
Metrikák, paraméterek, összetevők és modellek lekérése
A metódus search_runs
alapértelmezés szerint korlátozott mennyiségű információt tartalmazó Pandas-t Dataframe
ad vissza. Szükség esetén Python-objektumokat is lekérhet, ami hasznos lehet a részletek lekéréséhez. A paraméter használatával szabályozhatja a output_format
kimenet visszaadása módját:
runs = mlflow.search_runs(
experiment_ids=[ "1234-5678-90AB-CDEFG" ],
filter_string="params.num_boost_round='100'",
output_format="list",
)
A részletek ezután elérhetők a info
tagtól. Az alábbi minta bemutatja, hogyan szerezheti be a következőt run_id
:
last_run = runs[-1]
print("Last run ID:", last_run.info.run_id)
Paramok és metrikák lekérése futtatásból
A futtatások visszaadásakor output_format="list"
a kulcs data
használatával egyszerűen elérheti a paramétereket:
last_run.data.params
Ugyanígy lekérdezheti a metrikákat:
last_run.data.metrics
Több értéket (például veszteséggörbét vagy PR-görbét) tartalmazó metrikák esetén a rendszer csak a metrika utolsó naplózott értékét adja vissza. Ha egy adott metrika összes értékét le szeretné kérni, használja a metódust mlflow.get_metric_history
. Ehhez a metódushoz a MlflowClient
következőt kell használnia:
client = mlflow.tracking.MlflowClient()
client.get_metric_history("1234-5678-90AB-CDEFG", "log_loss")
Összetevők lekérése futtatásból
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("1234-5678-90AB-CDEFG")
Az előző 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 = mlflow.artifacts.download_artifacts(
run_id="1234-5678-90AB-CDEFG", artifact_path="feature_importance_weight.png"
)
Feljegyzés
Az MLflow régebbi verzióiban (<2.0) használja inkább a metódust MlflowClient.download_artifacts()
.
Modellek lekérése futtatásból
A modellek futtatáskor is naplózhatók, majd közvetlenül onnan kérhetők le. A modell lekéréséhez ismernie kell annak az összetevőnek az elérési útját, ahol a rendszer tárolja. A metódussal list_artifacts
megkereshetők a modellnek megfelelő összetevők, mivel az MLflow-modellek mindig mappák. A modell letöltéséhez adja meg a modell tárolási útvonalát a download_artifact
következő módszerrel:
artifact_path="classifier"
model_local_path = mlflow.artifacts.download_artifacts(
run_id="1234-5678-90AB-CDEFG", artifact_path=artifact_path
)
Ezután betöltheti a modellt a letöltött összetevőkből az ízspecifikus névtér tipikus függvényével load_model
. Az alábbi példa a következőket használja xgboost
:
model = mlflow.xgboost.load_model(model_local_path)
Az MLflow lehetővé teszi mindkét művelet egyszerre történő végrehajtását, valamint a modell egyetlen utasításban való letöltését és betöltését. Az MLflow letölti a modellt egy ideiglenes mappába, és onnan tölti be. A metódus load_model
egy URI-formátumot használ annak jelzésére, hogy honnan kell lekérni a modellt. Ha futtatásból tölt be egy modellt, az URI-struktúra a következő:
model = mlflow.xgboost.load_model(f"runs:/{last_run.info.run_id}/{artifact_path}")
Tipp.
A modellregisztrációs adatbázisban regisztrált modellek lekérdezéséhez és betöltéséhez lásd : Modellregisztrációs adatbázisok kezelése az Azure Machine Learningben MLflow használatával.
Gyermekfuttatások lekérése (beágyazott)
Az MLflow támogatja a gyermek (beágyazott) futtatások fogalmát. Ezek a futtatások akkor hasznosak, ha olyan betanítási rutinokat kell kiváltania, amelyeket a fő betanítási folyamattól függetlenül kell nyomon követni. A hiperparaméter-finomhangolási optimalizálási folyamatok vagy az Azure Machine Learning-folyamatok tipikus példák több gyermekfuttatást generáló feladatokra. Egy adott futtatás összes gyermekfuttatását lekérdezheti a szülőfuttatás futtatási azonosítóját tartalmazó tulajdonságcímkével mlflow.parentRunId
.
hyperopt_run = mlflow.last_active_run()
child_runs = mlflow.search_runs(
filter_string=f"tags.mlflow.parentRunId='{hyperopt_run.info.run_id}'"
)
Feladatok és modellek összehasonlítása az Azure Machine Learning Studióban (előzetes verzió)
Az Azure Machine Learning Studióban a feladatok és modellek minőségének összehasonlításához és értékeléséhez használja az előzetes verzió panelt a funkció engedélyezéséhez. Ha engedélyezve van, összehasonlíthatja a paramétereket, metrikákat és címkéket a kiválasztott feladatok és/vagy modellek között.
Fontos
A cikkben megjelölt (előzetes verziójú) elemek jelenleg nyilvános előzetes verzióban érhetők el. Az előzetes verzió szolgáltatásszint-szerződés nélkül érhető el, és éles számítási feladatokhoz nem ajánlott. Előfordulhat, hogy néhány funkció nem támogatott, vagy korlátozott képességekkel rendelkezik. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.
Az Azure Machine Learning-jegyzetfüzetekkel rendelkező MLflow bemutatja és kibővíti a cikkben bemutatott fogalmakat.
- Osztályozó betanítása és nyomon követése az MLflow használatával: Bemutatja, hogyan követheti nyomon a kísérleteket MLflow- és naplómodellekkel, és hogyan kombinálhat több ízt folyamatokba.
- Kísérletek és futtatások kezelése az MLflow használatával: Bemutatja, hogyan kérdezhet le kísérleteket, futtatásokat, metrikákat, paramétereket és összetevőket az Azure Machine Learningből az MLflow használatával.
Támogatási mátrix a futtatások és kísérletek lekérdezéséhez
Az MLflow SDK számos metódust tesz elérhetővé a futtatások lekéréséhez, többek között a visszaadott adatok és azok módjának szabályozását. Az alábbi táblázatból megtudhatja, hogy az MLflow jelenleg mely metódusokat támogatja az Azure Machine Learninghez való csatlakozáskor:
Szolgáltatás | Az MLflow támogatja | Az Azure Machine Learning támogatja |
---|---|---|
A sorrendi futtatások attribútumok szerint | ✓ | ✓ |
A rendezés metrikák szerint fut | ✓ | 1 |
A rendelési futtatások paraméterek szerint | ✓ | 1 |
A rendezés címkék szerint fut | ✓ | 1 |
Szűrési futtatások attribútumok szerint | ✓ | ✓ |
A szűrés metrikák szerint fut | ✓ | ✓ |
A szűrés speciális karakterekkel rendelkező metrikák szerint fut (szökött) | ✓ | |
A szűrés paraméterek szerint fut | ✓ | ✓ |
Szűrés címkék szerint | ✓ | ✓ |
A szűrés numerikus összehasonlítókkal (metrikákkal) fut, beleértve = a , != , > , >= , és < <= |
✓ | ✓ |
A szűrés sztring-összehasonlítókkal (paramokkal, címkékkel és attribútumokkal) fut: = és != |
✓ | ✓2 |
A szűrés sztring-összehasonlítókkal (paramokkal, címkékkel és attribútumokkal) fut: LIKE /ILIKE |
✓ | ✓ |
A szűrés komparátorokkal fut AND |
✓ | ✓ |
A szűrés komparátorokkal fut OR |
||
Kísérletek átnevezése | ✓ |
Feljegyzés
- 1 Az Azure Machine Learningben ugyanezek a funkciók elérésére vonatkozó utasításokért és példákért tekintse meg a Rendelésfuttatás című szakaszt.
- 2
!=
a nem támogatott címkék esetében.